From 428680da92b98755be1a908ee4a5d705d8753bb9 Mon Sep 17 00:00:00 2001
From: Alexander Grund <git@grundis.de>
Date: Sun, 30 Dec 2018 15:08:49 +0100
Subject: GetPrerequisites: Don't use hardcoded name for otool

---
 Modules/GetPrerequisites.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Modules/GetPrerequisites.cmake b/Modules/GetPrerequisites.cmake
index 5b32f7c..8d54fed 100644
--- a/Modules/GetPrerequisites.cmake
+++ b/Modules/GetPrerequisites.cmake
@@ -850,7 +850,7 @@ function(get_prerequisites target prerequisites_var exclude_system recurse exepa
   set(gp_install_id)
   if(gp_tool STREQUAL "otool")
     execute_process(
-      COMMAND otool -D ${target}
+      COMMAND ${gp_cmd} -D ${target}
       RESULT_VARIABLE otool_rv
       OUTPUT_VARIABLE gp_install_id_ov
       ERROR_VARIABLE otool_ev
-- 
cgit v0.12


From 5072598f0795f44e157bef8423feda7de24c5504 Mon Sep 17 00:00:00 2001
From: Alexander Grund <git@grundis.de>
Date: Sun, 30 Dec 2018 15:17:35 +0100
Subject: BundleUtilites: Don't use hardcoded name for install_name_tool

---
 Modules/BundleUtilities.cmake | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/Modules/BundleUtilities.cmake b/Modules/BundleUtilities.cmake
index 10e5510..d5c47f8 100644
--- a/Modules/BundleUtilities.cmake
+++ b/Modules/BundleUtilities.cmake
@@ -877,9 +877,13 @@ function(fixup_bundle_item resolved_embedded_item exepath dirs)
     execute_process(COMMAND chmod u+w "${resolved_embedded_item}")
   endif()
 
+  # CMAKE_INSTALL_NAME_TOOL may not be set if executed in script mode
+  # Duplicated from CMakeFindBinUtils.cmake
+  find_program(CMAKE_INSTALL_NAME_TOOL NAMES install_name_tool HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
+
   # Only if install_name_tool supports -delete_rpath:
   #
-  execute_process(COMMAND install_name_tool
+  execute_process(COMMAND ${CMAKE_INSTALL_NAME_TOOL}
     OUTPUT_VARIABLE install_name_tool_usage
     ERROR_VARIABLE  install_name_tool_usage
     )
@@ -897,7 +901,7 @@ function(fixup_bundle_item resolved_embedded_item exepath dirs)
   # to install_name_tool:
   #
   if(changes)
-    set(cmd install_name_tool ${changes} "${resolved_embedded_item}")
+    set(cmd ${CMAKE_INSTALL_NAME_TOOL} ${changes} "${resolved_embedded_item}")
     execute_process(COMMAND ${cmd} RESULT_VARIABLE install_name_tool_result)
     if(NOT install_name_tool_result EQUAL 0)
       string(REPLACE ";" "' '" msg "'${cmd}'")
-- 
cgit v0.12


From 1bac4678eaf7beefb12ad91ecdea0e551b4d0fcf Mon Sep 17 00:00:00 2001
From: Alexander Grund <git@grundis.de>
Date: Sun, 16 Dec 2018 17:14:23 +0100
Subject: GetPrerequisites: Add GET_PREREQUISITES_VERBOSE to set verbose

---
 Modules/GetPrerequisites.cmake | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/Modules/GetPrerequisites.cmake b/Modules/GetPrerequisites.cmake
index 8d54fed..fea299c 100644
--- a/Modules/GetPrerequisites.cmake
+++ b/Modules/GetPrerequisites.cmake
@@ -63,6 +63,9 @@ searched first when a target without any path info is given.  Then
 standard system locations are also searched: PATH, Framework
 locations, /usr/lib...
 
+The variable GET_PREREQUISITES_VERBOSE can be set to true to enable verbose
+output.
+
 ::
 
   LIST_PREREQUISITES(<target> [<recurse> [<exclude_system> [<verbose>]]])
@@ -644,6 +647,10 @@ function(get_prerequisites target prerequisites_var exclude_system recurse exepa
     set(rpaths "")
   endif()
 
+  if(GET_PREREQUISITES_VERBOSE)
+    set(verbose 1)
+  endif()
+
   if(NOT IS_ABSOLUTE "${target}")
     message("warning: target '${target}' is not absolute...")
   endif()
-- 
cgit v0.12


From 52445300d67df73b5b8c288cc33c915053c7ba24 Mon Sep 17 00:00:00 2001
From: Alexander Grund <git@grundis.de>
Date: Sun, 16 Dec 2018 17:18:41 +0100
Subject: GetPrerequisites: Allow prefixed tools

e.g. for cross-compilation with e.g. x86_64-pc-linux-gnu-ldd
---
 Modules/GetPrerequisites.cmake | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/Modules/GetPrerequisites.cmake b/Modules/GetPrerequisites.cmake
index fea299c..d3b773c 100644
--- a/Modules/GetPrerequisites.cmake
+++ b/Modules/GetPrerequisites.cmake
@@ -718,25 +718,25 @@ function(get_prerequisites target prerequisites_var exclude_system recurse exepa
 
   set(gp_cmd_maybe_filter)      # optional command to pre-filter gp_tool results
 
-  if(gp_tool STREQUAL "ldd")
+  if(gp_tool MATCHES "ldd$")
     set(gp_cmd_args "")
     set(gp_regex "^[\t ]*[^\t ]+ => ([^\t\(]+) .*${eol_char}$")
     set(gp_regex_error "not found${eol_char}$")
     set(gp_regex_fallback "^[\t ]*([^\t ]+) => ([^\t ]+).*${eol_char}$")
     set(gp_regex_cmp_count 1)
-  elseif(gp_tool STREQUAL "otool")
+  elseif(gp_tool MATCHES "otool$")
     set(gp_cmd_args "-L")
     set(gp_regex "^\t([^\t]+) \\(compatibility version ([0-9]+.[0-9]+.[0-9]+), current version ([0-9]+.[0-9]+.[0-9]+)\\)${eol_char}$")
     set(gp_regex_error "")
     set(gp_regex_fallback "")
     set(gp_regex_cmp_count 3)
-  elseif(gp_tool STREQUAL "dumpbin")
+  elseif(gp_tool MATCHES "dumpbin$")
     set(gp_cmd_args "/dependents")
     set(gp_regex "^    ([^ ].*[Dd][Ll][Ll])${eol_char}$")
     set(gp_regex_error "")
     set(gp_regex_fallback "")
     set(gp_regex_cmp_count 1)
-  elseif(gp_tool STREQUAL "objdump")
+  elseif(gp_tool MATCHES "objdump$")
     set(gp_cmd_args "-p")
     set(gp_regex "^\t*DLL Name: (.*\\.[Dd][Ll][Ll])${eol_char}$")
     set(gp_regex_error "")
@@ -759,7 +759,7 @@ function(get_prerequisites target prerequisites_var exclude_system recurse exepa
   endif()
 
 
-  if(gp_tool STREQUAL "dumpbin")
+  if(gp_tool MATCHES "dumpbin$")
     # When running dumpbin, it also needs the "Common7/IDE" directory in the
     # PATH. It will already be in the PATH if being run from a Visual Studio
     # command prompt. Add it to the PATH here in case we are running from a
@@ -788,7 +788,7 @@ function(get_prerequisites target prerequisites_var exclude_system recurse exepa
   #
   # </setup-gp_tool-vars>
 
-  if(gp_tool STREQUAL "ldd")
+  if(gp_tool MATCHES "ldd$")
     set(old_ld_env "$ENV{LD_LIBRARY_PATH}")
     set(new_ld_env "${exepath}")
     foreach(dir ${dirs})
@@ -813,7 +813,7 @@ function(get_prerequisites target prerequisites_var exclude_system recurse exepa
     ERROR_VARIABLE gp_ev
     )
 
-  if(gp_tool STREQUAL "dumpbin")
+  if(gp_tool MATCHES "dumpbin$")
     # Exclude delay load dependencies under windows (they are listed in dumpbin output after the message below)
     string(FIND "${gp_cmd_ov}" "Image has the following delay load dependencies" gp_delayload_pos)
     if (${gp_delayload_pos} GREATER -1)
@@ -827,7 +827,7 @@ function(get_prerequisites target prerequisites_var exclude_system recurse exepa
   endif()
 
   if(NOT gp_rv STREQUAL "0")
-    if(gp_tool STREQUAL "dumpbin")
+    if(gp_tool MATCHES "dumpbin$")
       # dumpbin error messages seem to go to stdout
       message(FATAL_ERROR "${gp_cmd} failed: ${gp_rv}\n${gp_ev}\n${gp_cmd_ov}")
     else()
@@ -835,7 +835,7 @@ function(get_prerequisites target prerequisites_var exclude_system recurse exepa
     endif()
   endif()
 
-  if(gp_tool STREQUAL "ldd")
+  if(gp_tool MATCHES "ldd$")
     set(ENV{LD_LIBRARY_PATH} "${old_ld_env}")
   endif()
 
@@ -855,7 +855,7 @@ function(get_prerequisites target prerequisites_var exclude_system recurse exepa
   # check for install id and remove it from list, since otool -L can include a
   # reference to itself
   set(gp_install_id)
-  if(gp_tool STREQUAL "otool")
+  if(gp_tool MATCHES "otool$")
     execute_process(
       COMMAND ${gp_cmd} -D ${target}
       RESULT_VARIABLE otool_rv
-- 
cgit v0.12


From 08be74bfd7e24af9ffdb64dddffd3d56bf52c3ce Mon Sep 17 00:00:00 2001
From: Alexander Grund <git@grundis.de>
Date: Sun, 16 Dec 2018 18:05:23 +0100
Subject: GetPrerequisites: Fix handling of executable scripts

Fixes: #18667
---
 Modules/GetPrerequisites.cmake                        |  9 +++++++++
 .../GetPrerequisites/ExecutableScripts-stdout.txt     |  3 +++
 .../RunCMake/GetPrerequisites/ExecutableScripts.cmake | 19 +++++++++++++++++++
 Tests/RunCMake/GetPrerequisites/RunCMakeTest.cmake    |  1 +
 Tests/RunCMake/GetPrerequisites/script                |  3 +++
 Tests/RunCMake/GetPrerequisites/script.bat            |  3 +++
 Tests/RunCMake/GetPrerequisites/script.sh             |  3 +++
 7 files changed, 41 insertions(+)
 create mode 100644 Tests/RunCMake/GetPrerequisites/ExecutableScripts-stdout.txt
 create mode 100644 Tests/RunCMake/GetPrerequisites/ExecutableScripts.cmake
 create mode 100755 Tests/RunCMake/GetPrerequisites/script
 create mode 100755 Tests/RunCMake/GetPrerequisites/script.bat
 create mode 100755 Tests/RunCMake/GetPrerequisites/script.sh

diff --git a/Modules/GetPrerequisites.cmake b/Modules/GetPrerequisites.cmake
index d3b773c..fa6d75a 100644
--- a/Modules/GetPrerequisites.cmake
+++ b/Modules/GetPrerequisites.cmake
@@ -660,6 +660,15 @@ function(get_prerequisites target prerequisites_var exclude_system recurse exepa
     return()
   endif()
 
+  # Check for a script by extension (.bat,.sh,...) or if the file starts with "#!" (shebang)
+  file(READ ${target} file_contents LIMIT 5)
+  if(target MATCHES "\\.(bat|c?sh|bash|ksh|cmd)$" OR file_contents MATCHES "^#!")
+    message(STATUS "GetPrequisites(${target}) : ignoring script file")
+    # Clear var
+    set(${prerequisites_var} "" PARENT_SCOPE)
+    return()
+  endif()
+
   set(gp_cmd_paths ${gp_cmd_paths}
     "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\14.0;InstallDir]/../../VC/bin"
     "$ENV{VS140COMNTOOLS}/../../VC/bin"
diff --git a/Tests/RunCMake/GetPrerequisites/ExecutableScripts-stdout.txt b/Tests/RunCMake/GetPrerequisites/ExecutableScripts-stdout.txt
new file mode 100644
index 0000000..5a353d8
--- /dev/null
+++ b/Tests/RunCMake/GetPrerequisites/ExecutableScripts-stdout.txt
@@ -0,0 +1,3 @@
+-- GetPrequisites\(.*script.sh\) : ignoring script file
+-- GetPrequisites\(.*script.bat\) : ignoring script file
+-- GetPrequisites\(.*script\) : ignoring script file
diff --git a/Tests/RunCMake/GetPrerequisites/ExecutableScripts.cmake b/Tests/RunCMake/GetPrerequisites/ExecutableScripts.cmake
new file mode 100644
index 0000000..d1bc9b1
--- /dev/null
+++ b/Tests/RunCMake/GetPrerequisites/ExecutableScripts.cmake
@@ -0,0 +1,19 @@
+include(GetPrerequisites)
+
+function(check_script script)
+  set(prereqs "")
+  get_prerequisites(${script} prereqs 1 1 "" "")
+  if(NOT "${prereqs}" STREQUAL "")
+    message(FATAL_ERROR "Prerequisites for ${script} not empty")
+  endif()
+endfunction()
+
+# Should not throw any errors
+# Regular executable
+get_prerequisites(${CMAKE_COMMAND} cmake_prereqs 1 1 "" "")
+# Shell script
+check_script(${CMAKE_CURRENT_LIST_DIR}/script.sh)
+# Batch script
+check_script(${CMAKE_CURRENT_LIST_DIR}/script.bat)
+# Shell script without extension
+check_script(${CMAKE_CURRENT_LIST_DIR}/script)
diff --git a/Tests/RunCMake/GetPrerequisites/RunCMakeTest.cmake b/Tests/RunCMake/GetPrerequisites/RunCMakeTest.cmake
index 3856c54..a635e38 100644
--- a/Tests/RunCMake/GetPrerequisites/RunCMakeTest.cmake
+++ b/Tests/RunCMake/GetPrerequisites/RunCMakeTest.cmake
@@ -1,3 +1,4 @@
 include(RunCMake)
 
 run_cmake_command(TargetMissing ${CMAKE_COMMAND} -P ${RunCMake_SOURCE_DIR}/TargetMissing.cmake)
+run_cmake_command(ExecutableScripts ${CMAKE_COMMAND} -P ${RunCMake_SOURCE_DIR}/ExecutableScripts.cmake)
diff --git a/Tests/RunCMake/GetPrerequisites/script b/Tests/RunCMake/GetPrerequisites/script
new file mode 100755
index 0000000..23bf47c
--- /dev/null
+++ b/Tests/RunCMake/GetPrerequisites/script
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+echo "Hello World"
diff --git a/Tests/RunCMake/GetPrerequisites/script.bat b/Tests/RunCMake/GetPrerequisites/script.bat
new file mode 100755
index 0000000..dbb0ec2
--- /dev/null
+++ b/Tests/RunCMake/GetPrerequisites/script.bat
@@ -0,0 +1,3 @@
+@echo off
+
+echo "Hello world"
diff --git a/Tests/RunCMake/GetPrerequisites/script.sh b/Tests/RunCMake/GetPrerequisites/script.sh
new file mode 100755
index 0000000..23bf47c
--- /dev/null
+++ b/Tests/RunCMake/GetPrerequisites/script.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+echo "Hello World"
-- 
cgit v0.12