I think it would be nice to move get_item_rpaths() from BundleUtilities.cmake to gp_item_get_rpaths() in GetPrerequisites.cmake.
And how does your patch or patch set handle @loader_path being used in the rpath? Also, I think the function signature should include the rpath vs runpath distinction. I realize OS X doesn't have the runpath concept, but if one were to add support for Linux, one may need that where the runpath affects only finding immediate dependencies. Below is what I have for Linux and OS X. It include rpath vs. runpath, and expands out the @loader_path variable. Does it help, or did you have something else in mind? # Get rpaths for a binary. function(get_rpaths binary rpaths run_paths) get_filename_component(binary_dir "${binary}" PATH) unset(myrpaths) unset(myrunpaths) if(APPLE) execute_process(COMMAND otool -l "${binary}" COMMAND grep -A2 LC_RPATH COMMAND grep path OUTPUT_VARIABLE paths) string(REPLACE "\n" ";" paths "${paths}") foreach(str ${paths}) string(REGEX REPLACE " path (.*) \\(offset.*" "\\1" rpath "${str}") string(STRIP "${rpath}" rpath) string(REPLACE "@loader_path" "${binary_dir}" rpath "${rpath}") list(APPEND myrpaths "${rpath}") endforeach() else() execute_process(COMMAND objdump -p "${binary}" COMMAND grep RPATH OUTPUT_VARIABLE paths) execute_process(COMMAND objdump -p "${binary}" COMMAND grep RUNPATH OUTPUT_VARIABLE paths2) string(REPLACE "\n" ";" paths "${paths}") string(REPLACE "\n" ";" paths2 "${paths2}") foreach(str ${paths}) string(REGEX REPLACE " RPATH[ ]*(.*)" "\\1" rpath "${str}") string(STRIP "${rpath}" rpath) string(REPLACE "\$ORIGIN" "${binary_dir}" rpath "${rpath}") list(APPEND myrpaths "${rpath}") endforeach() foreach(str ${paths2}) string(REGEX REPLACE " RUNPATH[ ]*(.*)" "\\1" rpath "${str}") string(STRIP "${rpath}" rpath) string(REPLACE "\$ORIGIN" "${binary_dir}" rpath "${rpath}") list(APPEND myrunpaths "${rpath}") endforeach() endif() string(REPLACE ":" ";" myrpaths "${myrpaths}") string(REPLACE ":" ";" myrunpaths "${myrunpaths}") set(${rpaths} ${myrpaths} PARENT_SCOPE) set(${run_paths} ${myrunpaths} PARENT_SCOPE) endfunction() Clint ----- Original Message ----- > This is done by gathering LC_RPATH commands for main bundle executable and > using it for @rpath lookup in dependent frameworks. > > To achieve this all utility functions now take path to executable rather than > path to its directory. > > 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. > --- > Modules/BundleUtilities.cmake | 169 > ++++++++++++++++++++++++----------------- > Modules/GetPrerequisites.cmake | 48 ++++++------ > 2 files changed, 124 insertions(+), 93 deletions(-) > > diff --git a/Modules/BundleUtilities.cmake b/Modules/BundleUtilities.cmake > index 7e2b173..9733bc9 100644 > --- a/Modules/BundleUtilities.cmake > +++ b/Modules/BundleUtilities.cmake > @@ -19,6 +19,7 @@ > # get_bundle_and_executable > # get_bundle_all_executables > # get_item_key > +# get_item_rpaths > # clear_bundle_keys > # set_bundle_key_values > # get_bundle_keys > @@ -75,7 +76,7 @@ > # > # :: > # > -# GET_DOTAPP_DIR(<exe> <dotapp_dir_var>) > +# GET_DOTAPP_DIR(<executable> <dotapp_dir_var>) > # > # Returns the nearest parent dir whose name ends with ".app" given the > # full path to an executable. If there is no such parent dir, then > @@ -123,7 +124,7 @@ > # > # :: > # > -# SET_BUNDLE_KEY_VALUES(<keys_var> <context> <item> <exepath> <dirs> > +# SET_BUNDLE_KEY_VALUES(<keys_var> <context> <item> <executable> <dirs> > # <copyflag>) > # > # Add a key to the list (if necessary) for the given item. If added, > @@ -163,7 +164,7 @@ > # > # :: > # > -# FIXUP_BUNDLE_ITEM(<resolved_embedded_item> <exepath> <dirs>) > +# FIXUP_BUNDLE_ITEM(<resolved_embedded_item> <executable> <dirs>) > # > # Get the direct/non-system prerequisites of the resolved embedded item. > # For each prerequisite, change the way it is referenced to the value of > @@ -189,11 +190,11 @@ > # > # :: > # > -# VERIFY_BUNDLE_PREREQUISITES(<bundle> <result_var> <info_var>) > +# VERIFY_BUNDLE_PREREQUISITES(<bundle> <executable> <result_var> > <info_var>) > # > # Verifies that the sum of all prerequisites of all files inside the > -# bundle are contained within the bundle or are "system" libraries, > -# presumed to exist everywhere. > +# bundle with given main executable are contained within the bundle or are > +# "system" libraries, presumed to exist everywhere. > # > # :: > # > @@ -285,8 +286,8 @@ function(get_bundle_main_executable bundle result_var) > endfunction() > > > -function(get_dotapp_dir exe dotapp_dir_var) > - set(s "${exe}") > +function(get_dotapp_dir executable dotapp_dir_var) > + set(s "${executable}") > > if(s MATCHES "/.*\\.app/") > # If there is a ".app" parent directory, > @@ -407,6 +408,29 @@ function(get_bundle_all_executables bundle exes_var) > endfunction() > > > +function(get_item_rpaths item rpaths_var) > + if(APPLE) > + find_program(otool_cmd "otool") > + mark_as_advanced(otool_cmd) > + endif() > + > + if(otool_cmd) > + execute_process( > + COMMAND "${otool_cmd}" -l "${item}" > + OUTPUT_VARIABLE load_cmds_ov > + ) > + string(REGEX REPLACE "[^\n]+cmd LC_RPATH\n[^\n]+\n[^\n]+path ([^\n]+) > \\(offset[^\n]+\n" "rpath \\1\n" load_cmds_ov "${load_cmds_ov}") > + string(REGEX MATCHALL "rpath [^\n]+" load_cmds_ov "${load_cmds_ov}") > + string(REGEX REPLACE "rpath " "" load_cmds_ov "${load_cmds_ov}") > + if(load_cmds_ov) > + gp_append_unique(${rpaths_var} "${load_cmds_ov}") > + endif() > + endif() > + > + set(${rpaths_var} ${${rpaths_var}} PARENT_SCOPE) > +endfunction() > + > + > function(get_item_key item key_var) > get_filename_component(item_name "${item}" NAME) > if(WIN32) > @@ -425,12 +449,13 @@ function(clear_bundle_keys keys_var) > set(${key}_EMBEDDED_ITEM PARENT_SCOPE) > set(${key}_RESOLVED_EMBEDDED_ITEM PARENT_SCOPE) > set(${key}_COPYFLAG PARENT_SCOPE) > + set(${key}_RPATHS PARENT_SCOPE) > endforeach() > set(${keys_var} PARENT_SCOPE) > endfunction() > > > -function(set_bundle_key_values keys_var context item exepath dirs copyflag) > +function(set_bundle_key_values keys_var context item executable dirs > copyflag) > get_filename_component(item_name "${item}" NAME) > > get_item_key("${item}" key) > @@ -440,10 +465,17 @@ function(set_bundle_key_values keys_var context item > exepath dirs copyflag) > list(LENGTH ${keys_var} length_after) > > if(NOT length_before EQUAL length_after) > - gp_resolve_item("${context}" "${item}" "${exepath}" "${dirs}" > resolved_item) > + # Always use the exepath of the main bundle executable for > @executable_path > + # replacements: > + # > + get_filename_component(exepath "${executable}" PATH) > + > + gp_resolve_item("${context}" "${item}" "${executable}" "${dirs}" > resolved_item) > > gp_item_default_embedded_path("${item}" default_embedded_path) > > + get_item_rpaths("${resolved_item}" rpaths) > + > if(item MATCHES "[^/]+\\.framework/") > # For frameworks, construct the name under the embedded path from the > # opening "${item_name}.framework/" to the closing "/${item_name}": > @@ -479,6 +511,7 @@ function(set_bundle_key_values keys_var context item > exepath dirs copyflag) > set(${key}_EMBEDDED_ITEM "${embedded_item}" PARENT_SCOPE) > set(${key}_RESOLVED_EMBEDDED_ITEM "${resolved_embedded_item}" > PARENT_SCOPE) > set(${key}_COPYFLAG "${copyflag}" PARENT_SCOPE) > + set(${key}_RPATHS "${rpaths}" PARENT_SCOPE) > else() > #message("warning: item key '${key}' already in the list, subsequent > references assumed identical to first") > endif() > @@ -490,14 +523,9 @@ function(get_bundle_keys app libs dirs keys_var) > > get_bundle_and_executable("${app}" bundle executable valid) > if(valid) > - # Always use the exepath of the main bundle executable for > @executable_path > - # replacements: > - # > - get_filename_component(exepath "${executable}" PATH) > - > # But do fixups on all executables in the bundle: > # > - get_bundle_all_executables("${bundle}" exes) > + get_bundle_all_executables("${bundle}" file_list) > > # For each extra lib, accumulate a key as well and then also accumulate > # any of its prerequisites. (Extra libs are typically dynamically loaded > @@ -505,12 +533,12 @@ function(get_bundle_keys app libs dirs keys_var) > # but that do not show up in otool -L output...) > # > foreach(lib ${libs}) > - set_bundle_key_values(${keys_var} "${lib}" "${lib}" "${exepath}" > "${dirs}" 0) > + set_bundle_key_values(${keys_var} "${lib}" "${lib}" "${executable}" > "${dirs}" 0) > > set(prereqs "") > - get_prerequisites("${lib}" prereqs 1 1 "${exepath}" "${dirs}") > + get_prerequisites("${lib}" prereqs 1 1 "${executable}" "${dirs}") > foreach(pr ${prereqs}) > - set_bundle_key_values(${keys_var} "${lib}" "${pr}" "${exepath}" > "${dirs}" 1) > + set_bundle_key_values(${keys_var} "${lib}" "${pr}" "${executable}" > "${dirs}" 1) > endforeach() > endforeach() > > @@ -518,17 +546,17 @@ function(get_bundle_keys app libs dirs keys_var) > # The list of keys should be complete when all prerequisites of all > # binaries in the bundle have been analyzed. > # > - foreach(exe ${exes}) > + foreach(f ${file_list}) > # Add the exe itself to the keys: > # > - set_bundle_key_values(${keys_var} "${exe}" "${exe}" "${exepath}" > "${dirs}" 0) > + set_bundle_key_values(${keys_var} "${f}" "${f}" "${executable}" > "${dirs}" 0) > > # Add each prerequisite to the keys: > # > set(prereqs "") > - get_prerequisites("${exe}" prereqs 1 1 "${exepath}" "${dirs}") > + get_prerequisites("${f}" prereqs 1 1 "${executable}" "${dirs}") > foreach(pr ${prereqs}) > - set_bundle_key_values(${keys_var} "${exe}" "${pr}" "${exepath}" > "${dirs}" 1) > + set_bundle_key_values(${keys_var} "${f}" "${pr}" "${executable}" > "${dirs}" 1) > endforeach() > endforeach() > > @@ -542,6 +570,7 @@ function(get_bundle_keys app libs dirs keys_var) > set(${key}_EMBEDDED_ITEM "${${key}_EMBEDDED_ITEM}" PARENT_SCOPE) > set(${key}_RESOLVED_EMBEDDED_ITEM "${${key}_RESOLVED_EMBEDDED_ITEM}" > PARENT_SCOPE) > set(${key}_COPYFLAG "${${key}_COPYFLAG}" PARENT_SCOPE) > + set(${key}_RPATHS "${${key}_RPATHS}" PARENT_SCOPE) > endforeach() > endif() > endfunction() > @@ -612,7 +641,7 @@ function(copy_resolved_framework_into_bundle > resolved_item resolved_embedded_ite > endfunction() > > > -function(fixup_bundle_item resolved_embedded_item exepath dirs) > +function(fixup_bundle_item resolved_embedded_item executable dirs) > # This item's key is "ikey": > # > get_item_key("${resolved_embedded_item}" ikey) > @@ -622,7 +651,7 @@ function(fixup_bundle_item resolved_embedded_item exepath > dirs) > # tree, or in other varied locations around the file system, with our call > to > # install_name_tool. Make sure that doesn't happen here: > # > - get_dotapp_dir("${exepath}" exe_dotapp_dir) > + get_dotapp_dir("${executable}" exe_dotapp_dir) > string(LENGTH "${exe_dotapp_dir}/" exe_dotapp_dir_length) > string(LENGTH "${resolved_embedded_item}" resolved_embedded_item_length) > set(path_too_short 0) > @@ -648,7 +677,7 @@ function(fixup_bundle_item resolved_embedded_item exepath > dirs) > endif() > > set(prereqs "") > - get_prerequisites("${resolved_embedded_item}" prereqs 1 0 "${exepath}" > "${dirs}") > + get_prerequisites("${resolved_embedded_item}" prereqs 1 0 "${executable}" > "${dirs}") > > set(changes "") > > @@ -668,12 +697,20 @@ function(fixup_bundle_item resolved_embedded_item > exepath dirs) > execute_process(COMMAND chmod u+w "${resolved_embedded_item}") > endif() > > + foreach(rpath ${${ikey}_RPATHS}) > + set(changes ${changes} -delete_rpath "${rpath}") > + endforeach() > + > + if(${ikey}_EMBEDDED_ITEM) > + set(changes ${changes} -id "${${ikey}_EMBEDDED_ITEM}") > + endif() > + > # Change this item's id and all of its references in one call > # to install_name_tool: > # > - execute_process(COMMAND install_name_tool > - ${changes} -id "${${ikey}_EMBEDDED_ITEM}" "${resolved_embedded_item}" > - ) > + if(changes) > + execute_process(COMMAND install_name_tool ${changes} > "${resolved_embedded_item}") > + endif() > endfunction() > > > @@ -685,8 +722,6 @@ function(fixup_bundle app libs dirs) > > get_bundle_and_executable("${app}" bundle executable valid) > if(valid) > - get_filename_component(exepath "${executable}" PATH) > - > message(STATUS "fixup_bundle: preparing...") > get_bundle_keys("${app}" "${libs}" "${dirs}" keys) > > @@ -732,7 +767,7 @@ function(fixup_bundle app libs dirs) > math(EXPR i ${i}+1) > if(APPLE) > message(STATUS "${i}/${n}: fixing up > '${${key}_RESOLVED_EMBEDDED_ITEM}'") > - fixup_bundle_item("${${key}_RESOLVED_EMBEDDED_ITEM}" "${exepath}" > "${dirs}") > + fixup_bundle_item("${${key}_RESOLVED_EMBEDDED_ITEM}" "${executable}" > "${dirs}") > else() > message(STATUS "${i}/${n}: fix-up not required on this platform > '${${key}_RESOLVED_EMBEDDED_ITEM}'") > endif() > @@ -757,55 +792,49 @@ function(copy_and_fixup_bundle src dst libs dirs) > endfunction() > > > -function(verify_bundle_prerequisites bundle result_var info_var) > +function(verify_bundle_prerequisites bundle executable result_var info_var) > set(result 1) > set(info "") > set(count 0) > > - get_bundle_main_executable("${bundle}" main_bundle_exe) > - > - file(GLOB_RECURSE file_list "${bundle}/*") > + get_bundle_all_executables("${bundle}" file_list) > foreach(f ${file_list}) > - is_file_executable("${f}" is_executable) > - if(is_executable) > - get_filename_component(exepath "${f}" PATH) > - math(EXPR count "${count} + 1") > + math(EXPR count "${count} + 1") > > - message(STATUS "executable file ${count}: ${f}") > + message(STATUS "executable file ${count}: ${f}") > > - set(prereqs "") > - get_prerequisites("${f}" prereqs 1 1 "${exepath}" "") > + set(prereqs "") > + get_prerequisites("${f}" prereqs 1 1 "${executable}" "") > > - # On the Mac, > - # "embedded" and "system" prerequisites are fine... anything else > means > - # the bundle's prerequisites are not verified (i.e., the bundle is not > - # really "standalone") > - # > - # On Windows (and others? Linux/Unix/...?) > - # "local" and "system" prereqs are fine... > - # > - set(external_prereqs "") > + # On the Mac, > + # "embedded" and "system" prerequisites are fine... anything else means > + # the bundle's prerequisites are not verified (i.e., the bundle is not > + # really "standalone") > + # > + # On Windows (and others? Linux/Unix/...?) > + # "local" and "system" prereqs are fine... > + # > + set(external_prereqs "") > > - foreach(p ${prereqs}) > - set(p_type "") > - gp_file_type("${f}" "${p}" p_type) > + foreach(p ${prereqs}) > + set(p_type "") > + gp_file_type("${f}" "${p}" "${executable}" p_type) > > - if(APPLE) > - if(NOT "${p_type}" STREQUAL "embedded" AND NOT "${p_type}" > STREQUAL "system") > - set(external_prereqs ${external_prereqs} "${p}") > - endif() > - else() > - if(NOT "${p_type}" STREQUAL "local" AND NOT "${p_type}" STREQUAL > "system") > - set(external_prereqs ${external_prereqs} "${p}") > - endif() > + if(APPLE) > + if(NOT "${p_type}" STREQUAL "embedded" AND NOT "${p_type}" STREQUAL > "system") > + set(external_prereqs ${external_prereqs} "${p}") > + endif() > + else() > + if(NOT "${p_type}" STREQUAL "local" AND NOT "${p_type}" STREQUAL > "system") > + set(external_prereqs ${external_prereqs} "${p}") > endif() > - endforeach() > - > - if(external_prereqs) > - # Found non-system/somehow-unacceptable prerequisites: > - set(result 0) > - set(info ${info} "external prerequisites > found:\nf='${f}'\nexternal_prereqs='${external_prereqs}'\n") > endif() > + endforeach() > + > + if(external_prereqs) > + # Found non-system/somehow-unacceptable prerequisites: > + set(result 0) > + set(info ${info} "external prerequisites > found:\nf='${f}'\nexternal_prereqs='${external_prereqs}'\n") > endif() > endforeach() > > @@ -845,7 +874,7 @@ function(verify_app app) > > # Verify that the bundle does not have any "external" prerequisites: > # > - verify_bundle_prerequisites("${bundle}" verified info) > + verify_bundle_prerequisites("${bundle}" "${executable}" verified info) > message(STATUS "verified='${verified}'") > message(STATUS "info='${info}'") > message(STATUS "") > diff --git a/Modules/GetPrerequisites.cmake b/Modules/GetPrerequisites.cmake > index 49443e3..29a8470 100644 > --- a/Modules/GetPrerequisites.cmake > +++ b/Modules/GetPrerequisites.cmake > @@ -41,7 +41,7 @@ > # :: > # > # GET_PREREQUISITES(<target> <prerequisites_var> <exclude_system> > <recurse> > -# <exepath> <dirs>) > +# <executable> <dirs>) > # > # Get the list of shared library files required by <target>. The list > # in the variable named <prerequisites_var> should be empty on first > @@ -53,7 +53,7 @@ > # <exclude_system> must be 0 or 1 indicating whether to include or > # exclude "system" prerequisites. If <recurse> is set to 1 all > # prerequisites will be found recursively, if set to 0 only direct > -# prerequisites are listed. <exepath> is the path to the top level > +# prerequisites are listed. <executable> is the path to the top level > # executable used for @executable_path replacment on the Mac. <dirs> is > # a list of paths where libraries might be found: these paths are > # searched first when a target without any path info is given. Then > @@ -113,7 +113,7 @@ > # > # :: > # > -# GP_RESOLVE_ITEM(<context> <item> <exepath> <dirs> <resolved_item_var>) > +# GP_RESOLVE_ITEM(<context> <item> <executable> <dirs> > <resolved_item_var>) > # > # Resolve an item into an existing full path file. > # > @@ -122,13 +122,13 @@ > # > # :: > # > -# GP_RESOLVED_FILE_TYPE(<original_file> <file> <exepath> <dirs> > <type_var>) > +# GP_RESOLVED_FILE_TYPE(<original_file> <file> <executable> <dirs> > <type_var>) > # > # Return the type of <file> with respect to <original_file>. String > # describing type of prerequisite is returned in variable named > # <type_var>. > # > -# Use <exepath> and <dirs> if necessary to resolve non-absolute <file> > +# Use <executable> and <dirs> if necessary to resolve non-absolute <file> > # values -- but only for non-embedded items. > # > # Possible types are: > @@ -318,10 +318,12 @@ function(gp_item_default_embedded_path item > default_embedded_path_var) > endfunction() > > > -function(gp_resolve_item context item exepath dirs resolved_item_var) > +function(gp_resolve_item context item executable dirs resolved_item_var) > set(resolved 0) > set(resolved_item "${item}") > > + get_filename_component(exepath "${executable}" PATH) > + > # Is it already resolved? > # > if(IS_ABSOLUTE "${resolved_item}" AND EXISTS "${resolved_item}") > @@ -331,7 +333,7 @@ function(gp_resolve_item context item exepath dirs > resolved_item_var) > if(NOT resolved) > if(item MATCHES "^@executable_path") > # > - # @executable_path references are assumed relative to exepath > + # @executable_path references are assumed relative to executable > # > string(REPLACE "@executable_path" "${exepath}" ri "${item}") > get_filename_component(ri "${ri}" ABSOLUTE) > @@ -374,10 +376,11 @@ function(gp_resolve_item context item exepath dirs > resolved_item_var) > # > string(REPLACE "@rpath/" "" norpath_item "${item}") > > + get_item_key("${executable}" key) > set(ri "ri-NOTFOUND") > - find_file(ri "${norpath_item}" ${exepath} ${dirs} NO_DEFAULT_PATH) > + find_file(ri "${norpath_item}" ${dirs} ${${key}_RPATHS} > NO_DEFAULT_PATH) > if(ri) > - #message(STATUS "info: 'find_file' in exepath/dirs (${ri})") > + #message(STATUS "info: 'find_file' in exepath/rpaths/dirs (${ri})") > set(resolved 1) > set(resolved_item "${ri}") > set(ri "ri-NOTFOUND") > @@ -436,7 +439,7 @@ function(gp_resolve_item context item exepath dirs > resolved_item_var) > # by whatever logic they choose: > # > if(COMMAND gp_resolve_item_override) > - gp_resolve_item_override("${context}" "${item}" "${exepath}" "${dirs}" > resolved_item resolved) > + gp_resolve_item_override("${context}" "${item}" "${executable}" > "${dirs}" resolved_item resolved) > endif() > > if(NOT resolved) > @@ -459,7 +462,7 @@ warning: cannot resolve item '${item}' > # > # context='${context}' > # item='${item}' > -# exepath='${exepath}' > +# executable='${executable}' > # dirs='${dirs}' > # resolved_item_var='${resolved_item_var}' > > #****************************************************************************** > @@ -470,7 +473,7 @@ warning: cannot resolve item '${item}' > endfunction() > > > -function(gp_resolved_file_type original_file file exepath dirs type_var) > +function(gp_resolved_file_type original_file file executable dirs type_var) > #message(STATUS "**") > > if(NOT IS_ABSOLUTE "${original_file}") > @@ -489,7 +492,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}" "${executable}" "${dirs}" > resolved_file) > endif() > > string(TOLOWER "${original_file}" original_lower) > @@ -595,21 +598,19 @@ function(gp_resolved_file_type original_file file > exepath dirs type_var) > endfunction() > > > -function(gp_file_type original_file file type_var) > +function(gp_file_type original_file file executable type_var) > if(NOT IS_ABSOLUTE "${original_file}") > message(STATUS "warning: gp_file_type expects absolute full path for > first arg original_file") > endif() > > - get_filename_component(exepath "${original_file}" PATH) > - > set(type "") > - gp_resolved_file_type("${original_file}" "${file}" "${exepath}" "" type) > + gp_resolved_file_type("${original_file}" "${file}" "${executable}" "" > type) > > set(${type_var} "${type}" PARENT_SCOPE) > endfunction() > > > -function(get_prerequisites target prerequisites_var exclude_system recurse > exepath dirs) > +function(get_prerequisites target prerequisites_var exclude_system recurse > executable dirs) > set(verbose 0) > set(eol_char "E") > > @@ -738,6 +739,7 @@ function(get_prerequisites target prerequisites_var > exclude_system recurse exepa > > if("${gp_tool}" STREQUAL "ldd") > set(old_ld_env "$ENV{LD_LIBRARY_PATH}") > + get_filename_component(exepath "${executable}" PATH) > set(new_ld_env "${exepath}") > foreach(dir ${dirs}) > set(new_ld_env "${new_ld_env}:${dir}") > @@ -834,7 +836,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}" "${executable}" "${dirs}" > type) > > if("${type}" STREQUAL "system") > set(add_item 0) > @@ -855,7 +857,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}" "${executable}" "${dirs}" > resolved_item) > set(unseen_prereqs ${unseen_prereqs} "${resolved_item}") > endif() > endif() > @@ -874,7 +876,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} "${executable}" "${dirs}") > endforeach() > endif() > > @@ -911,7 +913,7 @@ function(list_prerequisites target) > get_filename_component(exepath "${target}" PATH) > > set(prereqs "") > - get_prerequisites("${target}" prereqs ${exclude_system} ${all} > "${exepath}" "") > + get_prerequisites("${target}" prereqs ${exclude_system} ${all} "${target}" > "") > > if(print_target) > message(STATUS "File '${target}' depends on:") > @@ -925,7 +927,7 @@ function(list_prerequisites target) > endif() > > if(print_prerequisite_type) > - gp_file_type("${target}" "${d}" type) > + gp_file_type("${target}" "${d}" "" type) > set(type_str " (${type})") > endif() > > -- > 1.9.3 (Apple Git-50) > > -- > > Powered by www.kitware.com > > Please keep messages on-topic and check the CMake FAQ at: > http://www.cmake.org/Wiki/CMake_FAQ > > Kitware offers various services to support the CMake community. For more > information on each offering, please visit: > > CMake Support: http://cmake.org/cmake/help/support.html > CMake Consulting: http://cmake.org/cmake/help/consulting.html > CMake Training Courses: http://cmake.org/cmake/help/training.html > > Visit other Kitware open-source projects at > http://www.kitware.com/opensource/opensource.html > > Follow this link to subscribe/unsubscribe: > http://public.kitware.com/mailman/listinfo/cmake-developers > -- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: http://public.kitware.com/mailman/listinfo/cmake-developers