This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, next has been updated
       via  3c62239543d57cdae883463c73ddcb5f5a31c83c (commit)
       via  0538b325b4884c8b722ae31ea43b8c8cae113fcf (commit)
      from  656ddc52c42f8fdfd22d331ceaa669c479124555 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=3c62239543d57cdae883463c73ddcb5f5a31c83c
commit 3c62239543d57cdae883463c73ddcb5f5a31c83c
Merge: 656ddc5 0538b32
Author:     Domen Vrankar <domen.vran...@gmail.com>
AuthorDate: Tue Jan 20 18:31:02 2015 -0500
Commit:     CMake Topic Stage <kwro...@kitware.com>
CommitDate: Tue Jan 20 18:31:02 2015 -0500

    Merge topic 'rpm_multi_prefix' into next
    
    0538b325 cpack rpm multiple path relocation prefixes


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=0538b325b4884c8b722ae31ea43b8c8cae113fcf
commit 0538b325b4884c8b722ae31ea43b8c8cae113fcf
Author:     Domen Vrankar <domen.vran...@gmail.com>
AuthorDate: Wed Jan 21 00:29:46 2015 +0100
Commit:     Domen Vrankar <domen.vran...@gmail.com>
CommitDate: Wed Jan 21 00:29:46 2015 +0100

    cpack rpm multiple path relocation prefixes
    
    Allow multiple path relocation prefixes for a single rpm package.

diff --git a/Modules/CPackRPM.cmake b/Modules/CPackRPM.cmake
index d2cb2ee..43e3fe0 100644
--- a/Modules/CPackRPM.cmake
+++ b/Modules/CPackRPM.cmake
@@ -379,6 +379,34 @@
 #
 #  May be used to add more exclude path (directories or files) from the initial
 #  default list of excluded paths. See CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST.
+#
+# .. variable:: CPACK_RPM_RELOCATION_PATHS
+#
+#  * Mandatory : NO
+#  * Default   : -
+#
+#  May be used to specify more than one relocation path per relocatable RPM.
+#  Variable contains a list of relocation paths that if relative are prefixed
+#  by the value of CPACK_RPM_<COMPONENT>_PACKAGE_PREFIX or by the value of
+#  CPACK_PACKAGING_INSTALL_PREFIX if the component version is not provided.
+#  Variable is not component based as its content can be used to set a 
different
+#  path prefix for e.g. binary dir and documentation dir at the same time.
+#  Only prefixes that are required by a certain component are added to that
+#  component - component must contain at least one file/directory/symbolic link
+#  with CPACK_RPM_RELOCATION_PATHS prefix for a certain relocation path
+#  to be added. Package will not contain any relocation paths if there are no
+#  files/directories/symbolic links on any of the provided prefix locations.
+#  Packages that either do not contain any relocation paths or contain
+#  files/directories/symbolic links that are outside relocation paths print
+#  out an AUTHOR_WARNING that RPM will be partially relocatable.
+#
+# .. variable:: CPACK_RPM_<COMPONENT>_PACKAGE_PREFIX
+#
+#  * Mandatory : NO
+#  * Default   : CPACK_PACKAGING_INSTALL_PREFIX
+#
+#  May be used to set per component CPACK_PACKAGING_INSTALL_PREFIX for
+#  relocatable RPM packages.
 
 #=============================================================================
 # Copyright 2007-2009 Kitware, Inc.
@@ -395,6 +423,62 @@
 
 # Author: Eric Noulard with the help of Alexander Neundorf.
 
+function(cpack_rpm_prepare_relocation_paths)
+  # set appropriate prefix, remove possible trailing slash and convert 
backslashes to slashes
+  if(CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_PREFIX)
+    file(TO_CMAKE_PATH 
"${CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_PREFIX}" PATH_PREFIX)
+  else()
+    file(TO_CMAKE_PATH "${CPACK_PACKAGING_INSTALL_PREFIX}" PATH_PREFIX)
+  endif()
+
+  set(RPM_RELOCATION_PATHS "${CPACK_RPM_RELOCATION_PATHS}")
+  list(REMOVE_DUPLICATES RPM_RELOCATION_PATHS)
+
+  # set base path prefix
+  if(EXISTS "${WDIR}/${PATH_PREFIX}")
+    set(TMP_RPM_PREFIXES "${TMP_RPM_PREFIXES}Prefix: ${PATH_PREFIX}\n")
+    list(APPEND RPM_USED_PACKAGE_PREFIXES "${PATH_PREFIX}")
+  endif()
+
+  # set other path prefixes
+  foreach(RELOCATION_PATH ${RPM_RELOCATION_PATHS})
+    if(IS_ABSOLUTE "${RELOCATE_PATH}")
+      set(PREPARED_RELOCATION_PATH "${RELOCATION_PATH}")
+    else()
+      set(PREPARED_RELOCATION_PATH "${PATH_PREFIX}/${RELOCATION_PATH}")
+    endif()
+
+    if(EXISTS "${WDIR}/${PREPARED_RELOCATION_PATH}")
+      set(TMP_RPM_PREFIXES "${TMP_RPM_PREFIXES}Prefix: 
${PREPARED_RELOCATION_PATH}\n")
+      list(APPEND RPM_USED_PACKAGE_PREFIXES "${PREPARED_RELOCATION_PATH}")
+    endif()
+  endforeach()
+
+  # warn about all the paths that are not relocatable
+  file(GLOB_RECURSE FILE_PATHS_ "${WDIR}/*")
+  foreach(TMP_PATH ${FILE_PATHS_})
+    string(LENGTH "${WDIR}" WDIR_LEN)
+    string(SUBSTRING "${TMP_PATH}" ${WDIR_LEN} -1 TMP_PATH)
+    unset(TMP_PATH_FOUND_)
+
+    foreach(RELOCATION_PATH ${RPM_USED_PACKAGE_PREFIXES})
+      file(RELATIVE_PATH REL_PATH_ "${RELOCATION_PATH}" "${TMP_PATH}")
+      string(SUBSTRING "${REL_PATH_}" 0 2 PREFIX_)
+
+      if(NOT "${PREFIX_}" STREQUAL "..")
+        set(TPM_PATH_FOUND_ TRUE)
+        break()
+      endif()
+    endforeach()
+
+    if(NOT TPM_PATH_FOUND_)
+      message(AUTHOR_WARNING "CPackRPM:Warning: Path ${TMP_PATH} is not on one 
of the relocatable paths! Package will be partially relocatable.")
+    endif()
+  endforeach()
+
+  set(TMP_RPM_PREFIXES "${TMP_RPM_PREFIXES}" PARENT_SCOPE)
+endfunction()
+
 if(CMAKE_BINARY_DIR)
   message(FATAL_ERROR "CPackRPM.cmake may only be used by CPack internally.")
 endif()
@@ -636,13 +720,16 @@ if(CPACK_PACKAGE_RELOCATABLE)
   set(CPACK_RPM_PACKAGE_RELOCATABLE TRUE)
 endif()
 if(CPACK_RPM_PACKAGE_RELOCATABLE)
+  unset(TMP_RPM_PREFIXES)
+
   if(CPACK_RPM_PACKAGE_DEBUG)
     message("CPackRPM:Debug: Trying to build a relocatable package")
   endif()
   if(CPACK_SET_DESTDIR AND (NOT CPACK_SET_DESTDIR STREQUAL "I_ON"))
     message("CPackRPM:Warning: CPACK_SET_DESTDIR is set 
(=${CPACK_SET_DESTDIR}) while requesting a relocatable package 
(CPACK_RPM_PACKAGE_RELOCATABLE is set): this is not supported, the package 
won't be relocatable.")
   else()
-    set(CPACK_RPM_PACKAGE_PREFIX ${CPACK_PACKAGING_INSTALL_PREFIX})
+    set(CPACK_RPM_PACKAGE_PREFIX ${CPACK_PACKAGING_INSTALL_PREFIX}) # kept for 
back compatibility (provided external RPM spec files)
+    cpack_rpm_prepare_relocation_paths()
   endif()
 endif()
 
@@ -856,15 +943,21 @@ if(CPACK_RPM_PACKAGE_RELOCATABLE)
   # get a list of the elements in CPACK_RPM_PACKAGE_PREFIX and remove
   # the final element (so the install-prefix dir itself is not omitted
   # from the RPM's content-list)
-  string(REPLACE "/" ";" _CPACK_RPM_PACKAGE_PREFIX_ELEMS 
".${CPACK_RPM_PACKAGE_PREFIX}")
-  list(REMOVE_AT _CPACK_RPM_PACKAGE_PREFIX_ELEMS -1)
-  # Now generate all of the parent dirs of CPACK_RPM_PACKAGE_PREFIX
-  foreach(_ELEM ${_CPACK_RPM_PACKAGE_PREFIX_ELEMS})
-    list(APPEND _TMP_LIST "${_ELEM}")
-    string(REPLACE ";" "/" _OMIT_DIR "${_TMP_LIST}")
-    set(_OMIT_DIR "-o -path ${_OMIT_DIR}")
-    separate_arguments(_OMIT_DIR)
-    list(APPEND _RPM_DIRS_TO_OMIT ${_OMIT_DIR})
+  foreach(CPACK_RPM_PACKAGE_PREFIX ${RPM_PACKAGE_PREFIXES})
+    string(REPLACE "/" ";" _CPACK_RPM_PACKAGE_PREFIX_ELEMS 
".${CPACK_RPM_PACKAGE_PREFIX}")
+    list(REMOVE_AT _CPACK_RPM_PACKAGE_PREFIX_ELEMS -1)
+    unset(_TMP_LIST)
+    # Now generate all of the parent dirs of CPACK_RPM_PACKAGE_PREFIX
+    foreach(_ELEM ${_CPACK_RPM_PACKAGE_PREFIX_ELEMS})
+      list(APPEND _TMP_LIST "${_ELEM}")
+      string(REPLACE ";" "/" _OMIT_DIR "${_TMP_LIST}")
+      list(FIND _RPM_DIRS_TO_OMIT "${_OMIT_DIR}" _DUPLICATE_FOUND)
+      if(_DUPLICATE_FOUND EQUAL -1)
+        set(_OMIT_DIR "-o -path ${_OMIT_DIR}")
+        separate_arguments(_OMIT_DIR)
+        list(APPEND _RPM_DIRS_TO_OMIT ${_OMIT_DIR})
+      endif()
+    endforeach()
   endforeach()
 endif()
 
@@ -1101,7 +1194,7 @@ Vendor:         \@CPACK_RPM_PACKAGE_VENDOR\@
 \@TMP_RPM_AUTOREQ\@
 \@TMP_RPM_AUTOREQPROV\@
 \@TMP_RPM_BUILDARCH\@
-\@TMP_RPM_PREFIX\@
+\@TMP_RPM_PREFIXES\@
 
 %define _rpmdir \@CPACK_RPM_DIRECTORY\@
 %define _rpmfilename \@CPACK_RPM_FILE_NAME\@
diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index dea30e4..007f735 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -832,6 +832,15 @@ ${CMake_BINARY_DIR}/bin/cmake -DDIR=dev -P 
${CMake_SOURCE_DIR}/Utilities/Release
   # Do not try to build RPM
   if (NOT RPMBUILD)
     set(CPACK_BINARY_RPM OFF)
+  else()
+    add_test(CPack-RPM ${CMAKE_CMAKE_COMMAND}
+        -D dir=${CMake_BINARY_DIR}/Tests/CPackRPM
+        -D CMake_SOURCE_DIR=${CMake_SOURCE_DIR}
+        -D CMAKE_CMAKE_COMMAND=${CMAKE_CMAKE_COMMAND}
+        -P ${CMake_SOURCE_DIR}/Tests/CPackRPM/RunCPack.cmake
+      )
+    list(APPEND TEST_BUILD_DIRS
+      "${CMake_BINARY_DIR}/Tests/CPackRPM")
   endif()
 
   find_program(NSIS_MAKENSIS_EXECUTABLE NAMES makensis
diff --git a/Tests/CPackComponentsForAll/MyLibCPackConfig-IgnoreGroup.cmake.in 
b/Tests/CPackComponentsForAll/MyLibCPackConfig-IgnoreGroup.cmake.in
index 8c01b32..e597480 100644
--- a/Tests/CPackComponentsForAll/MyLibCPackConfig-IgnoreGroup.cmake.in
+++ b/Tests/CPackComponentsForAll/MyLibCPackConfig-IgnoreGroup.cmake.in
@@ -6,15 +6,22 @@ if(CPACK_GENERATOR MATCHES "ZIP")
 endif()
 
 if(CPACK_GENERATOR MATCHES "RPM")
-   set(CPACK_RPM_COMPONENT_INSTALL "ON")
-   set(CPACK_RPM_applications_PACKAGE_REQUIRES "mylib-libraries")
+  # set gnu install prefixes
+  include(GNUInstallDirs)
 
-   # test package summary override
-   set(CPACK_RPM_PACKAGE_SUMMARY "default summary")
-   set(CPACK_RPM_libraries_PACKAGE_SUMMARY "libraries summary")
+  set(CPACK_PACKAGING_INSTALL_PREFIX "/usr")
+  set(CPACK_RPM_RELOCATION_PATHS "${CMAKE_INSTALL_INCLUDEDIR}"
+    "${CMAKE_INSTALL_LIBDIR}" "${CMAKE_INSTALL_BINDIR}")
 
-   # test package description override
-   set(CPACK_RPM_libraries_PACKAGE_DESCRIPTION "libraries description")
+  set(CPACK_RPM_COMPONENT_INSTALL "ON")
+  set(CPACK_RPM_applications_PACKAGE_REQUIRES "mylib-libraries")
+
+  # test package summary override
+  set(CPACK_RPM_PACKAGE_SUMMARY "default summary")
+  set(CPACK_RPM_libraries_PACKAGE_SUMMARY "libraries summary")
+
+  # test package description override
+  set(CPACK_RPM_libraries_PACKAGE_DESCRIPTION "libraries description")
 endif()
 
 if(CPACK_GENERATOR MATCHES "DEB")
diff --git a/Tests/CPackComponentsForAll/RunCPackVerifyResult.cmake 
b/Tests/CPackComponentsForAll/RunCPackVerifyResult.cmake
index 4d56218..aeb7ebc 100644
--- a/Tests/CPackComponentsForAll/RunCPackVerifyResult.cmake
+++ b/Tests/CPackComponentsForAll/RunCPackVerifyResult.cmake
@@ -140,6 +140,10 @@ if(CPackGen MATCHES "RPM")
     "C/C\\+\\+ header files for use with MyLib")
 
   if(${CPackComponentWay} STREQUAL "IgnoreGroup")
+    # set gnu install prefixes to what they are set during rpm creation
+    include(GNUInstallDirs)
+    set(CPACK_PACKAGING_INSTALL_PREFIX "/usr")
+
     foreach(check_file ${expected_file})
       string(REGEX MATCH ".*libraries.*" check_file_libraries_match 
${check_file})
       string(REGEX MATCH ".*headers.*" check_file_headers_match ${check_file})
@@ -154,15 +158,23 @@ if(CPackGen MATCHES "RPM")
       if(check_file_libraries_match)
         set(check_file_match_expected_summary 
".*${CPACK_RPM_libraries_PACKAGE_SUMMARY}.*")
         set(check_file_match_expected_description 
".*${CPACK_RPM_libraries_PACKAGE_DESCRIPTION}.*")
+        set(check_file_match_expected_relocation_path "Relocations : 
${CPACK_PACKAGING_INSTALL_PREFIX} 
${CPACK_PACKAGING_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}")
+        set(spec_regex "*libraries*")
       elseif(check_file_headers_match)
         set(check_file_match_expected_summary 
".*${CPACK_RPM_PACKAGE_SUMMARY}.*")
         set(check_file_match_expected_description 
".*${CPACK_COMPONENT_HEADERS_DESCRIPTION}.*")
+        set(check_file_match_expected_relocation_path "Relocations : 
${CPACK_PACKAGING_INSTALL_PREFIX} 
${CPACK_PACKAGING_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}")
+        set(spec_regex "*headers*")
       elseif(check_file_applications_match)
         set(check_file_match_expected_summary 
".*${CPACK_RPM_PACKAGE_SUMMARY}.*")
         set(check_file_match_expected_description 
".*${CPACK_COMPONENT_APPLICATIONS_DESCRIPTION}.*")
+        set(check_file_match_expected_relocation_path "Relocations : 
${CPACK_PACKAGING_INSTALL_PREFIX} 
${CPACK_PACKAGING_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}")
+        set(spec_regex "*applications*")
       elseif(check_file_Unspecified_match)
         set(check_file_match_expected_summary 
".*${CPACK_RPM_PACKAGE_SUMMARY}.*")
         set(check_file_match_expected_description ".*DESCRIPTION.*")
+        set(check_file_match_expected_relocation_path "Relocations : 
${CPACK_PACKAGING_INSTALL_PREFIX} 
${CPACK_PACKAGING_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}")
+        set(spec_regex "*Unspecified*")
       else()
         message(FATAL_ERROR "error: unexpected rpm package '${check_file}'")
       endif()
@@ -170,13 +182,25 @@ if(CPackGen MATCHES "RPM")
       string(REGEX MATCH ${check_file_match_expected_summary} 
check_file_match_summary ${check_file_content})
 
       if(NOT check_file_match_summary)
-          message(FATAL_ERROR "error: '${check_file}' rpm package summary does 
not match expected value - regex '${check_file_match_expected_summary}'")
+        message(FATAL_ERROR "error: '${check_file}' rpm package summary does 
not match expected value - regex '${check_file_match_expected_summary}'; RPM 
output: '${check_file_content}'")
       endif()
 
       string(REGEX MATCH ${check_file_match_expected_description} 
check_file_match_description ${check_file_content})
 
       if(NOT check_file_match_description)
-          message(FATAL_ERROR "error: '${check_file}' rpm package description 
does not match expected value - regex 
'${check_file_match_expected_description}'")
+        message(FATAL_ERROR "error: '${check_file}' rpm package description 
does not match expected value - regex 
'${check_file_match_expected_description}'; RPM output: 
'${check_file_content}'")
+      endif()
+
+      string(REGEX MATCH ${check_file_match_expected_relocation_path} 
check_file_match_relocation_path ${check_file_content})
+
+      if(NOT check_file_match_relocation_path)
+        file(GLOB_RECURSE spec_file 
"${CPackComponentsForAll_BINARY_DIR}/${spec_regex}.spec")
+
+        if(spec_file)
+          file(READ ${spec_file} spec_file_content)
+        endif()
+
+        message(FATAL_ERROR "error: '${check_file}' rpm package relocation 
path does not match expected value - regex 
'${check_file_match_expected_relocation_path}'; RPM output: 
'${check_file_content}'; generated spec file: '${spec_file_content}'")
       endif()
     endforeach()
   elseif(${CPackComponentWay} STREQUAL "IgnoreGroup")
diff --git a/Tests/CPackRPM/CMakeLists.txt b/Tests/CPackRPM/CMakeLists.txt
new file mode 100644
index 0000000..a951610
--- /dev/null
+++ b/Tests/CPackRPM/CMakeLists.txt
@@ -0,0 +1,14 @@
+cmake_minimum_required (VERSION 3.1)
+
+project(CPackRPM)
+
+install(FILES CMakeLists.txt DESTINATION /not_relocatable COMPONENT static)
+install(FILES CMakeLists.txt DESTINATION relocatable COMPONENT relocatable)
+
+set(CPACK_PACKAGE_RELOCATABLE TRUE)
+set(CPACK_GENERATOR "RPM")
+set(CPACK_PACKAGING_INSTALL_PREFIX "/opt")
+
+set(CPACK_RPM_COMPONENT_INSTALL ON)
+
+include(CPack)
diff --git a/Tests/CPackRPM/RunCPack.cmake b/Tests/CPackRPM/RunCPack.cmake
new file mode 100644
index 0000000..2547262
--- /dev/null
+++ b/Tests/CPackRPM/RunCPack.cmake
@@ -0,0 +1,15 @@
+file(MAKE_DIRECTORY "${dir}")
+
+execute_process(
+  COMMAND ${CMAKE_CMAKE_COMMAND}
+    "${CMake_SOURCE_DIR}/Tests/CPackRPM"
+  COMMAND make package
+  RESULT_VARIABLE result
+  OUTPUT_VARIABLE stdout
+  ERROR_VARIABLE stderr
+  WORKING_DIRECTORY ${dir})
+
+# test for partial relocation warning
+if(NOT "${stderr}" MATCHES "CPackRPM:Warning: Path 
/not_relocatable/CMakeLists.txt is not on one of the.*relocatable paths! 
Package will be partially relocatable.")
+  message(FATAL_ERROR "CPack/RPM missing partially relocatable warning; stderr 
output: '${stderr}'")
+endif()

-----------------------------------------------------------------------

Summary of changes:
 Modules/CPackRPM.cmake                             |  115 ++++++++++++++++++--
 Tests/CMakeLists.txt                               |    9 ++
 .../MyLibCPackConfig-IgnoreGroup.cmake.in          |   21 ++--
 .../RunCPackVerifyResult.cmake                     |   28 ++++-
 Tests/CPackRPM/CMakeLists.txt                      |   14 +++
 Tests/CPackRPM/RunCPack.cmake                      |   15 +++
 6 files changed, 182 insertions(+), 20 deletions(-)
 create mode 100644 Tests/CPackRPM/CMakeLists.txt
 create mode 100644 Tests/CPackRPM/RunCPack.cmake


hooks/post-receive
-- 
CMake
_______________________________________________
Cmake-commits mailing list
Cmake-commits@cmake.org
http://public.kitware.com/mailman/listinfo/cmake-commits

Reply via email to