From: malaterre Date: Thu, 20 Jul 2006 21:59:01 +0000 (+0000) Subject: ENH: Adding ExportConfiguration X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=commitdiff_plain;h=5b7a83ce2028f8176a720c4b2723318da23d9e2b;p=gdcm.git ENH: Adding ExportConfiguration --- diff --git a/CMake/ExportConfiguration/CMakeLists.txt b/CMake/ExportConfiguration/CMakeLists.txt new file mode 100644 index 00000000..bb4b0dc2 --- /dev/null +++ b/CMake/ExportConfiguration/CMakeLists.txt @@ -0,0 +1,179 @@ +# Generate the GDCMConfig.cmake file in the build tree. Also configure +# one for installation. The file tells external projects how to use +# GDCM. + +# Help store a literal dollar in a string. CMake 2.2 allows escaped +# dollars but we have to support CMake 2.0. +SET(DOLLAR "$") + +#----------------------------------------------------------------------------- +# Settings shared between the build tree and install tree. + +EXPORT_LIBRARY_DEPENDENCIES( + ${GDCM_BINARY_DIR}/GDCMLibraryDepends.cmake) +INCLUDE(${CMAKE_ROOT}/Modules/CMakeExportBuildSettings.cmake) +CMAKE_EXPORT_BUILD_SETTINGS( + ${GDCM_BINARY_DIR}/GDCMBuildSettings.cmake) + +IF(NOT GDCM_INSTALL_NO_DEVELOPMENT) + INSTALL_FILES(${GDCM_INSTALL_PACKAGE_DIR} FILES + ${CMAKE_CURRENT_SOURCE_DIR}/UseGDCM.cmake + ${GDCM_BINARY_DIR}/GDCMLibraryDepends.cmake + ${GDCM_BINARY_DIR}/GDCMBuildSettings.cmake + ) +ENDIF(NOT GDCM_INSTALL_NO_DEVELOPMENT) + +#----------------------------------------------------------------------------- +# Settings specific to the build tree. + +# The install-only section is empty for the build tree. +SET(GDCM_CONFIG_INSTALL_ONLY) + +# The "use" file. +SET(GDCM_USE_FILE_CONFIG + ${CMAKE_CURRENT_SOURCE_DIR}/UseGDCM.cmake) + +# The build settings file. +SET(GDCM_BUILD_SETTINGS_FILE_CONFIG + ${GDCM_BINARY_DIR}/GDCMBuildSettings.cmake) + +# The library directories. +SET(GDCM_LIBRARY_DIRS_CONFIG ${GDCM_LIBRARY_DIRS}) + +# The runtime directories. +SET(GDCM_RUNTIME_DIRS_CONFIG ${GDCM_RUNTIME_DIRS}) + +# The include directories. +SET(GDCM_INCLUDE_DIRS_CONFIG ${GDCM_INCLUDE_PATH}) + +# The library dependencies file. +SET(GDCM_LIBRARY_DEPENDS_FILE + ${GDCM_BINARY_DIR}/GDCMLibraryDepends.cmake) + +# The CMake macros dir. +SET(GDCM_CMAKE_DIR_CONFIG + ${GDCM_CMAKE_DIR}) + +# The VTK options. +SET(GDCM_VTK_DIR_CONFIG ${VTK_DIR}) + +# The build configuration information. +SET(GDCM_CONFIGURATION_TYPES_CONFIG ${GDCM_CONFIGURATION_TYPES}) +SET(GDCM_BUILD_TYPE_CONFIG ${CMAKE_BUILD_TYPE}) + +# Configure GDCMConfig.cmake for the build tree. +CONFIGURE_FILE( + ${CMAKE_CURRENT_SOURCE_DIR}/GDCMConfig.cmake.in + ${GDCM_BINARY_DIR}/GDCMConfig.cmake @ONLY IMMEDIATE) + +#----------------------------------------------------------------------------- +# Settings specific to the install tree. + +# The "use" file. +SET(GDCM_USE_FILE_CONFIG + ${DOLLAR}{GDCM_INSTALL_PREFIX}${GDCM_INSTALL_PACKAGE_DIR}/UseGDCM.cmake) + +# The build settings file. +SET(GDCM_BUILD_SETTINGS_FILE_CONFIG + ${DOLLAR}{GDCM_INSTALL_PREFIX}${GDCM_INSTALL_PACKAGE_DIR}/GDCMBuildSettings.cmake) + +# The library directories. +IF(CYGWIN AND GDCM_BUILD_SHARED_LIBS) + # In Cygwin programs directly link to the .dll files. + SET(GDCM_LIBRARY_DIRS_CONFIG + ${DOLLAR}{GDCM_INSTALL_PREFIX}${GDCM_INSTALL_BIN_DIR}) +ELSE(CYGWIN AND GDCM_BUILD_SHARED_LIBS) + SET(GDCM_LIBRARY_DIRS_CONFIG + ${DOLLAR}{GDCM_INSTALL_PREFIX}${GDCM_INSTALL_LIB_DIR}) +ENDIF(CYGWIN AND GDCM_BUILD_SHARED_LIBS) + +# The runtime directories. +IF(WIN32) + SET(GDCM_RUNTIME_DIRS_CONFIG + ${DOLLAR}{GDCM_INSTALL_PREFIX}${GDCM_INSTALL_BIN_DIR}) +ELSE(WIN32) + SET(GDCM_RUNTIME_DIRS_CONFIG + ${DOLLAR}{GDCM_INSTALL_PREFIX}${GDCM_INSTALL_LIB_DIR}) +ENDIF(WIN32) + +# The include directories. +SET(GDCM_INCLUDE_DIRS_CONFIG + ${DOLLAR}{GDCM_INSTALL_PREFIX}${GDCM_INSTALL_INCLUDE_DIR}) + +# The library dependencies file. +SET(GDCM_LIBRARY_DEPENDS_FILE + ${DOLLAR}{GDCM_INSTALL_PREFIX}${GDCM_INSTALL_PACKAGE_DIR}/GDCMLibraryDepends.cmake) + +# The CMake macros dir. +SET(GDCM_CMAKE_DIR_CONFIG + ${DOLLAR}{GDCM_INSTALL_PREFIX}${GDCM_INSTALL_PACKAGE_DIR}/CMake) + +# The VTK options. +# If VTK_BINARY_DIR is set, then GDCM is part of a larger parent project +# that also builds VTK. In that case, GDCM_VTK_INSTALL_PACKAGE_DIR +# should be set to the value of VTK_INSTALL_PACKAGE_DIR. Otherwise, if not set, +# then we are using an outside VTK whose location will not change when we +# install. +IF(GDCM_VTK) + IF(VTK_BINARY_DIR) + IF(NOT GDCM_VTK_INSTALL_PACKAGE_DIR) + MESSAGE( + "GDCM_VTK_INSTALL_PACKAGE_DIR must be set by the parent project to the value of VTK_INSTALL_PACKAGE_DIR it uses to configure VTK.") + ENDIF(NOT GDCM_VTK_INSTALL_PACKAGE_DIR) + SET(GDCM_VTK_DIR_CONFIG ${GDCM_VTK_INSTALL_PACKAGE_DIR}) + ELSE(VTK_BINARY_DIR) + SET(GDCM_VTK_DIR_CONFIG ${VTK_DIR}) + ENDIF(VTK_BINARY_DIR) +ENDIF(GDCM_VTK) + +# The build configuration information. +# The install tree only has one configuration. +SET(GDCM_CONFIGURATION_TYPES_CONFIG) + +# Configure GDCMConfig.cmake for the install tree. + +# Construct the proper number of GET_FILENAME_COMPONENT(... PATH) +# calls to compute the installation prefix from GDCM_DIR. +STRING(REGEX REPLACE "/" ";" GDCM_INSTALL_PACKAGE_DIR_COUNT + "${GDCM_INSTALL_PACKAGE_DIR}") +SET(GDCM_CONFIG_INSTALL_ONLY " +# Compute the installation prefix from GDCM_DIR. +SET(GDCM_INSTALL_PREFIX \"${DOLLAR}{GDCM_DIR}\") +") +FOREACH(p ${GDCM_INSTALL_PACKAGE_DIR_COUNT}) + SET(GDCM_CONFIG_INSTALL_ONLY + "${GDCM_CONFIG_INSTALL_ONLY}GET_FILENAME_COMPONENT(GDCM_INSTALL_PREFIX \"${DOLLAR}{GDCM_INSTALL_PREFIX}\" PATH)\n" + ) +ENDFOREACH(p) + +IF(CMAKE_CONFIGURATION_TYPES) + # There are multiple build configurations. Configure one + # GDCMConfig.cmake for each configuration. + FOREACH(config ${CMAKE_CONFIGURATION_TYPES}) + SET(GDCM_BUILD_TYPE_CONFIG ${config}) + CONFIGURE_FILE( + ${CMAKE_CURRENT_SOURCE_DIR}/GDCMConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/${config}/GDCMConfig.cmake + @ONLY IMMEDIATE) + ENDFOREACH(config) + + # Install the config file corresponding to the build configuration + # specified when building the install target. The BUILD_TYPE variable + # will be set while CMake is processing the install files. + IF(NOT GDCM_INSTALL_NO_DEVELOPMENT) + INSTALL_FILES(${GDCM_INSTALL_PACKAGE_DIR} FILES + ${CMAKE_CURRENT_BINARY_DIR}/${DOLLAR}{BUILD_TYPE}/GDCMConfig.cmake) + ENDIF(NOT GDCM_INSTALL_NO_DEVELOPMENT) +ELSE(CMAKE_CONFIGURATION_TYPES) + # There is only one build configuration. Configure one GDCMConfig.cmake. + SET(GDCM_BUILD_TYPE_CONFIG ${CMAKE_BUILD_TYPE}) + CONFIGURE_FILE( + ${CMAKE_CURRENT_SOURCE_DIR}/GDCMConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/GDCMConfig.cmake @ONLY IMMEDIATE) + + # Setup an install rule for the config file. + IF(NOT GDCM_INSTALL_NO_DEVELOPMENT) + INSTALL_FILES(${GDCM_INSTALL_PACKAGE_DIR} FILES + ${CMAKE_CURRENT_BINARY_DIR}/GDCMConfig.cmake) + ENDIF(NOT GDCM_INSTALL_NO_DEVELOPMENT) +ENDIF(CMAKE_CONFIGURATION_TYPES) diff --git a/CMake/ExportConfiguration/GDCMConfig.cmake.in b/CMake/ExportConfiguration/GDCMConfig.cmake.in new file mode 100644 index 00000000..28d09752 --- /dev/null +++ b/CMake/ExportConfiguration/GDCMConfig.cmake.in @@ -0,0 +1,78 @@ +#----------------------------------------------------------------------------- +# +# GDCMConfig.cmake - CMake configuration file for external projects. +# +# This file is configured by GDCM and used by the UseGDCM.cmake +# module to load GDCM's settings for an external project. +@GDCM_CONFIG_INSTALL_ONLY@ +# The GDCM version number. +SET(GDCM_MAJOR_VERSION "@GDCM_MAJOR_VERSION@") +SET(GDCM_MINOR_VERSION "@GDCM_MINOR_VERSION@") + +# The libraries. +SET(GDCM_LIBRARIES "@GDCM_LIBRARIES@") + +# The CMake macros dir. +SET(GDCM_CMAKE_DIR "@GDCM_CMAKE_DIR_CONFIG@") + +# The configuration options. +SET(GDCM_BUILD_SHARED_LIBS "@GDCM_BUILD_SHARED_LIBS@") +SET(GDCM_VTK "@GDCM_VTK@") + +# The C and C++ flags added to the cmake-configured flags. +SET(GDCM_REQUIRED_C_FLAGS + "@GDCM_REQUIRED_C_FLAGS@") +SET(GDCM_REQUIRED_CXX_FLAGS + "@GDCM_REQUIRED_CXX_FLAGS@") +SET(GDCM_REQUIRED_EXE_LINKER_FLAGS + "@GDCM_REQUIRED_EXE_LINKER_FLAGS@") +SET(GDCM_REQUIRED_SHARED_LINKER_FLAGS + "@GDCM_REQUIRED_SHARED_LINKER_FLAGS@") +SET(GDCM_REQUIRED_MODULE_LINKER_FLAGS + "@GDCM_REQUIRED_MODULE_LINKER_FLAGS@") + +# The "use" file. +SET(GDCM_USE_FILE "@GDCM_USE_FILE_CONFIG@") + +# The build settings file. +SET(GDCM_BUILD_SETTINGS_FILE "@GDCM_BUILD_SETTINGS_FILE_CONFIG@") + +# The library directories. +SET(GDCM_LIBRARY_DIRS "@GDCM_LIBRARY_DIRS_CONFIG@") + +# The runtime directories. +# Note that if GDCM_CONFIGURATION_TYPES is set (see below) then +# these directories will be the parent directories under which there will +# be a directory of runtime binaries for each configuration type. +SET(GDCM_RUNTIME_DIRS "@GDCM_RUNTIME_DIRS_CONFIG@") + +# The include directories. +SET(GDCM_INCLUDE_DIRS "@GDCM_INCLUDE_DIRS_CONFIG@") + +# The library dependencies file. +IF(NOT GDCM_NO_LIBRARY_DEPENDS AND + EXISTS "@GDCM_LIBRARY_DEPENDS_FILE@") + INCLUDE("@GDCM_LIBRARY_DEPENDS_FILE@") +ENDIF(NOT GDCM_NO_LIBRARY_DEPENDS AND + EXISTS "@GDCM_LIBRARY_DEPENDS_FILE@") + +# The VTK options. +IF(GDCM_VTK) + SET(GDCM_VTK_DIR "@GDCM_VTK_DIR_CONFIG@") +ENDIF(GDCM_VTK) + +# An install tree always provides one build configuration. +# A build tree may provide either one or multiple build +# configurations depending on the CMake generator used. Since +# this project can be used either from a build tree or an install tree it +# is useful for outside projects to know the configurations available. +# If this GDCMConfig.cmake is in an install tree +# GDCM_CONFIGURATION_TYPES will be empty and GDCM_BUILD_TYPE +# will be set to the value of CMAKE_BUILD_TYPE used to build +# GDCM. If GDCMConfig.cmake is in a build tree +# then GDCM_CONFIGURATION_TYPES and GDCM_BUILD_TYPE will +# have values matching CMAKE_CONFIGURATION_TYPES and CMAKE_BUILD_TYPE +# for that build tree (only one will ever be set). +SET(GDCM_CONFIGURATION_TYPES @GDCM_CONFIGURATION_TYPES_CONFIG@) +SET(GDCM_BUILD_TYPE @GDCM_BUILD_TYPE_CONFIG@) + diff --git a/CMake/ExportConfiguration/UseGDCM.cmake b/CMake/ExportConfiguration/UseGDCM.cmake new file mode 100644 index 00000000..e88e987e --- /dev/null +++ b/CMake/ExportConfiguration/UseGDCM.cmake @@ -0,0 +1,49 @@ +# +# This module is provided as GDCM_USE_FILE by GDCMConfig.cmake. +# It can be INCLUDEd in a project to load the needed compiler and linker +# settings to use GDCM: +# FIND_PACKAGE(GDCM REQUIRED) +# INCLUDE(${GDCM_USE_FILE}) + +IF(NOT GDCM_USE_FILE_INCLUDED) + SET(GDCM_USE_FILE_INCLUDED 1) + + # Load the compiler settings used for GDCM. + IF(GDCM_BUILD_SETTINGS_FILE) + INCLUDE(${CMAKE_ROOT}/Modules/CMakeImportBuildSettings.cmake) + CMAKE_IMPORT_BUILD_SETTINGS(${GDCM_BUILD_SETTINGS_FILE}) + ENDIF(GDCM_BUILD_SETTINGS_FILE) + + # Add compiler flags needed to use GDCM. + SET(CMAKE_C_FLAGS + "${CMAKE_C_FLAGS} ${GDCM_REQUIRED_C_FLAGS}") + SET(CMAKE_CXX_FLAGS + "${CMAKE_CXX_FLAGS} ${GDCM_REQUIRED_CXX_FLAGS}") + SET(CMAKE_EXE_LINKER_FLAGS + "${CMAKE_EXE_LINKER_FLAGS} ${GDCM_REQUIRED_EXE_LINKER_FLAGS}") + SET(CMAKE_SHARED_LINKER_FLAGS + "${CMAKE_SHARED_LINKER_FLAGS} ${GDCM_REQUIRED_SHARED_LINKER_FLAGS}") + SET(CMAKE_MODULE_LINKER_FLAGS + "${CMAKE_MODULE_LINKER_FLAGS} ${GDCM_REQUIRED_MODULE_LINKER_FLAGS}") + + # Add include directories needed to use GDCM. + INCLUDE_DIRECTORIES(${GDCM_INCLUDE_DIRS}) + + # Add link directories needed to use GDCM. + LINK_DIRECTORIES(${GDCM_LIBRARY_DIRS}) + + # Add cmake module path. + SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${GDCM_CMAKE_DIR}") + + # Use VTK. + IF(GDCM_VTK) + SET(VTK_DIR ${GDCM_VTK_DIR}) + FIND_PACKAGE(VTK) + IF(VTK_FOUND) + INCLUDE(${VTK_USE_FILE}) + ELSE(VTK_FOUND) + MESSAGE("VTK not found in GDCM_VTK_DIR=\"${GDCM_VTK_DIR}\".") + ENDIF(VTK_FOUND) + ENDIF(GDCM_VTK) + +ENDIF(NOT GDCM_USE_FILE_INCLUDED)