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

Reply via email to