# Needed for source property tests enable_language(C) #================================================= # Directory property chaining #================================================= foreach(i RANGE 1 5) foreach(propType DIRECTORY TARGET SOURCE TEST) define_property(${propType} PROPERTY USER_PROP${i} INHERITED BRIEF_DOCS "Brief" FULL_DOCS "Full" ) endforeach() endforeach() get_property(val DIRECTORY PROPERTY USER_PROP1) message(STATUS "TopDir-to-nothing chaining: '${val}'") set_property(GLOBAL PROPERTY USER_PROP1 vGlobal) set_property(GLOBAL PROPERTY USER_PROP2 vGlobal) set_property(DIRECTORY PROPERTY USER_PROP2 vTopDir) set_property(GLOBAL PROPERTY USER_PROP3 vGlobal) set_property(DIRECTORY PROPERTY USER_PROP4 vTopDir) get_property(val DIRECTORY PROPERTY USER_PROP1) message(STATUS "TopDir-to-global chaining: '${val}'") get_property(val DIRECTORY PROPERTY USER_PROP2) message(STATUS "TopDir no chaining required: '${val}'") set_property(DIRECTORY APPEND PROPERTY USER_PROP3 aTopDir) get_property(val DIRECTORY PROPERTY USER_PROP3) message(STATUS "TopDir unset append chaining: '${val}'") set_property(DIRECTORY APPEND PROPERTY USER_PROP4 aTopDir) get_property(val DIRECTORY PROPERTY USER_PROP4) message(STATUS "TopDir preset append chaining: '${val}'") add_subdirectory(USER_PROP_INHERITED) #================================================= # The other property types all chain the same way #================================================= macro(__chainToDirTests propType) string(TOUPPER ${propType} propTypeUpper) get_property(val ${propTypeUpper} ${propType}1 PROPERTY USER_PROP2) message(STATUS "${propType}-to-directory chaining: '${val}'") set_property(${propTypeUpper} ${propType}1 APPEND PROPERTY USER_PROP2 a${propType}) get_property(val ${propTypeUpper} ${propType}1 PROPERTY USER_PROP2) message(STATUS "${propType} unset append chaining: '${val}'") set_property(${propTypeUpper} ${propType}1 PROPERTY USER_PROP1 v${propType}) get_property(val ${propTypeUpper} ${propType}1 PROPERTY USER_PROP1) message(STATUS "${propType} no chaining required: '${val}'") set_property(${propTypeUpper} ${propType}1 APPEND PROPERTY USER_PROP1 a${propType}) get_property(val ${propTypeUpper} ${propType}1 PROPERTY USER_PROP1) message(STATUS "${propType} preset append chaining: '${val}'") get_property(val ${propTypeUpper} ${propType}2 PROPERTY USER_PROP5) message(STATUS "${propType} undefined get chaining: '${val}'") set_property(${propTypeUpper} ${propType}2 APPEND PROPERTY USER_PROP5 a${propType}) get_property(val ${propTypeUpper} ${propType}2 PROPERTY USER_PROP5) message(STATUS "${propType} undefined append chaining: '${val}'") endmacro() add_custom_target(Target1) add_custom_target(Target2) __chainToDirTests(Target) foreach(i RANGE 1 2) set(Source${i} "${CMAKE_CURRENT_BINARY_DIR}/src${i}.c") file(WRITE ${Source${i}} "int foo${i}() { return ${i}; }") endforeach() add_library(srcProps OBJECT ${Source1} ${Source2}) __chainToDirTests(Source) add_test(NAME Test1 COMMAND ${CMAKE_COMMAND} -E touch_nocreate iDoNotExist) add_test(NAME Test2 COMMAND ${CMAKE_COMMAND} -E touch_nocreate iDoNotExist) __chainToDirTests(Test)