diff options
| author | Alexander Neundorf <neundorf@kde.org> | 2009-01-06 22:04:12 +0000 | 
|---|---|---|
| committer | Alexander Neundorf <neundorf@kde.org> | 2009-01-06 22:04:12 +0000 | 
| commit | 3dfdda2dc0367ccae61938b2a1b835c8612322a8 (patch) | |
| tree | d32102b463455927f0f5e42259f9324a27fc23b4 /modules | |
| parent | cab30f1102a6a326e32616aa5ed483493751bbfb (diff) | |
| download | extra-cmake-modules-3dfdda2dc0367ccae61938b2a1b835c8612322a8.tar.gz extra-cmake-modules-3dfdda2dc0367ccae61938b2a1b835c8612322a8.tar.bz2 | |
-before installing the exports files, compate the new and the already installed one, and if they are different, delete
any previously installed configuration specific exports files
Alex
svn path=/trunk/KDE/kdelibs/; revision=906811
Diffstat (limited to 'modules')
| -rw-r--r-- | modules/check_installed_exports_file.cmake | 119 | 
1 files changed, 73 insertions, 46 deletions
| diff --git a/modules/check_installed_exports_file.cmake b/modules/check_installed_exports_file.cmake index ab36b9cf..d1d0c718 100644 --- a/modules/check_installed_exports_file.cmake +++ b/modules/check_installed_exports_file.cmake @@ -1,46 +1,73 @@ -# 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}") -   else (${INSTALL_DIR} MATCHES "^(/)(.+)$") -      set(binaryDirExportsFile "${CURRENT_BINARY_DIR}/CMakeFiles/Export/${INSTALL_DIR}/${FILENAME}") -   endif (${INSTALL_DIR} MATCHES "^(/)(.+)$") - -   if(EXISTS "${binaryDirExportsFile}")  -      file(READ "${installedExportsFile}" installedExportsFileContents) -      file(READ "${binaryDirExportsFile}" binaryDirExportsFileContents) - -      if(NOT "${installedExportsFileContents}" STREQUAL "${binaryDirExportsFileContents}") - -         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(EXISTS "${installedExportsFile}") + +# 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}") + +      if(EXISTS "${binaryDirExportsFile}")  +         file(READ "${installedExportsFile}" installedExportsFileContents) +         file(READ "${binaryDirExportsFile}" binaryDirExportsFileContents) + +         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") +         endif(NOT "${installedExportsFileContents}" STREQUAL "${binaryDirExportsFileContents}") + +      endif(EXISTS "${binaryDirExportsFile}")  + +   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}) + | 
