mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2024-11-10 11:35:19 -05:00
65 lines
3.3 KiB
CMake
65 lines
3.3 KiB
CMake
################################################################################
|
|
# Command for variable_watch. This command issues error message, if a variable
|
|
# is changed. If variable PROPERTY_READER_GUARD_DISABLED is TRUE nothing happens
|
|
# variable_watch(<variable> property_reader_guard)
|
|
################################################################################
|
|
function(property_reader_guard VARIABLE ACCESS VALUE CURRENT_LIST_FILE STACK)
|
|
if("${PROPERTY_READER_GUARD_DISABLED}")
|
|
return()
|
|
endif()
|
|
|
|
if("${ACCESS}" STREQUAL "MODIFIED_ACCESS")
|
|
message(FATAL_ERROR
|
|
" Variable ${VARIABLE} is not supposed to be changed.\n"
|
|
" It is used only for reading target property ${VARIABLE}.\n"
|
|
" Use\n"
|
|
" set_target_properties(\"<target>\" PROPERTIES \"${VARIABLE}\" \"<value>\")\n"
|
|
" or\n"
|
|
" set_target_properties(\"<target>\" PROPERTIES \"${VARIABLE}_<CONFIG>\" \"<value>\")\n"
|
|
" instead.\n")
|
|
endif()
|
|
endfunction()
|
|
|
|
################################################################################
|
|
# Create variable <name> with generator expression that expands to value of
|
|
# target property <name>_<CONFIG>. If property is empty or not set then property
|
|
# <name> is used instead. Variable <name> has watcher property_reader_guard that
|
|
# doesn't allow to edit it.
|
|
# create_property_reader(<name>)
|
|
# Input:
|
|
# name - Name of watched property and output variable
|
|
################################################################################
|
|
function(create_property_reader NAME)
|
|
set(PROPERTY_READER_GUARD_DISABLED TRUE)
|
|
set(CONFIG_VALUE "$<TARGET_GENEX_EVAL:${PROPS_TARGET},$<TARGET_PROPERTY:${PROPS_TARGET},${NAME}_$<UPPER_CASE:$<CONFIG>>>>")
|
|
set(IS_CONFIG_VALUE_EMPTY "$<STREQUAL:${CONFIG_VALUE},>")
|
|
set(GENERAL_VALUE "$<TARGET_GENEX_EVAL:${PROPS_TARGET},$<TARGET_PROPERTY:${PROPS_TARGET},${NAME}>>")
|
|
set("${NAME}" "$<IF:${IS_CONFIG_VALUE_EMPTY},${GENERAL_VALUE},${CONFIG_VALUE}>" PARENT_SCOPE)
|
|
variable_watch("${NAME}" property_reader_guard)
|
|
endfunction()
|
|
|
|
################################################################################
|
|
# Set property $<name>_${PROPS_CONFIG_U} of ${PROPS_TARGET} to <value>
|
|
# set_config_specific_property(<name> <value>)
|
|
# Input:
|
|
# name - Prefix of property name
|
|
# value - New value
|
|
################################################################################
|
|
function(set_config_specific_property NAME VALUE)
|
|
set_target_properties("${PROPS_TARGET}" PROPERTIES "${NAME}_${PROPS_CONFIG_U}" "${VALUE}")
|
|
endfunction()
|
|
|
|
################################################################################
|
|
|
|
create_property_reader("TARGET_NAME")
|
|
create_property_reader("OUTPUT_DIRECTORY")
|
|
|
|
set_config_specific_property("TARGET_NAME" "${PROPS_TARGET}")
|
|
set_config_specific_property("OUTPUT_NAME" "${TARGET_NAME}")
|
|
set_config_specific_property("ARCHIVE_OUTPUT_NAME" "${TARGET_NAME}")
|
|
set_config_specific_property("LIBRARY_OUTPUT_NAME" "${TARGET_NAME}")
|
|
set_config_specific_property("RUNTIME_OUTPUT_NAME" "${TARGET_NAME}")
|
|
|
|
set_config_specific_property("ARCHIVE_OUTPUT_DIRECTORY" "${OUTPUT_DIRECTORY}")
|
|
set_config_specific_property("LIBRARY_OUTPUT_DIRECTORY" "${OUTPUT_DIRECTORY}")
|
|
set_config_specific_property("RUNTIME_OUTPUT_DIRECTORY" "${OUTPUT_DIRECTORY}") |