Monarch3 was originally written for the HDF5 1.8 API, and with the introduction of v1.10.1, two things broke:
In HDF5 1.8 we had class H5::CommonFG that contained a bunch of functions that are common to H5Files and H5Groups. Those functions were added to H5Location in v1.10, and CommonFG disappeared in 1.10.1. Therefore version 1.10.1 was incompatible with Monarch3.
In both 1.10 and 1.8, H5Object inherits from H5Location. In 1.8, H5Location contained functions to interact with H5Attributes, and in 1.10.1 those functions were moved to H5Object. Since we used H5Location pointers to manipulate attributes, which was incompatible with Monarch3.
The Solution
A full upgrade to HDF5 1.10 will require two changes (in this order):
References and pointers to H5Location will need to change to H5Object.
References and pointers to CommonFG will need to change to H5Location.
The Current Situation
As of this writing (June 13, 2017), HDF5 1.10 is not fully available in the relevant package managers:
Homebrew (macOS) has 1.10.1
Debian 8 (stable; on most lab servers) has 1.8.13 and is currently the limiting factor
Debian 9 (testing) has 1.10.0.patch1, which will allow us to move forward on this upgrade
Ubuntu 14.04 (LTS; on zeppelin) has 1.8.11, which isn't even sufficient for Monarch3 as is; therefore we're using our own installation of HDF5, which we could switch to 1.10
So the current limitation is Debian, which is our standard linux flavor. Fortunately, Debian 9 is scheduled for release on June 17, 2017, at the end of this week. Once we've upgraded to Debian 9, we can proceed with the full upgrade to requiring HDF5 1.10. While the release of Debian 9 is soon, I don't assume that we'll upgrade our servers immediately. Therefore I will proceed with a temporary fix to Monarch3.
The Temporary Fix
[x] Replace H5Location with HAS_ATTR_IFC
[x] Replace H5CommonFG with HAS_GRP_IFC
[x] Add a test to the build to check if CommonFG exists; if it does not, then we have 1.10.1 or later
[x] If we have 1.10.1 or later, define HAS_ATTR_IFC as H5::H5Object and define HAS_GRP_IFC as H5::H5Object
[x] If we have 1.10.0 or earlier, define HAS_ATTR_IFC as H5::H5Location and define HAS_GRP_IFC as H5::CommonFG
From Temporary Fix to Full Upgrade
[ ] Replace HAS_ATTR_IFC and HAS_GRP_IFC with H5::H5Object
[ ] Remove the build test and preprocessor definitions
The Problem
Monarch3 was originally written for the HDF5 1.8 API, and with the introduction of v1.10.1, two things broke:
In HDF5 1.8 we had class H5::CommonFG that contained a bunch of functions that are common to H5Files and H5Groups. Those functions were added to H5Location in v1.10, and CommonFG disappeared in 1.10.1. Therefore version 1.10.1 was incompatible with Monarch3.
In both 1.10 and 1.8, H5Object inherits from H5Location. In 1.8, H5Location contained functions to interact with H5Attributes, and in 1.10.1 those functions were moved to H5Object. Since we used H5Location pointers to manipulate attributes, which was incompatible with Monarch3.
The Solution
A full upgrade to HDF5 1.10 will require two changes (in this order):
References and pointers to H5Location will need to change to H5Object.
References and pointers to CommonFG will need to change to H5Location.
The Current Situation
As of this writing (June 13, 2017), HDF5 1.10 is not fully available in the relevant package managers:
Homebrew (macOS) has 1.10.1
Debian 8 (stable; on most lab servers) has 1.8.13 and is currently the limiting factor
Debian 9 (testing) has 1.10.0.patch1, which will allow us to move forward on this upgrade
Ubuntu 14.04 (LTS; on zeppelin) has 1.8.11, which isn't even sufficient for Monarch3 as is; therefore we're using our own installation of HDF5, which we could switch to 1.10
So the current limitation is Debian, which is our standard linux flavor. Fortunately, Debian 9 is scheduled for release on June 17, 2017, at the end of this week. Once we've upgraded to Debian 9, we can proceed with the full upgrade to requiring HDF5 1.10. While the release of Debian 9 is soon, I don't assume that we'll upgrade our servers immediately. Therefore I will proceed with a temporary fix to Monarch3.
The Temporary Fix
H5Location
withHAS_ATTR_IFC
H5CommonFG
withHAS_GRP_IFC
HAS_ATTR_IFC
asH5::H5Object
and defineHAS_GRP_IFC
asH5::H5Object
HAS_ATTR_IFC
asH5::H5Location
and defineHAS_GRP_IFC
asH5::CommonFG
From Temporary Fix to Full Upgrade
HAS_ATTR_IFC
andHAS_GRP_IFC
withH5::H5Object