Mike, I did not mean to imply that the filenames determine how they were built, the filenames can be made different to allow installation in the same folder. This define was (until now) the only issue keeping the include files from being installed in the same "include folder". I had thought I solved it for CMake use and now see otherwise.
Also, I now see and understand that there are a mixture of configuration and machine defines being stored in the file and I will put the define back into the H5pubconf.h for the next release (there might be a patch released soon anyways). I was hoping for an elegant solution to the "install multiple configurations" issue, but there might not be one. Allen On Wednesday, November 21, 2012 09:17:20 AM Michael Jackson wrote: > So for me to compile HDF5 1.8.10 as DLLs AND for me to use those libraries > in another project my own project somehow needs to define > H5_BUILT_AS_DYNAMIC_LIB in order for the proper #define 's to be enabled. > This seems a bit "chicken-and-egg" to me. How do I know if HDF5 was built > as a dynamic or static library? Relying on the filename is NOT a 100% way > of determining this. > > Looking through the HDF5 headers we get this chain. > > H5public.h includes H5pubconf.h and also includes H5api_adpt.h which is the > file that mainly needs the H5_BUILT_AS_DYNAMIC_LIB to be defined properly. > > We can generate a new header file that gets included in H5public.h BEFORE > the H5api_adpt.h file. > > We could generate a new file that is included at the top of H5api_adpt.h > > The H5_BUILT_AS_DYNAMIC_LIB is basically defined in hdf5-config.cmake (line > 24) that gets installed when HDF5 is built with CMake which would work for > my Windows and OS X builds but some of my linux distributions include their > own hdf5 installations that may NOT be built with CMake at which point I > guess I can fall back on file naming again. > > Just my thoughts. > -- > Mike Jackson <www.bluequartz.net> > > On Nov 20, 2012, at 3:41 PM, Allen D Byrne wrote: > > Mike, > > > > Sorry didn't mean to confuse - debug/release - I was thinking globally > > about the issue, obviously these defines have nothing to do with > > debug/release other then creating another set of folders. The > > find_package would happen after hdf5 is installed and using cmake to read > > the hdf5 cmake configuration. > > > > I was hoping to remove the build specific defines in H5pubconf.h to > > somewhere else, because these defines are the only difference between > > static/dynamic installs. Libraries are named unique enough. > > > > Of course thinking about it now, there are other optional components in > > H5pubconf.h! (szip/zlib/parallel...) > > > > Allen > > > > On Tuesday, November 20, 2012 03:27:16 PM Michael Jackson wrote: > >> Which "FIND_PACKAGE" sets that variable? > >> > >> Inside of the Top level CMakeLists.txt file I have this now. > >> > >> OPTION (BUILD_SHARED_LIBS "Build Shared Libraries" OFF) > >> set(H5_BUILT_AS_DYNAMIC_LIB 0) > >> set(H5_BUILT_AS_STATIC_LIB 1) > >> SET (LIB_TYPE STATIC) > >> SET (H5_ENABLE_SHARED_LIB NO) > >> SET (H5_ENABLE_STATIC_LIB NO) > >> IF (BUILD_SHARED_LIBS) > >> > >> SET (LIB_TYPE SHARED) > >> ADD_DEFINITIONS (-DH5_BUILT_AS_DYNAMIC_LIB) > >> set(H5_BUILT_AS_DYNAMIC_LIB 1) > >> set(H5_BUILT_AS_STATIC_LIB 0) > >> SET (H5_ENABLE_SHARED_LIB YES) > >> > >> ELSE (BUILD_SHARED_LIBS) > >> > >> ADD_DEFINITIONS (-DH5_BUILT_AS_STATIC_LIB) > >> set(H5_BUILT_AS_DYNAMIC_LIB 0) > >> set(H5_BUILT_AS_STATIC_LIB 1) > >> SET (H5_ENABLE_STATIC_LIB YES) > >> IF (NOT WIN32) > >> > >> # should this be a user setting : Everyone uses it anyway ? > >> ADD_DEFINITIONS (-DPIC) > >> > >> ENDIF (NOT WIN32) > >> > >> ENDIF (BUILD_SHARED_LIBS) > >> > >> > >> Then in config/cmake/H5pubconf.h.in I added the following: > >> > >> /* Defined if HDF5 was built with CMake AND build as a shared library */ > >> #cmakedefine H5_BUILT_AS_DYNAMIC_LIB @H5_BUILT_AS_DYNAMIC_LIB@ > >> > >> /* Defined if HDF5 was built with CMake AND build as a static library */ > >> #cmakedefine H5_BUILT_AS_STATIC_LIB @H5_BUILT_AS_STATIC_LIB@ > >> > >> Which now allows everything to work. I am still confused why the change > >> was > >> needed for Debug/Release? Ironically enough I'm the original person to > >> put > >> the H5_BUILT_AS_DYNAMIC_LIB flag in the header file because when on > >> windows > >> and using CMake in another project that includes HDF5 I needed to be able > >> to better figure out how the libraries were built so I could make > >> decisions > >> on what needs to be copied into my deployment package. > >> > >> ___________________________________________________________ > >> Mike Jackson Principal Software Engineer > >> BlueQuartz Software Dayton, Ohio > >> [email protected] www.bluequartz.net > >> > >> On Nov 20, 2012, at 2:36 PM, Allen D Byrne wrote: > >>> The problem was that I attempted to allow multiple installs > >>> (debug/release, > >>> static/dynamic) of hdf5. Everything works great with cmake, because the > >>> value is set by the FIND_PACKAGE command. However, I failed to account > >>> for the non- cmake process. I wanted to eliminate the duplicate include > >>> folders that would result from multiple installs. > >>> > >>> What to do with that definition is the issue! > >>> > >>> Allen > >>> > >>> On Tuesday, November 20, 2012 02:04:21 PM Michael Jackson wrote: > >>>> Hmm > >>>> > >>>> Looking at the H5pubconf.h for the 1.8.9 and 1.8.10 builds it would > >>>> seem > >>>> > >>>> that there were some merge issues maybe? Otherwise why was that > >>>> definition > >>>> removed? Not that I run the tests much (I assume if HDF5 is release > >>>> then > >>>> all the tests are passing but how would any of the tests run if nothing > >>>> to > >>>> can correctly? Odd. Let me take a look. Can we get this into the first > >>>> patch release if I figure out what went wrong? > >>>> ___________________________________________________________ > >>>> Mike Jackson Principal Software Engineer > >>>> BlueQuartz Software Dayton, Ohio > >>>> [email protected] www.bluequartz.net > >>>> > >>>> On Nov 20, 2012, at 1:56 PM, Allen D Byrne wrote: > >>>>> Mike, > >>>>> > >>>>> Are you using CMake to create the hdf5 library? There is an issue with > >>>>> a > >>>>> definition that needs to be solved for the next release (the pre-built > >>>>> binaries have this define in the H5pubconf.h). > >>>>> Add > >>>>> > >>>>> #define H5_BUILT_AS_DYNAMIC_LIB 1 > >>>>> > >>>>> in your H5pubconf.h file after building HDF5. > >>>>> > >>>>> Allen > > _______________________________________________ > Hdf-forum is for HDF software users discussion. > [email protected] > http://mail.hdfgroup.org/mailman/listinfo/hdf-forum_hdfgroup.org _______________________________________________ Hdf-forum is for HDF software users discussion. [email protected] http://mail.hdfgroup.org/mailman/listinfo/hdf-forum_hdfgroup.org
