A potential drawback is some users also use HDF5 directly in their code and may be using an older version (people are very slow to change). Barry
On Dec 7, 2018, at 8:48 AM, Jed Brown via petsc-dev <[email protected]> wrote:
I'm in favor of requiring >=1.8.0.
Hapla Vaclav via petsc-dev <[email protected]> writes:
I wanted to add support for HDF5 attributes of groups (currently only datasets).
But I already feel like held back by supporting HDF5 older than 1.8.0. Do we still need that?
My arguments to get rid of that support: 1) It seems we already use some 1.8.0+ functions anyway (might be my fault, though). 2) We could get rid of all those #if 3) There were quite some useful API functions introduced in that release which would make the code simpler. For instance, H5O* functions allow handling groups and datasets the same way.
Ad 2,3 consider this
/* OLD */ #if (H5_VERS_MAJOR * 10000 + H5_VERS_MINOR * 100 + H5_VERS_RELEASE >= 10800) if (dataset) { PetscStackCallHDF5Return(object, H5Dopen2, (h5, parent, H5P_DEFAULT)); } else if (type == H5O_TYPE_GROUP) { PetscStackCallHDF5Return(object, H5Gopen2, (h5, parent, H5P_DEFAULT)); } #else if (dataset) { PetscStackCallHDF5Return(object, H5Dopen, (h5, parent)); } else if (type == H5O_TYPE_GROUP) { PetscStackCallHDF5Return(object, H5Gopen, (h5, parent)); } #endif ... if (dataset) { PetscStackCallHDF5Return(err, H5Dclose, (object)); } else if (type == H5O_TYPE_GROUP) { PetscStackCallHDF5Return(err, H5Gclose, (object)); }
/* NEW */ PetscStackCallHDF5Return(object, H5Oopen, (h5, parent, H5P_DEFAULT)); ... PetscStackCallHDF5Return(err, H5Oclose, (object));
Additionally, function H5Oget_info() which can say whether the object is group or dataset was also introduced only in 1.8.0. So the dataset flag above would have to be set by a user it seems...
So I personally think it's already about time to leave the old HDF5 API behind... Objections? If no, I would make a PR which would clean the code from the #ifs and forbid the older versions already in configure.
Vaclav