summaryrefslogtreecommitdiffstats
path: root/Modules/GetPrerequisites.cmake
diff options
context:
space:
mode:
authorAdam Strzelecki <ono@java.pl>2014-09-04 11:19:29 (GMT)
committerBrad King <brad.king@kitware.com>2014-10-10 14:16:24 (GMT)
commitf7df82acaaf83515c84d2aa006a06b94f144953e (patch)
treee37510b10d8a924cbe2b1401daff69d0e29b8bf5 /Modules/GetPrerequisites.cmake
parent14bc686fffd1ecf3073d2d394af96bdb6e5b8769 (diff)
downloadCMake-f7df82acaaf83515c84d2aa006a06b94f144953e.zip
CMake-f7df82acaaf83515c84d2aa006a06b94f144953e.tar.gz
CMake-f7df82acaaf83515c84d2aa006a06b94f144953e.tar.bz2
BundleUtilities: Resolve & replace @rpath placeholders
This is done by gathering LC_RPATH commands for main bundle executable and using it for @rpath lookup in dependent frameworks. All functions that need to carry rpaths to now take optional <rpaths> argument. This enabled apps using @rpath to be bundled correctly, which will be necessary for upcoming Qt 5.4 that will use @rpath for all frameworks. Check that install_name_tool has -delete_rpath before using it. Otherwise it will fail with Xcode 3.x on 10.5 which has no -delete_rpath option for install_name_tool command, that was first introduced in 10.6 SDK, even that 10.5 supports LC_RPATH and @rpath.
Diffstat (limited to 'Modules/GetPrerequisites.cmake')
-rw-r--r--Modules/GetPrerequisites.cmake23
1 files changed, 14 insertions, 9 deletions
diff --git a/Modules/GetPrerequisites.cmake b/Modules/GetPrerequisites.cmake
index 49443e3..9963517 100644
--- a/Modules/GetPrerequisites.cmake
+++ b/Modules/GetPrerequisites.cmake
@@ -41,7 +41,7 @@
# ::
#
# GET_PREREQUISITES(<target> <prerequisites_var> <exclude_system> <recurse>
-# <exepath> <dirs>)
+# <exepath> <dirs> [<rpaths>])
#
# Get the list of shared library files required by <target>. The list
# in the variable named <prerequisites_var> should be empty on first
@@ -113,7 +113,8 @@
#
# ::
#
-# GP_RESOLVE_ITEM(<context> <item> <exepath> <dirs> <resolved_item_var>)
+# GP_RESOLVE_ITEM(<context> <item> <exepath> <dirs> <resolved_item_var>
+# [<rpaths>])
#
# Resolve an item into an existing full path file.
#
@@ -122,7 +123,8 @@
#
# ::
#
-# GP_RESOLVED_FILE_TYPE(<original_file> <file> <exepath> <dirs> <type_var>)
+# GP_RESOLVED_FILE_TYPE(<original_file> <file> <exepath> <dirs> <type_var>
+# [<rpaths>])
#
# Return the type of <file> with respect to <original_file>. String
# describing type of prerequisite is returned in variable named
@@ -321,6 +323,7 @@ endfunction()
function(gp_resolve_item context item exepath dirs resolved_item_var)
set(resolved 0)
set(resolved_item "${item}")
+ set(rpaths "${ARGV5}")
# Is it already resolved?
#
@@ -375,9 +378,9 @@ function(gp_resolve_item context item exepath dirs resolved_item_var)
string(REPLACE "@rpath/" "" norpath_item "${item}")
set(ri "ri-NOTFOUND")
- find_file(ri "${norpath_item}" ${exepath} ${dirs} NO_DEFAULT_PATH)
+ find_file(ri "${norpath_item}" ${exepath} ${dirs} ${rpaths} NO_DEFAULT_PATH)
if(ri)
- #message(STATUS "info: 'find_file' in exepath/dirs (${ri})")
+ #message(STATUS "info: 'find_file' in exepath/dirs/rpaths (${ri})")
set(resolved 1)
set(resolved_item "${ri}")
set(ri "ri-NOTFOUND")
@@ -471,6 +474,7 @@ endfunction()
function(gp_resolved_file_type original_file file exepath dirs type_var)
+ set(rpaths "${ARGV5}")
#message(STATUS "**")
if(NOT IS_ABSOLUTE "${original_file}")
@@ -489,7 +493,7 @@ function(gp_resolved_file_type original_file file exepath dirs type_var)
if(NOT is_embedded)
if(NOT IS_ABSOLUTE "${file}")
- gp_resolve_item("${original_file}" "${file}" "${exepath}" "${dirs}" resolved_file)
+ gp_resolve_item("${original_file}" "${file}" "${exepath}" "${dirs}" resolved_file "${rpaths}")
endif()
string(TOLOWER "${original_file}" original_lower)
@@ -612,6 +616,7 @@ endfunction()
function(get_prerequisites target prerequisites_var exclude_system recurse exepath dirs)
set(verbose 0)
set(eol_char "E")
+ set(rpaths "${ARGV6}")
if(NOT IS_ABSOLUTE "${target}")
message("warning: target '${target}' is not absolute...")
@@ -834,7 +839,7 @@ function(get_prerequisites target prerequisites_var exclude_system recurse exepa
if(add_item AND ${exclude_system})
set(type "")
- gp_resolved_file_type("${target}" "${item}" "${exepath}" "${dirs}" type)
+ gp_resolved_file_type("${target}" "${item}" "${exepath}" "${dirs}" type "${rpaths}")
if("${type}" STREQUAL "system")
set(add_item 0)
@@ -855,7 +860,7 @@ function(get_prerequisites target prerequisites_var exclude_system recurse exepa
# that the analysis tools can simply accept it as input.
#
if(NOT list_length_before_append EQUAL list_length_after_append)
- gp_resolve_item("${target}" "${item}" "${exepath}" "${dirs}" resolved_item)
+ gp_resolve_item("${target}" "${item}" "${exepath}" "${dirs}" resolved_item "${rpaths}")
set(unseen_prereqs ${unseen_prereqs} "${resolved_item}")
endif()
endif()
@@ -874,7 +879,7 @@ function(get_prerequisites target prerequisites_var exclude_system recurse exepa
if(${recurse})
set(more_inputs ${unseen_prereqs})
foreach(input ${more_inputs})
- get_prerequisites("${input}" ${prerequisites_var} ${exclude_system} ${recurse} "${exepath}" "${dirs}")
+ get_prerequisites("${input}" ${prerequisites_var} ${exclude_system} ${recurse} "${exepath}" "${dirs}" "${rpaths}")
endforeach()
endif()