Browse Source

CPack/RPM ignore install prefix relocation path

Patch adds possibility to remove
CPACK_PACKAGING_INSTALL_PREFIX from
the list of relocation paths when
crating a relocatable rpm.
Domen Vrankar 10 years ago
parent
commit
18917d66d4

+ 19 - 2
Modules/CPackRPM.cmake

@@ -408,6 +408,16 @@
 #
 #  May be used to set per component CPACK_PACKAGING_INSTALL_PREFIX for
 #  relocatable RPM packages.
+#
+# .. variable:: CPACK_RPM_NO_INSTALL_PREFIX_RELOCATION
+#               CPACK_RPM_NO_<COMPONENT>_INSTALL_PREFIX_RELOCATION
+#
+#  * Mandatory : NO
+#  * Default   : CPACK_PACKAGING_INSTALL_PREFIX or CPACK_RPM_<COMPONENT>_PACKAGE_PREFIX
+#                are treated as one of relocation paths
+#
+#  May be used to remove CPACK_PACKAGING_INSTALL_PREFIX and CPACK_RPM_<COMPONENT>_PACKAGE_PREFIX
+#  from relocatable RPM prefix paths.
 
 #=============================================================================
 # Copyright 2007-2009 Kitware, Inc.
@@ -437,8 +447,15 @@ function(cpack_rpm_prepare_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}")
+    if(NOT CPACK_RPM_NO_INSTALL_PREFIX_RELOCATION AND
+       NOT CPACK_RPM_NO_${CPACK_RPM_PACKAGE_COMPONENT}_INSTALL_PREFIX_RELOCATION)
+      set(TMP_RPM_PREFIXES "${TMP_RPM_PREFIXES}Prefix: ${PATH_PREFIX}\n")
+      list(APPEND RPM_USED_PACKAGE_PREFIXES "${PATH_PREFIX}")
+
+      if(CPACK_RPM_PACKAGE_DEBUG)
+        message("CPackRPM:Debug: removing '${PATH_PREFIX}' from relocation paths")
+      endif()
+    endif()
   endif()
 
   # set other path prefixes

+ 4 - 0
Tests/CPackComponentsForAll/MyLibCPackConfig-IgnoreGroup.cmake.in

@@ -28,6 +28,10 @@ if(CPACK_GENERATOR MATCHES "RPM")
 
   # test package description override - headers rpm is generated in the middle
   set(CPACK_RPM_headers_PACKAGE_DESCRIPTION "headers description")
+
+  # test package do not use CPACK_PACKAGING_INSTALL_PREFIX
+  # as relocation path
+  set(CPACK_RPM_NO_libraries_INSTALL_PREFIX_RELOCATION true)
 endif()
 
 if(CPACK_GENERATOR MATCHES "DEB")

+ 2 - 2
Tests/CPackComponentsForAll/RunCPackVerifyResult.cmake

@@ -174,10 +174,10 @@ if(CPackGen MATCHES "RPM")
       if(check_file_libraries_match)
         set(check_file_match_expected_summary ".*${CPACK_RPM_PACKAGE_SUMMARY}.*")
         set(check_file_match_expected_description ".*${CPACK_COMPONENT_LIBRARIES_DESCRIPTION}.*")
-        set(check_file_match_expected_relocation_path "Relocations${whitespaces}:${whitespaces}${CPACK_PACKAGING_INSTALL_PREFIX}${whitespaces}${CPACK_PACKAGING_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}")
+        set(check_file_match_expected_relocation_path "Relocations${whitespaces}:${whitespaces}${CPACK_PACKAGING_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}")
         set(check_file_match_expected_architecture "") # we don't explicitly set this value so it is different on each platform - ignore it
         set(spec_regex "*libraries*")
-        set(check_content_list "^/usr/foo/bar\n/usr/foo/bar/lib.*\n/usr/foo/bar/lib.*/libmylib.a$")
+        set(check_content_list "^/usr/foo/bar/lib.*\n/usr/foo/bar/lib.*/libmylib.a$")
       elseif(check_file_headers_match)
         set(check_file_match_expected_summary ".*${CPACK_RPM_headers_PACKAGE_SUMMARY}.*")
         set(check_file_match_expected_description ".*${CPACK_RPM_headers_PACKAGE_DESCRIPTION}.*")