################################################################################ # 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( 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(\"\" PROPERTIES \"${VARIABLE}\" \"\")\n" " or\n" " set_target_properties(\"\" PROPERTIES \"${VARIABLE}_\" \"\")\n" " instead.\n") endif() endfunction() ################################################################################ # Create variable with generator expression that expands to value of # target property _. If property is empty or not set then property # is used instead. Variable has watcher property_reader_guard that # doesn't allow to edit it. # create_property_reader() # Input: # name - Name of watched property and output variable ################################################################################ function(create_property_reader NAME) set(PROPERTY_READER_GUARD_DISABLED TRUE) set(CONFIG_VALUE "$>>>") set(IS_CONFIG_VALUE_EMPTY "$") set(GENERAL_VALUE "$>") set("${NAME}" "$" PARENT_SCOPE) variable_watch("${NAME}" property_reader_guard) endfunction() ################################################################################ # Set property $_${PROPS_CONFIG_U} of ${PROPS_TARGET} to # set_config_specific_property( ) # 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}")