Hi Will, Il giorno Tue, 02 Mar 2010 09:07:48 -0700 Will Dicharry <wdicha...@stellarscience.com> ha scritto:
> Antonio Valentino wrote: > > 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. > > Hi Antonio, > > I'm the maintainer of the FindHDF5 module, and I think your additions > would be useful when the wrapper compiler is not found (or if you > happen to be on Windows, as much of the command line stripping code > won't work there). I have a couple of questions: > > 1. Someone else should weigh in on this: Is there any problem with > calling other find modules from within find modules? I don't think > there should be a problem, but I've never tried it. I had the same doubt but, grepping a bit, it seems to be OK to use find_package inside a find module. $ grep find_package /usr/share/cmake-2.8/Modules/*.cmake | grep -v '#' /usr/share/cmake-2.8/Modules/ExternalProject.cmake: find_package(CVS) /usr/share/cmake-2.8/Modules/ExternalProject.cmake: find_package(Subversion) /usr/share/cmake-2.8/Modules/FindBLAS.cmake: find_package(Threads) /usr/share/cmake-2.8/Modules/FindBLAS.cmake: find_package(Threads REQUIRED) /usr/share/cmake-2.8/Modules/FindCUDA.cmake:find_package_handle_standard_args(CUDA DEFAULT_MSG /usr/share/cmake-2.8/Modules/FindCVS.cmake:find_package_handle_standard_args(CVS DEFAULT_MSG CVS_EXECUTABLE) /usr/share/cmake-2.8/Modules/FindHDF5.cmake:find_package_handle_standard_args( HDF5 DEFAULT_MSG /usr/share/cmake-2.8/Modules/FindLAPACK.cmake: find_package(BLAS) /usr/share/cmake-2.8/Modules/FindLAPACK.cmake: find_package(BLAS REQUIRED) /usr/share/cmake-2.8/Modules/FindLAPACK.cmake: find_package(Threads REQUIRED) /usr/share/cmake-2.8/Modules/FindMPI.cmake:find_package_handle_standard_args(MPI DEFAULT_MSG MPI_LIBRARY MPI_INCLUDE_PATH) /usr/share/cmake-2.8/Modules/FindOpenMP.cmake:find_package_handle_standard_args(OpenMP DEFAULT_MSG /usr/share/cmake-2.8/Modules/FindOpenSceneGraph.cmake: "Calling find_package(${_osg_module} ${_osg_required} ${_osg_quiet})") /usr/share/cmake-2.8/Modules/FindOpenSceneGraph.cmake: find_package(${_osg_module} ${_osg_quiet}) /usr/share/cmake-2.8/Modules/FindPNG.cmake:find_package(ZLIB ${_FIND_ZLIB_ARG}) /usr/share/cmake-2.8/Modules/FindPNG.cmake:find_package_handle_standard_args(PNG DEFAULT_MSG PNG_LIBRARY PNG_PNG_INCLUDE_DIR) > 2. For your SZip portion to work, there would need to be a > FindSZip.cmake in system modules directory. Do you have one that you > can contribute? Oh, sorry. I found it on gitorious.org http://gitorious.org/hdf5/hdf5-v18/blobs/master/Resources/CMake/FindSZIP.cmake It seems that someone is going to Cmake-ify HDF5 itself. I suppose the license is the same as HDF5 but I should check. > 3. At the end of the module, you call include_directories, > link_directories, and add_definitions. It is customary to provide > only variables and let the find module caller decide what to do with > them. Also, I believe the use of link_directories is deprecated in > favor of returning full paths to the found libraries. Would you be > adverse to these changes? No. I just posted a snippet I use in the CMakeLists.txt of my project. Of course it requires some fix in order to be included in the FindHDF5.cmake module. Anyway I was not aware of the link_directories deprecation. Il'' fix it as sun as I can. > For the Windows portion, I'll take any help I can get. I work almost > entirely on Unix and Linux systems, so I'm more than happy to have > Windows support from someone more experienced than I in that arena. Well, unfortunately also my development job is mainly on Linux. In this days I'm performing a port so I'm messing a little bit on windows too. > Thanks for your help with this! > -- Will > > > > > > > > > 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) ciao -- Antonio Valentino _______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake