summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/CMakeLists.txt4
-rw-r--r--Source/cmBootstrapCommands1.cxx3
-rw-r--r--Source/cmBootstrapCommands2.cxx3
-rw-r--r--Source/cmCommands.cxx.in2
-rw-r--r--Source/cmCommands.h8
-rw-r--r--Source/cmCommandsForBootstrap.cxx2
-rw-r--r--Source/cmFileCommand.cxx2
-rw-r--r--Source/cmGlobalGenerator.cxx17
-rw-r--r--Source/cmGlobalGenerator.h2
-rw-r--r--Source/cmLocalGenerator.cxx1
-rw-r--r--Source/cmMakefile.cxx39
-rw-r--r--Source/cmMakefile.h11
-rw-r--r--Source/cmTarget.cxx4
-rw-r--r--Source/cmTargetLinkLibrariesCommand.cxx2
-rw-r--r--Source/cmake.cxx137
-rw-r--r--Source/cmake.h48
-rw-r--r--Tests/RunCMake/get_property/DebugConfigurations-stderr.txt11
-rw-r--r--Tests/RunCMake/get_property/DebugConfigurations.cmake41
-rw-r--r--Tests/RunCMake/get_property/RunCMakeTest.cmake1
-rwxr-xr-xbootstrap4
20 files changed, 185 insertions, 157 deletions
diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt
index 7af6da3..58c4ba9 100644
--- a/Source/CMakeLists.txt
+++ b/Source/CMakeLists.txt
@@ -221,6 +221,8 @@ set(SRCS
cmExportSet.cxx
cmExportSetMap.h
cmExportSetMap.cxx
+ cmExternalMakefileProjectGenerator.cxx
+ cmExternalMakefileProjectGenerator.h
cmExtraCodeBlocksGenerator.cxx
cmExtraCodeBlocksGenerator.h
cmExtraCodeLiteGenerator.cxx
@@ -246,6 +248,8 @@ set(SRCS
cmGeneratorExpressionContext.h
cmGeneratorExpressionDAGChecker.cxx
cmGeneratorExpressionDAGChecker.h
+ cmGeneratorExpressionEvaluationFile.cxx
+ cmGeneratorExpressionEvaluationFile.h
cmGeneratorExpressionEvaluator.cxx
cmGeneratorExpressionEvaluator.h
cmGeneratorExpressionLexer.cxx
diff --git a/Source/cmBootstrapCommands1.cxx b/Source/cmBootstrapCommands1.cxx
index 4274d85..1184514 100644
--- a/Source/cmBootstrapCommands1.cxx
+++ b/Source/cmBootstrapCommands1.cxx
@@ -42,7 +42,6 @@
#include "cmEndWhileCommand.cxx"
#include "cmExecProgramCommand.cxx"
#include "cmExecuteProcessCommand.cxx"
-#include "cmExternalMakefileProjectGenerator.cxx"
#include "cmFindBase.cxx"
#include "cmFindCommon.cxx"
#include "cmFileCommand.cxx"
@@ -56,7 +55,7 @@
#include "cmPathLabel.cxx"
#include "cmSearchPath.cxx"
-void GetBootstrapCommands1(std::list<cmCommand*>& commands)
+void GetBootstrapCommands1(std::vector<cmCommand*>& commands)
{
commands.push_back(new cmAddCustomCommandCommand);
commands.push_back(new cmAddCustomTargetCommand);
diff --git a/Source/cmBootstrapCommands2.cxx b/Source/cmBootstrapCommands2.cxx
index 5675295..e522d8c 100644
--- a/Source/cmBootstrapCommands2.cxx
+++ b/Source/cmBootstrapCommands2.cxx
@@ -16,7 +16,6 @@
#include "cmCommands.h"
#include "cmConditionEvaluator.cxx"
#include "cmExpandedCommandArgument.cxx"
-#include "cmGeneratorExpressionEvaluationFile.cxx"
#include "cmGetCMakePropertyCommand.cxx"
#include "cmGetDirectoryPropertyCommand.cxx"
#include "cmGetFilenameComponentCommand.cxx"
@@ -60,7 +59,7 @@
#include "cmUnsetCommand.cxx"
#include "cmWhileCommand.cxx"
-void GetBootstrapCommands2(std::list<cmCommand*>& commands)
+void GetBootstrapCommands2(std::vector<cmCommand*>& commands)
{
commands.push_back(new cmGetCMakePropertyCommand);
commands.push_back(new cmGetDirectoryPropertyCommand);
diff --git a/Source/cmCommands.cxx.in b/Source/cmCommands.cxx.in
index f0745d7..e23bbd1 100644
--- a/Source/cmCommands.cxx.in
+++ b/Source/cmCommands.cxx.in
@@ -13,7 +13,7 @@
@COMMAND_INCLUDES@
-void GetPredefinedCommands(std::list<cmCommand*>& commands)
+void GetPredefinedCommands(std::vector<cmCommand*>& commands)
{
@NEW_COMMANDS@
}
diff --git a/Source/cmCommands.h b/Source/cmCommands.h
index e902853..7a94423 100644
--- a/Source/cmCommands.h
+++ b/Source/cmCommands.h
@@ -13,7 +13,7 @@
#define cmCommands_h
#include "cmStandardIncludes.h"
-#include <list>
+#include <vector>
class cmCommand;
/**
@@ -23,9 +23,9 @@ class cmCommand;
* It is up to the caller to delete the commands created by this
* call.
*/
-void GetBootstrapCommands1(std::list<cmCommand*>& commands);
-void GetBootstrapCommands2(std::list<cmCommand*>& commands);
-void GetPredefinedCommands(std::list<cmCommand*>& commands);
+void GetBootstrapCommands1(std::vector<cmCommand*>& commands);
+void GetBootstrapCommands2(std::vector<cmCommand*>& commands);
+void GetPredefinedCommands(std::vector<cmCommand*>& commands);
#endif
diff --git a/Source/cmCommandsForBootstrap.cxx b/Source/cmCommandsForBootstrap.cxx
index 15b664e..5f397a1 100644
--- a/Source/cmCommandsForBootstrap.cxx
+++ b/Source/cmCommandsForBootstrap.cxx
@@ -11,6 +11,6 @@
============================================================================*/
#include "cmCommands.h"
-void GetPredefinedCommands(std::list<cmCommand*>&)
+void GetPredefinedCommands(std::vector<cmCommand*>&)
{
}
diff --git a/Source/cmFileCommand.cxx b/Source/cmFileCommand.cxx
index 93e3ac4..6ac0def 100644
--- a/Source/cmFileCommand.cxx
+++ b/Source/cmFileCommand.cxx
@@ -15,6 +15,8 @@
#include "cmHexFileConverter.h"
#include "cmInstallType.h"
#include "cmFileTimeComparison.h"
+#include "cmLocalGenerator.h"
+#include "cmGlobalGenerator.h"
#include "cmCryptoHash.h"
#include "cmAlgorithms.h"
diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx
index 35394b8..6a6a503 100644
--- a/Source/cmGlobalGenerator.cxx
+++ b/Source/cmGlobalGenerator.cxx
@@ -968,7 +968,13 @@ void cmGlobalGenerator::SetLanguageEnabled(const std::string& l,
void cmGlobalGenerator::SetLanguageEnabledFlag(const std::string& l,
cmMakefile* mf)
{
- this->LanguageEnabled[l] = true;
+ std::vector<std::string>::iterator it =
+ std::lower_bound(this->LanguageEnabled.begin(),
+ this->LanguageEnabled.end(), l);
+ if (it == this->LanguageEnabled.end() || *it != l)
+ {
+ this->LanguageEnabled.insert(it, l);
+ }
// Fill the language-to-extension map with the current variable
// settings to make sure it is available for the try_compile()
@@ -1079,7 +1085,8 @@ bool cmGlobalGenerator::IgnoreFile(const char* ext) const
bool cmGlobalGenerator::GetLanguageEnabled(const std::string& l) const
{
- return (this->LanguageEnabled.find(l)!= this->LanguageEnabled.end());
+ return std::binary_search(this->LanguageEnabled.begin(),
+ this->LanguageEnabled.end(), l);
}
void cmGlobalGenerator::ClearEnabledLanguages()
@@ -1958,11 +1965,7 @@ bool cmGlobalGenerator::IsExcluded(cmLocalGenerator* root,
void
cmGlobalGenerator::GetEnabledLanguages(std::vector<std::string>& lang) const
{
- for(std::map<std::string, bool>::const_iterator i =
- this->LanguageEnabled.begin(); i != this->LanguageEnabled.end(); ++i)
- {
- lang.push_back(i->first);
- }
+ lang = this->LanguageEnabled;
}
int cmGlobalGenerator::GetLinkerPreference(const std::string& lang) const
diff --git a/Source/cmGlobalGenerator.h b/Source/cmGlobalGenerator.h
index 5b9ddee..ce3f037 100644
--- a/Source/cmGlobalGenerator.h
+++ b/Source/cmGlobalGenerator.h
@@ -441,7 +441,7 @@ private:
// If you add a new map here, make sure it is copied
// in EnableLanguagesFromGenerator
std::map<std::string, bool> IgnoreExtensions;
- std::map<std::string, bool> LanguageEnabled;
+ std::vector<std::string> LanguageEnabled;
std::set<std::string> LanguagesReady; // Ready for try_compile
std::map<std::string, std::string> OutputExtensions;
std::map<std::string, std::string> LanguageToOutputExtension;
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index e1998e4..c143bce 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -252,7 +252,6 @@ void cmLocalGenerator::SetGlobalGenerator(cmGlobalGenerator *gg)
this->Makefile->SetLocalGenerator(this);
// setup the home directories
- this->Makefile->GetProperties().SetCMakeInstance(gg->GetCMakeInstance());
this->Makefile->SetHomeDirectory(
gg->GetCMakeInstance()->GetHomeDirectory());
this->Makefile->SetHomeOutputDirectory(
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index 34b4621..35fdd0c 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -741,6 +741,7 @@ void cmMakefile::SetLocalGenerator(cmLocalGenerator* lg)
this->AddSourceGroup("Object Files", "\\.(lo|o|obj)$");
#endif
+ this->Properties.SetCMakeInstance(this->GetCMakeInstance());
this->WarnUnused = this->GetCMakeInstance()->GetWarnUnused();
this->CheckSystemVars = this->GetCMakeInstance()->GetCheckSystemVars();
}
@@ -1657,7 +1658,6 @@ void cmMakefile::InitializeFromParent()
void cmMakefile::ConfigureSubDirectory(cmLocalGenerator *lg2)
{
- // copy our variables from the child makefile
lg2->GetMakefile()->InitializeFromParent();
lg2->GetMakefile()->MakeStartDirectoriesCurrent();
if (this->GetCMakeInstance()->GetDebugOutput())
@@ -1676,33 +1676,6 @@ void cmMakefile::ConfigureSubDirectory(cmLocalGenerator *lg2)
}
}
-void cmMakefile::AddSubDirectory(const std::string& sub,
- bool excludeFromAll)
-{
- // the source path must be made full if it isn't already
- std::string srcPath = sub;
- if (!cmSystemTools::FileIsFullPath(srcPath.c_str()))
- {
- srcPath = this->GetCurrentDirectory();
- srcPath += "/";
- srcPath += sub;
- }
-
- // binary path must be made full if it isn't already
- std::string binPath = sub;
- if (!cmSystemTools::FileIsFullPath(binPath.c_str()))
- {
- binPath = this->GetCurrentOutputDirectory();
- binPath += "/";
- binPath += sub;
- }
-
-
- this->AddSubDirectory(srcPath, binPath,
- excludeFromAll, false);
-}
-
-
void cmMakefile::AddSubDirectory(const std::string& srcPath,
const std::string& binPath,
bool excludeFromAll,
@@ -3461,6 +3434,11 @@ cmMakefile::LexicalPushPop::~LexicalPushPop()
this->Makefile->PopFunctionBlockerBarrier(this->ReportError);
}
+const char* cmMakefile::GetHomeDirectory() const
+{
+ return this->cmHomeDirectory.c_str();
+}
+
void cmMakefile::SetHomeDirectory(const std::string& dir)
{
this->cmHomeDirectory = dir;
@@ -3472,6 +3450,11 @@ void cmMakefile::SetHomeDirectory(const std::string& dir)
}
}
+const char* cmMakefile::GetHomeOutputDirectory() const
+{
+ return this->HomeOutputDirectory.c_str();
+}
+
void cmMakefile::SetHomeOutputDirectory(const std::string& lib)
{
this->HomeOutputDirectory = lib;
diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h
index 5209891..b78f921 100644
--- a/Source/cmMakefile.h
+++ b/Source/cmMakefile.h
@@ -281,7 +281,6 @@ public:
/**
* Add a subdirectory to the build.
*/
- void AddSubDirectory(const std::string&, bool excludeFromAll=false);
void AddSubDirectory(const std::string& fullSrcDir,
const std::string& fullBinDir,
bool excludeFromAll,
@@ -438,15 +437,9 @@ public:
* and going up until it reaches the HomeDirectory.
*/
void SetHomeDirectory(const std::string& dir);
- const char* GetHomeDirectory() const
- {
- return this->cmHomeDirectory.c_str();
- }
+ const char* GetHomeDirectory() const;
void SetHomeOutputDirectory(const std::string& lib);
- const char* GetHomeOutputDirectory() const
- {
- return this->HomeOutputDirectory.c_str();
- }
+ const char* GetHomeOutputDirectory() const;
//@}
/**
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 85e5165..745a84c 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -1157,7 +1157,7 @@ cmTarget::LinkLibraryType cmTarget::ComputeLinkType(
}
// Get the list of configurations considered to be DEBUG.
- std::vector<std::string> const& debugConfigs =
+ std::vector<std::string> debugConfigs =
this->Makefile->GetCMakeInstance()->GetDebugConfigs();
// Check if any entry in the list matches this configuration.
@@ -1216,7 +1216,7 @@ std::string cmTarget::GetDebugGeneratorExpressions(const std::string &value,
}
// Get the list of configurations considered to be DEBUG.
- std::vector<std::string> const& debugConfigs =
+ std::vector<std::string> debugConfigs =
this->Makefile->GetCMakeInstance()->GetDebugConfigs();
std::string configString = "$<CONFIG:" + debugConfigs[0] + ">";
diff --git a/Source/cmTargetLinkLibrariesCommand.cxx b/Source/cmTargetLinkLibrariesCommand.cxx
index 75c94c5..9be7d46 100644
--- a/Source/cmTargetLinkLibrariesCommand.cxx
+++ b/Source/cmTargetLinkLibrariesCommand.cxx
@@ -467,7 +467,7 @@ cmTargetLinkLibrariesCommand::HandleLibrary(const std::string& lib,
}
// Get the list of configurations considered to be DEBUG.
- std::vector<std::string> const& debugConfigs =
+ std::vector<std::string> debugConfigs =
this->Makefile->GetCMakeInstance()->GetDebugConfigs();
std::string prop;
diff --git a/Source/cmake.cxx b/Source/cmake.cxx
index 3654aa7..ac0f5d0 100644
--- a/Source/cmake.cxx
+++ b/Source/cmake.cxx
@@ -187,7 +187,6 @@ cmake::~cmake()
void cmake::InitializeProperties()
{
this->Properties.clear();
- this->Properties.SetCMakeInstance(this);
this->PropertyDefinitions.clear();
// initialize properties
@@ -223,20 +222,19 @@ void cmake::CleanupCommandsAndMacros()
bool cmake::CommandExists(const std::string& name) const
{
- std::string sName = cmSystemTools::LowerCase(name);
- return (this->Commands.find(sName) != this->Commands.end());
+ return this->GetCommand(name) ? true : false;
}
-cmCommand *cmake::GetCommand(const std::string& name)
+cmCommand *cmake::GetCommand(const std::string& name) const
{
- cmCommand* rm = 0;
+ cmCommand* command = 0;
std::string sName = cmSystemTools::LowerCase(name);
- RegisteredCommandsMap::iterator pos = this->Commands.find(sName);
+ RegisteredCommandsMap::const_iterator pos = this->Commands.find(sName);
if (pos != this->Commands.end())
{
- rm = (*pos).second;
+ command = (*pos).second;
}
- return rm;
+ return command;
}
void cmake::RenameCommand(const std::string& oldName,
@@ -244,12 +242,12 @@ void cmake::RenameCommand(const std::string& oldName,
{
// if the command already exists, free the old one
std::string sOldName = cmSystemTools::LowerCase(oldName);
- std::string sNewName = cmSystemTools::LowerCase(newName);
RegisteredCommandsMap::iterator pos = this->Commands.find(sOldName);
if ( pos == this->Commands.end() )
{
return;
}
+ std::string sNewName = cmSystemTools::LowerCase(newName);
cmCommand* cmd = pos->second;
pos = this->Commands.find(sNewName);
@@ -258,7 +256,7 @@ void cmake::RenameCommand(const std::string& oldName,
delete pos->second;
this->Commands.erase(pos);
}
- this->Commands.insert(RegisteredCommandsMap::value_type(sNewName, cmd));
+ this->Commands.insert(std::make_pair(sNewName, cmd));
pos = this->Commands.find(sOldName);
this->Commands.erase(pos);
}
@@ -274,9 +272,9 @@ void cmake::RemoveCommand(const std::string& name)
}
}
-void cmake::AddCommand(cmCommand* wg)
+void cmake::AddCommand(cmCommand* command)
{
- std::string name = cmSystemTools::LowerCase(wg->GetName());
+ std::string name = cmSystemTools::LowerCase(command->GetName());
// if the command already exists, free the old one
RegisteredCommandsMap::iterator pos = this->Commands.find(name);
if (pos != this->Commands.end())
@@ -284,16 +282,16 @@ void cmake::AddCommand(cmCommand* wg)
delete pos->second;
this->Commands.erase(pos);
}
- this->Commands.insert( RegisteredCommandsMap::value_type(name, wg));
+ this->Commands.insert(std::make_pair(name, command));
}
void cmake::RemoveUnscriptableCommands()
{
std::vector<std::string> unscriptableCommands;
- cmake::RegisteredCommandsMap* commands = this->GetCommands();
- for (cmake::RegisteredCommandsMap::const_iterator pos = commands->begin();
- pos != commands->end();
+ for (cmake::RegisteredCommandsMap::const_iterator
+ pos = this->Commands.begin();
+ pos != this->Commands.end();
++pos)
{
if (!pos->second->IsScriptable())
@@ -847,12 +845,8 @@ void cmake::SetArgs(const std::vector<std::string>& args,
{
this->SetHomeOutputDirectory
(cmSystemTools::GetCurrentWorkingDirectory());
- this->SetStartOutputDirectory
- (cmSystemTools::GetCurrentWorkingDirectory());
this->SetHomeDirectory
(cmSystemTools::GetCurrentWorkingDirectory());
- this->SetStartDirectory
- (cmSystemTools::GetCurrentWorkingDirectory());
}
this->SetStartDirectory(this->GetHomeDirectory());
@@ -1116,12 +1110,44 @@ void cmake::SetHomeDirectory(const std::string& dir)
cmSystemTools::ConvertToUnixSlashes(this->cmHomeDirectory);
}
-void cmake::SetHomeOutputDirectory(const std::string& lib)
+const char* cmake::GetHomeDirectory() const
{
- this->HomeOutputDirectory = lib;
+ return this->cmHomeDirectory.c_str();
+}
+
+void cmake::SetHomeOutputDirectory(const std::string& dir)
+{
+ this->HomeOutputDirectory = dir;
cmSystemTools::ConvertToUnixSlashes(this->HomeOutputDirectory);
}
+const char* cmake::GetHomeOutputDirectory() const
+{
+ return this->HomeOutputDirectory.c_str();
+}
+
+const char* cmake::GetStartDirectory() const
+{
+ return this->cmStartDirectory.c_str();
+}
+
+void cmake::SetStartDirectory(const std::string& dir)
+{
+ this->cmStartDirectory = dir;
+ cmSystemTools::ConvertToUnixSlashes(this->cmStartDirectory);
+}
+
+const char* cmake::GetStartOutputDirectory() const
+{
+ return this->StartOutputDirectory.c_str();
+}
+
+void cmake::SetStartOutputDirectory(const std::string& dir)
+{
+ this->StartOutputDirectory = dir;
+ cmSystemTools::ConvertToUnixSlashes(this->StartOutputDirectory);
+}
+
void cmake::SetGlobalGenerator(cmGlobalGenerator *gg)
{
if(!gg)
@@ -1533,11 +1559,7 @@ int cmake::ActualConfigure()
if (!this->InTryCompile)
{
this->GlobalGenerator->ClearEnabledLanguages();
- }
- // Truncate log files
- if (!this->InTryCompile)
- {
this->TruncateOutputLog("CMakeOutput.log");
this->TruncateOutputLog("CMakeError.log");
}
@@ -1812,11 +1834,11 @@ const char* cmake::GetCacheDefinition(const std::string& name) const
void cmake::AddDefaultCommands()
{
- std::list<cmCommand*> commands;
+ std::vector<cmCommand*> commands;
GetBootstrapCommands1(commands);
GetBootstrapCommands2(commands);
GetPredefinedCommands(commands);
- for(std::list<cmCommand*>::iterator i = commands.begin();
+ for(std::vector<cmCommand*>::iterator i = commands.begin();
i != commands.end(); ++i)
{
this->AddCommand(*i);
@@ -1942,6 +1964,16 @@ void cmake::UpdateProgress(const char *msg, float prog)
}
}
+bool cmake::GetIsInTryCompile() const
+{
+ return this->InTryCompile;
+}
+
+void cmake::SetIsInTryCompile(bool b)
+{
+ this->InTryCompile = b;
+}
+
void cmake::GetGeneratorDocumentation(std::vector<cmDocumentationEntry>& v)
{
for(RegisteredGeneratorsVector::const_iterator i =
@@ -2298,24 +2330,12 @@ bool cmake::IsPropertyChained(const std::string& name,
void cmake::SetProperty(const std::string& prop, const char* value)
{
- // Special hook to invalidate cached value.
- if(prop == "DEBUG_CONFIGURATIONS")
- {
- this->DebugConfigs.clear();
- }
-
this->Properties.SetProperty(prop, value, cmProperty::GLOBAL);
}
void cmake::AppendProperty(const std::string& prop,
const char* value, bool asString)
{
- // Special hook to invalidate cached value.
- if(prop == "DEBUG_CONFIGURATIONS")
- {
- this->DebugConfigs.clear();
- }
-
this->Properties.AppendProperty(prop, value, cmProperty::GLOBAL, asString);
}
@@ -2338,8 +2358,8 @@ const char *cmake::GetProperty(const std::string& prop,
else if ( prop == "COMMANDS" )
{
cmake::RegisteredCommandsMap::iterator cmds
- = this->GetCommands()->begin();
- for (unsigned int cc=0 ; cmds != this->GetCommands()->end(); ++ cmds )
+ = this->Commands.begin();
+ for (unsigned int cc=0 ; cmds != this->Commands.end(); ++ cmds )
{
if ( cc > 0 )
{
@@ -2775,27 +2795,24 @@ void cmake::IssueMessage(cmake::MessageType t, std::string const& text,
}
//----------------------------------------------------------------------------
-std::vector<std::string> const& cmake::GetDebugConfigs()
+std::vector<std::string> cmake::GetDebugConfigs()
{
- // Compute on-demand.
- if(this->DebugConfigs.empty())
+ std::vector<std::string> configs;
+ if(const char* config_list = this->GetProperty("DEBUG_CONFIGURATIONS"))
{
- if(const char* config_list = this->GetProperty("DEBUG_CONFIGURATIONS"))
- {
- // Expand the specified list and convert to upper-case.
- cmSystemTools::ExpandListArgument(config_list, this->DebugConfigs);
- std::transform(this->DebugConfigs.begin(),
- this->DebugConfigs.end(),
- this->DebugConfigs.begin(),
- cmSystemTools::UpperCase);
- }
- // If no configurations were specified, use a default list.
- if(this->DebugConfigs.empty())
- {
- this->DebugConfigs.push_back("DEBUG");
- }
+ // Expand the specified list and convert to upper-case.
+ cmSystemTools::ExpandListArgument(config_list, configs);
+ std::transform(configs.begin(),
+ configs.end(),
+ configs.begin(),
+ cmSystemTools::UpperCase);
+ }
+ // If no configurations were specified, use a default list.
+ if(configs.empty())
+ {
+ configs.push_back("DEBUG");
}
- return this->DebugConfigs;
+ return configs;
}
diff --git a/Source/cmake.h b/Source/cmake.h
index 0715d74..4c2ad29 100644
--- a/Source/cmake.h
+++ b/Source/cmake.h
@@ -113,15 +113,9 @@ class cmake
* and going up until it reaches the HomeDirectory.
*/
void SetHomeDirectory(const std::string& dir);
- const char* GetHomeDirectory() const
- {
- return this->cmHomeDirectory.c_str();
- }
- void SetHomeOutputDirectory(const std::string& lib);
- const char* GetHomeOutputDirectory() const
- {
- return this->HomeOutputDirectory.c_str();
- }
+ const char* GetHomeDirectory() const;
+ void SetHomeOutputDirectory(const std::string& dir);
+ const char* GetHomeOutputDirectory() const;
//@}
//@{
@@ -132,24 +126,10 @@ class cmake
* recursing up the tree starting at the StartDirectory and going up until
* it reaches the HomeDirectory.
*/
- void SetStartDirectory(const std::string& dir)
- {
- this->cmStartDirectory = dir;
- cmSystemTools::ConvertToUnixSlashes(this->cmStartDirectory);
- }
- const char* GetStartDirectory() const
- {
- return this->cmStartDirectory.c_str();
- }
- void SetStartOutputDirectory(const std::string& lib)
- {
- this->StartOutputDirectory = lib;
- cmSystemTools::ConvertToUnixSlashes(this->StartOutputDirectory);
- }
- const char* GetStartOutputDirectory() const
- {
- return this->StartOutputDirectory.c_str();
- }
+ void SetStartDirectory(const std::string& dir);
+ const char* GetStartDirectory() const;
+ void SetStartOutputDirectory(const std::string& dir);
+ const char* GetStartOutputDirectory() const;
//@}
/**
@@ -247,10 +227,7 @@ class cmake
/**
* Get a command by its name
*/
- cmCommand *GetCommand(const std::string& name);
-
- /** Get list of all commands */
- RegisteredCommandsMap* GetCommands() { return &this->Commands; }
+ cmCommand *GetCommand(const std::string& name) const;
/** Check if a command exists. */
bool CommandExists(const std::string& name) const;
@@ -260,10 +237,8 @@ class cmake
bool directoriesSetBefore = false);
///! Is this cmake running as a result of a TRY_COMPILE command
- bool GetIsInTryCompile() { return this->InTryCompile; }
-
- ///! Is this cmake running as a result of a TRY_COMPILE command
- void SetIsInTryCompile(bool i) { this->InTryCompile = i; }
+ bool GetIsInTryCompile() const;
+ void SetIsInTryCompile(bool b);
///! Parse command line arguments that might set cache values
bool SetCacheArgs(const std::vector<std::string>&);
@@ -362,7 +337,7 @@ class cmake
/** Get the list of configurations (in upper case) considered to be
debugging configurations.*/
- std::vector<std::string> const& GetDebugConfigs();
+ std::vector<std::string> GetDebugConfigs();
void SetCMakeEditCommand(std::string const& s)
{ this->CMakeEditCommand = s; }
@@ -472,7 +447,6 @@ private:
bool DebugTryCompile;
cmFileTimeComparison* FileComparison;
std::string GraphVizFile;
- std::vector<std::string> DebugConfigs;
InstalledFilesMap InstalledFiles;
void UpdateConversionPathTable();
diff --git a/Tests/RunCMake/get_property/DebugConfigurations-stderr.txt b/Tests/RunCMake/get_property/DebugConfigurations-stderr.txt
new file mode 100644
index 0000000..b295604
--- /dev/null
+++ b/Tests/RunCMake/get_property/DebugConfigurations-stderr.txt
@@ -0,0 +1,11 @@
+CONFIGS:
+IFACE1:\$<\$<CONFIG:DEBUG>:external1>
+CONFIGS:EXTRA
+IFACE1:\$<\$<CONFIG:DEBUG>:external1>
+IFACE1:\$<\$<CONFIG:DEBUG>:external1>;\$<\$<CONFIG:EXTRA>:external2>
+CONFIGS:NEW;CONFIGS
+IFACE1:\$<\$<CONFIG:DEBUG>:external1>;\$<\$<CONFIG:EXTRA>:external2>
+IFACE1:\$<\$<CONFIG:DEBUG>:external1>;\$<\$<CONFIG:EXTRA>:external2>;\$<\$<OR:\$<CONFIG:NEW>,\$<CONFIG:CONFIGS>>:external3>
+CONFIGS:NEW;CONFIGS;EXTRA
+IFACE1:\$<\$<CONFIG:DEBUG>:external1>;\$<\$<CONFIG:EXTRA>:external2>;\$<\$<OR:\$<CONFIG:NEW>,\$<CONFIG:CONFIGS>>:external3>
+IFACE1:\$<\$<CONFIG:DEBUG>:external1>;\$<\$<CONFIG:EXTRA>:external2>;\$<\$<OR:\$<CONFIG:NEW>,\$<CONFIG:CONFIGS>>:external3>;\$<\$<OR:\$<CONFIG:NEW>,\$<CONFIG:CONFIGS>,\$<CONFIG:EXTRA>>:external4>
diff --git a/Tests/RunCMake/get_property/DebugConfigurations.cmake b/Tests/RunCMake/get_property/DebugConfigurations.cmake
new file mode 100644
index 0000000..534beaf
--- /dev/null
+++ b/Tests/RunCMake/get_property/DebugConfigurations.cmake
@@ -0,0 +1,41 @@
+
+enable_language(CXX)
+
+get_property(configs GLOBAL PROPERTY DEBUG_CONFIGURATIONS)
+message("CONFIGS:${configs}")
+
+add_library(iface1 INTERFACE)
+target_link_libraries(iface1 INTERFACE debug external1)
+
+get_property(tgt_iface TARGET iface1 PROPERTY INTERFACE_LINK_LIBRARIES)
+message("IFACE1:${tgt_iface}")
+
+set_property(GLOBAL APPEND PROPERTY DEBUG_CONFIGURATIONS EXTRA)
+get_property(configs GLOBAL PROPERTY DEBUG_CONFIGURATIONS)
+message("CONFIGS:${configs}")
+
+get_property(tgt_iface TARGET iface1 PROPERTY INTERFACE_LINK_LIBRARIES)
+message("IFACE1:${tgt_iface}")
+target_link_libraries(iface1 INTERFACE debug external2)
+get_property(tgt_iface TARGET iface1 PROPERTY INTERFACE_LINK_LIBRARIES)
+message("IFACE1:${tgt_iface}")
+
+set_property(GLOBAL PROPERTY DEBUG_CONFIGURATIONS NEW CONFIGS)
+get_property(configs GLOBAL PROPERTY DEBUG_CONFIGURATIONS)
+message("CONFIGS:${configs}")
+
+get_property(tgt_iface TARGET iface1 PROPERTY INTERFACE_LINK_LIBRARIES)
+message("IFACE1:${tgt_iface}")
+target_link_libraries(iface1 INTERFACE debug external3)
+get_property(tgt_iface TARGET iface1 PROPERTY INTERFACE_LINK_LIBRARIES)
+message("IFACE1:${tgt_iface}")
+
+set_property(GLOBAL APPEND PROPERTY DEBUG_CONFIGURATIONS EXTRA)
+get_property(configs GLOBAL PROPERTY DEBUG_CONFIGURATIONS)
+message("CONFIGS:${configs}")
+
+get_property(tgt_iface TARGET iface1 PROPERTY INTERFACE_LINK_LIBRARIES)
+message("IFACE1:${tgt_iface}")
+target_link_libraries(iface1 INTERFACE debug external4)
+get_property(tgt_iface TARGET iface1 PROPERTY INTERFACE_LINK_LIBRARIES)
+message("IFACE1:${tgt_iface}")
diff --git a/Tests/RunCMake/get_property/RunCMakeTest.cmake b/Tests/RunCMake/get_property/RunCMakeTest.cmake
index 1964824..e420b5b 100644
--- a/Tests/RunCMake/get_property/RunCMakeTest.cmake
+++ b/Tests/RunCMake/get_property/RunCMakeTest.cmake
@@ -7,3 +7,4 @@ run_cmake(install_properties)
run_cmake(source_properties)
run_cmake(target_properties)
run_cmake(test_properties)
+run_cmake(DebugConfigurations)
diff --git a/bootstrap b/bootstrap
index 4239802..c7c6613 100755
--- a/bootstrap
+++ b/bootstrap
@@ -264,7 +264,8 @@ CMAKE_CXX_SOURCES="\
cmExportTryCompileFileGenerator \
cmExportSet \
cmExportSetMap \
- cmInstallDirectoryGenerator \
+ cmExternalMakefileProjectGenerator \
+ cmGeneratorExpressionEvaluationFile \
cmGeneratedFileStream \
cmGeneratorTarget \
cmGeneratorExpressionContext \
@@ -275,6 +276,7 @@ CMAKE_CXX_SOURCES="\
cmGeneratorExpressionParser \
cmGeneratorExpression \
cmGlobalGenerator \
+ cmInstallDirectoryGenerator \
cmLocalGenerator \
cmInstalledFile \
cmInstallGenerator \