From 57344977f563b129b0c93d9fc60d75747a89dd8b Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 10 Jan 2011 12:07:32 -0500 Subject: [PATCH] Document reading LOCATION_ early as undefined (#11671) Although the LOCATION property is for compatibility with CMake 2.4, the LOCATION_ property is modern. However, if a project reads it and sets location-altering properties later the behavior is undefined. See parent commit for details. --- Source/cmTarget.cxx | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 7617cca37..52574e244 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -501,6 +501,15 @@ void cmTarget::DefineProperties(cmake *cm) "value is the default. " "See documentation of CMAKE__LINKER_PREFERENCE variables."); +#define CM_LOCATION_UNDEFINED_BEHAVIOR \ + "\n" \ + "Do not set properties that affect the location of the target after " \ + "reading this property. These include properties whose names match " \ + "\"(RUNTIME|LIBRARY|ARCHIVE)_OUTPUT_(NAME|DIRECTORY)(_)?\" " \ + "or \"(IMPLIB_)?(PREFIX|SUFFIX)\". " \ + "Failure to follow this rule is not diagnosed and leaves the location " \ + "of the target undefined." + cm->DefineProperty ("LOCATION", cmProperty::TARGET, "Read-only location of a target on disk.", @@ -520,14 +529,7 @@ void cmTarget::DefineProperties(cmake *cm) "In CMake 2.8.4 and above add_custom_command recognizes generator " "expressions to refer to target locations anywhere in the command. " "Therefore this property is not needed for creating custom commands." - "\n" - "Do not read this property until after all other properties that can " - "affect the location of the target have been set. " - "These include properties whose names match " - "\"(IMPLIB_)?(PREFIX|SUFFIX)\" or " - "\"(RUNTIME|LIBRARY|ARCHIVE)_OUTPUT_(NAME|DIRECTORY)(_)?\". " - "Failure to follow this rule is not diagnosed and leaves the location " - "of the target undefined."); + CM_LOCATION_UNDEFINED_BEHAVIOR); cm->DefineProperty ("LOCATION_", cmProperty::TARGET, @@ -540,7 +542,8 @@ void cmTarget::DefineProperties(cmake *cm) "By default CMake looks for an exact-match but otherwise uses an " "arbitrary available configuration. " "Use the MAP_IMPORTED_CONFIG_ property to map imported " - "configurations explicitly."); + "configurations explicitly." + CM_LOCATION_UNDEFINED_BEHAVIOR); cm->DefineProperty ("LINK_DEPENDS", cmProperty::TARGET,