changeset 9892:ac69e6f4b33d

Add HDF5-1.8 compatibility while maintaining compatibility with HDF5-1.6 versions
author Kacper Kowalik <xarthisius.kk@gmail.com>
date Tue, 01 Dec 2009 00:49:07 +0100
parents 1506a17832c9
children 609726a25877
files ChangeLog acinclude.m4 configure.ac src/ChangeLog src/ls-hdf5.cc src/oct-hdf5.h src/ov-base-int.cc src/ov-bool-mat.cc src/ov-bool-sparse.cc src/ov-bool.cc src/ov-cell.cc src/ov-class.cc src/ov-complex.cc src/ov-cx-mat.cc src/ov-cx-sparse.cc src/ov-fcn-handle.cc src/ov-fcn-inline.cc src/ov-float.cc src/ov-flt-complex.cc src/ov-flt-cx-mat.cc src/ov-flt-re-mat.cc src/ov-list.cc src/ov-range.cc src/ov-re-mat.cc src/ov-re-sparse.cc src/ov-scalar.cc src/ov-str-mat.cc src/ov-struct.cc
diffstat 28 files changed, 567 insertions(+), 63 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Mon Nov 30 14:32:10 2009 -0500
+++ b/ChangeLog	Tue Dec 01 00:49:07 2009 +0100
@@ -1,3 +1,11 @@
+2009-11-30  Kacper Kowalik <xarthisius.kk@gmail.com>
+
+	* acinclude.m4 (OCTAVE_HDF5_HAS_ENFORCED_16_API): New macro that
+	tests whether the HDF5 library has an enforced v1.6 API and detects
+	v1.8 APIs.
+	* configure.m4: Adapt test for HDF5 libraries to support v1.8 
+	HDF5 libraries.
+
 2009-11-29  Jaroslav Hajek  <highegg@gmail.com>
 
 	* NEWS: Update.
--- a/acinclude.m4	Mon Nov 30 14:32:10 2009 -0500
+++ b/acinclude.m4	Tue Dec 01 00:49:07 2009 +0100
@@ -1059,20 +1059,17 @@
 dnl
 dnl Check whether HDF5 library has version 1.6 API functions.
 dnl
-AC_DEFUN([OCTAVE_HDF5_HAS_REQUIRED_API], [
-  AC_CACHE_CHECK([whether HDF5 library has required API],
-    octave_cv_hdf5_has_required_api, [
+AC_DEFUN([OCTAVE_HDF5_HAS_ENFORCED_16_API], [
+  AC_CACHE_CHECK([whether HDF5 library has enforced version 1.6 API],
+    octave_cv_hdf5_has_enforced_16_api, [
     AC_TRY_LINK([
-#define H5_USE_16_API 1
 #include <hdf5.h>
 ], [
   H5Eset_auto (0, 0);], [
-      octave_cv_hdf5_has_required_api=yes], [
-      octave_cv_hdf5_has_required_api=no])])
-  if test "$octave_cv_hdf5_has_required_api" = "no"; then
-    octave_hdf5_ok=no
-    warn_hdf5="HDF5 library does not provide the version 1.6 API.  Octave will not be able to save or load HDF5 data files."
-    AC_MSG_WARN($warn_hdf5)
+      octave_cv_hdf5_has_enforced_16_api=yes], [
+      octave_cv_hdf5_has_enforced_16_api=no])])
+  if test "$octave_cv_hdf5_has_enforced_16_api" != "yes"; then
+    AC_DEFINE(HAVE_HDF5_18, 1, [Define if >=HDF5-1.8 is available.])
   fi
 ])
 dnl
--- a/configure.ac	Mon Nov 30 14:32:10 2009 -0500
+++ b/configure.ac	Tue Dec 01 00:49:07 2009 +0100
@@ -631,16 +631,15 @@
   [HDF5 library not found.  Octave will not be able to save or load HDF5 data files.],
   [hdf5.h], [H5Gget_num_objs], [], [],
   [warn_hdf5=
-   OCTAVE_HDF5_HAS_REQUIRED_API
-   if test $octave_hdf5_ok = yes; then
-     TEXINFO_HDF5="@set HAVE_HDF5"
-     AC_DEFINE(HAVE_HDF5, 1, [Define if HDF5 is available.])
-     case "$canonical_host_type" in
-       *-*-msdosmsvc)
-	 OCTAVE_HDF5_DLL
-	 ;;
-     esac
-   fi])
+   OCTAVE_HDF5_HAS_ENFORCED_16_API
+   TEXINFO_HDF5="@set HAVE_HDF5"
+   AC_DEFINE(HAVE_HDF5, 1, [Define if HDF5 is available and newer than version 1.6.])
+   case "$canonical_host_type" in
+     *-*-msdosmsvc)
+       OCTAVE_HDF5_DLL
+       ;;
+   esac
+   ])
 CPPFLAGS="$save_CPPFLAGS"
 LIBS="$save_LIBS"
 
--- a/src/ChangeLog	Mon Nov 30 14:32:10 2009 -0500
+++ b/src/ChangeLog	Tue Dec 01 00:49:07 2009 +0100
@@ -1,3 +1,14 @@
+2009-11-30  Kacper Kowalik <xarthisius.kk@gmail.com>
+
+	* oct-hdf5.h: Drop force the use of the v1.6 API
+	* ls-hdf5.cc, ov-base-int.cc, ov-bool-mat.cc, ov-bool-sparse.cc,
+	ov-bool.cc, ov-cell.cc, ov-class.cc, ov-complex.cc, ov-cx-mat.cc,
+	ov-cx-sparse.cc, ov-fcn-handle.cc, ov-fcn-inline.cc, ov-float.cc,
+	ov-flt-complex.cc, ov-flt-cx-mat.cc, ov-flt-re-mat.cc, ov-list.cc,
+	ov-range.cc, ov-re-mat.cc, ov-re-sparse.cc, ov-scalar.cc,
+	ov-str-mat.cc, ov-struct.cc: Allow v1.8 API versions of hdf5
+	functions.
+
 2009-11-30  John W. Eaton  <jwe@octave.org>
 
 	* DLD-FUNCTIONS/fft2.cc (Fifft2): Docstring fix.
--- a/src/ls-hdf5.cc	Mon Nov 30 14:32:10 2009 -0500
+++ b/src/ls-hdf5.cc	Tue Dec 01 00:49:07 2009 +0100
@@ -142,8 +142,13 @@
   // turn off error reporting temporarily, but save the error
   // reporting function:
 
+#if HAVE_HDF5_18
+  H5Eget_auto (H5E_DEFAULT, &err_func, &err_func_data);
+  H5Eset_auto (H5E_DEFAULT, 0, 0);
+#else
   H5Eget_auto (&err_func, &err_func_data);
   H5Eset_auto (0, 0);
+#endif
 
   hid_t attr_id = H5Aopen_name (loc_id, attr_name);
 
@@ -155,8 +160,11 @@
     }
 
   // restore error reporting:
+#if HAVE_HDF5_18
+  H5Eset_auto (H5E_DEFAULT, err_func, err_func_data);
+#else
   H5Eset_auto (err_func, err_func_data);
-
+#endif
   return retval;
 }
 
@@ -216,7 +224,11 @@
 
   if (info.type == H5G_GROUP && ident_valid)
     {
+#if HAVE_HDF5_18
+      subgroup_id = H5Gopen (group_id, name, H5P_DEFAULT);
+#else
       subgroup_id = H5Gopen (group_id, name);
+#endif
 
       if (subgroup_id < 0)
 	{
@@ -226,7 +238,11 @@
 
       if (hdf5_check_attr (subgroup_id, "OCTAVE_NEW_FORMAT"))
 	{
+#if HAVE_HDF5_18
+	  data_id = H5Dopen (subgroup_id, "type", H5P_DEFAULT);
+#else
 	  data_id = H5Dopen (subgroup_id, "type");
+#endif
 
 	  if (data_id < 0)
 	    {
@@ -296,7 +312,11 @@
   else if (info.type == H5G_DATASET && ident_valid)
     {
       // For backwards compatiability.
+#if HAVE_HDF5_18
+      data_id = H5Dopen (group_id, name, H5P_DEFAULT);
+#else
       data_id = H5Dopen (group_id, name);
+#endif
 
       if (data_id < 0)
 	{
@@ -523,14 +543,17 @@
   herr_t H5Giterate_retval = -1;
 
   hsize_t num_obj = 0;
+#if HAVE_HDF5_18
+  hid_t group_id = H5Gopen (hs.file_id, "/", H5P_DEFAULT); 
+#else
   hid_t group_id = H5Gopen (hs.file_id, "/"); 
+#endif
   H5Gget_num_objs (group_id, &num_obj);
   H5Gclose (group_id);
   if (hs.current_item < static_cast<int> (num_obj))
     H5Giterate_retval = H5Giterate (hs.file_id, "/", &hs.current_item,
 				    hdf5_read_next_data, &d);
 
-
   if (H5Giterate_retval > 0)
     {
       global = d.global;
@@ -561,9 +584,13 @@
 
   if (as_id >= 0)
     {
+#if HAVE_HDF5_18
+      hid_t a_id = H5Acreate (loc_id, attr_name, H5T_NATIVE_UCHAR, 
+      			      as_id, H5P_DEFAULT, H5P_DEFAULT);
+#else
       hid_t a_id = H5Acreate (loc_id, attr_name,
 			      H5T_NATIVE_UCHAR, as_id, H5P_DEFAULT);
-
+#endif
       if (a_id >= 0)
 	{
 	  unsigned char attr_val = 1;
@@ -607,9 +634,13 @@
 
   space_hid = H5Screate_simple (1, &sz, 0);
   if (space_hid < 0) return space_hid;
-
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (loc_id, name, H5T_NATIVE_IDX, space_hid, 
+			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (loc_id, name, H5T_NATIVE_IDX, space_hid, 
 			H5P_DEFAULT);
+#endif
   if (data_hid < 0)
     {
       H5Sclose (space_hid);
@@ -639,7 +670,11 @@
     return 0;
 
   hsize_t hdims, maxdims;
+#if HAVE_HDF5_18
+  hid_t data_hid = H5Dopen (loc_id, name, H5P_DEFAULT);
+#else
   hid_t data_hid = H5Dopen (loc_id, name);
+#endif
   hid_t space_id = H5Dget_space (data_hid);
   H5Sget_simple_extent_dims (space_id, &hdims, &maxdims);
   int retval;
@@ -722,8 +757,11 @@
     val = val.full_value ();
 
   std::string t = val.type_name();
-
+#if HAVE_HDF5_18
+  data_id = H5Gcreate (loc_id, name.c_str (), H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_id = H5Gcreate (loc_id, name.c_str (), 0);
+#endif
   if (data_id < 0)
     goto error_cleanup;
 
@@ -736,8 +774,12 @@
   space_id = H5Screate_simple (0 , dims, 0);
   if (space_id < 0)
     goto error_cleanup;
-
+#if HAVE_HDF5_18
+  data_type_id = H5Dcreate (data_id, "type",  type_id, space_id,
+  			    H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_type_id = H5Dcreate (data_id, "type",  type_id, space_id, H5P_DEFAULT);
+#endif
   if (data_type_id < 0 || H5Dwrite (data_type_id, type_id, H5S_ALL, H5S_ALL, 
 				    H5P_DEFAULT, t.c_str ()) < 0)
     goto error_cleanup;
--- a/src/oct-hdf5.h	Mon Nov 30 14:32:10 2009 -0500
+++ b/src/oct-hdf5.h	Tue Dec 01 00:49:07 2009 +0100
@@ -24,13 +24,7 @@
 #define octave_hdf5_h 1
 
 #if defined (HAVE_HDF5)
-
-#if !defined (H5_USE_16_API)
-#define H5_USE_16_API 1
-#endif
-
 #include <hdf5.h>
-
 #endif
 
 #endif
--- a/src/ov-base-int.cc	Mon Nov 30 14:32:10 2009 -0500
+++ b/src/ov-base-int.cc	Tue Dec 01 00:49:07 2009 +0100
@@ -350,9 +350,13 @@
   space_hid = H5Screate_simple (rank, hdims, 0);
 
   if (space_hid < 0) return false;
-
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (loc_id, name, save_type_hid, space_hid, 
+			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (loc_id, name, save_type_hid, space_hid, 
 			H5P_DEFAULT);
+#endif
   if (data_hid < 0)
     {
       H5Sclose (space_hid);
@@ -381,7 +385,11 @@
   if (empty)
       return (empty > 0);
 
+#if HAVE_HDF5_18
+  hid_t data_hid = H5Dopen (loc_id, name, H5P_DEFAULT);
+#else
   hid_t data_hid = H5Dopen (loc_id, name);
+#endif
   hid_t space_id = H5Dget_space (data_hid);
 
   hsize_t rank = H5Sget_simple_extent_ndims (space_id);
@@ -540,8 +548,13 @@
   space_hid = H5Screate_simple (0, dimens, 0);
   if (space_hid < 0) return false;
 
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (loc_id, name, save_type_hid, space_hid, 
+			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (loc_id, name, save_type_hid, space_hid, 
 			H5P_DEFAULT);
+#endif
   if (data_hid < 0) 
     {
       H5Sclose (space_hid);
@@ -562,7 +575,11 @@
 octave_base_int_scalar<T>::load_hdf5 (hid_t loc_id, const char *name)
 {
   hid_t save_type_hid = HDF5_SAVE_TYPE;
+#if HAVE_HDF5_18
+  hid_t data_hid = H5Dopen (loc_id, name, H5P_DEFAULT);
+#else
   hid_t data_hid = H5Dopen (loc_id, name);
+#endif
   hid_t space_id = H5Dget_space (data_hid);
 
   hsize_t rank = H5Sget_simple_extent_ndims (space_id);
--- a/src/ov-bool-mat.cc	Mon Nov 30 14:32:10 2009 -0500
+++ b/src/ov-bool-mat.cc	Tue Dec 01 00:49:07 2009 +0100
@@ -432,9 +432,13 @@
 
   space_hid = H5Screate_simple (rank, hdims, 0);
   if (space_hid < 0) return false;
-
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (loc_id, name, H5T_NATIVE_HBOOL, space_hid, 
+			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (loc_id, name, H5T_NATIVE_HBOOL, space_hid, 
 			H5P_DEFAULT);
+#endif
   if (data_hid < 0)
     {
       H5Sclose (space_hid);
@@ -469,7 +473,11 @@
   if (empty)
     return (empty > 0);
 
+#if HAVE_HDF5_18
+  hid_t data_hid = H5Dopen (loc_id, name, H5P_DEFAULT);
+#else
   hid_t data_hid = H5Dopen (loc_id, name);
+#endif
   hid_t space_id = H5Dget_space (data_hid);
 
   hsize_t rank = H5Sget_simple_extent_ndims (space_id);
--- a/src/ov-bool-sparse.cc	Mon Nov 30 14:32:10 2009 -0500
+++ b/src/ov-bool-sparse.cc	Tue Dec 01 00:49:07 2009 +0100
@@ -344,8 +344,11 @@
 
   // Ensure that additional memory is deallocated
   matrix.maybe_compress ();
-
+#if HAVE_HDF5_18
+  hid_t group_hid = H5Gcreate (loc_id, name, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   hid_t group_hid = H5Gcreate (loc_id, name, 0);
+#endif
   if (group_hid < 0)
     return false;
 
@@ -361,9 +364,13 @@
       H5Gclose (group_hid);
       return false;
     }
-
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (group_hid, "nr", H5T_NATIVE_IDX, space_hid,
+			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (group_hid, "nr", H5T_NATIVE_IDX, space_hid,
 			H5P_DEFAULT);
+#endif
   if (data_hid < 0) 
     {
       H5Sclose (space_hid);
@@ -381,8 +388,13 @@
       return false;
     }    
 
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (group_hid, "nc", H5T_NATIVE_IDX, space_hid,
+			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (group_hid, "nc", H5T_NATIVE_IDX, space_hid,
 			H5P_DEFAULT);
+#endif
   if (data_hid < 0) 
     {
       H5Sclose (space_hid);
@@ -401,8 +413,13 @@
       return false;
     }    
 
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (group_hid, "nz", H5T_NATIVE_IDX, space_hid, 
+			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (group_hid, "nz", H5T_NATIVE_IDX, space_hid, 
 			H5P_DEFAULT);
+#endif
   if (data_hid < 0) 
     {
       H5Sclose (space_hid);
@@ -434,8 +451,13 @@
       return false;
     }
 
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (group_hid, "cidx", H5T_NATIVE_IDX, space_hid, 
+			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (group_hid, "cidx", H5T_NATIVE_IDX, space_hid, 
 			H5P_DEFAULT);
+#endif
   if (data_hid < 0) 
     {
       H5Sclose (space_hid);
@@ -467,8 +489,13 @@
       return false;
     }
 
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (group_hid, "ridx", H5T_NATIVE_IDX, space_hid, 
+			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (group_hid, "ridx", H5T_NATIVE_IDX, space_hid, 
 			H5P_DEFAULT);
+#endif
   if (data_hid < 0) 
     {
       H5Sclose (space_hid);
@@ -487,8 +514,13 @@
       return false;
     }
 
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (group_hid, "data", H5T_NATIVE_HBOOL, space_hid, 
+			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (group_hid, "data", H5T_NATIVE_HBOOL, space_hid, 
 			H5P_DEFAULT);
+#endif
   if (data_hid < 0) 
     {
       H5Sclose (space_hid);
@@ -522,11 +554,19 @@
     matrix.resize(dv);
   if (empty)
     return (empty > 0);
-  
+
+#if HAVE_HDF5_18
+  group_hid = H5Gopen (loc_id, name, H5P_DEFAULT);
+#else
   group_hid = H5Gopen (loc_id, name);
+#endif
   if (group_hid < 0 ) return false;
 
+#if HAVE_HDF5_18
+  data_hid = H5Dopen (group_hid, "nr", H5P_DEFAULT);
+#else
   data_hid = H5Dopen (group_hid, "nr");
+#endif
   space_hid = H5Dget_space (data_hid);
   rank = H5Sget_simple_extent_ndims (space_hid);
 
@@ -546,7 +586,11 @@
 
   H5Dclose (data_hid);
 
+#if HAVE_HDF5_18
+  data_hid = H5Dopen (group_hid, "nc", H5P_DEFAULT);
+#else
   data_hid = H5Dopen (group_hid, "nc");
+#endif
   space_hid = H5Dget_space (data_hid);
   rank = H5Sget_simple_extent_ndims (space_hid);
 
@@ -565,8 +609,12 @@
     }
 
   H5Dclose (data_hid);
-  
+
+#if HAVE_HDF5_18
+  data_hid = H5Dopen (group_hid, "nz", H5P_DEFAULT);
+#else
   data_hid = H5Dopen (group_hid, "nz");
+#endif
   space_hid = H5Dget_space (data_hid);
   rank = H5Sget_simple_extent_ndims (space_hid);
 
@@ -590,7 +638,11 @@
 		      static_cast<octave_idx_type> (nc),
 		      static_cast<octave_idx_type> (nz));
 
+#if HAVE_HDF5_18
+  data_hid = H5Dopen (group_hid, "cidx", H5P_DEFAULT);
+#else
   data_hid = H5Dopen (group_hid, "cidx");
+#endif
   space_hid = H5Dget_space (data_hid);
   rank = H5Sget_simple_extent_ndims (space_hid);
 
@@ -628,7 +680,11 @@
   H5Sclose (space_hid);
   H5Dclose (data_hid);
 
+#if HAVE_HDF5_18
+  data_hid = H5Dopen (group_hid, "ridx", H5P_DEFAULT);
+#else
   data_hid = H5Dopen (group_hid, "ridx");
+#endif
   space_hid = H5Dget_space (data_hid);
   rank = H5Sget_simple_extent_ndims (space_hid);
 
@@ -664,7 +720,11 @@
   H5Sclose (space_hid);
   H5Dclose (data_hid);
 
+#if HAVE_HDF5_18
+  data_hid = H5Dopen (group_hid, "data", H5P_DEFAULT);
+#else
   data_hid = H5Dopen (group_hid, "data");
+#endif
   space_hid = H5Dget_space (data_hid);
   rank = H5Sget_simple_extent_ndims (space_hid);
 
--- a/src/ov-bool.cc	Mon Nov 30 14:32:10 2009 -0500
+++ b/src/ov-bool.cc	Tue Dec 01 00:49:07 2009 +0100
@@ -170,9 +170,13 @@
 
   space_hid = H5Screate_simple (0, dimens, 0);
   if (space_hid < 0) return false;
-
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (loc_id, name, H5T_NATIVE_DOUBLE, space_hid, 
+			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (loc_id, name, H5T_NATIVE_DOUBLE, space_hid, 
 			H5P_DEFAULT);
+#endif
   if (data_hid < 0) 
     {
       H5Sclose (space_hid);
@@ -192,7 +196,11 @@
 bool
 octave_bool::load_hdf5 (hid_t loc_id, const char *name)
 {
+#if HAVE_HDF5_18
+  hid_t data_hid = H5Dopen (loc_id, name, H5P_DEFAULT);
+#else
   hid_t data_hid = H5Dopen (loc_id, name);
+#endif
   hid_t space_id = H5Dget_space (data_hid);
 
   hsize_t rank = H5Sget_simple_extent_ndims (space_id);
--- a/src/ov-cell.cc	Mon Nov 30 14:32:10 2009 -0500
+++ b/src/ov-cell.cc	Tue Dec 01 00:49:07 2009 +0100
@@ -1034,7 +1034,11 @@
   hsize_t rank = dv.length (); 
   hid_t space_hid = -1, data_hid = -1, size_hid = -1;
 
+#if HAVE_HDF5_18
+  data_hid = H5Gcreate (loc_id, name, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Gcreate (loc_id, name, 0);
+#endif
 
   if (data_hid < 0)
     return false;
@@ -1056,8 +1060,13 @@
   for (hsize_t i = 0; i < rank; i++)
     hdims[i] = dv(rank-i-1);
 
+#if HAVE_HDF5_18
+  size_hid = H5Dcreate (data_hid, "dims", H5T_NATIVE_IDX, space_hid, 
+			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   size_hid = H5Dcreate (data_hid, "dims", H5T_NATIVE_IDX, space_hid, 
 			H5P_DEFAULT);
+#endif
   if (size_hid < 0) 
     {
       H5Sclose (space_hid);
@@ -1117,12 +1126,20 @@
   if (empty)
     return (empty > 0);
 
+#if HAVE_HDF5_18
+  hid_t group_id = H5Gopen (loc_id, name, H5P_DEFAULT);
+#else
   hid_t group_id = H5Gopen (loc_id, name);
+#endif
 
   if (group_id < 0)
     return false;
 
+#if HAVE_HDF5_18
+  hid_t data_hid = H5Dopen (group_id, "dims", H5P_DEFAULT);
+#else
   hid_t data_hid = H5Dopen (group_id, "dims");
+#endif
   hid_t space_hid = H5Dget_space (data_hid);
   hsize_t rank = H5Sget_simple_extent_ndims (space_hid);
   if (rank != 1) 
@@ -1166,7 +1183,11 @@
   int current_item = 0;
 
   hsize_t num_obj = 0;
+#if HAVE_HDF5_18
+  group_id = H5Gopen (loc_id, name, H5P_DEFAULT); 
+#else
   group_id = H5Gopen (loc_id, name); 
+#endif
   H5Gget_num_objs (group_id, &num_obj);
   H5Gclose (group_id);
 
@@ -1174,7 +1195,7 @@
     {
 
       if (current_item >= static_cast<int> (num_obj))
-        retval2 = -1;
+	retval2 = -1;
       else
 	retval2 = H5Giterate (loc_id, name, &current_item,
 			      hdf5_read_next_data, &dsub);
--- a/src/ov-class.cc	Mon Nov 30 14:32:10 2009 -0500
+++ b/src/ov-class.cc	Tue Dec 01 00:49:07 2009 +0100
@@ -1399,7 +1399,11 @@
   Octave_map m;
   Octave_map::iterator i;
 
+#if HAVE_HDF5_18
+  group_hid = H5Gcreate (loc_id, name, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   group_hid = H5Gcreate (loc_id, name, 0);
+#endif
   if (group_hid < 0)
     goto error_cleanup;
 
@@ -1412,14 +1416,22 @@
   space_hid = H5Screate_simple (0 , hdims, 0);
   if (space_hid < 0)
     goto error_cleanup;
-
+#if HAVE_HDF5_18
+  class_hid = H5Dcreate (group_hid, "classname",  type_hid, space_hid,
+			 H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   class_hid = H5Dcreate (group_hid, "classname",  type_hid, space_hid,
 			 H5P_DEFAULT);
+#endif
   if (class_hid < 0 || H5Dwrite (class_hid, type_hid, H5S_ALL, H5S_ALL, 
 				    H5P_DEFAULT, c_name.c_str ()) < 0)
     goto error_cleanup;
 
+#if HAVE_HDF5_18
+  data_hid = H5Gcreate (group_hid, "value", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Gcreate (group_hid, "value", 0);
+#endif
   if (data_hid < 0)
     goto error_cleanup;
 
@@ -1492,12 +1504,19 @@
   int slen = 0;
   hsize_t rank = 0;
 
+#if HAVE_HDF5_18
+  group_hid = H5Gopen (loc_id, name, H5P_DEFAULT);
+#else
   group_hid = H5Gopen (loc_id, name);
+#endif
   if (group_hid < 0)
     goto error_cleanup;
 
-  
+#if HAVE_HDF5_18
+  data_hid = H5Dopen (group_hid, "classname", H5P_DEFAULT);
+#else
   data_hid = H5Dopen (group_hid, "classname");
+#endif
 
   if (data_hid < 0)
     goto error_cleanup;
@@ -1546,8 +1565,11 @@
   while (0);
   reconstruct_exemplar ();
 
-
+#if HAVE_HDF5_18
+  subgroup_hid = H5Gopen (group_hid, name, H5P_DEFAULT); 
+#else
   subgroup_hid = H5Gopen (group_hid, name); 
+#endif
   H5Gget_num_objs (subgroup_hid, &num_obj);
   H5Gclose (subgroup_hid);
 
--- a/src/ov-complex.cc	Mon Nov 30 14:32:10 2009 -0500
+++ b/src/ov-complex.cc	Tue Dec 01 00:49:07 2009 +0100
@@ -320,8 +320,12 @@
       H5Sclose (space_hid);
       return false;
     }
-
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (loc_id, name, type_hid, space_hid, 
+  			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (loc_id, name, type_hid, space_hid, H5P_DEFAULT);
+#endif
   if (data_hid < 0) 
     {
       H5Sclose (space_hid);
@@ -344,7 +348,11 @@
 octave_complex::load_hdf5 (hid_t loc_id, const char *name)
 {
   bool retval = false;
+#if HAVE_HDF5_18
+  hid_t data_hid = H5Dopen (loc_id, name, H5P_DEFAULT);
+#else
   hid_t data_hid = H5Dopen (loc_id, name);
+#endif
   hid_t type_hid = H5Dget_type (data_hid);
 
   hid_t complex_type = hdf5_make_complex_type (H5T_NATIVE_DOUBLE);
--- a/src/ov-cx-mat.cc	Mon Nov 30 14:32:10 2009 -0500
+++ b/src/ov-cx-mat.cc	Tue Dec 01 00:49:07 2009 +0100
@@ -583,8 +583,12 @@
       H5Sclose (space_hid);
       return false;
     }
-
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (loc_id, name, type_hid, space_hid, 
+  			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (loc_id, name, type_hid, space_hid, H5P_DEFAULT);
+#endif
   if (data_hid < 0)
     {
       H5Sclose (space_hid);
@@ -626,7 +630,11 @@
   if (empty)
       return (empty > 0);
 
+#if HAVE_HDF5_18
+  hid_t data_hid = H5Dopen (loc_id, name, H5P_DEFAULT);
+#else
   hid_t data_hid = H5Dopen (loc_id, name);
+#endif
   hid_t type_hid = H5Dget_type (data_hid);
 
   hid_t complex_type = hdf5_make_complex_type (H5T_NATIVE_DOUBLE);
--- a/src/ov-cx-sparse.cc	Mon Nov 30 14:32:10 2009 -0500
+++ b/src/ov-cx-sparse.cc	Tue Dec 01 00:49:07 2009 +0100
@@ -397,7 +397,11 @@
   // Ensure that additional memory is deallocated
   matrix.maybe_compress ();
 
+#if HAVE_HDF5_18
+  hid_t group_hid = H5Gcreate (loc_id, name, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   hid_t group_hid = H5Gcreate (loc_id, name, 0);
+#endif
   if (group_hid < 0)
     return false;
 
@@ -414,8 +418,13 @@
       return false;
     }
 
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (group_hid, "nr", H5T_NATIVE_IDX, space_hid, 
+			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (group_hid, "nr", H5T_NATIVE_IDX, space_hid, 
 			H5P_DEFAULT);
+#endif
   if (data_hid < 0) 
     {
       H5Sclose (space_hid);
@@ -434,8 +443,13 @@
       return false;
     }    
 
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (group_hid, "nc", H5T_NATIVE_IDX, space_hid, 
+			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (group_hid, "nc", H5T_NATIVE_IDX, space_hid, 
 			H5P_DEFAULT);
+#endif
   if (data_hid < 0) 
     {
       H5Sclose (space_hid);
@@ -454,8 +468,13 @@
       return false;
     }    
 
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (group_hid, "nz", H5T_NATIVE_IDX, space_hid, 
+			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (group_hid, "nz", H5T_NATIVE_IDX, space_hid, 
 			H5P_DEFAULT);
+#endif
   if (data_hid < 0) 
     {
       H5Sclose (space_hid);
@@ -487,8 +506,13 @@
       return false;
     }
 
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (group_hid, "cidx", H5T_NATIVE_IDX, space_hid, 
+			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (group_hid, "cidx", H5T_NATIVE_IDX, space_hid, 
 			H5P_DEFAULT);
+#endif
   if (data_hid < 0) 
     {
       H5Sclose (space_hid);
@@ -520,8 +544,13 @@
       return false;
     }
 
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (group_hid, "ridx", H5T_NATIVE_IDX, space_hid, 
+			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (group_hid, "ridx", H5T_NATIVE_IDX, space_hid, 
 			H5P_DEFAULT);
+#endif
   if (data_hid < 0) 
     {
       H5Sclose (space_hid);
@@ -570,8 +599,12 @@
       H5Gclose (group_hid);
       return false;
     }
-
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (group_hid, "data", type_hid, space_hid, 
+  			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (group_hid, "data", type_hid, space_hid, H5P_DEFAULT);
+#endif  
   if (data_hid < 0)
     {
       H5Sclose (space_hid);
@@ -612,10 +645,18 @@
   if (empty)
     return (empty > 0);
   
+#if HAVE_HDF5_18
+  group_hid = H5Gopen (loc_id, name, H5P_DEFAULT);
+#else
   group_hid = H5Gopen (loc_id, name);
+#endif
   if (group_hid < 0 ) return false;
 
+#if HAVE_HDF5_18
+  data_hid = H5Dopen (group_hid, "nr", H5P_DEFAULT);
+#else
   data_hid = H5Dopen (group_hid, "nr");
+#endif
   space_hid = H5Dget_space (data_hid);
   rank = H5Sget_simple_extent_ndims (space_hid);
 
@@ -635,7 +676,11 @@
 
   H5Dclose (data_hid);
 
+#if HAVE_HDF5_18
+  data_hid = H5Dopen (group_hid, "nc", H5P_DEFAULT);
+#else
   data_hid = H5Dopen (group_hid, "nc");
+#endif
   space_hid = H5Dget_space (data_hid);
   rank = H5Sget_simple_extent_ndims (space_hid);
 
@@ -654,8 +699,12 @@
     }
 
   H5Dclose (data_hid);
-  
+
+#if HAVE_HDF5_18
+  data_hid = H5Dopen (group_hid, "nz", H5P_DEFAULT);
+#else
   data_hid = H5Dopen (group_hid, "nz");
+#endif
   space_hid = H5Dget_space (data_hid);
   rank = H5Sget_simple_extent_ndims (space_hid);
 
@@ -679,7 +728,11 @@
 			 static_cast<octave_idx_type> (nc),
 			 static_cast<octave_idx_type> (nz));
 
+#if HAVE_HDF5_18
+  data_hid = H5Dopen (group_hid, "cidx", H5P_DEFAULT);
+#else
   data_hid = H5Dopen (group_hid, "cidx");
+#endif
   space_hid = H5Dget_space (data_hid);
   rank = H5Sget_simple_extent_ndims (space_hid);
 
@@ -717,7 +770,11 @@
   H5Sclose (space_hid);
   H5Dclose (data_hid);
 
+#if HAVE_HDF5_18
+  data_hid = H5Dopen (group_hid, "ridx", H5P_DEFAULT);
+#else
   data_hid = H5Dopen (group_hid, "ridx");
+#endif
   space_hid = H5Dget_space (data_hid);
   rank = H5Sget_simple_extent_ndims (space_hid);
 
@@ -752,7 +809,11 @@
   H5Sclose (space_hid);
   H5Dclose (data_hid);
 
+#if HAVE_HDF5_18
+  data_hid = H5Dopen (group_hid, "data", H5P_DEFAULT);
+#else
   data_hid = H5Dopen (group_hid, "data");
+#endif
   hid_t type_hid = H5Dget_type (data_hid);
 
   hid_t complex_type = hdf5_make_complex_type (H5T_NATIVE_DOUBLE);
--- a/src/ov-fcn-handle.cc	Mon Nov 30 14:32:10 2009 -0500
+++ b/src/ov-fcn-handle.cc	Tue Dec 01 00:49:07 2009 +0100
@@ -651,7 +651,11 @@
   bool retval = true;
 
   hid_t group_hid = -1;
+#if HAVE_HDF5_18
+  group_hid = H5Gcreate (loc_id, name, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   group_hid = H5Gcreate (loc_id, name, 0);
+#endif
   if (group_hid < 0)
     return false;
 
@@ -676,8 +680,12 @@
       H5Gclose (group_hid);
       return false;
     }
-
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (group_hid, "nm",  type_hid, space_hid, 
+  			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (group_hid, "nm",  type_hid, space_hid, H5P_DEFAULT);
+#endif
   if (data_hid < 0 || H5Dwrite (data_hid, type_hid, H5S_ALL, H5S_ALL,
 				H5P_DEFAULT, nm.c_str ()) < 0)
     {
@@ -703,8 +711,13 @@
 	  return false;
 	}
 
+#if HAVE_HDF5_18
+      data_hid = H5Dcreate (group_hid, "fcn",  type_hid, space_hid,
+			    H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
       data_hid = H5Dcreate (group_hid, "fcn",  type_hid, space_hid,
 			    H5P_DEFAULT);
+#endif
       if (data_hid < 0 || H5Dwrite (data_hid, type_hid, H5S_ALL, H5S_ALL,
 				    H5P_DEFAULT, stmp.c_str ()) < 0)
 	{
@@ -729,8 +742,15 @@
 
 	  if (as_id >= 0)
 	    {
+#if HAVE_HDF5_18
+	      hid_t a_id = H5Acreate (group_hid, "SYMBOL_TABLE",
+				      H5T_NATIVE_IDX, as_id, 
+				      H5P_DEFAULT, H5P_DEFAULT);
+
+#else
 	      hid_t a_id = H5Acreate (group_hid, "SYMBOL_TABLE",
 				      H5T_NATIVE_IDX, as_id, H5P_DEFAULT);
+#endif
 
 	      if (a_id >= 0)
 		{
@@ -745,8 +765,11 @@
 	    }
 	  else
 	    retval = false;
-
+#if HAVE_HDF5_18
+	  data_hid = H5Gcreate (group_hid, "symbol table", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
 	  data_hid = H5Gcreate (group_hid, "symbol table", 0);
+#endif
 	  if (data_hid < 0) 
 	    {
 	      H5Sclose (space_hid);
@@ -786,9 +809,13 @@
       H5Tclose (type_hid);
       type_hid = H5Tcopy (H5T_C_S1);
       H5Tset_size (type_hid, octaveroot.length () + 1);
-
+#if HAVE_HDF5_18
+      hid_t a_id = H5Acreate (group_hid, "OCTAVEROOT",
+			      type_hid, space_hid, H5P_DEFAULT, H5P_DEFAULT);
+#else
       hid_t a_id = H5Acreate (group_hid, "OCTAVEROOT",
 			      type_hid, space_hid, H5P_DEFAULT);
+#endif
 
       if (a_id >= 0)
 	{
@@ -819,7 +846,12 @@
       type_hid = H5Tcopy (H5T_C_S1);
       H5Tset_size (type_hid, fpath.length () + 1);
 
+#if HAVE_HDF5_18
+      a_id = H5Acreate (group_hid, "FILE", type_hid, space_hid, 
+      			H5P_DEFAULT, H5P_DEFAULT);
+#else
       a_id = H5Acreate (group_hid, "FILE", type_hid, space_hid, H5P_DEFAULT);
+#endif
 
       if (a_id >= 0)
 	{
@@ -847,11 +879,19 @@
   hsize_t rank;
   int slen;
 
+#if HAVE_HDF5_18
+  group_hid = H5Gopen (loc_id, name, H5P_DEFAULT);
+#else
   group_hid = H5Gopen (loc_id, name);
+#endif
   if (group_hid < 0)
     return false;
 
+#if HAVE_HDF5_18
+  data_hid = H5Dopen (group_hid, "nm", H5P_DEFAULT);
+#else
   data_hid = H5Dopen (group_hid, "nm");
+#endif
 
   if (data_hid < 0)
     {
@@ -913,7 +953,11 @@
 
   if (nm == "@<anonymous>")
     {
+#if HAVE_HDF5_18
+      data_hid = H5Dopen (group_hid, "fcn", H5P_DEFAULT);
+#else
       data_hid = H5Dopen (group_hid, "fcn");
+#endif
 
       if (data_hid < 0)
 	{
@@ -988,8 +1032,13 @@
 
       // turn off error reporting temporarily, but save the error
       // reporting function:
+#if HAVE_HDF5_18
+      H5Eget_auto (H5E_DEFAULT, &err_func, &err_func_data);
+      H5Eset_auto (H5E_DEFAULT, 0, 0);
+#else
       H5Eget_auto (&err_func, &err_func_data);
       H5Eset_auto (0, 0);
+#endif
 
       hid_t attr_id = H5Aopen_name (group_hid, "SYMBOL_TABLE");
 
@@ -1002,7 +1051,11 @@
 	}
 
       // restore error reporting:
+#if HAVE_HDF5_18
+      H5Eset_auto (H5E_DEFAULT, err_func, err_func_data);
+#else
       H5Eset_auto (err_func, err_func_data);
+#endif
 
       unwind_protect::frame_id_t uwp_frame = unwind_protect::begin_frame ();
 
@@ -1020,7 +1073,11 @@
       if (len > 0 && success)
 	{
 	  hsize_t num_obj = 0;
+#if HAVE_HDF5_18
+	  data_hid = H5Gopen (group_hid, "symbol table", H5P_DEFAULT); 
+#else
 	  data_hid = H5Gopen (group_hid, "symbol table"); 
+#endif
 	  H5Gget_num_objs (data_hid, &num_obj);
 	  H5Gclose (data_hid);
 
@@ -1091,8 +1148,13 @@
 
       // turn off error reporting temporarily, but save the error
       // reporting function:
+#if HAVE_HDF5_18
+      H5Eget_auto (H5E_DEFAULT, &err_func, &err_func_data);
+      H5Eset_auto (H5E_DEFAULT, 0, 0);
+#else
       H5Eget_auto (&err_func, &err_func_data);
       H5Eset_auto (0, 0);
+#endif
 
       hid_t attr_id = H5Aopen_name (group_hid, "OCTAVEROOT");
       if (attr_id >= 0)
@@ -1152,7 +1214,11 @@
 	}
 
       // restore error reporting:
+#if HAVE_HDF5_18
+      H5Eset_auto (H5E_DEFAULT, err_func, err_func_data);
+#else
       H5Eset_auto (err_func, err_func_data);
+#endif
 
       success = (success ? set_fcn (octaveroot, fpath) : success);
     }
--- a/src/ov-fcn-inline.cc	Mon Nov 30 14:32:10 2009 -0500
+++ b/src/ov-fcn-inline.cc	Tue Dec 01 00:49:07 2009 +0100
@@ -273,7 +273,11 @@
 			      bool /* save_as_floats */)
 {
   hid_t group_hid = -1;
+#if HAVE_HDF5_18
+  group_hid = H5Gcreate (loc_id, name, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   group_hid = H5Gcreate (loc_id, name, 0);
+#endif
   if (group_hid < 0 ) return false;
 
   size_t len = 0;
@@ -299,9 +303,13 @@
       H5Gclose (group_hid);
       return false;
     }
-
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (group_hid, "args", H5T_NATIVE_CHAR, space_hid,
+			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (group_hid, "args", H5T_NATIVE_CHAR, space_hid,
 			H5P_DEFAULT);
+#endif
   if (data_hid < 0)
     {
       H5Sclose (space_hid);
@@ -349,8 +357,12 @@
       H5Gclose (group_hid);
       return false;
     }
-
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (group_hid, "nm",  type_hid, space_hid, 
+  			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (group_hid, "nm",  type_hid, space_hid, H5P_DEFAULT);
+#endif
   if (data_hid < 0 || H5Dwrite (data_hid, type_hid, H5S_ALL, H5S_ALL,
 				H5P_DEFAULT, nm.c_str ()) < 0)
     {
@@ -369,8 +381,13 @@
       return false;
     }
 
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (group_hid, "iftext",  type_hid, space_hid,
+			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (group_hid, "iftext",  type_hid, space_hid,
 			H5P_DEFAULT);
+#endif
   if (data_hid < 0 || H5Dwrite (data_hid, type_hid, H5S_ALL, H5S_ALL,
 				H5P_DEFAULT, iftext.c_str ()) < 0)
     {
@@ -395,10 +412,18 @@
   hsize_t rank;
   int slen;
 
+#if HAVE_HDF5_18
+  group_hid = H5Gopen (loc_id, name, H5P_DEFAULT);
+#else
   group_hid = H5Gopen (loc_id, name);
+#endif
   if (group_hid < 0 ) return false;
 
+#if HAVE_HDF5_18
+  data_hid = H5Dopen (group_hid, "args", H5P_DEFAULT);
+#else
   data_hid = H5Dopen (group_hid, "args");
+#endif
   space_hid = H5Dget_space (data_hid);
   rank = H5Sget_simple_extent_ndims (space_hid);
 
@@ -434,7 +459,11 @@
   for (size_t i = 0; i < hdims[1]; i++)
     ifargs(i) = std::string (s1 + i*hdims[0]);
 
+#if HAVE_HDF5_18
+  data_hid = H5Dopen (group_hid, "nm", H5P_DEFAULT);
+#else
   data_hid = H5Dopen (group_hid, "nm");
+#endif
 
   if (data_hid < 0)
     {
@@ -492,7 +521,11 @@
   H5Dclose (data_hid);
   nm = nm_tmp;
 
+#if HAVE_HDF5_18
+  data_hid = H5Dopen (group_hid, "iftext", H5P_DEFAULT);
+#else
   data_hid = H5Dopen (group_hid, "iftext");
+#endif
 
   if (data_hid < 0)
     {
--- a/src/ov-float.cc	Mon Nov 30 14:32:10 2009 -0500
+++ b/src/ov-float.cc	Tue Dec 01 00:49:07 2009 +0100
@@ -189,9 +189,13 @@
 
   space_hid = H5Screate_simple (0, dimens, 0);
   if (space_hid < 0) return false;
-
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (loc_id, name, H5T_NATIVE_FLOAT, space_hid, 
+			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (loc_id, name, H5T_NATIVE_FLOAT, space_hid, 
 			H5P_DEFAULT);
+#endif
   if (data_hid < 0) 
     {
       H5Sclose (space_hid);
@@ -211,7 +215,11 @@
 bool
 octave_float_scalar::load_hdf5 (hid_t loc_id, const char *name)
 {
+#if HAVE_HDF5_18
+  hid_t data_hid = H5Dopen (loc_id, name, H5P_DEFAULT);
+#else
   hid_t data_hid = H5Dopen (loc_id, name);
+#endif
   hid_t space_id = H5Dget_space (data_hid);
 
   hsize_t rank = H5Sget_simple_extent_ndims (space_id);
--- a/src/ov-flt-complex.cc	Mon Nov 30 14:32:10 2009 -0500
+++ b/src/ov-flt-complex.cc	Tue Dec 01 00:49:07 2009 +0100
@@ -305,8 +305,12 @@
       H5Sclose (space_hid);
       return false;
     }
-
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (loc_id, name, type_hid, space_hid, 
+  			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else			
   data_hid = H5Dcreate (loc_id, name, type_hid, space_hid, H5P_DEFAULT);
+#endif
   if (data_hid < 0) 
     {
       H5Sclose (space_hid);
@@ -329,7 +333,11 @@
 octave_float_complex::load_hdf5 (hid_t loc_id, const char *name)
 {
   bool retval = false;
+#if HAVE_HDF5_18
+  hid_t data_hid = H5Dopen (loc_id, name, H5P_DEFAULT);
+#else
   hid_t data_hid = H5Dopen (loc_id, name);
+#endif
   hid_t type_hid = H5Dget_type (data_hid);
 
   hid_t complex_type = hdf5_make_complex_type (H5T_NATIVE_FLOAT);
--- a/src/ov-flt-cx-mat.cc	Mon Nov 30 14:32:10 2009 -0500
+++ b/src/ov-flt-cx-mat.cc	Tue Dec 01 00:49:07 2009 +0100
@@ -550,8 +550,12 @@
       H5Sclose (space_hid);
       return false;
     }
-
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (loc_id, name, type_hid, space_hid, 
+  			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (loc_id, name, type_hid, space_hid, H5P_DEFAULT);
+#endif
   if (data_hid < 0)
     {
       H5Sclose (space_hid);
@@ -593,7 +597,11 @@
   if (empty)
       return (empty > 0);
 
+#if HAVE_HDF5_18
+  hid_t data_hid = H5Dopen (loc_id, name, H5P_DEFAULT);
+#else
   hid_t data_hid = H5Dopen (loc_id, name);
+#endif
   hid_t type_hid = H5Dget_type (data_hid);
 
   hid_t complex_type = hdf5_make_complex_type (H5T_NATIVE_FLOAT);
--- a/src/ov-flt-re-mat.cc	Mon Nov 30 14:32:10 2009 -0500
+++ b/src/ov-flt-re-mat.cc	Tue Dec 01 00:49:07 2009 +0100
@@ -575,9 +575,13 @@
 	  = save_type_to_hdf5 (get_save_type (max_val, min_val));
     }
 #endif /* HAVE_HDF5_INT2FLOAT_CONVERSIONS */
-  
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (loc_id, name, save_type_hid, space_hid, 
+			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (loc_id, name, save_type_hid, space_hid, 
 			H5P_DEFAULT);
+#endif
   if (data_hid < 0)
     {
       H5Sclose (space_hid);
@@ -606,7 +610,11 @@
   if (empty)
       return (empty > 0);
 
+#if HAVE_HDF5_18
+  hid_t data_hid = H5Dopen (loc_id, name, H5P_DEFAULT);
+#else
   hid_t data_hid = H5Dopen (loc_id, name);
+#endif
   hid_t space_id = H5Dget_space (data_hid);
 
   hsize_t rank = H5Sget_simple_extent_ndims (space_id);
--- a/src/ov-list.cc	Mon Nov 30 14:32:10 2009 -0500
+++ b/src/ov-list.cc	Tue Dec 01 00:49:07 2009 +0100
@@ -686,7 +686,11 @@
 {
   hid_t data_hid = -1;
 
+#if HAVE_HDF5_18
+  data_hid = H5Gcreate (loc_id, name, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Gcreate (loc_id, name, 0);
+#endif
   if (data_hid < 0) return false;
 
   // recursively add each element of the list to this group
@@ -722,7 +726,11 @@
   octave_value_list lst;
   int current_item = 0;
   hsize_t num_obj = 0;
+#if HAVE_HDF5_18
+  hid_t group_id = H5Gopen (loc_id, name, H5P_DEFAULT); 
+#else
   hid_t group_id = H5Gopen (loc_id, name); 
+#endif
   H5Gget_num_objs (group_id, &num_obj);
   H5Gclose (group_id);
 
--- a/src/ov-range.cc	Mon Nov 30 14:32:10 2009 -0500
+++ b/src/ov-range.cc	Tue Dec 01 00:49:07 2009 +0100
@@ -462,8 +462,12 @@
       H5Sclose (space_hid);
       return false;
     }
-
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (loc_id, name, type_hid, space_hid, 
+  			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (loc_id, name, type_hid, space_hid, H5P_DEFAULT);
+#endif
   if (data_hid < 0) 
     {
       H5Sclose (space_hid);
@@ -492,7 +496,11 @@
 {
   bool retval = false;
 
+#if HAVE_HDF5_18
+  hid_t data_hid = H5Dopen (loc_id, name, H5P_DEFAULT);
+#else
   hid_t data_hid = H5Dopen (loc_id, name);
+#endif
   hid_t type_hid = H5Dget_type (data_hid);
 
   hid_t range_type = hdf5_make_range_type (H5T_NATIVE_DOUBLE);
--- a/src/ov-re-mat.cc	Mon Nov 30 14:32:10 2009 -0500
+++ b/src/ov-re-mat.cc	Tue Dec 01 00:49:07 2009 +0100
@@ -603,9 +603,14 @@
 	  = save_type_to_hdf5 (get_save_type (max_val, min_val));
     }
 #endif /* HAVE_HDF5_INT2FLOAT_CONVERSIONS */
-  
+ 
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (loc_id, name, save_type_hid, space_hid, 
+			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (loc_id, name, save_type_hid, space_hid, 
 			H5P_DEFAULT);
+#endif
   if (data_hid < 0)
     {
       H5Sclose (space_hid);
@@ -634,7 +639,11 @@
   if (empty)
       return (empty > 0);
 
+#if HAVE_HDF5_18
+  hid_t data_hid = H5Dopen (loc_id, name, H5P_DEFAULT);
+#else
   hid_t data_hid = H5Dopen (loc_id, name);
+#endif
   hid_t space_id = H5Dget_space (data_hid);
 
   hsize_t rank = H5Sget_simple_extent_ndims (space_id);
--- a/src/ov-re-sparse.cc	Mon Nov 30 14:32:10 2009 -0500
+++ b/src/ov-re-sparse.cc	Tue Dec 01 00:49:07 2009 +0100
@@ -410,7 +410,11 @@
   // Ensure that additional memory is deallocated
   matrix.maybe_compress ();
 
+#if HAVE_HDF5_18
+  hid_t group_hid = H5Gcreate (loc_id, name, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   hid_t group_hid = H5Gcreate (loc_id, name, 0);
+#endif
   if (group_hid < 0)
     return false;
 
@@ -426,9 +430,13 @@
       H5Gclose (group_hid);
       return false;
     }
-
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (group_hid, "nr", H5T_NATIVE_IDX, space_hid, 
+			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (group_hid, "nr", H5T_NATIVE_IDX, space_hid, 
 			H5P_DEFAULT);
+#endif
   if (data_hid < 0) 
     {
       H5Sclose (space_hid);
@@ -446,9 +454,13 @@
       H5Gclose (group_hid);
       return false;
     }    
-
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (group_hid, "nc", H5T_NATIVE_IDX, space_hid, 
+			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (group_hid, "nc", H5T_NATIVE_IDX, space_hid, 
 			H5P_DEFAULT);
+#endif
   if (data_hid < 0) 
     {
       H5Sclose (space_hid);
@@ -467,8 +479,13 @@
       return false;
     }    
 
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (group_hid, "nz", H5T_NATIVE_IDX, space_hid, 
+			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else                   
   data_hid = H5Dcreate (group_hid, "nz", H5T_NATIVE_IDX, space_hid, 
 			H5P_DEFAULT);
+#endif
   if (data_hid < 0) 
     {
       H5Sclose (space_hid);
@@ -500,8 +517,13 @@
       return false;
     }
 
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (group_hid, "cidx", H5T_NATIVE_IDX, space_hid, 
+			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (group_hid, "cidx", H5T_NATIVE_IDX, space_hid, 
 			H5P_DEFAULT);
+#endif
   if (data_hid < 0) 
     {
       H5Sclose (space_hid);
@@ -532,9 +554,13 @@
       H5Gclose (group_hid);
       return false;
     }
-
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (group_hid, "ridx", H5T_NATIVE_IDX, space_hid, 
+			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (group_hid, "ridx", H5T_NATIVE_IDX, space_hid, 
 			H5P_DEFAULT);
+#endif
   if (data_hid < 0) 
     {
       H5Sclose (space_hid);
@@ -577,8 +603,13 @@
     }
 #endif /* HAVE_HDF5_INT2FLOAT_CONVERSIONS */
 
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (group_hid, "data", save_type_hid, space_hid, 
+			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (group_hid, "data", save_type_hid, space_hid, 
 			H5P_DEFAULT);
+#endif
   if (data_hid < 0) 
     {
       H5Sclose (space_hid);
@@ -610,10 +641,18 @@
   if (empty)
     return (empty > 0);
   
+#if HAVE_HDF5_18
+  group_hid = H5Gopen (loc_id, name, H5P_DEFAULT);
+#else
   group_hid = H5Gopen (loc_id, name);
+#endif
   if (group_hid < 0) return false;
 
+#if HAVE_HDF5_18
+  data_hid = H5Dopen (group_hid, "nr", H5P_DEFAULT);
+#else
   data_hid = H5Dopen (group_hid, "nr");
+#endif
   space_hid = H5Dget_space (data_hid);
   rank = H5Sget_simple_extent_ndims (space_hid);
 
@@ -634,7 +673,11 @@
 
   H5Dclose (data_hid);
 
+#if HAVE_HDF5_18
+  data_hid = H5Dopen (group_hid, "nc", H5P_DEFAULT);
+#else
   data_hid = H5Dopen (group_hid, "nc");
+#endif
   space_hid = H5Dget_space (data_hid);
   rank = H5Sget_simple_extent_ndims (space_hid);
 
@@ -655,7 +698,11 @@
 
   H5Dclose (data_hid);
   
+#if HAVE_HDF5_18
+  data_hid = H5Dopen (group_hid, "nz", H5P_DEFAULT);
+#else
   data_hid = H5Dopen (group_hid, "nz");
+#endif
   space_hid = H5Dget_space (data_hid);
   rank = H5Sget_simple_extent_ndims (space_hid);
 
@@ -680,7 +727,11 @@
 		  static_cast<octave_idx_type> (nc),
 		  static_cast<octave_idx_type> (nz));
 
+#if HAVE_HDF5_18
+  data_hid = H5Dopen (group_hid, "cidx", H5P_DEFAULT);
+#else
   data_hid = H5Dopen (group_hid, "cidx");
+#endif
   space_hid = H5Dget_space (data_hid);
   rank = H5Sget_simple_extent_ndims (space_hid);
 
@@ -719,7 +770,11 @@
   H5Sclose (space_hid);
   H5Dclose (data_hid);
 
+#if HAVE_HDF5_18
+  data_hid = H5Dopen (group_hid, "ridx", H5P_DEFAULT);
+#else
   data_hid = H5Dopen (group_hid, "ridx");
+#endif
   space_hid = H5Dget_space (data_hid);
   rank = H5Sget_simple_extent_ndims (space_hid);
 
@@ -754,7 +809,11 @@
   H5Sclose (space_hid);
   H5Dclose (data_hid);
 
+#if HAVE_HDF5_18
+  data_hid = H5Dopen (group_hid, "data", H5P_DEFAULT);
+#else
   data_hid = H5Dopen (group_hid, "data");
+#endif
   space_hid = H5Dget_space (data_hid);
   rank = H5Sget_simple_extent_ndims (space_hid);
 
--- a/src/ov-scalar.cc	Mon Nov 30 14:32:10 2009 -0500
+++ b/src/ov-scalar.cc	Tue Dec 01 00:49:07 2009 +0100
@@ -205,8 +205,13 @@
   space_hid = H5Screate_simple (0, dimens, 0);
   if (space_hid < 0) return false;
 
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (loc_id, name, H5T_NATIVE_DOUBLE, space_hid, 
+			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (loc_id, name, H5T_NATIVE_DOUBLE, space_hid, 
 			H5P_DEFAULT);
+#endif
   if (data_hid < 0) 
     {
       H5Sclose (space_hid);
@@ -226,7 +231,11 @@
 bool
 octave_scalar::load_hdf5 (hid_t loc_id, const char *name)
 {
+#if HAVE_HDF5_18
+  hid_t data_hid = H5Dopen (loc_id, name, H5P_DEFAULT);
+#else
   hid_t data_hid = H5Dopen (loc_id, name);
+#endif
   hid_t space_id = H5Dget_space (data_hid);
 
   hsize_t rank = H5Sget_simple_extent_ndims (space_id);
--- a/src/ov-str-mat.cc	Mon Nov 30 14:32:10 2009 -0500
+++ b/src/ov-str-mat.cc	Tue Dec 01 00:49:07 2009 +0100
@@ -561,9 +561,13 @@
   space_hid = H5Screate_simple (rank, hdims, 0);
   if (space_hid < 0)
     return false;
-
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (loc_id, name, H5T_NATIVE_CHAR, space_hid, 
+			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (loc_id, name, H5T_NATIVE_CHAR, space_hid, 
 			H5P_DEFAULT);
+#endif
   if (data_hid < 0)
     {
       H5Sclose (space_hid);
@@ -596,7 +600,11 @@
   if (empty)
     return (empty > 0);
 
+#if HAVE_HDF5_18
+  hid_t data_hid = H5Dopen (loc_id, name, H5P_DEFAULT);
+#else
   hid_t data_hid = H5Dopen (loc_id, name);
+#endif
   hid_t space_hid = H5Dget_space (data_hid);
   hsize_t rank = H5Sget_simple_extent_ndims (space_hid);
   hid_t type_hid = H5Dget_type (data_hid);
--- a/src/ov-struct.cc	Mon Nov 30 14:32:10 2009 -0500
+++ b/src/ov-struct.cc	Tue Dec 01 00:49:07 2009 +0100
@@ -1487,7 +1487,11 @@
 {
   hid_t data_hid = -1;
 
+#if HAVE_HDF5_18
+  data_hid = H5Gcreate (loc_id, name, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Gcreate (loc_id, name, 0);
+#endif
   if (data_hid < 0) return false;
 
   // recursively add each element of the structure to this group
@@ -1528,7 +1532,11 @@
   Octave_map m (dim_vector (1, 1));
   int current_item = 0;
   hsize_t num_obj = 0;
-  hid_t group_id = H5Gopen (loc_id, name); 
+#if HAVE_HDF5_18
+  hid_t group_id = H5Gopen (loc_id, name, H5P_DEFAULT);
+#else
+  hid_t group_id = H5Gopen (loc_id, name);
+#endif
   H5Gget_num_objs (group_id, &num_obj);
   H5Gclose (group_id);