ENH: Enable CMAKE_<lang>_DEFINE_FLAG for COMPILE_DEFINITIONS property implementation.
This commit is contained in:
parent
81af53e3c0
commit
18b9e7db6c
|
@ -1 +1 @@
|
||||||
set(CMAKE_DEFINE_FLAG_Fortran "-WF,-D")
|
set(CMAKE_Fortran_DEFINE_FLAG "-WF,-D")
|
||||||
|
|
|
@ -1202,8 +1202,9 @@ const char* cmLocalGenerator::GetIncludeFlags(const char* lang)
|
||||||
void cmLocalGenerator::FixDefineFlags(std::string& flags,
|
void cmLocalGenerator::FixDefineFlags(std::string& flags,
|
||||||
const char* lang)
|
const char* lang)
|
||||||
{
|
{
|
||||||
std::string defineFlagVar = "CMAKE_DEFINE_FLAG_";
|
std::string defineFlagVar = "CMAKE_";
|
||||||
defineFlagVar += lang;
|
defineFlagVar += lang;
|
||||||
|
defineFlagVar += "_DEFINE_FLAG";
|
||||||
std::string defineFlag =
|
std::string defineFlag =
|
||||||
this->Makefile->GetSafeDefinition(defineFlagVar.c_str());
|
this->Makefile->GetSafeDefinition(defineFlagVar.c_str());
|
||||||
if(defineFlag.size() == 0)
|
if(defineFlag.size() == 0)
|
||||||
|
@ -2219,7 +2220,8 @@ void cmLocalGenerator::AppendFlags(std::string& flags,
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
void cmLocalGenerator::AppendDefines(std::string& defines,
|
void cmLocalGenerator::AppendDefines(std::string& defines,
|
||||||
const char* defines_list)
|
const char* defines_list,
|
||||||
|
const char* lang)
|
||||||
{
|
{
|
||||||
// Short-circuit if there are no definitions.
|
// Short-circuit if there are no definitions.
|
||||||
if(!defines_list)
|
if(!defines_list)
|
||||||
|
@ -2237,14 +2239,22 @@ void cmLocalGenerator::AppendDefines(std::string& defines,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Separate from previous definitions with a space.
|
// Lookup the define flag for the current language.
|
||||||
if(!defines.empty())
|
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.
|
// Add each definition to the command line with appropriate escapes.
|
||||||
const char* dsep = "-D";
|
const char* dsep = defines.empty()? "" : " ";
|
||||||
for(std::vector<std::string>::const_iterator di = defines_vec.begin();
|
for(std::vector<std::string>::const_iterator di = defines_vec.begin();
|
||||||
di != defines_vec.end(); ++di)
|
di != defines_vec.end(); ++di)
|
||||||
{
|
{
|
||||||
|
@ -2254,10 +2264,12 @@ void cmLocalGenerator::AppendDefines(std::string& defines,
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Append the -D
|
// Separate from previous definitions.
|
||||||
defines += dsep;
|
defines += dsep;
|
||||||
|
dsep = " ";
|
||||||
|
|
||||||
// Append the definition with proper escaping.
|
// Append the definition with proper escaping.
|
||||||
|
defines += dflag;
|
||||||
if(this->WatcomWMake)
|
if(this->WatcomWMake)
|
||||||
{
|
{
|
||||||
// The Watcom compiler does its own command line parsing instead
|
// 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.
|
// Make the definition appear properly on the command line.
|
||||||
defines += this->EscapeForShell(di->c_str(), true);
|
defines += this->EscapeForShell(di->c_str(), true);
|
||||||
}
|
}
|
||||||
dsep = " -D";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -143,7 +143,8 @@ public:
|
||||||
* Encode a list of preprocessor definitions for the compiler
|
* Encode a list of preprocessor definitions for the compiler
|
||||||
* command line.
|
* 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
|
/** 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
|
appear in a generated build file. If the given name is that of
|
||||||
|
|
|
@ -413,29 +413,6 @@ void cmLocalVisualStudio6Generator
|
||||||
compileFlags += cflags;
|
compileFlags += cflags;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add per-source and per-configuration preprocessor definitions.
|
|
||||||
std::map<cmStdString, cmStdString> 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));
|
const char* lang = this->GetSourceFileLanguage(*(*sf));
|
||||||
if(lang)
|
if(lang)
|
||||||
{
|
{
|
||||||
|
@ -443,7 +420,7 @@ void cmLocalVisualStudio6Generator
|
||||||
{
|
{
|
||||||
// force a C++ file type
|
// force a C++ file type
|
||||||
compileFlags += " /TP ";
|
compileFlags += " /TP ";
|
||||||
}
|
}
|
||||||
else if(strcmp(lang, "C") == 0)
|
else if(strcmp(lang, "C") == 0)
|
||||||
{
|
{
|
||||||
// force to c file type
|
// force to c file type
|
||||||
|
@ -451,6 +428,29 @@ void cmLocalVisualStudio6Generator
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add per-source and per-configuration preprocessor definitions.
|
||||||
|
std::map<cmStdString, cmStdString> 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 =
|
bool excludedFromBuild =
|
||||||
(lang && (*sf)->GetPropertyAsBool("HEADER_FILE_ONLY"));
|
(lang && (*sf)->GetPropertyAsBool("HEADER_FILE_ONLY"));
|
||||||
|
|
||||||
|
@ -1503,17 +1503,17 @@ void cmLocalVisualStudio6Generator
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add per-target and per-configuration preprocessor definitions.
|
// 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,
|
this->AppendDefines(flagsDebug,
|
||||||
target.GetProperty("COMPILE_DEFINITIONS_DEBUG"));
|
target.GetProperty("COMPILE_DEFINITIONS_DEBUG"), 0);
|
||||||
this->AppendDefines(flagsRelease,
|
this->AppendDefines(flagsRelease,
|
||||||
target.GetProperty("COMPILE_DEFINITIONS_RELEASE"));
|
target.GetProperty("COMPILE_DEFINITIONS_RELEASE"), 0);
|
||||||
this->AppendDefines
|
this->AppendDefines
|
||||||
(flagsMinSize,
|
(flagsMinSize,
|
||||||
target.GetProperty("COMPILE_DEFINITIONS_MINSIZEREL"));
|
target.GetProperty("COMPILE_DEFINITIONS_MINSIZEREL"), 0);
|
||||||
this->AppendDefines
|
this->AppendDefines
|
||||||
(flagsDebugRel,
|
(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.
|
// 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
|
// There are not separate CXX and C template files, so we use the same
|
||||||
|
|
|
@ -267,12 +267,12 @@ void cmMakefileTargetGenerator::WriteTargetLanguageFlags()
|
||||||
|
|
||||||
// Add preprocessor definitions for this target and configuration.
|
// Add preprocessor definitions for this target and configuration.
|
||||||
this->LocalGenerator->AppendDefines
|
this->LocalGenerator->AppendDefines
|
||||||
(defines, this->Target->GetProperty("COMPILE_DEFINITIONS"));
|
(defines, this->Target->GetProperty("COMPILE_DEFINITIONS"), lang);
|
||||||
std::string defPropName = "COMPILE_DEFINITIONS_";
|
std::string defPropName = "COMPILE_DEFINITIONS_";
|
||||||
defPropName +=
|
defPropName +=
|
||||||
cmSystemTools::UpperCase(this->LocalGenerator->ConfigurationName);
|
cmSystemTools::UpperCase(this->LocalGenerator->ConfigurationName);
|
||||||
this->LocalGenerator->AppendDefines
|
this->LocalGenerator->AppendDefines
|
||||||
(defines, this->Target->GetProperty(defPropName.c_str()));
|
(defines, this->Target->GetProperty(defPropName.c_str()), lang);
|
||||||
|
|
||||||
// Add language-specific flags.
|
// Add language-specific flags.
|
||||||
this->LocalGenerator
|
this->LocalGenerator
|
||||||
|
@ -456,7 +456,7 @@ cmMakefileTargetGenerator
|
||||||
// Add source-sepcific preprocessor definitions.
|
// Add source-sepcific preprocessor definitions.
|
||||||
if(const char* compile_defs = source.GetProperty("COMPILE_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: "
|
*this->FlagFileStream << "# Custom defines: "
|
||||||
<< relativeObj << "_DEFINES = "
|
<< relativeObj << "_DEFINES = "
|
||||||
<< compile_defs << "\n"
|
<< compile_defs << "\n"
|
||||||
|
@ -469,7 +469,7 @@ cmMakefileTargetGenerator
|
||||||
if(const char* config_compile_defs =
|
if(const char* config_compile_defs =
|
||||||
source.GetProperty(defPropName.c_str()))
|
source.GetProperty(defPropName.c_str()))
|
||||||
{
|
{
|
||||||
this->LocalGenerator->AppendDefines(defines, config_compile_defs);
|
this->LocalGenerator->AppendDefines(defines, config_compile_defs, lang);
|
||||||
*this->FlagFileStream
|
*this->FlagFileStream
|
||||||
<< "# Custom defines: "
|
<< "# Custom defines: "
|
||||||
<< relativeObj << "_DEFINES_" << configUpper
|
<< relativeObj << "_DEFINES_" << configUpper
|
||||||
|
|
Loading…
Reference in New Issue