From 18b9e7db6c84bfe3936d33e7c7ca86a544f3e818 Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 17 Jan 2008 10:00:19 -0500 Subject: [PATCH] ENH: Enable CMAKE__DEFINE_FLAG for COMPILE_DEFINITIONS property implementation. --- Modules/Platform/xlf.cmake | 2 +- Source/cmLocalGenerator.cxx | 27 +++++++---- Source/cmLocalGenerator.h | 3 +- Source/cmLocalVisualStudio6Generator.cxx | 58 ++++++++++++------------ Source/cmMakefileTargetGenerator.cxx | 8 ++-- 5 files changed, 55 insertions(+), 43 deletions(-) diff --git a/Modules/Platform/xlf.cmake b/Modules/Platform/xlf.cmake index 4939e6ce2..adf146f8a 100644 --- a/Modules/Platform/xlf.cmake +++ b/Modules/Platform/xlf.cmake @@ -1 +1 @@ -set(CMAKE_DEFINE_FLAG_Fortran "-WF,-D") +set(CMAKE_Fortran_DEFINE_FLAG "-WF,-D") diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index 636ee8d84..c7888427c 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -1202,8 +1202,9 @@ const char* cmLocalGenerator::GetIncludeFlags(const char* lang) void cmLocalGenerator::FixDefineFlags(std::string& flags, const char* lang) { - std::string defineFlagVar = "CMAKE_DEFINE_FLAG_"; + std::string defineFlagVar = "CMAKE_"; defineFlagVar += lang; + defineFlagVar += "_DEFINE_FLAG"; std::string defineFlag = this->Makefile->GetSafeDefinition(defineFlagVar.c_str()); if(defineFlag.size() == 0) @@ -2219,7 +2220,8 @@ void cmLocalGenerator::AppendFlags(std::string& flags, //---------------------------------------------------------------------------- void cmLocalGenerator::AppendDefines(std::string& defines, - const char* defines_list) + const char* defines_list, + const char* lang) { // Short-circuit if there are no definitions. if(!defines_list) @@ -2237,14 +2239,22 @@ void cmLocalGenerator::AppendDefines(std::string& defines, return; } - // Separate from previous definitions with a space. - if(!defines.empty()) + // Lookup the define flag for the current language. + std::string dflag = "-D"; + if(lang) { - defines += " "; + std::string defineFlagVar = "CMAKE_"; + defineFlagVar += lang; + defineFlagVar += "_DEFINE_FLAG"; + const char* df = this->Makefile->GetDefinition(defineFlagVar.c_str()); + if(df && *df) + { + dflag = df; + } } // Add each definition to the command line with appropriate escapes. - const char* dsep = "-D"; + const char* dsep = defines.empty()? "" : " "; for(std::vector::const_iterator di = defines_vec.begin(); di != defines_vec.end(); ++di) { @@ -2254,10 +2264,12 @@ void cmLocalGenerator::AppendDefines(std::string& defines, continue; } - // Append the -D + // Separate from previous definitions. defines += dsep; + dsep = " "; // Append the definition with proper escaping. + defines += dflag; if(this->WatcomWMake) { // The Watcom compiler does its own command line parsing instead @@ -2284,7 +2296,6 @@ void cmLocalGenerator::AppendDefines(std::string& defines, // Make the definition appear properly on the command line. defines += this->EscapeForShell(di->c_str(), true); } - dsep = " -D"; } } diff --git a/Source/cmLocalGenerator.h b/Source/cmLocalGenerator.h index 23458c9cf..ce0d0d69f 100644 --- a/Source/cmLocalGenerator.h +++ b/Source/cmLocalGenerator.h @@ -143,7 +143,8 @@ public: * Encode a list of preprocessor definitions for the compiler * command line. */ - void AppendDefines(std::string& defines, const char* defines_list); + void AppendDefines(std::string& defines, const char* defines_list, + const char* lang); /** Translate a dependency as given in CMake code to the name to appear in a generated build file. If the given name is that of diff --git a/Source/cmLocalVisualStudio6Generator.cxx b/Source/cmLocalVisualStudio6Generator.cxx index 9465275bc..a79f8a708 100644 --- a/Source/cmLocalVisualStudio6Generator.cxx +++ b/Source/cmLocalVisualStudio6Generator.cxx @@ -413,29 +413,6 @@ void cmLocalVisualStudio6Generator compileFlags += cflags; } - // Add per-source and per-configuration preprocessor definitions. - std::map cdmap; - this->AppendDefines(compileFlags, - (*sf)->GetProperty("COMPILE_DEFINITIONS")); - if(const char* cdefs = (*sf)->GetProperty("COMPILE_DEFINITIONS_DEBUG")) - { - this->AppendDefines(cdmap["DEBUG"], cdefs); - } - if(const char* cdefs = (*sf)->GetProperty("COMPILE_DEFINITIONS_RELEASE")) - { - this->AppendDefines(cdmap["RELEASE"], cdefs); - } - if(const char* cdefs = - (*sf)->GetProperty("COMPILE_DEFINITIONS_MINSIZEREL")) - { - this->AppendDefines(cdmap["MINSIZEREL"], cdefs); - } - if(const char* cdefs = - (*sf)->GetProperty("COMPILE_DEFINITIONS_RELWITHDEBINFO")) - { - this->AppendDefines(cdmap["RELWITHDEBINFO"], cdefs); - } - const char* lang = this->GetSourceFileLanguage(*(*sf)); if(lang) { @@ -443,7 +420,7 @@ void cmLocalVisualStudio6Generator { // force a C++ file type compileFlags += " /TP "; - } + } else if(strcmp(lang, "C") == 0) { // force to c file type @@ -451,6 +428,29 @@ void cmLocalVisualStudio6Generator } } + // Add per-source and per-configuration preprocessor definitions. + std::map cdmap; + this->AppendDefines(compileFlags, + (*sf)->GetProperty("COMPILE_DEFINITIONS"), lang); + if(const char* cdefs = (*sf)->GetProperty("COMPILE_DEFINITIONS_DEBUG")) + { + this->AppendDefines(cdmap["DEBUG"], cdefs, lang); + } + if(const char* cdefs = (*sf)->GetProperty("COMPILE_DEFINITIONS_RELEASE")) + { + this->AppendDefines(cdmap["RELEASE"], cdefs, lang); + } + if(const char* cdefs = + (*sf)->GetProperty("COMPILE_DEFINITIONS_MINSIZEREL")) + { + this->AppendDefines(cdmap["MINSIZEREL"], cdefs, lang); + } + if(const char* cdefs = + (*sf)->GetProperty("COMPILE_DEFINITIONS_RELWITHDEBINFO")) + { + this->AppendDefines(cdmap["RELWITHDEBINFO"], cdefs, lang); + } + bool excludedFromBuild = (lang && (*sf)->GetPropertyAsBool("HEADER_FILE_ONLY")); @@ -1503,17 +1503,17 @@ void cmLocalVisualStudio6Generator } // Add per-target and per-configuration preprocessor definitions. - this->AppendDefines(flags, target.GetProperty("COMPILE_DEFINITIONS")); + this->AppendDefines(flags, target.GetProperty("COMPILE_DEFINITIONS"), 0); this->AppendDefines(flagsDebug, - target.GetProperty("COMPILE_DEFINITIONS_DEBUG")); + target.GetProperty("COMPILE_DEFINITIONS_DEBUG"), 0); this->AppendDefines(flagsRelease, - target.GetProperty("COMPILE_DEFINITIONS_RELEASE")); + target.GetProperty("COMPILE_DEFINITIONS_RELEASE"), 0); this->AppendDefines (flagsMinSize, - target.GetProperty("COMPILE_DEFINITIONS_MINSIZEREL")); + target.GetProperty("COMPILE_DEFINITIONS_MINSIZEREL"), 0); this->AppendDefines (flagsDebugRel, - target.GetProperty("COMPILE_DEFINITIONS_RELWITHDEBINFO")); + target.GetProperty("COMPILE_DEFINITIONS_RELWITHDEBINFO"), 0); // The template files have CXX FLAGS in them, that need to be replaced. // There are not separate CXX and C template files, so we use the same diff --git a/Source/cmMakefileTargetGenerator.cxx b/Source/cmMakefileTargetGenerator.cxx index e529ef7bd..ce1442fd4 100644 --- a/Source/cmMakefileTargetGenerator.cxx +++ b/Source/cmMakefileTargetGenerator.cxx @@ -267,12 +267,12 @@ void cmMakefileTargetGenerator::WriteTargetLanguageFlags() // Add preprocessor definitions for this target and configuration. this->LocalGenerator->AppendDefines - (defines, this->Target->GetProperty("COMPILE_DEFINITIONS")); + (defines, this->Target->GetProperty("COMPILE_DEFINITIONS"), lang); std::string defPropName = "COMPILE_DEFINITIONS_"; defPropName += cmSystemTools::UpperCase(this->LocalGenerator->ConfigurationName); this->LocalGenerator->AppendDefines - (defines, this->Target->GetProperty(defPropName.c_str())); + (defines, this->Target->GetProperty(defPropName.c_str()), lang); // Add language-specific flags. this->LocalGenerator @@ -456,7 +456,7 @@ cmMakefileTargetGenerator // Add source-sepcific preprocessor definitions. if(const char* compile_defs = source.GetProperty("COMPILE_DEFINITIONS")) { - this->LocalGenerator->AppendDefines(defines, compile_defs); + this->LocalGenerator->AppendDefines(defines, compile_defs, lang); *this->FlagFileStream << "# Custom defines: " << relativeObj << "_DEFINES = " << compile_defs << "\n" @@ -469,7 +469,7 @@ cmMakefileTargetGenerator if(const char* config_compile_defs = source.GetProperty(defPropName.c_str())) { - this->LocalGenerator->AppendDefines(defines, config_compile_defs); + this->LocalGenerator->AppendDefines(defines, config_compile_defs, lang); *this->FlagFileStream << "# Custom defines: " << relativeObj << "_DEFINES_" << configUpper