initial notes on grovelling the HDF5 headers
authorD Herring <dherring@at.tentpost.dot.com>
Mon, 4 Apr 2011 03:47:41 +0000 (23:47 -0400)
committerD Herring <dherring@at.tentpost.dot.com>
Mon, 4 Apr 2011 03:47:41 +0000 (23:47 -0400)
README.txt [new file with mode: 0644]
types.lisp [new file with mode: 0644]

diff --git a/README.txt b/README.txt
new file mode 100644 (file)
index 0000000..e9214ae
--- /dev/null
@@ -0,0 +1,2 @@
+CL bindings to HDF5 (version 1.8.6 or so)
+http://www.hdfgroup.org/HDF5/
diff --git a/types.lisp b/types.lisp
new file mode 100644 (file)
index 0000000..58ef93e
--- /dev/null
@@ -0,0 +1,60 @@
+;; types to grovel
+hid_t
+herr_t
+hbool_t
+hsize_t
+haddr_t
+htri_t
+
+
+;; enumerations to grovel
+H5_iter_order_t
+H5_index_t
+...
+
+HDF5 headers seem to follow a strict, easily parsed style.
+The following appears to extract all the enums is a parseable format.
+It is plausible to get enum names, members, and even values.
+# sed -n -e '/enum .*{/,/} *H5/ p' * | cpp | sed -e '/#/ d' -e '/^$/ d'
+
+
+;; constants
+H5P_DEFAULT
+H5_ITER_ERROR
+...
+
+;; probably skip H5pubconf.h and H5version.h and H5api_adpt.h
+;; probably only parse "H*public.h" (see hdf5.h)
+;; skip all of H5Epublic.h or multiline macros
+;; skip HOFFSET, H5Epush_sim, 
+
+Again, the constant names can be parsed, but not their values.
+Some of these values would be hard even without cpp conditionals.
+In particular, defined using H5OPEN and H5CHECK.
+Note the H5OPEN macros inline a call to H5open().
+The H5CHECK macros inline a call to H5check() which looks for header/library version mismatch.
+Should replicated its expansion to use the grovelled values.
+
+## Find constants of interest
+# only look in H*public.h
+# exclude multiline defines "\$"
+# exclude include guards "_H$"
+# exclude function macros "^[^ \t]("
+# excluded macros who's expanded form includes quotes
+# exclude H5OPEN and H5CHECK
+
+Final expression:
+# grep '^#define' H*public.h | sed -e '/\\$/ d' -e '/_H$/ d' -e '/define [^ \t]*(/ d' -e 's,.*#define ,,' | cpp | sed -e '/#/ d' -e '/"/ d' -e 's/\([^ \t]*\).*/\1/' -e '/H5OPEN/ d' -e '/H5CHECK/ d' && echo HADDR_UNDEF
+
+# The above does miss a few defines; but they mostly look like stuff to filter out anyway, with the possible exception of HADDR_UNDEF.
+# grep define * | sed -n -e '/#[ \t][ \t]*define/ p'
+
+
+;; structs
+
+
+;; functions
+
+Since they use the H5_DLL macro to control exporting, the following should provide a complete list of interesting stuff.
+Note the DLLVAR marks functions used to define some "constants".
+# grep H5_DLL H*public.h | grep -v H5_DLLVAR