|  | function(REPLACE_WITH_ENV_IF_SET var) | 
|  | # Replaces var in parent scope with enviroment variable if set. | 
|  | if(NOT "$ENV{${var}}" STREQUAL "") | 
|  | set(${var} $ENV{${var}} PARENT_SCOPE) | 
|  | endif() | 
|  | endfunction() | 
|  |  | 
|  | function(SETUP_ENV) | 
|  | # Creates a target "env" that has the properties that are all paths to | 
|  | # executables.  See OTHER_BINARIES and MAYBE_CONDA_BINARIES for list of | 
|  | # binaries. | 
|  | # | 
|  | # For executables listed in MAYBE_CONDA_BINARIES, if conda has been setup in | 
|  | # <root>/env, then each executable will point to <root>/env/conda/bin/<exe>. | 
|  | # | 
|  | # If conda is not present, then the executable is expected to be on the PATH. | 
|  | # | 
|  | # In all cases, setting an enviroment variable will override the default | 
|  | # behavior. | 
|  | # | 
|  | # Example: export VPR=<path to VPR> | 
|  | # | 
|  | # will cause get_target_property(var env VPR) to return $ENV{VPR}. | 
|  | # | 
|  | # FIXME: Consider using CMake CACHE variables instead of target properties. | 
|  |  | 
|  | set(options) | 
|  | set(oneValueArgs) | 
|  | set(multiValueArgs) | 
|  | cmake_parse_arguments( | 
|  | SETUP_ENV | 
|  | "${options}" | 
|  | "${oneValueArgs}" | 
|  | "${multiValueArgs}" | 
|  | ${ARGN} | 
|  | ) | 
|  |  | 
|  | add_custom_target(env) | 
|  | set( | 
|  | MAYBE_CONDA_BINARIES | 
|  | python3 | 
|  | ) | 
|  |  | 
|  | set_target_properties(env PROPERTIES USE_CONDA FALSE) | 
|  | foreach(binary ${MAYBE_CONDA_BINARIES}) | 
|  | string(TOUPPER ${binary} binary_upper) | 
|  | if(DEFINED ENV{${binary_upper}}) | 
|  | set(${binary_upper} $ENV{${binary_upper}}) | 
|  | else() | 
|  | find_program(${binary_upper} ${binary}) | 
|  | endif() | 
|  |  | 
|  | set_target_properties(env PROPERTIES | 
|  | ${binary_upper} ${${binary_upper}} | 
|  | ${binary_upper}_TARGET ${binary} | 
|  | ) | 
|  | endforeach() | 
|  |  | 
|  | set_target_properties(env PROPERTIES | 
|  | QUIET_CMD ${f4pga-arch-defs_SOURCE_DIR}/utils/quiet_cmd.sh | 
|  | QUIET_CMD_TARGET "" | 
|  | ) | 
|  | endfunction() | 
|  |  | 
|  | function(ADD_ENV_EXECUTABLE) | 
|  | set(options REQUIRED) | 
|  | set(oneValueArgs EXE) | 
|  | set(multiValueArgs) | 
|  | cmake_parse_arguments( | 
|  | ADD_ENV_EXECUTABLE | 
|  | "${options}" | 
|  | "${oneValueArgs}" | 
|  | "${multiValueArgs}" | 
|  | ${ARGN} | 
|  | ) | 
|  |  | 
|  | set(binary ${ADD_ENV_EXECUTABLE_EXE}) | 
|  | string(TOUPPER ${binary} binary_upper) | 
|  | string(REPLACE "-" "_" binary_upper ${binary_upper}) | 
|  | if(DEFINED ENV{${binary_upper}}) | 
|  | set(${binary_upper} $ENV{${binary_upper}}) | 
|  | else() | 
|  | find_program(${binary_upper} ${binary}) | 
|  | endif() | 
|  |  | 
|  | set_target_properties(env PROPERTIES | 
|  | ${binary_upper} ${${binary_upper}} | 
|  | ) | 
|  |  | 
|  | if(${ADD_ENV_EXECUTABLE_REQUIRED}) | 
|  | if(NOT EXISTS ${${binary_upper}}) | 
|  | message(FATAL_ERROR "Executable ${binary} not found and is marked required.  Either set env var ${binary_upper} or ensure ${binary} is on the path.") | 
|  | endif() | 
|  | endif() | 
|  | endfunction() |