Просмотр исходного кода

GetPrerequisites: Fix handling of executable scripts

Fixes: #18667
Alexander Grund 7 лет назад
Родитель
Сommit
08be74bfd7

+ 9 - 0
Modules/GetPrerequisites.cmake

@@ -660,6 +660,15 @@ function(get_prerequisites target prerequisites_var exclude_system recurse exepa
     return()
     return()
   endif()
   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}
   set(gp_cmd_paths ${gp_cmd_paths}
     "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\14.0;InstallDir]/../../VC/bin"
     "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\14.0;InstallDir]/../../VC/bin"
     "$ENV{VS140COMNTOOLS}/../../VC/bin"
     "$ENV{VS140COMNTOOLS}/../../VC/bin"

+ 3 - 0
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

+ 19 - 0
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)

+ 1 - 0
Tests/RunCMake/GetPrerequisites/RunCMakeTest.cmake

@@ -1,3 +1,4 @@
 include(RunCMake)
 include(RunCMake)
 
 
 run_cmake_command(TargetMissing ${CMAKE_COMMAND} -P ${RunCMake_SOURCE_DIR}/TargetMissing.cmake)
 run_cmake_command(TargetMissing ${CMAKE_COMMAND} -P ${RunCMake_SOURCE_DIR}/TargetMissing.cmake)
+run_cmake_command(ExecutableScripts ${CMAKE_COMMAND} -P ${RunCMake_SOURCE_DIR}/ExecutableScripts.cmake)

+ 3 - 0
Tests/RunCMake/GetPrerequisites/script

@@ -0,0 +1,3 @@
+#!/bin/bash
+
+echo "Hello World"

+ 3 - 0
Tests/RunCMake/GetPrerequisites/script.bat

@@ -0,0 +1,3 @@
+@echo off
+
+echo "Hello world"

+ 3 - 0
Tests/RunCMake/GetPrerequisites/script.sh

@@ -0,0 +1,3 @@
+#!/bin/bash
+
+echo "Hello World"