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