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  35bc416eff0a51f23c6cea368fb2f70d49969b64 (commit)
       via  5e5d0abdf2c4b09a5674bd37a8608dbf27707a47 (commit)
      from  782205d95d50934d6b493201996459614f2193be (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 -----------------------------------------------------------------
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=35bc416eff0a51f23c6cea368fb2f70d49969b64
commit 35bc416eff0a51f23c6cea368fb2f70d49969b64
Merge: 782205d 5e5d0ab
Author:     Domen Vrankar <domen.vran...@gmail.com>
AuthorDate: Thu Mar 31 11:25:53 2016 -0400
Commit:     CMake Topic Stage <kwro...@kitware.com>
CommitDate: Thu Mar 31 11:25:53 2016 -0400

    Merge topic 'cpack-rpm-external-symlink-handling' into next
    
    5e5d0abd CPack/RPM external symlink handling


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=5e5d0abdf2c4b09a5674bd37a8608dbf27707a47
commit 5e5d0abdf2c4b09a5674bd37a8608dbf27707a47
Author:     Domen Vrankar <domen.vran...@gmail.com>
AuthorDate: Thu Mar 31 07:48:38 2016 +0200
Commit:     Domen Vrankar <domen.vran...@gmail.com>
CommitDate: Thu Mar 31 17:23:13 2016 +0200

    CPack/RPM external symlink handling
    
    Symbolic links that point to external
    location no longer cause cmake to fail
    with string out of bounds error but
    are instead packaged as non relocatable
    symlinks and print out a warning message.

diff --git a/Help/release/dev/cpack-rpm-external-symlink-handling.rst 
b/Help/release/dev/cpack-rpm-external-symlink-handling.rst
new file mode 100644
index 0000000..d9a3d8c
--- /dev/null
+++ b/Help/release/dev/cpack-rpm-external-symlink-handling.rst
@@ -0,0 +1,5 @@
+cpack-rpm-external-symlink-handling
+--------------------------------
+
+* The "CPackRPM" module learned how to correctly handle symlinks
+  that are pointing outside generated packages.
diff --git a/Modules/CPackRPM.cmake b/Modules/CPackRPM.cmake
index ae51dc1..713b938 100644
--- a/Modules/CPackRPM.cmake
+++ b/Modules/CPackRPM.cmake
@@ -599,9 +599,10 @@
 # while determining if symlink should be either created or present in a
 # post install script - depending on relocation paths.
 #
-# Currenty there are a few limitations though:
+# Symbolic links that point to locations outside packaging path produce a
+# warning and are treated as non relocatable permanent symbolic links.
 #
-# * Only symbolic links with relative path can be packaged.
+# Currenty there are a few limitations though:
 #
 # * For component based packaging component interdependency is not checked
 #   when processing symbolic links. Symbolic links pointing to content of
@@ -1068,13 +1069,28 @@ function(cpack_rpm_prepare_install_files 
INSTALL_FILES_LIST WDIR PACKAGE_PREFIXE
           get_filename_component(SYMLINK_POINT_ 
"${SYMLINK_LOCATION_}/${SYMLINK_POINT_}" ABSOLUTE)
         endif()
 
-        string(SUBSTRING "${SYMLINK_POINT_}" ${WDR_LEN_} -1 SYMLINK_POINT_WD_)
+        # recalculate path length after conversion to canonical form
+        string(LENGTH "${SYMLINK_POINT_}" SYMLINK_POINT_LENGTH_)
 
-        cpack_rpm_symlink_get_relocation_prefixes("${F}" "${PACKAGE_PREFIXES}" 
"SYMLINK_RELOCATIONS")
-        cpack_rpm_symlink_get_relocation_prefixes("${SYMLINK_POINT_WD_}" 
"${PACKAGE_PREFIXES}" "POINT_RELOCATIONS")
+        if(SYMLINK_POINT_ MATCHES "${WDIR}/.*")
+          # only symlinks that are pointing inside the packaging structure 
should be checked for relocation
+          string(SUBSTRING "${SYMLINK_POINT_}" ${WDR_LEN_} -1 
SYMLINK_POINT_WD_)
+          cpack_rpm_symlink_get_relocation_prefixes("${F}" 
"${PACKAGE_PREFIXES}" "SYMLINK_RELOCATIONS")
+          cpack_rpm_symlink_get_relocation_prefixes("${SYMLINK_POINT_WD_}" 
"${PACKAGE_PREFIXES}" "POINT_RELOCATIONS")
 
-        list(LENGTH SYMLINK_RELOCATIONS SYMLINK_RELOCATIONS_COUNT)
-        list(LENGTH POINT_RELOCATIONS POINT_RELOCATIONS_COUNT)
+          list(LENGTH SYMLINK_RELOCATIONS SYMLINK_RELOCATIONS_COUNT)
+          list(LENGTH POINT_RELOCATIONS POINT_RELOCATIONS_COUNT)
+        else()
+          # location pointed to is ouside WDR so it should be treated as a 
permanent symlink
+          set(SYMLINK_POINT_WD_ "${SYMLINK_POINT_}")
+
+          unset(SYMLINK_RELOCATIONS)
+          unset(POINT_RELOCATIONS)
+          unset(SYMLINK_RELOCATIONS_COUNT)
+          unset(POINT_RELOCATIONS_COUNT)
+
+          message(AUTHOR_WARNING "CPackRPM:Warning: Symbolic link '${F}' 
points to location that is outside packaging path! Link will possibly not be 
relocatable.")
+        endif()
 
         if(SYMLINK_RELOCATIONS_COUNT AND POINT_RELOCATIONS_COUNT)
           # find matching
diff --git a/Tests/CPackComponentsForAll/CMakeLists.txt 
b/Tests/CPackComponentsForAll/CMakeLists.txt
index 823f6db..05c13a4 100644
--- a/Tests/CPackComponentsForAll/CMakeLists.txt
+++ b/Tests/CPackComponentsForAll/CMakeLists.txt
@@ -92,6 +92,9 @@ if("${CPACK_GENERATOR}" MATCHES "RPM")
   # test symbolic link to location outside package
   execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ./outside_package 
symlink_outside_package)
   install(FILES ${CMAKE_CURRENT_BINARY_DIR}/symlink_outside_package 
DESTINATION ${CMAKE_INSTALL_LIBDIR}/inside_relocatable_one/depth_two COMPONENT 
libraries)
+  # test symbolic link to location outside wdr (packaging directory)
+  execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink 
/outside_package_wdr symlink_outside_wdr)
+  install(FILES ${CMAKE_CURRENT_BINARY_DIR}/symlink_outside_wdr DESTINATION 
${CMAKE_INSTALL_LIBDIR}/inside_relocatable_one/depth_two COMPONENT libraries)
 endif()
 
 # CPack boilerplate for this project
diff --git a/Tests/CPackComponentsForAll/RunCPackVerifyResult.cmake 
b/Tests/CPackComponentsForAll/RunCPackVerifyResult.cmake
index 0c5cca8..e956f17 100644
--- a/Tests/CPackComponentsForAll/RunCPackVerifyResult.cmake
+++ b/Tests/CPackComponentsForAll/RunCPackVerifyResult.cmake
@@ -188,6 +188,7 @@ if(CPackGen MATCHES "RPM")
 /usr/foo/bar/lib${LIB_SUFFIX}/inside_relocatable_one/depth_two/depth_three
 
/usr/foo/bar/lib${LIB_SUFFIX}/inside_relocatable_one/depth_two/depth_three/symlink_parentdir_path
 
/usr/foo/bar/lib${LIB_SUFFIX}/inside_relocatable_one/depth_two/symlink_outside_package
+/usr/foo/bar/lib${LIB_SUFFIX}/inside_relocatable_one/depth_two/symlink_outside_wdr
 
/usr/foo/bar/lib${LIB_SUFFIX}/inside_relocatable_one/depth_two/symlink_relocatable_subpath
 
/usr/foo/bar/lib${LIB_SUFFIX}/inside_relocatable_one/depth_two/symlink_samedir_path
 
/usr/foo/bar/lib${LIB_SUFFIX}/inside_relocatable_one/depth_two/symlink_samedir_path_current_dir
@@ -354,6 +355,8 @@ if(CPackGen MATCHES "RPM")
         string(REGEX MATCH 
"^.*${whitespaces}->${whitespaces}${CPACK_PACKAGING_INSTALL_PREFIX}/non_relocatable/depth_two$"
 check_symlink "${SYMLINK_POINT_}")
       elseif("${symlink_name}" STREQUAL "symlink_outside_package")
         string(REGEX MATCH "^.*${whitespaces}->${whitespaces}outside_package$" 
check_symlink "${SYMLINK_POINT_}")
+      elseif("${symlink_name}" STREQUAL "symlink_outside_wdr")
+        string(REGEX MATCH 
"^.*${whitespaces}->${whitespaces}/outside_package_wdr$" check_symlink 
"${SYMLINK_POINT_}")
       elseif("${symlink_name}" STREQUAL "symlink_other_relocatable_path"
           OR "${symlink_name}" STREQUAL "symlink_from_non_relocatable_path"
           OR "${symlink_name}" STREQUAL "symlink_relocatable_subpath")

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

Summary of changes:


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

Reply via email to