From d55e26f9bcd2b665ea7a81574f3d150746a5f55b Mon Sep 17 00:00:00 2001
From: Robert K <robertk@posteo.org>
Date: Wed, 1 Jul 2015 11:33:22 +0200
Subject: [PATCH] [Cmake][cleanup] check for necessary unix commands and throw
 error if not found.

---
 cmake/modules/OverloadCompilerFlags.cmake | 53 ++++++++++++++++++-----
 1 file changed, 41 insertions(+), 12 deletions(-)

diff --git a/cmake/modules/OverloadCompilerFlags.cmake b/cmake/modules/OverloadCompilerFlags.cmake
index c5783e836..7453411c9 100644
--- a/cmake/modules/OverloadCompilerFlags.cmake
+++ b/cmake/modules/OverloadCompilerFlags.cmake
@@ -22,17 +22,52 @@ if(ALLOW_EXTRA_CXXFLAGS AND (${CMAKE_GENERATOR} MATCHES ".*Unix Makefiles.*"))
   set(ALLOW_CXXFLAGS_OVERWRITE ON)
 endif()
 
+macro(find_extended_unix_commands)
+  include(FindUnixCommands)
+  find_program (GREP_PROGRAM grep)
+  if(NOT GREP_PROGRAM)
+    message( SEND_ERROR "grep not found, please disable ALLOW_CXXFLAGS_OVERWRITE")
+  endif()
+  find_program (SED_PROGRAM  sed)
+  if(NOT SED_PROGRAM)
+    message( SEND_ERROR "sed not found, please disable ALLOW_CXXFLAGS_OVERWRITE")
+  endif()
+  find_program (CUT_PROGRAM  cut)
+  if(NOT CUT_PROGRAM)
+    message( SEND_ERROR "cut not found, please disable ALLOW_CXXFLAGS_OVERWRITE")
+  endif()
+  find_program (ENV_PROGRAM  env)
+  if(NOT ENV_PROGRAM)
+    message( SEND_ERROR "env not found, please disable ALLOW_CXXFLAGS_OVERWRITE")
+  endif()
+  find_program (ECHO_PROGRAM echo)
+  if(NOT ECHO_PROGRAM)
+    message( SEND_ERROR "echo not found, please disable ALLOW_CXXFLAGS_OVERWRITE")
+  endif()
+  find_program (CHMOD_PROGRAM chmod)
+  if(NOT CHMOD_PROGRAM)
+    message( SEND_ERROR "chmod not found, please disable ALLOW_CXXFLAGS_OVERWRITE")
+  endif()
+  mark_as_advanced(GREP_PROGRAM)
+  mark_as_advanced(SED_PROGRAM)
+  mark_as_advanced(CUT_PROGRAM)
+  mark_as_advanced(ENV_PROGRAM)
+  mark_as_advanced(ECHO_PROGRAM)
+  mark_as_advanced(CHMOD_PROGRAM)
+endmacro(find_extended_unix_commands)
+
 # init compiler script and store CXX flags
 macro(initialize_compiler_script)
   if(ALLOW_CXXFLAGS_OVERWRITE AND (${CMAKE_GENERATOR} MATCHES ".*Unix Makefiles.*"))
-    find_program (BASH_PROGRAM bash)
+    # check for unix commands necessary
+    find_extended_unix_commands()
     # set CXXFLAGS as environment variable
     set( DEFAULT_CXXFLAGS ${CMAKE_CXX_FLAGS})
     set( CMAKE_CXX_FLAGS "" )
     set( DEFAULT_CXX_COMPILER ${CMAKE_CXX_COMPILER} )
-    set( COMPILER_SCRIPT_FILE "#!${BASH_PROGRAM}\nexec ${CMAKE_CXX_COMPILER} \"\$@\"")
-    file(WRITE ${CMAKE_BINARY_DIR}/compiler.sh "${COMPILER_SCRIPT_FILE}" )
-    exec_program(chmod ARGS "+x ${CMAKE_BINARY_DIR}/compiler.sh")
+    set( COMPILER_SCRIPT_FILE "#!${BASH}\nexec ${CMAKE_CXX_COMPILER} \"\$@\"")
+    file(WRITE ${CMAKE_BINARY_DIR}/compiler.sh "${COMPILER_SCRIPT_FILE}")
+    exec_program(${CHMOD_PROGRAM} ARGS "+x ${CMAKE_BINARY_DIR}/compiler.sh")
     set(CMAKE_CXX_COMPILER ${CMAKE_BINARY_DIR}/compiler.sh)
   endif()
 endmacro()
@@ -40,12 +75,7 @@ endmacro()
 # finalize compiler script and write it
 macro(finalize_compiler_script)
   if(ALLOW_CXXFLAGS_OVERWRITE AND (${CMAKE_GENERATOR} MATCHES ".*Unix Makefiles.*"))
-    find_program (GREP_PROGRAM grep)
-    find_program (SED_PROGRAM  sed)
-    find_program (CUT_PROGRAM  cut)
-    find_program (ENV_PROGRAM  env)
-    find_program (ECHO_PROGRAM echo)
-    set( COMPILER_SCRIPT_FILE "#!${BASH_PROGRAM}\nSED=${SED_PROGRAM}\nGREP=${GREP_PROGRAM}")
+    set( COMPILER_SCRIPT_FILE "#!${BASH}\nSED=${SED_PROGRAM}\nGREP=${GREP_PROGRAM}")
     set( COMPILER_SCRIPT_FILE "${COMPILER_SCRIPT_FILE}\nCUT=${CUT_PROGRAM}\nENV=${ENV_PROGRAM}\nECHO=${ECHO_PROGRAM}")
     set( COMPILER_SCRIPT_FILE "${COMPILER_SCRIPT_FILE}\n# store flags\nFLAGS=\"\$@\"")
     set( COMPILER_SCRIPT_FILE "${COMPILER_SCRIPT_FILE}\nMAKE_EXECUTABLE_NEW=0\n")
@@ -63,7 +93,6 @@ macro(finalize_compiler_script)
     set( COMPILER_SCRIPT_FILE "${COMPILER_SCRIPT_FILE}\n  FLAGS=\"\$FLAGS \$NEWFLAG\"\ndone")
     set( COMPILER_SCRIPT_FILE "${COMPILER_SCRIPT_FILE}\n\$ECHO \"${DEFAULT_CXX_COMPILER} \$CXXFLAGS \$FLAGS\"")
     set( COMPILER_SCRIPT_FILE "${COMPILER_SCRIPT_FILE}\nexec ${DEFAULT_CXX_COMPILER} \$CXXFLAGS \$FLAGS")
-    file(WRITE ${CMAKE_BINARY_DIR}/compiler.sh "${COMPILER_SCRIPT_FILE}" )
-    exec_program(chmod ARGS "+x ${CMAKE_BINARY_DIR}/compiler.sh")
+    file(WRITE ${CMAKE_BINARY_DIR}/compiler.sh "${COMPILER_SCRIPT_FILE}")
   endif()
 endmacro()
-- 
GitLab