include(CMakeParseArguments) function(precondition var) cmake_parse_arguments( PRECONDITION # prefix "NEGATE" # options "MESSAGE" # single-value args "" # multi-value args ${ARGN}) if (PRECONDITION_NEGATE) if (${var}) if (PRECONDITION_MESSAGE) message(FATAL_ERROR "Error! ${PRECONDITION_MESSAGE}") else() message(FATAL_ERROR "Error! Variable ${var} is true or not empty. The value of ${var} is ${${var}}.") endif() endif() else() if (NOT ${var}) if (PRECONDITION_MESSAGE) message(FATAL_ERROR "Error! ${PRECONDITION_MESSAGE}") else() message(FATAL_ERROR "Error! Variable ${var} is false, empty or not set.") endif() endif() endif() endfunction() # Translate a yes/no variable to the presence of a given string in a # variable. # # Usage: # translate_flag(is_set flag_name var_name) # # If is_set is true, sets ${var_name} to ${flag_name}. Otherwise, # unsets ${var_name}. function(translate_flag is_set flag_name var_name) if(${is_set}) set("${var_name}" "${flag_name}" PARENT_SCOPE) else() set("${var_name}" "" PARENT_SCOPE) endif() endfunction() # Run a shell command and assign output to a variable or fail with an error. # Example usage: # runcmd(COMMAND "xcode-select" "-p" # VARIABLE xcodepath # ERROR "Unable to find current Xcode path") function(runcmd) cmake_parse_arguments(RUNCMD "" "VARIABLE;ERROR" "COMMAND" ${ARGN}) execute_process( COMMAND ${RUNCMD_COMMAND} OUTPUT_VARIABLE ${RUNCMD_VARIABLE} RESULT_VARIABLE result ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) if(NOT "${result}" MATCHES "0") message(FATAL_ERROR "${RUNCMD_ERROR}") endif() set(${RUNCMD_VARIABLE} ${${RUNCMD_VARIABLE}} PARENT_SCOPE) endfunction(runcmd)