GenerateConfig.cmake
Go to the documentation of this file.
00001 ############################################################################## 00002 # @file GenerateConfig.cmake 00003 # @brief Generates package configuration files. 00004 # 00005 # This CMake script configures the \<package\>Config.cmake et al. files, 00006 # once for the build tree and once for the install tree. Variables with a 00007 # _CONFIG suffix are replaced in the default template file by either the 00008 # value for the build or the install tree, respectively. 00009 # 00010 # If present, this script includes the @c PROJECT_CONFIG_DIR/ConfigBuild.cmake 00011 # and/or @c PROJECT_CONFIG_DIR/ConfigInstall.cmake file before configuring the 00012 # Config.cmake.in template. If a file @c PROJECT_CONFIG_DIR/Config.cmake.in 00013 # exists, it is used as template. Otherwise, the default template file is used. 00014 # 00015 # Similarly, if the file @c PROJECT_CONFIG_DIR/ConfigVersion.cmake.in exists, 00016 # it is used as template for the \<package\>ConfigVersion.cmake file. The same 00017 # applies to ConfigUse.cmake.in. 00018 # 00019 # Copyright (c) 2011, 2012 University of Pennsylvania. All rights reserved.<br /> 00020 # See https://www.cbica.upenn.edu/sbia/software/license.html or COPYING file. 00021 # 00022 # Contact: SBIA Group <sbia-software at uphs.upenn.edu> 00023 # 00024 # @ingroup CMakeTools 00025 ############################################################################## 00026 00027 # ============================================================================ 00028 # names of output files 00029 # ============================================================================ 00030 00031 # Attention: This has to be done before configuring any files such that these 00032 # variables can be used by the template files. 00033 00034 ## @addtogroup CMakeUtilities 00035 # @{ 00036 00037 00038 ## @brief Package name. 00039 set (CONFIG_PREFIX "${PROJECT_PACKAGE_CONFIG_PREFIX}") 00040 ## @brief Name of the CMake package configuration file. 00041 set (CONFIG_FILE "${CONFIG_PREFIX}Config.cmake") 00042 ## @brief Name of the CMake package version file. 00043 set (VERSION_FILE "${CONFIG_PREFIX}ConfigVersion.cmake") 00044 ## @brief Name of the CMake package use file. 00045 set (USE_FILE "${CONFIG_PREFIX}Use.cmake") 00046 ## @brief Name of the CMake target exports file. 00047 set (EXPORTS_FILE "${CONFIG_PREFIX}Exports.cmake") 00048 ## @brief Name of the CMake target exports file for custom targets. 00049 set (CUSTOM_EXPORTS_FILE "${CONFIG_PREFIX}CustomExports.cmake") 00050 00051 00052 ## @} 00053 # end of Doxygen group 00054 00055 # ============================================================================ 00056 # export build targets 00057 # ============================================================================ 00058 00059 basis_export_targets ( 00060 FILE "${EXPORTS_FILE}" 00061 CUSTOM_FILE "${CUSTOM_EXPORTS_FILE}" 00062 ) 00063 00064 # ============================================================================ 00065 # namespace 00066 # ============================================================================ 00067 00068 # code used at top of packing configuration and use files to set package 00069 # namespace prefix used for configuration variables 00070 if (PROJECT_IS_MODULE) 00071 set (BASIS_NS "${PROJECT_NAME}") 00072 else () 00073 set (BASIS_NS "${PROJECT_PACKAGE}") 00074 endif () 00075 00076 set (BASIS_NS 00077 "# prefix used for variable names 00078 set (NS \"${BASIS_NS}_\") 00079 00080 # allow caller to change namespace - used by projects with modules 00081 if (\${NS}CONFIG_PREFIX) 00082 set (NS \"\${\${NS}CONFIG_PREFIX}\") 00083 endif ()" 00084 ) 00085 00086 # ============================================================================ 00087 # project configuration file 00088 # ============================================================================ 00089 00090 # ---------------------------------------------------------------------------- 00091 # choose template 00092 00093 if (EXISTS "${PROJECT_CONFIG_DIR}/Config.cmake.in") 00094 set (TEMPLATE "${PROJECT_CONFIG_DIR}/Config.cmake.in") 00095 elseif (PROJECT_IS_MODULE) 00096 set (TEMPLATE "${CMAKE_CURRENT_LIST_DIR}/ModuleConfig.cmake.in") 00097 else () 00098 set (TEMPLATE "${CMAKE_CURRENT_LIST_DIR}/Config.cmake.in") 00099 endif () 00100 00101 # ---------------------------------------------------------------------------- 00102 # provide code of BASIS config file as variable 00103 00104 if (NOT TEMPLATE MATCHES "^${CMAKE_CURRENT_LIST_DIR}/") 00105 if (PROJECT_IS_MODULE) 00106 file (READ "${CMAKE_CURRENT_LIST_DIR}/ModuleConfig.cmake.in" BASIS_TEMPLATE) 00107 else () 00108 file (READ "${CMAKE_CURRENT_LIST_DIR}/Config.cmake.in" BASIS_TEMPLATE) 00109 endif () 00110 # remove file header 00111 string (REGEX REPLACE "^########.*########" "" BASIS_TEMPLATE "${BASIS_TEMPLATE}") 00112 string (STRIP "${BASIS_TEMPLATE}" BASIS_TEMPLATE) 00113 else () 00114 set (BASIS_TEMPLATE "") 00115 endif () 00116 00117 # ---------------------------------------------------------------------------- 00118 # build tree related configuration 00119 00120 set (BUILD_CONFIG_SETTINGS 1) 00121 include ("${CMAKE_CURRENT_LIST_DIR}/BasisConfigSettings.cmake") 00122 include ("${PROJECT_CONFIG_DIR}/ConfigSettings.cmake" OPTIONAL) 00123 00124 # ---------------------------------------------------------------------------- 00125 # configure project configuration file for build tree 00126 00127 string (CONFIGURE "${BASIS_TEMPLATE}" BASIS_CONFIG @ONLY) 00128 configure_file ("${TEMPLATE}" "${PROJECT_BINARY_DIR}/${CONFIG_FILE}" @ONLY) 00129 00130 # ---------------------------------------------------------------------------- 00131 # install tree related configuration 00132 00133 set (BUILD_CONFIG_SETTINGS 0) 00134 include ("${CMAKE_CURRENT_LIST_DIR}/BasisConfigSettings.cmake") 00135 include ("${PROJECT_CONFIG_DIR}/ConfigSettings.cmake" OPTIONAL) 00136 00137 # ---------------------------------------------------------------------------- 00138 # configure project configuration file for install tree 00139 00140 string (CONFIGURE "${BASIS_TEMPLATE}" BASIS_CONFIG @ONLY) 00141 configure_file ("${TEMPLATE}" "${BINARY_CONFIG_DIR}/${CONFIG_FILE}" @ONLY) 00142 00143 # ---------------------------------------------------------------------------- 00144 # install project configuration file 00145 00146 install ( 00147 FILES "${BINARY_CONFIG_DIR}/${CONFIG_FILE}" 00148 DESTINATION "${INSTALL_CONFIG_DIR}" 00149 ) 00150 00151 # ============================================================================ 00152 # project version file 00153 # ============================================================================ 00154 00155 # ---------------------------------------------------------------------------- 00156 # choose template 00157 00158 if (EXISTS "${PROJECT_CONFIG_DIR}/ConfigVersion.cmake.in") 00159 set (TEMPLATE "${PROJECT_CONFIG_DIR}/ConfigVersion.cmake.in") 00160 else () 00161 set (TEMPLATE "${CMAKE_CURRENT_LIST_DIR}/ConfigVersion.cmake.in") 00162 endif () 00163 00164 # ---------------------------------------------------------------------------- 00165 # configure project configuration version file 00166 00167 configure_file ("${TEMPLATE}" "${PROJECT_BINARY_DIR}/${VERSION_FILE}" @ONLY) 00168 00169 # ---------------------------------------------------------------------------- 00170 # install project configuration version file 00171 00172 install ( 00173 FILES "${PROJECT_BINARY_DIR}/${VERSION_FILE}" 00174 DESTINATION "${INSTALL_CONFIG_DIR}" 00175 ) 00176 00177 # ============================================================================ 00178 # project use file 00179 # ============================================================================ 00180 00181 # ---------------------------------------------------------------------------- 00182 # choose template 00183 00184 if (EXISTS "${PROJECT_CONFIG_DIR}/ConfigUse.cmake.in") 00185 set (TEMPLATE "${PROJECT_CONFIG_DIR}/ConfigUse.cmake.in") 00186 elseif (EXISTS "${PROJECT_CONFIG_DIR}/Use.cmake.in") 00187 # backwards compatibility to version <= 0.1.8 of BASIS 00188 set (TEMPLATE "${PROJECT_CONFIG_DIR}/Use.cmake.in") 00189 elseif (PROJECT_IS_MODULE) 00190 set (TEMPLATE "${CMAKE_CURRENT_LIST_DIR}/ModuleConfigUse.cmake.in") 00191 else () 00192 set (TEMPLATE "${CMAKE_CURRENT_LIST_DIR}/ConfigUse.cmake.in") 00193 endif () 00194 00195 # ---------------------------------------------------------------------------- 00196 # provide code of BASIS use file as variable 00197 if (NOT TEMPLATE MATCHES "^${CMAKE_CURRENT_LIST_DIR}/") 00198 if (PROJECT_IS_MODULE) 00199 file (READ "${CMAKE_CURRENT_LIST_DIR}/ModuleConfigUse.cmake.in" BASIS_USE) 00200 else () 00201 file (READ "${CMAKE_CURRENT_LIST_DIR}/ConfigUse.cmake.in" BASIS_USE) 00202 endif () 00203 # remove file header 00204 string (REGEX REPLACE "^########.*########" "" BASIS_USE "${BASIS_USE}") 00205 string (STRIP "${BASIS_USE}" BASIS_USE) 00206 else () 00207 set (BASIS_USE "") 00208 endif () 00209 00210 # ---------------------------------------------------------------------------- 00211 # configure project use file 00212 00213 string (CONFIGURE "${BASIS_USE}" BASIS_USE @ONLY) 00214 configure_file ("${TEMPLATE}" "${PROJECT_BINARY_DIR}/${USE_FILE}" @ONLY) 00215 00216 # ---------------------------------------------------------------------------- 00217 # install project use file 00218 00219 install ( 00220 FILES "${PROJECT_BINARY_DIR}/${USE_FILE}" 00221 DESTINATION "${INSTALL_CONFIG_DIR}" 00222 ) 00223 00224 unset (BASIS_NS) 00225 unset (BASIS_TEMPLATE) 00226 unset (BASIS_CONFIG) 00227 unset (BASIS_USE)