diff options
Diffstat (limited to 'modules/check_installed_exports_file.cmake')
-rw-r--r-- | modules/check_installed_exports_file.cmake | 95 |
1 files changed, 33 insertions, 62 deletions
diff --git a/modules/check_installed_exports_file.cmake b/modules/check_installed_exports_file.cmake index d1d0c718..454d2a09 100644 --- a/modules/check_installed_exports_file.cmake +++ b/modules/check_installed_exports_file.cmake @@ -1,48 +1,27 @@ - -# This file is executed via install(SCRIPT). -# This means it is include()d into the cmake_install.cmake file -# Due to this the following variables already have the correct value: -# CMAKE_INSTALL_PREFIX -# CMAKE_CURRENT_BINARY_DIR -# -# Additionally the following two variables have to be set: -# EXPORT_INSTALL_DIR - set it to the install destination -# EXPORT_FILES - the filenames of the exports file -# -# Alex - - -# put all the code into a function so all variables used here are local -# which makes sure including this file multiple times in a cmake_install.cmake works -function(CHECK_INSTALLED_EXPORTS_FILE _filename) - - # get the absolute install directory, consider absolute and relative paths and also DESTDIR - if(IS_ABSOLUTE "${EXPORT_INSTALL_DIR}") - set(installDir "$ENV{DESTDIR}${EXPORT_INSTALL_DIR}") - else(IS_ABSOLUTE "${EXPORT_INSTALL_DIR}") - set(installDir "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${EXPORT_INSTALL_DIR}") - endif(IS_ABSOLUTE "${EXPORT_INSTALL_DIR}") - - set(installedExportsFile "${installDir}/${_filename}") - - #message(STATUS "************ bin dir: ${CMAKE_CURRENT_BINARY_DIR}") - #message(STATUS "************ prefix: ${CMAKE_INSTALL_PREFIX}") - #message(STATUS "************ exportsfile: ${installedExportsFile}") - - # if the file already exists at the install location, and if we can - # find the exports file in the build dir, read both, and if their contents differ, - # remove all configuration-specific exports files from the install dir, since - # they may create conflicts if the new targets have been added/targets have been - # removed/ targets have been renamed/ the namespace for the exported targets has changed - if(EXISTS "${installedExportsFile}") - if (${EXPORT_INSTALL_DIR} MATCHES "^(/)(.+)$") - set(binaryDirExportFileDir "_${CMAKE_MATCH_2}") - set(binaryDirExportsFile "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Export/${binaryDirExportFileDir}/${_filename}") - else (${EXPORT_INSTALL_DIR} MATCHES "^(/)(.+)$") - set(binaryDirExportsFile "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Export/${EXPORT_INSTALL_DIR}/${_filename}") - endif (${EXPORT_INSTALL_DIR} MATCHES "^(/)(.+)$") - - # message(STATUS "************* binaryDirExportsFile: ${binaryDirExportsFile}") +# INSTALL_DIR - set it to the install destination +# INSTALL_PREFIX - set it to CMAKE_INSTALL_PREFIX +# CURRENT_BINARY_DIR - set it to CMAKE_CURRENT_BINARY_DIR +# FILENAME - the filename of the exports file + +# get the absolute install directory, consider absolute and relative paths and also DESTDIR +if(IS_ABSOLUTE "${INSTALL_DIR}") + set(installDir "$ENV{DESTDIR}${INSTALL_DIR}") +else(IS_ABSOLUTE "${INSTALL_DIR}") + set(installDir "$ENV{DESTDIR}${INSTALL_PREFIX}/${INSTALL_DIR}") +endif(IS_ABSOLUTE "${INSTALL_DIR}") + +set(installedExportsFile "${installDir}/${FILENAME}") + + +# if the file already exists at the install location, and if we can +# find the exports file in the build dir, read both, and if their contents differ, +# remove all configuration-specific exports files from the install dir, since +# they may create conflicts if the new targets have been added/targets have been +# removed/ targets have been renamed/ the namespace for the exported targets has changed +if(EXISTS "${installedExportsFile}") + if (${INSTALL_DIR} MATCHES "^(/)(.+)$") + set(binaryDirExportFileDir "_${CMAKE_MATCH_2}") + set(binaryDirExportsFile "${CURRENT_BINARY_DIR}/CMakeFiles/Export/${binaryDirExportFileDir}/${FILENAME}") if(EXISTS "${binaryDirExportsFile}") file(READ "${installedExportsFile}" installedExportsFileContents) @@ -50,24 +29,16 @@ function(CHECK_INSTALLED_EXPORTS_FILE _filename) if(NOT "${installedExportsFileContents}" STREQUAL "${binaryDirExportsFileContents}") - if("${_filename}" MATCHES "^(.+)(\\.cmake)$") - message(STATUS "XXX Installed and new ${_filename} differ, removing installed ${CMAKE_MATCH_1}-*.cmake files") - file(GLOB exportFiles "${installDir}/${CMAKE_MATCH_1}-*.cmake") -# message(STATUS "XXX files: ${exportFiles}") - file(REMOVE ${exportFiles}) - endif("${_filename}" MATCHES "^(.+)(\\.cmake)$") - else(NOT "${installedExportsFileContents}" STREQUAL "${binaryDirExportsFileContents}") -# message(STATUS "XXX FILES ${_filename} are the same") + if("${FILENAME}" MATCHES "^(.+)(\\.cmake)$") + message(STATUS "Installed and new ${FILENAME} differ, removing installed ${CMAKE_MATCH_1}-*.cmake files") + file(GLOB files "${installDir}/${CMAKE_MATCH_1}-*.cmake") + file(REMOVE ${files}) + endif("${FILENAME}" MATCHES "^(.+)(\\.cmake)$") +# else(NOT "${installedExportsFileContents}" STREQUAL "${binaryDirExportsFileContents}") +# message(STATUS "FILES are the same") endif(NOT "${installedExportsFileContents}" STREQUAL "${binaryDirExportsFileContents}") endif(EXISTS "${binaryDirExportsFile}") + endif (${INSTALL_DIR} MATCHES "^(/)(.+)$") - endif(EXISTS "${installedExportsFile}") - -endfunction(CHECK_INSTALLED_EXPORTS_FILE) - -# call the function for each exports file -foreach(_currentExportsFile ${EXPORT_FILES}) - check_installed_exports_file("${_currentExportsFile}") -endforeach(_currentExportsFile ${EXPORT_FILES}) - +endif(EXISTS "${installedExportsFile}") |