summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
Diffstat (limited to 'Source')
-rw-r--r--Source/MFCDialog/CMakeSetupDialog.cpp3
-rw-r--r--Source/cmAddTestCommand.cxx2
-rw-r--r--Source/cmCablePackageCommand.cxx32
-rw-r--r--Source/cmCableWrapTclCommand.cxx15
-rw-r--r--Source/cmCacheManager.cxx70
-rw-r--r--Source/cmCacheManager.h4
-rw-r--r--Source/cmDSWWriter.cxx14
-rw-r--r--Source/cmMakefile.cxx61
-rw-r--r--Source/cmMakefile.h51
-rw-r--r--Source/cmSystemTools.h6
-rw-r--r--Source/cmTarget.h8
-rw-r--r--Source/cmUnixMakefileGenerator.cxx24
-rw-r--r--Source/cmUtilitySourceCommand.cxx31
-rw-r--r--Source/cmVTKWrapJavaCommand.cxx12
-rw-r--r--Source/cmVTKWrapPythonCommand.cxx6
-rw-r--r--Source/cmVTKWrapTclCommand.cxx7
-rw-r--r--Source/cmake.cxx4
17 files changed, 210 insertions, 140 deletions
diff --git a/Source/MFCDialog/CMakeSetupDialog.cpp b/Source/MFCDialog/CMakeSetupDialog.cpp
index 0c558dc..cddc3d1 100644
--- a/Source/MFCDialog/CMakeSetupDialog.cpp
+++ b/Source/MFCDialog/CMakeSetupDialog.cpp
@@ -147,7 +147,8 @@ BOOL CMakeSetupDialog::OnInitDialog()
m_WhereSourceControl.LimitText(2048);
// Set the version number
char tmp[1024];
- sprintf(tmp,"Version %s", cmMakefile::GetVersion());
+ sprintf(tmp,"Version %d.%d", cmMakefile::GetMajorVersion(),
+ cmMakefile::GetMinorVersion());
SetDlgItemText(IDC_CMAKE_VERSION, tmp);
this->UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
diff --git a/Source/cmAddTestCommand.cxx b/Source/cmAddTestCommand.cxx
index 9eb01d4..6dfec18 100644
--- a/Source/cmAddTestCommand.cxx
+++ b/Source/cmAddTestCommand.cxx
@@ -79,7 +79,7 @@ void cmAddTestCommand::FinalPass()
fname += "CMakeTestfile.txt";
// Open the output Testfile
- std::ofstream fout(fname.c_str(), std::ios_base::app);
+ std::ofstream fout(fname.c_str(), std::ios::app);
if (!fout)
{
cmSystemTools::Error("Error Writing ", fname.c_str());
diff --git a/Source/cmCablePackageCommand.cxx b/Source/cmCablePackageCommand.cxx
index 0616729..0e05cb2 100644
--- a/Source/cmCablePackageCommand.cxx
+++ b/Source/cmCablePackageCommand.cxx
@@ -78,24 +78,27 @@ bool cmCablePackageCommand::InitialPass(std::vector<std::string>& args)
cMakeLists += "CMakeLists.txt";
cMakeLists = cmSystemTools::EscapeSpaces(cMakeLists.c_str());
- std::string command = "${CMAKE_COMMAND} "+cMakeLists;
+ std::string command = "${CMAKE_COMMAND}";
+ std::string commandArgs = cMakeLists;
#if defined(_WIN32) && !defined(__CYGWIN__)
- command += " -DSP";
+ commandArgs += " -DSP";
#endif
- command += " -H\"";
- command += m_Makefile->GetHomeDirectory();
- command += "\" -S\"";
- command += m_Makefile->GetStartDirectory();
- command += "\" -O\"";
- command += m_Makefile->GetStartOutputDirectory();
- command += "\" -B\"";
- command += m_Makefile->GetHomeOutputDirectory();
- command += "\"";
+ commandArgs += " -H\"";
+ commandArgs += m_Makefile->GetHomeDirectory();
+ commandArgs += "\" -S\"";
+ commandArgs += m_Makefile->GetStartDirectory();
+ commandArgs += "\" -O\"";
+ commandArgs += m_Makefile->GetStartOutputDirectory();
+ commandArgs += "\" -B\"";
+ commandArgs += m_Makefile->GetHomeOutputDirectory();
+ commandArgs += "\"";
+ m_Makefile->ExpandVariablesInString(commandArgs);
m_Makefile->ExpandVariablesInString(command);
std::vector<std::string> depends;
m_Makefile->AddCustomCommand(cMakeLists.c_str(),
command.c_str(),
+ commandArgs.c_str(),
depends,
"cable_config.xml", args[1].c_str());
}
@@ -112,9 +115,6 @@ bool cmCablePackageCommand::InitialPass(std::vector<std::string>& args)
// this cmCablePackageCommand's WritePackageHeader().
m_CableData->BeginPackage(this);
- // Tell the makefile that it needs the "cable" utility.
- m_Makefile->AddUtility("cable");
-
// Add custom rules to the makefile to generate this package's source
// files.
{
@@ -122,7 +122,7 @@ bool cmCablePackageCommand::InitialPass(std::vector<std::string>& args)
m_Makefile->ExpandVariablesInString(command);
std::vector<std::string> depends;
depends.push_back(command);
- command = "\""+command+"\" cable_config.xml";
+ std::string commandArgs = " cable_config.xml";
std::vector<std::string> outputs;
outputs.push_back("Cxx/"+m_PackageName+"_cxx.cxx");
@@ -131,6 +131,7 @@ bool cmCablePackageCommand::InitialPass(std::vector<std::string>& args)
// A rule for the package's source files.
m_Makefile->AddCustomCommand("cable_config.xml",
command.c_str(),
+ commandArgs.c_str(),
depends,
outputs, m_TargetName.c_str());
}
@@ -155,6 +156,7 @@ bool cmCablePackageCommand::InitialPass(std::vector<std::string>& args)
// A rule for the package's source files.
m_Makefile->AddCustomCommand(input.c_str(),
command.c_str(),
+ "",
depends,
outputs, m_TargetName.c_str());
}
diff --git a/Source/cmCableWrapTclCommand.cxx b/Source/cmCableWrapTclCommand.cxx
index d7527da..8fca056 100644
--- a/Source/cmCableWrapTclCommand.cxx
+++ b/Source/cmCableWrapTclCommand.cxx
@@ -142,8 +142,8 @@ void cmCableWrapTclCommand::GenerateCableFiles() const
m_Makefile->ExpandVariablesInString(command);
std::vector<std::string> depends;
depends.push_back(command);
- command = cmSystemTools::EscapeSpaces(command.c_str());
- command += " "+packageConfigName+" -tcl "+packageTclFullName+".cxx";
+ std::string commandArgs = " "+packageConfigName+
+ " -tcl "+packageTclFullName+".cxx";
depends.push_back(packageConfigName);
@@ -152,6 +152,7 @@ void cmCableWrapTclCommand::GenerateCableFiles() const
m_Makefile->AddCustomCommand(packageConfigName.c_str(),
command.c_str(),
+ commandArgs.c_str(),
depends,
outputs, m_TargetName.c_str());
}
@@ -264,9 +265,10 @@ void cmCableWrapTclCommand::GenerateCableClassFiles(const char* name,
std::string defineFlags = m_Makefile->GetDefineFlags();
std::string includeFlags = "-I";
- includeFlags += m_Makefile->GetStartDirectory();
+ includeFlags += std::string("\"") + m_Makefile->GetStartDirectory() + "\"";
- const std::vector<std::string>& includes = m_Makefile->GetIncludeDirectories();
+ const std::vector<std::string>& includes =
+ m_Makefile->GetIncludeDirectories();
for(std::vector<std::string>::const_iterator i = includes.begin();
i != includes.end(); ++i)
{
@@ -281,6 +283,7 @@ void cmCableWrapTclCommand::GenerateCableClassFiles(const char* name,
m_Makefile->AddCustomCommand(classCxxName.c_str(),
command.c_str(),
+ "",
depends,
outputs, m_TargetName.c_str());
}
@@ -291,8 +294,7 @@ void cmCableWrapTclCommand::GenerateCableClassFiles(const char* name,
m_Makefile->ExpandVariablesInString(command);
std::vector<std::string> depends;
depends.push_back(command);
- command = cmSystemTools::EscapeSpaces(command.c_str());
- command += " "+classConfigName+" -tcl "+classTclFullName+".cxx";
+ std::string commandArgs = " "+classConfigName+" -tcl "+classTclFullName+".cxx";
depends.push_back(classConfigName);
depends.push_back(classXmlName);
@@ -302,6 +304,7 @@ void cmCableWrapTclCommand::GenerateCableClassFiles(const char* name,
m_Makefile->AddCustomCommand(classConfigName.c_str(),
command.c_str(),
+ commandArgs.c_str(),
depends,
outputs, m_TargetName.c_str());
}
diff --git a/Source/cmCacheManager.cxx b/Source/cmCacheManager.cxx
index b28ec3e..0b07b2e 100644
--- a/Source/cmCacheManager.cxx
+++ b/Source/cmCacheManager.cxx
@@ -44,6 +44,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "cmCacheManager.h"
#include "cmMakefile.h"
#include "cmRegularExpression.h"
+#include "stdio.h"
const char* cmCacheManagerTypes[] =
{ "BOOL",
@@ -124,6 +125,8 @@ bool cmCacheManager::LoadCache(const char* path,
char buffer[bsize];
// input line is: key:type=value
cmRegularExpression reg("^([^:]*):([^=]*)=(.*)$");
+ // input line is: "key":type=value
+ cmRegularExpression regQuoted("^\"([^\"]*)\":([^=]*)=(.*)$");
while(fin)
{
// Format is key:type=value
@@ -143,7 +146,17 @@ bool cmCacheManager::LoadCache(const char* path,
continue;
}
}
- if(reg.find(buffer))
+ if(regQuoted.find(buffer))
+ {
+ e.m_Type = cmCacheManager::StringToType(regQuoted.match(2).c_str());
+ // only load internal values if internal is set
+ if (internal || e.m_Type != INTERNAL)
+ {
+ e.m_Value = regQuoted.match(3);
+ m_Cache[regQuoted.match(1)] = e;
+ }
+ }
+ else if (reg.find(buffer))
{
e.m_Type = cmCacheManager::StringToType(reg.match(2).c_str());
// only load internal values if internal is set
@@ -158,6 +171,18 @@ bool cmCacheManager::LoadCache(const char* path,
cmSystemTools::Error("Parse error in cache file ", cacheFile.c_str());
}
}
+ // if CMAKE version not found in the list file
+ // add them as version 0.0
+ if(!this->GetCacheValue("CMAKE_CACHE_MINOR_VERSION"))
+ {
+ this->AddCacheEntry("CMAKE_CACHE_MINOR_VERSION", "0",
+ "Minor version of cmake used to create the "
+ "current loaded cache", cmCacheManager::INTERNAL);
+ this->AddCacheEntry("CMAKE_CACHE_MAJOR_VERSION", "0",
+ "Major version of cmake used to create the "
+ "current loaded cache", cmCacheManager::INTERNAL);
+
+ }
return true;
}
@@ -177,13 +202,13 @@ void cmCacheManager::DefineCache(cmMakefile *mf)
}
}
-bool cmCacheManager::SaveCache(cmMakefile* mf) const
+bool cmCacheManager::SaveCache(cmMakefile* mf)
{
return this->SaveCache(mf->GetHomeOutputDirectory());
}
-bool cmCacheManager::SaveCache(const char* path) const
+bool cmCacheManager::SaveCache(const char* path)
{
std::string cacheFile = path;
cacheFile += "/CMakeCache.txt";
@@ -196,6 +221,17 @@ bool cmCacheManager::SaveCache(const char* path) const
cacheFile.c_str());
return false;
}
+ // before writting the cache, update the version numbers
+ // to the
+ char temp[1024];
+ sprintf(temp, "%d", cmMakefile::GetMinorVersion());
+ this->AddCacheEntry("CMAKE_CACHE_MINOR_VERSION", temp,
+ "Minor version of cmake used to create the "
+ "current loaded cache", cmCacheManager::INTERNAL);
+ sprintf(temp, "%d", cmMakefile::GetMajorVersion());
+ this->AddCacheEntry("CMAKE_CACHE_MAJOR_VERSION", temp,
+ "Major version of cmake used to create the "
+ "current loaded cache", cmCacheManager::INTERNAL);
fout << "# This is the CMakeCache file.\n"
<< "# For build in directory: " << path << "\n"
<< "# You can edit this file to change values found and used by cmake.\n"
@@ -221,7 +257,19 @@ bool cmCacheManager::SaveCache(const char* path) const
{
// Format is key:type=value
cmCacheManager::OutputHelpString(fout, ce.m_HelpString);
- fout << (*i).first.c_str() << ":"
+ std::string key;
+ // support : in key name by double quoting
+ if((*i).first.find(':') != std::string::npos)
+ {
+ key = "\"";
+ key += i->first;
+ key += "\"";
+ }
+ else
+ {
+ key = i->first;
+ }
+ fout << key.c_str() << ":"
<< cmCacheManagerTypes[t] << "="
<< ce.m_Value << "\n\n";
}
@@ -242,7 +290,19 @@ bool cmCacheManager::SaveCache(const char* path) const
{
// Format is key:type=value
cmCacheManager::OutputHelpString(fout, ce.m_HelpString);
- fout << (*i).first.c_str() << ":"
+ std::string key;
+ // support : in key name by double quoting
+ if((*i).first.find(':') != std::string::npos)
+ {
+ key = "\"";
+ key += i->first;
+ key += "\"";
+ }
+ else
+ {
+ key = i->first;
+ }
+ fout << key.c_str() << ":"
<< cmCacheManagerTypes[t] << "="
<< ce.m_Value << "\n";
}
diff --git a/Source/cmCacheManager.h b/Source/cmCacheManager.h
index 409ac9a..a3a013a 100644
--- a/Source/cmCacheManager.h
+++ b/Source/cmCacheManager.h
@@ -84,9 +84,9 @@ public:
void DefineCache(cmMakefile*);
//! Save cache for given makefile. Saves to ouput home CMakeCache.txt.
- bool SaveCache(cmMakefile*) const;
+ bool SaveCache(cmMakefile*) ;
//! Save cache for given makefile. Saves to ouput path/CMakeCache.txt
- bool SaveCache(const char* path) const;
+ bool SaveCache(const char* path) ;
//! Add an entry into the cache
void AddCacheEntry(const char* key, const char* value,
diff --git a/Source/cmDSWWriter.cxx b/Source/cmDSWWriter.cxx
index 242af11..ad47a9f 100644
--- a/Source/cmDSWWriter.cxx
+++ b/Source/cmDSWWriter.cxx
@@ -189,7 +189,7 @@ void cmDSWWriter::WriteProject(std::ostream& fout,
const char* dspname,
const char* dir,
cmDSPWriter* project,
- const cmTarget &l
+ const cmTarget& target
)
{
fout << "#########################################################"
@@ -202,13 +202,13 @@ void cmDSWWriter::WriteProject(std::ostream& fout,
// insert Begin Project Dependency Project_Dep_Name project stuff here
cmTarget::LinkLibraries::const_iterator j, jend;
- j = l.GetLinkLibraries().begin();
- jend = l.GetLinkLibraries().end();
+ j = target.GetLinkLibraries().begin();
+ jend = target.GetLinkLibraries().end();
for(;j!= jend; ++j)
{
if(j->first != dspname)
{
- if (!(l.GetType() == cmTarget::LIBRARY) ||
+ if (!(target.GetType() == cmTarget::LIBRARY) ||
project->GetLibraryBuildType() == cmDSPWriter::DLL)
{
// is the library part of this DSW ? If so add dependency
@@ -224,10 +224,10 @@ void cmDSWWriter::WriteProject(std::ostream& fout,
}
}
- std::vector<std::string>::iterator i, end;
+ std::set<std::string>::const_iterator i, end;
// write utility dependencies.
- i = project->GetMakefile()->GetUtilities().begin();
- end = project->GetMakefile()->GetUtilities().end();
+ i = target.GetUtilities().begin();
+ end = target.GetUtilities().end();
for(;i!= end; ++i)
{
if(*i != dspname)
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index 8d90229..bca29eb 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -48,6 +48,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "cmCommands.h"
#include "cmCacheManager.h"
#include "cmFunctionBlocker.h"
+#include "stdio.h"
// default is not to be building executables
cmMakefile::cmMakefile()
@@ -66,6 +67,29 @@ cmMakefile::cmMakefile()
cmCacheManager::GetInstance()->DefineCache(this);
}
+unsigned int cmMakefile::GetCacheMajorVersion()
+{
+ if(!cmCacheManager::GetInstance()->
+ GetCacheValue("CMAKE_CACHE_MAJOR_VERSION"))
+ {
+ return 0;
+ }
+ return atoi(cmCacheManager::GetInstance()->
+ GetCacheValue("CMAKE_CACHE_MAJOR_VERSION"));
+}
+
+unsigned int cmMakefile::GetCacheMinorVersion()
+{
+ if(!cmCacheManager::GetInstance()->
+ GetCacheValue("Cmake_Cache_MINOR_VERSION"))
+ {
+ return 0;
+ }
+ return atoi(cmCacheManager::GetInstance()->
+ GetCacheValue("CMAKE_CACHE_MINOR_VERSION"));
+}
+
+
void cmMakefile::AddDefaultCommands()
{
std::list<cmCommand*> commands;
@@ -171,11 +195,8 @@ void cmMakefile::Print() const
m_cmHomeDirectory.c_str() << std::endl;
std::cout << " m_ProjectName; " << m_ProjectName.c_str() << std::endl;
this->PrintStringVector("m_SubDirectories ", m_SubDirectories);
- this->PrintStringVector("m_MakeVerbatim ", m_MakeVerbatim);
this->PrintStringVector("m_IncludeDirectories;", m_IncludeDirectories);
this->PrintStringVector("m_LinkDirectories", m_LinkDirectories);
- this->PrintStringVector("m_Utilities", m_Utilities);
- this->PrintStringVector("m_UtilityDirectories", m_UtilityDirectories);
for( std::vector<cmSourceGroup>::const_iterator i = m_SourceGroups.begin();
i != m_SourceGroups.end(); ++i)
{
@@ -393,6 +414,7 @@ void cmMakefile::AddSource(cmSourceFile& cmfile, const char *srclist)
void cmMakefile::AddCustomCommand(const char* source,
const char* command,
+ const char* commandArgs,
const std::vector<std::string>& depends,
const std::vector<std::string>& outputs,
const char *target)
@@ -400,20 +422,31 @@ void cmMakefile::AddCustomCommand(const char* source,
// find the target,
if (m_Targets.find(target) != m_Targets.end())
{
- cmCustomCommand cc(source,command,depends,outputs);
+ std::string c = cmSystemTools::EscapeSpaces(command);
+ c += " ";
+ c += commandArgs;
+ cmCustomCommand cc(source,c.c_str(),depends,outputs);
m_Targets[target].GetCustomCommands().push_back(cc);
+ std::string cacheCommand = command;
+ this->ExpandVariablesInString(cacheCommand);
+ if(cmCacheManager::GetInstance()->GetCacheValue(cacheCommand.c_str()))
+ {
+ m_Targets[target].AddUtility(
+ cmCacheManager::GetInstance()->GetCacheValue(cacheCommand.c_str()));
+ }
}
}
void cmMakefile::AddCustomCommand(const char* source,
const char* command,
+ const char* commandArgs,
const std::vector<std::string>& depends,
const char* output,
const char *target)
{
std::vector<std::string> outputs;
outputs.push_back(output);
- this->AddCustomCommand(source, command, depends, outputs, target);
+ this->AddCustomCommand(source, command, commandArgs, depends, outputs, target);
}
void cmMakefile::AddDefineFlag(const char* flag)
@@ -422,15 +455,6 @@ void cmMakefile::AddDefineFlag(const char* flag)
m_DefineFlags += flag;
}
-void cmMakefile::AddUtility(const char* util)
-{
- m_Utilities.push_back(util);
-}
-
-void cmMakefile::AddUtilityDirectory(const char* dir)
-{
- m_UtilityDirectories.push_back(dir);
-}
void cmMakefile::AddLinkLibrary(const char* lib, cmTarget::LinkLibraryType llt)
{
@@ -796,10 +820,15 @@ cmMakefile::FindSubDirectoryCMakeListsFiles(std::vector<cmMakefile*>&
void cmMakefile::AddDefaultDefinitions()
{
#if defined(_WIN32) && !defined(__CYGWIN__)
- this->AddDefinition("CMAKE_CFG_OUTDIR","$(OUTDIR)");
+ this->AddDefinition("CMAKE_CFG_INTDIR","$(IntDir)");
#else
- this->AddDefinition("CMAKE_CFG_OUTDIR",".");
+ this->AddDefinition("CMAKE_CFG_INTDIR",".");
#endif
+ char temp[1024];
+ sprintf(temp, "%d", cmMakefile::GetMinorVersion());
+ this->AddDefinition("CMAKE_MINOR_VERSION", temp);
+ sprintf(temp, "%d", cmMakefile::GetMajorVersion());
+ this->AddDefinition("CMAKE_MAJOR_VERSION", temp);
}
/**
diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h
index c5f5f36..c7aee42 100644
--- a/Source/cmMakefile.h
+++ b/Source/cmMakefile.h
@@ -62,9 +62,17 @@ class cmMakefile
{
public:
/**
- * Return a string version number for CMake
+ * Return major and minor version numbers for cmake.
*/
- static const char *GetVersion() {return "0.1";}
+ static unsigned int GetMajorVersion() { return 0;}
+ static unsigned int GetMinorVersion() { return 1;}
+ /**
+ * Return the major and minor version of the cmake that
+ * was used to write the currently loaded cache, note
+ * this method will not work before the cache is loaded.
+ */
+ static unsigned int GetCacheMajorVersion();
+ static unsigned int GetCacheMinorVersion();
/**
* Construct an empty makefile.
@@ -121,12 +129,14 @@ public:
*/
void AddCustomCommand(const char* source,
const char* command,
+ const char* commandArgs,
const std::vector<std::string>& depends,
const std::vector<std::string>& outputs,
const char *target);
void AddCustomCommand(const char* source,
const char* command,
+ const char* commandArgs,
const std::vector<std::string>& depends,
const char* output,
const char* target);
@@ -158,18 +168,6 @@ public:
const std::vector<std::string> &outputs);
/**
- * Add a utility on which this project depends. A utility is an executable
- * name as would be specified to the ADD_EXECUTABLE or UTILITY_SOURCE
- * commands. It is not a full path nor does it have an extension.
- */
- void AddUtility(const char*);
-
- /**
- * Add a directory in which a utility may be built.
- */
- void AddUtilityDirectory(const char*);
-
- /**
* Get a list of link libraries in the build.
*/
cmTarget::LinkLibraries& GetLinkLibraries()
@@ -378,22 +376,6 @@ public:
}
/**
- * Get a list of utilities on which the project depends.
- */
- std::vector<std::string>& GetUtilities()
- {
- return m_Utilities;
- }
-
- /**
- * Get a list of directories that may contain the Utilities.
- */
- std::vector<std::string>& GetUtilityDirectories()
- {
- return m_UtilityDirectories;
- }
-
- /**
* Return a list of source files in this makefile.
*/
typedef std::map<std::string,std::vector<cmSourceFile> > SourceMap;
@@ -408,12 +390,6 @@ public:
{return m_AuxSourceDirectories;}
/**
- * Do not use this.
- */
- std::vector<std::string>& GetMakeVerbatim()
- {return m_MakeVerbatim;}
-
- /**
* Given a variable name, return its value (as a string).
*/
const char* GetDefinition(const char*);
@@ -504,11 +480,8 @@ protected:
SourceMap m_Sources;
std::vector<std::string> m_SubDirectories; // list of sub directories
- std::vector<std::string> m_MakeVerbatim; // lines copied from input file
std::vector<std::string> m_IncludeDirectories;
std::vector<std::string> m_LinkDirectories;
- std::vector<std::string> m_Utilities;
- std::vector<std::string> m_UtilityDirectories;
std::vector<std::string> m_ListFiles; // list of command files loaded
diff --git a/Source/cmSystemTools.h b/Source/cmSystemTools.h
index 749b2e8..e404168 100644
--- a/Source/cmSystemTools.h
+++ b/Source/cmSystemTools.h
@@ -155,6 +155,12 @@ public:
{
return cmSystemTools::s_ErrorOccured;
}
+
+ ///! Set the error occured flag back to false
+ static void ResetErrorOccuredFlag()
+ {
+ cmSystemTools::s_ErrorOccured = false;
+ }
/**
* Copy the source file to the destination file only
diff --git a/Source/cmTarget.h b/Source/cmTarget.h
index 5e8c989..89068ed 100644
--- a/Source/cmTarget.h
+++ b/Source/cmTarget.h
@@ -119,6 +119,13 @@ public:
*/
void GenerateSourceFilesFromSourceLists(const cmMakefile &mf);
+ /** Add a utility on which this project depends. A utility is an executable
+ * name as would be specified to the ADD_EXECUTABLE or UTILITY_SOURCE
+ * commands. It is not a full path nor does it have an extension.
+ */
+ void AddUtility(const char* u) { m_Utilities.insert(u);}
+ ///! Get the utilities used by this target
+ std::set<std::string>const& GetUtilities() const { return m_Utilities; }
private:
std::vector<cmCustomCommand> m_CustomCommands;
std::vector<std::string> m_SourceLists;
@@ -127,6 +134,7 @@ private:
LinkLibraries m_LinkLibraries;
bool m_InAll;
std::string m_InstallPath;
+ std::set<std::string> m_Utilities;
};
typedef std::map<std::string,cmTarget> cmTargets;
diff --git a/Source/cmUnixMakefileGenerator.cxx b/Source/cmUnixMakefileGenerator.cxx
index ffcf4c5..7909873 100644
--- a/Source/cmUnixMakefileGenerator.cxx
+++ b/Source/cmUnixMakefileGenerator.cxx
@@ -457,30 +457,6 @@ void cmUnixMakefileGenerator::OutputDependencies(std::ostream& fout)
<< "; make " << library.c_str() << "\n\n";
}
}
-
- std::vector<std::string>& utils = m_Makefile->GetUtilities();
- std::vector<std::string>& utildirs = m_Makefile->GetUtilityDirectories();
- std::vector<std::string>::iterator dir, util;
- // Search the list of utilities that may be used to generate code for
- // this project.
- for(util = utils.begin(); util != utils.end(); ++util)
- {
- bool found = false;
- // loop over the list of directories that the utilities might
- // be in, looking for an ADD_EXECUTABLE(util ...) line.
- for(dir = utildirs.begin(); dir != utildirs.end() && !found; ++dir)
- {
- std::string expression = "TARGETS =.*";
- expression += util->c_str();
- if(cmSystemTools::Grep(dir->c_str(), "Makefile",
- expression.c_str()))
- {
- fout << *util << " ";
- found = true;
- }
- }
- }
- fout << "\n";
}
diff --git a/Source/cmUtilitySourceCommand.cxx b/Source/cmUtilitySourceCommand.cxx
index 767b78d..fb97694 100644
--- a/Source/cmUtilitySourceCommand.cxx
+++ b/Source/cmUtilitySourceCommand.cxx
@@ -56,7 +56,10 @@ bool cmUtilitySourceCommand::InitialPass(std::vector<std::string>& args)
const char* cacheValue =
cmCacheManager::GetInstance()->GetCacheValue(cacheEntry.c_str());
// If it exists already, we are done.
- if(cacheValue)
+ // unless this is Major
+ if(cacheValue &&
+ (m_Makefile->GetCacheMajorVersion() != 0
+ && m_Makefile->GetCacheMinorVersion() != 0 ))
{
// Set the makefile's definition with the cache value.
m_Makefile->AddDefinition(cacheEntry.c_str(), cacheValue);
@@ -86,12 +89,21 @@ bool cmUtilitySourceCommand::InitialPass(std::vector<std::string>& args)
}
// The source exists.
- std::string cmakeCFGout = m_Makefile->GetDefinition("CMAKE_CFG_OUTDIR");
+ std::string cmakeCFGout = m_Makefile->GetDefinition("CMAKE_CFG_INTDIR");
std::string utilityDirectory = m_Makefile->GetCurrentOutputDirectory();
- utilityDirectory += "/"+relativeSource;
-
- // Tell the makefile where to look for this utility.
- m_Makefile->AddUtilityDirectory(utilityDirectory.c_str());
+ std::string exePath;
+ if (m_Makefile->GetDefinition("EXECUTABLE_OUTPUT_PATH"))
+ {
+ exePath = m_Makefile->GetDefinition("EXECUTABLE_OUTPUT_PATH");
+ }
+ if(exePath.size())
+ {
+ utilityDirectory = exePath;
+ }
+ else
+ {
+ utilityDirectory += "/"+relativeSource;
+ }
// Construct the cache entry for the executable's location.
std::string utilityExecutable =
@@ -103,6 +115,13 @@ bool cmUtilitySourceCommand::InitialPass(std::vector<std::string>& args)
utilityExecutable.c_str(),
"Path to an internal program.",
cmCacheManager::FILEPATH);
+ // add a value into the cache that maps from the
+ // full path to the name of the project
+ cmSystemTools::ConvertToUnixSlashes(utilityExecutable);
+ cmCacheManager::GetInstance()->AddCacheEntry(utilityExecutable.c_str(),
+ utilityName.c_str(),
+ "Executable to project name.",
+ cmCacheManager::INTERNAL);
// Set the definition in the makefile.
m_Makefile->AddDefinition(cacheEntry.c_str(), utilityExecutable.c_str());
diff --git a/Source/cmVTKWrapJavaCommand.cxx b/Source/cmVTKWrapJavaCommand.cxx
index e9a8951..eba4723 100644
--- a/Source/cmVTKWrapJavaCommand.cxx
+++ b/Source/cmVTKWrapJavaCommand.cxx
@@ -56,10 +56,6 @@ bool cmVTKWrapJavaCommand::InitialPass(std::vector<std::string>& args)
return true;
}
- // add in a depend in the vtkVTKWrapJava executable
- m_Makefile->AddUtility("vtkWrapJava");
- m_Makefile->AddUtility("vtkParseJava");
-
// what is the current source dir
std::string cdir = m_Makefile->GetCurrentDirectory();
@@ -123,16 +119,16 @@ void cmVTKWrapJavaCommand::FinalPass()
std::string res2 = resultDirectory + "/" +
m_OriginalNames[classNum] + ".java";
- std::string cmd = wjava + " " + m_WrapHeaders[classNum] + " "
+ std::string cmd = " " + m_WrapHeaders[classNum] + " "
+ hints + (m_WrapClasses[classNum].IsAnAbstractClass() ? " 0 " : " 1 ") + " > " + m_WrapClasses[classNum].GetSourceName() + ".cxx";
m_Makefile->AddCustomCommand(m_WrapHeaders[classNum].c_str(),
- cmd.c_str(), depends,
+ wjava.c_str(), cmd.c_str(), depends,
res.c_str(), m_LibraryName.c_str());
- cmd = pjava + " " + m_WrapHeaders[classNum] + " "
+ cmd = " " + m_WrapHeaders[classNum] + " "
+ hints + (m_WrapClasses[classNum].IsAnAbstractClass() ? " 0 " : " 1 ") + " > " + res2;
m_Makefile->AddCustomCommand(m_WrapHeaders[classNum].c_str(),
- cmd.c_str(), depends2,
+ pjava.c_str(), cmd.c_str(), depends2,
res2.c_str(), m_LibraryName.c_str());
alldepends.push_back(res2);
}
diff --git a/Source/cmVTKWrapPythonCommand.cxx b/Source/cmVTKWrapPythonCommand.cxx
index 7e8050f..0c1d6a2 100644
--- a/Source/cmVTKWrapPythonCommand.cxx
+++ b/Source/cmVTKWrapPythonCommand.cxx
@@ -56,8 +56,6 @@ bool cmVTKWrapPythonCommand::InitialPass(std::vector<std::string>& args)
return true;
}
- // add in a depend in the vtkVTKWrapPython executable
- m_Makefile->AddUtility("vtkWrapPython");
// what is the current source dir
std::string cdir = m_Makefile->GetCurrentDirectory();
@@ -124,10 +122,10 @@ void cmVTKWrapPythonCommand::FinalPass()
{
m_Makefile->AddSource(m_WrapClasses[classNum],m_SourceList.c_str());
std::string res = m_WrapClasses[classNum].GetSourceName() + ".cxx";
- std::string cmd = wpython + " " + m_WrapHeaders[classNum] + " "
+ std::string cmd = m_WrapHeaders[classNum] + " "
+ hints + (m_WrapClasses[classNum].IsAnAbstractClass() ? " 0 " : " 1 ") + " > " + m_WrapClasses[classNum].GetSourceName() + ".cxx";
m_Makefile->AddCustomCommand(m_WrapHeaders[classNum].c_str(),
- cmd.c_str(), depends,
+ wpython.c_str(), cmd.c_str(), depends,
res.c_str(), m_LibraryName.c_str());
}
diff --git a/Source/cmVTKWrapTclCommand.cxx b/Source/cmVTKWrapTclCommand.cxx
index e681c68..fcf5c45 100644
--- a/Source/cmVTKWrapTclCommand.cxx
+++ b/Source/cmVTKWrapTclCommand.cxx
@@ -93,9 +93,6 @@ bool cmVTKWrapTclCommand::InitialPass(std::vector<std::string>& args)
// what is the current source dir
std::string cdir = m_Makefile->GetCurrentDirectory();
- // add in a depend in the vtkVTKWrapTcl executable
- m_Makefile->AddUtility("vtkWrapTcl");
-
// get the resulting source list name
m_SourceList = sources[0];
@@ -157,10 +154,10 @@ void cmVTKWrapTclCommand::FinalPass()
{
m_Makefile->AddSource(m_WrapClasses[classNum],m_SourceList.c_str());
std::string res = m_WrapClasses[classNum].GetSourceName() + ".cxx";
- std::string cmd = wtcl + " " + m_WrapHeaders[classNum] + " "
+ std::string cmd = m_WrapHeaders[classNum] + " "
+ hints + (m_WrapClasses[classNum].IsAnAbstractClass() ? " 0 " : " 1 ") + " > " + m_WrapClasses[classNum].GetSourceName() + ".cxx";
m_Makefile->AddCustomCommand(m_WrapHeaders[classNum].c_str(),
- cmd.c_str(), depends,
+ wtcl.c_str(), cmd.c_str(), depends,
res.c_str(), m_LibraryName.c_str());
}
diff --git a/Source/cmake.cxx b/Source/cmake.cxx
index c24051b..5543358 100644
--- a/Source/cmake.cxx
+++ b/Source/cmake.cxx
@@ -50,7 +50,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
void cmake::Usage(const char* program)
{
- std::cerr << "cmake version " << cmMakefile::GetVersion() << "\n";
+ std::cerr << "cmake version " << cmMakefile::GetMajorVersion()
+ << "." << cmMakefile::GetMinorVersion() << "\n";
std::cerr << "Usage: " << program << " srcdir \n"
<< "Where cmake is run from the directory where you want the object files written\n";
}
@@ -237,6 +238,7 @@ int cmake::Generate(const std::vector<std::string>& args)
if(cmSystemTools::GetErrorOccuredFlag())
{
+ cmSystemTools::ResetErrorOccuredFlag();
return -1;
}
return 0;