[CMake] FindHDF5.cmake improvement proposal

Antonio Valentino antonio.valentino at tiscali.it
Tue Mar 2 02:42:28 EST 2010


Hi list,
pasted below a snippet I use in a project of mine to handle HDF5
library.
The purpose is to improve detection of required library zlib and szip
in cases when the HDF5_C_COMPILER_EXECUTABLE is not available e.g. when
one try to use pre-build HDF5 libraries on win32.
The snippet also adds an option (WIN32 only) to set defines required by
HDF5 dlls. This part could be further automated with some regexp (i
suppose).

I'm not a cmake expert so I would like to receive some comment by users
more expert than me.
If the approach is correct I could try to submit a patch that
integrates the snippet in the FindHDF5.cmake module.



FIND_PACKAGE(HDF5 COMPONENTS CXX)
IF(HDF5_FOUND)
 IF(NOT HDF5_C_COMPILER_EXECUTABLE)
  # Check if ${HDF5_LIBRARY} requires zlib and/or szlib library
  FIND_FILE(H5PUBCONF_H H5pubconf.h ${HDF5_INCLUDE_DIR})
  IF(H5PUBCONF_H)
   MESSAGE(STATUS "H5PUBCONF_H: ${H5PUBCONF_H}")
   FILE(READ ${H5PUBCONF_H} H5CONFIG)

   STRING(REGEX MATCH "\n#define H5_HAVE_ZLIB_H"
          HDF5_NEEDS_ZLIB ${H5CONFIG})
   STRING(REGEX MATCH "\n#define H5_HAVE_SZLIB_H"
          HDF5_NEEDS_SZLIB ${H5CONFIG})
  ELSE(H5PUBCONF_H)
   MESSAGE(STATUS "No H5PUBCONF_H found.")
  ENDIF(H5PUBCONF_H)

  IF(HDF5_NEEDS_ZLIB)
   MESSAGE(STATUS "Testing if HDF5 needs zlib -- yes")
   FIND_PACKAGE(ZLIB REQUIRED)
   SET(HDF5_INCLUDE_DIR ${HDF5_INCLUDE_DIR} ${ZLIB_INCLUDE_DIRS})
   SET(HDF5_LIBRARIES ${HDF5_LIBRARIES} ${ZLIB_LIBRARIES})
  ELSE(HDF5_NEEDS_ZLIB)
   MESSAGE(STATUS "Testing if HDF5 needs zlib -- no")
  ENDIF(HDF5_NEEDS_ZLIB)

  IF(HDF5_NEEDS_SZLIB)
   MESSAGE(STATUS "Testing if HDF5 needs szip lib -- yes")
   FIND_PACKAGE(SZIP REQUIRED)
   SET(HDF5_INCLUDE_DIR ${HDF5_INCLUDE_DIR} ${SZIP_INCLUDE_DIRS})
   SET(HDF5_LIBRARIES ${HDF5_LIBRARIES} ${SZIP_LIBRARIES})
  ELSE(HDF5_NEEDS_SZLIB) 
   MESSAGE(STATUS "Testing if HDF5 needs szip lib -- no")
  ENDIF(HDF5_NEEDS_SZLIB)

  IF(WIN32)
   OPTION(HDF5_USE_DLL "Enable pre-processor macros for HDF5 DLLs."
          OFF)
   IF(HDF5_USE_DLL)
    ADD_DEFINITIONS(-D_HDF5USEDLL_
                    -DHDF5CPP_USEDLL
                    -D_HDF5USEHLDLL_
                    -DHDF5USE_HLCPPDLL)
   ENDIF(HDF5_USE_DLL)
  ENDIF(WIN32)
 ENDIF(NOT HDF5_C_COMPILER_EXECUTABLE)

 INCLUDE_DIRECTORIES(${HDF5_INCLUDE_DIR})
 LINK_DIRECTORIES(${HDF5_LIBRARY_DIRS})
 ADD_DEFINITIONS(-DHAVE_HDF5)
ENDIF(HDF5_FOUND)



best regards

-- 
Antonio Valentino


More information about the CMake mailing list