summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/cmAuxSourceDirectoryCommand.cxx9
-rw-r--r--Source/cmCreateTestSourceList.cxx2
-rw-r--r--Source/cmDSWWriter.cxx3
-rw-r--r--Source/cmFLTKWrapUICommand.cxx29
-rw-r--r--Source/cmGetFilenameComponentCommand.cxx2
-rw-r--r--Source/cmITKWrapTclCommand.cxx8
-rw-r--r--Source/cmInstallFilesCommand.cxx25
-rw-r--r--Source/cmLinkLibrariesCommand.cxx3
-rw-r--r--Source/cmMSDotNETGenerator.cxx3
-rw-r--r--Source/cmMakeDepend.cxx44
-rw-r--r--Source/cmMakefile.cxx94
-rw-r--r--Source/cmMakefile.h25
-rw-r--r--Source/cmQTWrapCPPCommand.cxx61
-rw-r--r--Source/cmQTWrapUICommand.cxx101
-rw-r--r--Source/cmSourceFilesCommand.cxx31
-rw-r--r--Source/cmSourceFilesRemoveCommand.cxx84
-rw-r--r--Source/cmSystemTools.cxx2
-rw-r--r--Source/cmSystemTools.h2
-rw-r--r--Source/cmTarget.cxx33
-rw-r--r--Source/cmTargetLinkLibrariesCommand.cxx3
-rw-r--r--Source/cmUnixMakefileGenerator.cxx11
-rw-r--r--Source/cmVTKMakeInstantiatorCommand.cxx48
-rw-r--r--Source/cmVTKWrapJavaCommand.cxx58
-rw-r--r--Source/cmVTKWrapPythonCommand.cxx63
-rw-r--r--Source/cmVTKWrapTclCommand.cxx74
-rw-r--r--Source/cmWrapExcludeFilesCommand.cxx40
-rw-r--r--Tests/Complex/Library/CMakeLists.txt4
-rw-r--r--Tests/ComplexOneConfig/Library/CMakeLists.txt4
-rw-r--r--Tests/ComplexRelativePaths/Library/CMakeLists.txt4
29 files changed, 448 insertions, 422 deletions
diff --git a/Source/cmAuxSourceDirectoryCommand.cxx b/Source/cmAuxSourceDirectoryCommand.cxx
index ad79acd..7562833 100644
--- a/Source/cmAuxSourceDirectoryCommand.cxx
+++ b/Source/cmAuxSourceDirectoryCommand.cxx
@@ -26,6 +26,7 @@ bool cmAuxSourceDirectoryCommand::InitialPass(std::vector<std::string> const& ar
return false;
}
+ std::string sourceListValue;
std::string templateDirectory = args[0];
m_Makefile->AddExtraDirectory(templateDirectory.c_str());
std::string tdir = m_Makefile->GetCurrentDirectory();
@@ -61,11 +62,17 @@ bool cmAuxSourceDirectoryCommand::InitialPass(std::vector<std::string> const& ar
m_Makefile->GetSourceExtensions(),
m_Makefile->GetHeaderExtensions());
cmfile.SetIsAnAbstractClass(false);
- m_Makefile->AddSource(cmfile,args[1].c_str());
+ m_Makefile->AddSource(cmfile);
+ if (sourceListValue.size() > 0)
+ {
+ sourceListValue += ";";
+ }
+ sourceListValue += cmfile.GetSourceName();
}
}
}
}
+ m_Makefile->AddDefinition(args[1].c_str(), sourceListValue.c_str());
return true;
}
diff --git a/Source/cmCreateTestSourceList.cxx b/Source/cmCreateTestSourceList.cxx
index d320f52..e8643ab 100644
--- a/Source/cmCreateTestSourceList.cxx
+++ b/Source/cmCreateTestSourceList.cxx
@@ -266,7 +266,7 @@ bool cmCreateTestSourceList::InitialPass(std::vector<std::string> const& argsIn)
"cxx",
false);
m_Makefile->AddSource(cfile);
- sourceListValue = args[1].c_str();
+ sourceListValue = args[1] + ".cxx";
for(i = testsBegin; i != tests.end(); ++i)
{
diff --git a/Source/cmDSWWriter.cxx b/Source/cmDSWWriter.cxx
index 147ac0b..52a69c4 100644
--- a/Source/cmDSWWriter.cxx
+++ b/Source/cmDSWWriter.cxx
@@ -252,8 +252,9 @@ void cmDSWWriter::WriteProject(std::ostream& fout,
if(j->first != dspname)
{
// is the library part of this DSW ? If so add dependency
+ std::string libPath = j->first + "_CMAKE_PATH";
const char* cacheValue
- = m_Makefile->GetDefinition(j->first.c_str());
+ = m_Makefile->GetDefinition(libPath.c_str());
if(cacheValue)
{
fout << "Begin Project Dependency\n";
diff --git a/Source/cmFLTKWrapUICommand.cxx b/Source/cmFLTKWrapUICommand.cxx
index 3ac91ec..ec6f7cf 100644
--- a/Source/cmFLTKWrapUICommand.cxx
+++ b/Source/cmFLTKWrapUICommand.cxx
@@ -48,39 +48,33 @@ bool cmFLTKWrapUICommand::InitialPass(std::vector<std::string> const& args)
m_Target = args[0]; // Target that will use the generated files
m_GUISourceList = args[1]; // Source List of the GUI source files
- cmMakefile::SourceMap &GUISources = m_Makefile->GetSources();
-
+ std::vector<std::string> newArgs;
+ m_Makefile->ExpandSourceListArguments(args,newArgs, 1);
+
// get the list of GUI files from which .cxx and .h will be generated
- cmMakefile::SourceMap::iterator l = GUISources.find( m_GUISourceList );
- if (l == GUISources.end())
- {
- this->SetError("bad source list passed to FLTKWrapUICommand");
- return false;
- }
-
std::string outputDirectory = m_Makefile->GetCurrentOutputDirectory();
// Some of the generated files are *.h so the directory "GUI"
// where they are created have to be added to the include path
m_Makefile->AddIncludeDirectory( outputDirectory.c_str() );
- for(std::vector<cmSourceFile*>::iterator i = l->second.begin();
- i != l->second.end(); i++)
+ for(std::vector<std::string>::iterator i = (newArgs.begin() + 1);
+ i != newArgs.end(); i++)
{
- cmSourceFile &curr = *(*i);
+ cmSourceFile *curr = m_Makefile->GetSource(i->c_str());
// if we should use the source GUI
// to generate .cxx and .h files
- if (!curr.GetWrapExclude())
+ if (!curr || !curr->GetWrapExclude())
{
cmSourceFile header_file;
cmSourceFile source_file;
+ std::string srcName = cmSystemTools::GetFilenameWithoutExtension(*i);
const bool headerFileOnly = true;
- header_file.SetName(curr.GetSourceName().c_str(),
+ header_file.SetName(srcName.c_str(),
outputDirectory.c_str(), "h",headerFileOnly);
- source_file.SetName(curr.GetSourceName().c_str(),
+ source_file.SetName(srcName.c_str(),
outputDirectory.c_str(), "cxx",!headerFileOnly);
- std::string origname = cdir + "/" + curr.GetSourceName() + "." +
- curr.GetSourceExtension();
+ std::string origname = cdir + "/" + *i;
std::string hname = header_file.GetFullPath();
std::string cxxname = source_file.GetFullPath();
m_WrapUserInterface.push_back(origname);
@@ -90,7 +84,6 @@ bool cmFLTKWrapUICommand::InitialPass(std::vector<std::string> const& args)
header_file.GetDepends().push_back(origname);
m_GeneratedHeadersClasses.push_back(header_file);
m_GeneratedSourcesClasses.push_back(source_file);
-
}
}
diff --git a/Source/cmGetFilenameComponentCommand.cxx b/Source/cmGetFilenameComponentCommand.cxx
index bd3958c..a1b0778 100644
--- a/Source/cmGetFilenameComponentCommand.cxx
+++ b/Source/cmGetFilenameComponentCommand.cxx
@@ -54,7 +54,7 @@ bool cmGetFilenameComponentCommand::InitialPass(std::vector<std::string> const&
}
else if (args[2] == "NAME_WE")
{
- result = cmSystemTools::GetFilenameNameWithoutExtension(filename);
+ result = cmSystemTools::GetFilenameWithoutExtension(filename);
}
else
{
diff --git a/Source/cmITKWrapTclCommand.cxx b/Source/cmITKWrapTclCommand.cxx
index 838fc3f..4ec309c 100644
--- a/Source/cmITKWrapTclCommand.cxx
+++ b/Source/cmITKWrapTclCommand.cxx
@@ -58,7 +58,7 @@ bool cmITKWrapTclCommand::InitialPass(std::vector<std::string> const& argsIn)
bool cmITKWrapTclCommand::CreateCableRule(const char* configFile)
{
std::string tclFile =
- cmSystemTools::GetFilenameNameWithoutExtension(configFile);
+ cmSystemTools::GetFilenameWithoutExtension(configFile);
tclFile += "_tcl";
std::string inFile = m_Makefile->GetCurrentDirectory();
@@ -138,8 +138,10 @@ bool cmITKWrapTclCommand::CreateCableRule(const char* configFile)
// Set dependency hints.
file.GetDepends().push_back(inFile.c_str());
file.GetDepends().push_back("CableTclFacility/ctCalls.h");
- m_Makefile->AddSource(file, m_TargetName.c_str());
-
+ m_Makefile->AddSource(file);
+ std::string srcname = file.GetSourceName() + ".cxx";
+ m_Makefile->AddDefinition(m_TargetName.c_str(),
+ srcname.c_str());
return true;
}
diff --git a/Source/cmInstallFilesCommand.cxx b/Source/cmInstallFilesCommand.cxx
index 31aa5fa..6095dcc 100644
--- a/Source/cmInstallFilesCommand.cxx
+++ b/Source/cmInstallFilesCommand.cxx
@@ -26,7 +26,7 @@ bool cmInstallFilesCommand::InitialPass(std::vector<std::string> const& argsIn)
return false;
}
std::vector<std::string> args;
- cmSystemTools::ExpandListArguments(argsIn, args);
+ m_Makefile->ExpandSourceListArguments(argsIn, args, 2);
// Create an INSTALL_FILES target specifically for this path.
m_TargetName = "INSTALL_FILES_"+args[0];
@@ -63,26 +63,9 @@ void cmInstallFilesCommand::FinalPass()
{
// replace any variables
std::string temps = *s;
- // look for a srclist
- if (m_Makefile->GetSources().find(temps) != m_Makefile->GetSources().end())
- {
- const std::vector<cmSourceFile*> &clsList =
- m_Makefile->GetSources().find(temps)->second;
- std::vector<cmSourceFile*>::const_iterator c = clsList.begin();
- for (; c != clsList.end(); ++c)
- {
- testf = (*c)->GetSourceName() + ext;
- // add to the result
- targetSourceLists.push_back(testf);
- }
- }
- // if one wasn't found then assume it is a single class
- else
- {
- testf = temps + ext;
- // add to the result
- targetSourceLists.push_back(testf);
- }
+ testf = temps + ext;
+ // add to the result
+ targetSourceLists.push_back(testf);
}
}
else // reg exp list
diff --git a/Source/cmLinkLibrariesCommand.cxx b/Source/cmLinkLibrariesCommand.cxx
index 4024f91..a97143f 100644
--- a/Source/cmLinkLibrariesCommand.cxx
+++ b/Source/cmLinkLibrariesCommand.cxx
@@ -51,7 +51,8 @@ bool cmLinkLibrariesCommand::InitialPass(std::vector<std::string> const& argsIn)
const char* ldir = m_Makefile->GetDefinition("LIBRARY_OUTPUT_PATH");
if (cmSystemTools::IsOff(ldir))
{
- const char* dir = m_Makefile->GetDefinition(i->c_str());
+ std::string libPath = *i + "_CMAKE_PATH";
+ const char* dir = m_Makefile->GetDefinition(libPath.c_str());
if( dir )
{
m_Makefile->AddLinkDirectory( dir );
diff --git a/Source/cmMSDotNETGenerator.cxx b/Source/cmMSDotNETGenerator.cxx
index 0a5b605..54c8c4d 100644
--- a/Source/cmMSDotNETGenerator.cxx
+++ b/Source/cmMSDotNETGenerator.cxx
@@ -407,8 +407,9 @@ void cmMSDotNETGenerator::WriteProjectDepends(std::ostream& fout,
if(j->first != dspname)
{
// is the library part of this SLN ? If so add dependency
+ std::string libPath = j->first + "_CMAKE_PATH";
const char* cacheValue
- = m_Makefile->GetDefinition(j->first.c_str());
+ = m_Makefile->GetDefinition(libPath.c_str());
if(cacheValue)
{
fout << "\t\t{" << this->CreateGUID(dspname) << "}." << depcount << " = {"
diff --git a/Source/cmMakeDepend.cxx b/Source/cmMakeDepend.cxx
index b56f26a..ab1b090 100644
--- a/Source/cmMakeDepend.cxx
+++ b/Source/cmMakeDepend.cxx
@@ -143,39 +143,35 @@ void cmMakeDepend::GenerateDependInformation(cmDependInformation* info)
if(!found)
{
// Try to find the file amongst the sources
- cmMakefile::SourceMap srcmap = m_Makefile->GetSources();
- cmMakefile::SourceMap::iterator l;
- for (l= srcmap.begin() ; l!=srcmap.end() ; l++)
+ cmSourceFile *srcFile =
+ m_Makefile->GetSource(cmSystemTools::GetFilenameWithoutExtension(path).c_str());
+ if (srcFile)
{
- for(std::vector<cmSourceFile*>::iterator i = l->second.begin();
- i != l->second.end(); i++)
+ if (srcFile->GetFullPath() == path)
{
- if ((*i)->GetFullPath() == path)
- {
- found=true;
- }
- else
- {
- //try to guess which include path to use
- for(std::vector<std::string>::iterator t =
+ found=true;
+ }
+ else
+ {
+ //try to guess which include path to use
+ for(std::vector<std::string>::iterator t =
m_IncludeDirectories.begin();
- t != m_IncludeDirectories.end(); ++t)
+ t != m_IncludeDirectories.end(); ++t)
+ {
+ std::string incpath = *t;
+ incpath = incpath + "/";
+ incpath = incpath + path;
+ if (srcFile->GetFullPath() == incpath)
{
- std::string incpath = *t;
- incpath = incpath + "/";
- incpath = incpath + path;
- if ((*i)->GetFullPath() == incpath)
- {
- // set the path to the guessed path
- info->m_FullPath = incpath;
- found=true;
- }
+ // set the path to the guessed path
+ info->m_FullPath = incpath;
+ found=true;
}
}
}
}
}
-
+
if(!found)
{
// Couldn't find any dependency information.
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index ade3a90..d41e83a 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -154,16 +154,6 @@ void cmMakefile::Print() const
{
// print the class lists
std::cout << "classes:\n";
- for(SourceMap::const_iterator l = m_Sources.begin();
- l != m_Sources.end(); l++)
- {
- std::cout << " Class list named: " << l->first << std::endl;
- for(std::vector<cmSourceFile*>::const_iterator i = l->second.begin();
- i != l->second.end(); i++)
- {
- (*i)->Print();
- }
- }
std::cout << " m_Targets: ";
for (cmTargets::const_iterator l = m_Targets.begin();
@@ -364,27 +354,6 @@ bool cmMakefile::ReadListFile(const char* filename, const char* external)
return true;
}
-
-
-cmSourceFile *cmMakefile::GetSource(const char *srclist, const char *cname)
-{
- SourceMap::iterator sl = m_Sources.find(srclist);
- // find the src list
- if (sl == m_Sources.end())
- {
- return 0;
- }
- // find the class
- for (std::vector<cmSourceFile*>::iterator i = sl->second.begin();
- i != sl->second.end(); ++i)
- {
- if ((*i)->GetSourceName() == cname)
- {
- return *i;
- }
- }
- return 0;
-}
void cmMakefile::AddCommand(cmCommand* wg)
{
@@ -444,26 +413,6 @@ void cmMakefile::GenerateMakefile()
}
-void cmMakefile::AddSource(cmSourceFile& cmfile, const char *srclist)
-{
- m_Sources[srclist].push_back(this->AddSource(cmfile));
-}
-
-
-void cmMakefile::RemoveSource(cmSourceFile& cmfile, const char *srclist)
-{
- std::vector<cmSourceFile*> &maplist = m_Sources[srclist];
- for( std::vector<cmSourceFile*>::iterator f = maplist.begin();
- f != maplist.end(); ++f)
- {
- if((*f)->GetSourceName() == cmfile.GetSourceName())
- {
- maplist.erase(f);
- return;
- }
- }
-}
-
void cmMakefile::AddCustomCommand(const char* source,
const char* command,
const std::vector<std::string>& commandArgs,
@@ -711,8 +660,10 @@ void cmMakefile::AddLibrary(const char* lname, int shared,
m_Targets.insert(cmTargets::value_type(lname,target));
// Add an entry into the cache
+ std::string libPath = lname;
+ libPath += "_CMAKE_PATH";
cmCacheManager::GetInstance()->
- AddCacheEntry(lname,
+ AddCacheEntry(libPath.c_str(),
this->GetCurrentOutputDirectory(),
"Path to a library", cmCacheManager::INTERNAL);
@@ -778,8 +729,10 @@ void cmMakefile::AddExecutable(const char *exeName,
// Add an entry into the cache
+ std::string exePath = exeName;
+ exePath += "_CMAKE_PATH";
cmCacheManager::GetInstance()->
- AddCacheEntry(exeName,
+ AddCacheEntry(exePath.c_str(),
this->GetCurrentOutputDirectory(),
"Path to an executable", cmCacheManager::INTERNAL);
}
@@ -1368,7 +1321,7 @@ cmData* cmMakefile::LookupData(const char* name) const
}
}
-cmSourceFile* cmMakefile::GetSource(const char* sourceName)
+cmSourceFile* cmMakefile::GetSource(const char* sourceName) const
{
std::string s = sourceName;
std::string ext;
@@ -1378,7 +1331,7 @@ cmSourceFile* cmMakefile::GetSource(const char* sourceName)
ext = s.substr(pos+1, s.size() - pos-1);
s = s.substr(0, pos);
}
- for(std::vector<cmSourceFile*>::iterator i = m_SourceFiles.begin();
+ for(std::vector<cmSourceFile*>::const_iterator i = m_SourceFiles.begin();
i != m_SourceFiles.end(); ++i)
{
if((*i)->GetSourceName() == s
@@ -1411,3 +1364,34 @@ void cmMakefile::EnableLanguage(const char* lang)
m_MakefileGenerator->EnableLanguage(lang);
}
+void cmMakefile::ExpandSourceListArguments(
+ std::vector<std::string> const& arguments,
+ std::vector<std::string>& newargs, int start)
+{
+ // first figure out if we need to handle version 1.2 style source lists
+ int oldVersion = 1;
+ const char* versionValue
+ = this->GetDefinition("CMAKE_MINIMUM_REQUIRED_VERSION");
+ if (versionValue && atof(versionValue) > 1.2)
+ {
+ oldVersion = 0;
+ }
+
+ // now expand the args
+ std::vector<std::string> tmpArgs;
+ int i;
+ for(i = 0; i < arguments.size(); ++i)
+ {
+ // is the arg defined ?, if so use the def
+ const char *def = this->GetDefinition(arguments[i].c_str());
+ if (def && oldVersion && i >= start)
+ {
+ tmpArgs.push_back(def);
+ }
+ else
+ {
+ tmpArgs.push_back(arguments[i]);
+ }
+ }
+ cmSystemTools::ExpandListArguments(tmpArgs, newargs);
+}
diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h
index b897137..a4c561c 100644
--- a/Source/cmMakefile.h
+++ b/Source/cmMakefile.h
@@ -218,12 +218,12 @@ public:
/**
* Add a class/source file to the build.
*/
- void AddSource(cmSourceFile& ,const char *srcListName);
+ //void AddSource(cmSourceFile& ,const char *srcListName);
/**
* Remove a class/source file from the build.
*/
- void RemoveSource(cmSourceFile& ,const char *srcListName);
+ //void RemoveSource(cmSourceFile& ,const char *srcListName);
/**
* Add a source group for consideration when adding a new source.
@@ -375,18 +375,21 @@ public:
return m_IncludeDirectories;
}
- /**
- * Return a list of source files in this makefile.
+ /** Expand out any arguements in the vector that have ; separated
+ * strings into multiple arguements. A new vector is created
+ * containing the expanded versions of all arguments in argsIn.
+ * This method differes from the one in cmSystemTools in that if
+ * the CmakeLists file is version 1.2 or earlier it will check for
+ * source lists being used without ${} around them
*/
- typedef std::map<cmStdString,std::vector<cmSourceFile*> > SourceMap;
- const SourceMap &GetSources() const {return m_Sources;}
- SourceMap &GetSources() {return m_Sources;}
- cmSourceFile* GetSource(const char *srclist, const char *sourceName);
-
+ void ExpandSourceListArguments(std::vector<std::string> const& argsIn,
+ std::vector<std::string>& argsOut,
+ int startArgumentIndex);
+
/** Get a cmSourceFile pointer for a given source name, if the name is
* not found, then a null pointer is returned.
*/
- cmSourceFile* GetSource(const char* sourceName);
+ cmSourceFile* GetSource(const char* sourceName) const;
///! Add a new cmSourceFile to the list of sources for this makefile.
cmSourceFile* AddSource(cmSourceFile const&);
@@ -524,9 +527,7 @@ protected:
// libraries, classes, and executables
cmTargets m_Targets;
- SourceMap m_Sources;
std::vector<cmSourceFile*> m_SourceFiles;
-
std::vector<std::string> m_SubDirectories; // list of sub directories
struct StringSet : public std::set<cmStdString>
diff --git a/Source/cmQTWrapCPPCommand.cxx b/Source/cmQTWrapCPPCommand.cxx
index df1ba0c..e55513d 100644
--- a/Source/cmQTWrapCPPCommand.cxx
+++ b/Source/cmQTWrapCPPCommand.cxx
@@ -25,7 +25,7 @@ bool cmQTWrapCPPCommand::InitialPass(std::vector<std::string> const& argsIn)
return false;
}
std::vector<std::string> args;
- cmSystemTools::ExpandListArguments(argsIn, args);
+ m_Makefile->ExpandSourceListArguments(argsIn, args, 2);
// Now check and see if the value has been stored in the cache
// already, if so use that value and don't look for the program
@@ -50,37 +50,28 @@ bool cmQTWrapCPPCommand::InitialPass(std::vector<std::string> const& argsIn)
m_SourceList = args[1];
// get the list of classes for this library
- cmMakefile::SourceMap &Classes = m_Makefile->GetSources();
-
-
- for(std::vector<std::string>::const_iterator j = (args.begin() + 2);
+ for(std::vector<std::string>::iterator j = (args.begin() + 2);
j != args.end(); ++j)
{
- cmMakefile::SourceMap::iterator l = Classes.find(*j);
- if (l == Classes.end())
- {
- this->SetError("bad source list passed to QTWrapCPPCommand");
- return false;
- }
- for(std::vector<cmSourceFile*>::iterator i = l->second.begin();
- i != l->second.end(); i++)
+ cmSourceFile *curr = m_Makefile->GetSource(j->c_str());
+
+ // if we should wrap the class
+ if (!curr || !curr->GetWrapExclude())
{
- cmSourceFile &curr = *(*i);
- // if we should wrap the class
- if (!curr.GetWrapExclude())
+ cmSourceFile file;
+ if (curr)
{
- cmSourceFile file;
- file.SetIsAnAbstractClass(curr.IsAnAbstractClass());
- std::string newName = "moc_" + curr.GetSourceName();
- file.SetName(newName.c_str(), m_Makefile->GetCurrentOutputDirectory(),
- "cxx",false);
- std::string hname = cdir + "/" + curr.GetSourceName() + "." +
- curr.GetSourceExtension();
- m_WrapHeaders.push_back(hname);
- // add starting depends
- file.GetDepends().push_back(hname);
- m_WrapClasses.push_back(file);
+ file.SetIsAnAbstractClass(curr->IsAnAbstractClass());
}
+ std::string srcName = cmSystemTools::GetFilenameWithoutExtension(*j);
+ std::string newName = "moc_" + srcName;
+ file.SetName(newName.c_str(), m_Makefile->GetCurrentOutputDirectory(),
+ "cxx",false);
+ std::string hname = cdir + "/" + *j;
+ m_WrapHeaders.push_back(hname);
+ // add starting depends
+ file.GetDepends().push_back(hname);
+ m_WrapClasses.push_back(file);
}
}
@@ -94,7 +85,14 @@ void cmQTWrapCPPCommand::FinalPass()
size_t lastClass = m_WrapClasses.size();
std::vector<std::string> depends;
std::string moc_exe = "${QT_MOC_EXE}";
+ std::string sourceListValue;
+ // was the list already populated
+ const char *def = m_Makefile->GetDefinition(m_SourceList.c_str());
+ if (def)
+ {
+ sourceListValue = def;
+ }
// wrap all the .h files
depends.push_back(moc_exe);
@@ -110,7 +108,12 @@ void cmQTWrapCPPCommand::FinalPass()
for(size_t classNum = 0; classNum < lastClass; classNum++)
{
// Add output to build list
- m_Makefile->AddSource(m_WrapClasses[classNum],m_SourceList.c_str());
+ m_Makefile->AddSource(m_WrapClasses[classNum]);
+ if (sourceListValue.size() > 0)
+ {
+ sourceListValue += ";";
+ }
+ sourceListValue += m_WrapClasses[classNum].GetSourceName() + ".cxx";
// set up moc command
std::string res = m_Makefile->GetCurrentOutputDirectory();
@@ -131,7 +134,7 @@ void cmQTWrapCPPCommand::FinalPass()
}
m_Makefile->AddDefinition("GENERATED_QT_FILES",moc_list.c_str());
-
+ m_Makefile->AddDefinition(m_SourceList.c_str(), sourceListValue.c_str());
}
diff --git a/Source/cmQTWrapUICommand.cxx b/Source/cmQTWrapUICommand.cxx
index 957816d..8a93f6a 100644
--- a/Source/cmQTWrapUICommand.cxx
+++ b/Source/cmQTWrapUICommand.cxx
@@ -25,7 +25,7 @@ bool cmQTWrapUICommand::InitialPass(std::vector<std::string> const& argsIn)
return false;
}
std::vector<std::string> args;
- cmSystemTools::ExpandListArguments(argsIn, args);
+ m_Makefile->ExpandSourceListArguments(argsIn, args, 3);
// Now check and see if the value has been stored in the cache
// already, if so use that value and don't look for the program
@@ -49,63 +49,66 @@ bool cmQTWrapUICommand::InitialPass(std::vector<std::string> const& argsIn)
m_LibraryName = args[0];
m_HeaderList = args[1];
m_SourceList = args[2];
+ std::string sourceListValue;
+ const char *def = m_Makefile->GetDefinition(m_SourceList.c_str());
+ if (def)
+ {
+ sourceListValue = def;
+ }
// get the list of classes for this library
- cmMakefile::SourceMap &Classes = m_Makefile->GetSources();
-
-
- for(std::vector<std::string>::const_iterator j = (args.begin() + 3);
+ for(std::vector<std::string>::iterator j = (args.begin() + 3);
j != args.end(); ++j)
- {
- cmMakefile::SourceMap::iterator l = Classes.find(*j);
- if (l == Classes.end())
- {
- this->SetError("bad source list passed to QTWrapUICommand");
- return false;
- }
- for(std::vector<cmSourceFile*>::iterator i = l->second.begin();
- i != l->second.end(); i++)
+ {
+ cmSourceFile *curr = m_Makefile->GetSource(j->c_str());
+
+ // if we should wrap the class
+ if (!curr || !curr->GetWrapExclude())
{
- cmSourceFile &curr = *(*i);
- // if we should wrap the class
- if (!curr.GetWrapExclude())
+ cmSourceFile header_file;
+ cmSourceFile source_file;
+ cmSourceFile moc_file;
+ std::string srcName = cmSystemTools::GetFilenameWithoutExtension(*j);
+ header_file.SetName(srcName.c_str(),
+ m_Makefile->GetCurrentOutputDirectory(),
+ "h",false);
+ source_file.SetName(srcName.c_str(),
+ m_Makefile->GetCurrentOutputDirectory(),
+ "cxx",false);
+ std::string moc_source_name("moc_");
+ moc_source_name = moc_source_name + srcName;
+ moc_file.SetName(moc_source_name.c_str(),
+ m_Makefile->GetCurrentOutputDirectory(),
+ "cxx",false);
+ std::string origname = cdir + "/" + *j;
+ std::string hname = header_file.GetFullPath();
+ m_WrapUserInterface.push_back(origname);
+ // add starting depends
+ moc_file.GetDepends().push_back(hname);
+ source_file.GetDepends().push_back(hname);
+ source_file.GetDepends().push_back(origname);
+ header_file.GetDepends().push_back(origname);
+ m_WrapHeadersClasses.push_back(header_file);
+ m_WrapSourcesClasses.push_back(source_file);
+ m_WrapMocClasses.push_back(moc_file);
+ m_Makefile->AddSource(header_file);
+ m_Makefile->AddSource(source_file);
+ m_Makefile->AddSource(moc_file);
+
+ // create the list of sources
+ if (sourceListValue.size() > 0)
{
- cmSourceFile header_file;
- cmSourceFile source_file;
- cmSourceFile moc_file;
- header_file.SetName(curr.GetSourceName().c_str(),
- m_Makefile->GetCurrentOutputDirectory(),
- "h",false);
- source_file.SetName(curr.GetSourceName().c_str(),
- m_Makefile->GetCurrentOutputDirectory(),
- "cxx",false);
- std::string moc_source_name("moc_");
- moc_source_name = moc_source_name + curr.GetSourceName().c_str();
- moc_file.SetName(moc_source_name.c_str(),
- m_Makefile->GetCurrentOutputDirectory(),
- "cxx",false);
- std::string origname = cdir + "/" + curr.GetSourceName() + "." +
- curr.GetSourceExtension();
- std::string hname = header_file.GetFullPath();
- m_WrapUserInterface.push_back(origname);
- // add starting depends
- moc_file.GetDepends().push_back(hname);
- source_file.GetDepends().push_back(hname);
- source_file.GetDepends().push_back(origname);
- header_file.GetDepends().push_back(origname);
- m_WrapHeadersClasses.push_back(header_file);
- m_WrapSourcesClasses.push_back(source_file);
- m_WrapMocClasses.push_back(moc_file);
- m_Makefile->AddSource(header_file,
- m_HeaderList.c_str());
- m_Makefile->AddSource(source_file,
- m_SourceList.c_str());
- m_Makefile->AddSource(moc_file,
- m_SourceList.c_str());
+ sourceListValue += ";";
}
+ sourceListValue += header_file.GetSourceName() + ".h";
+ sourceListValue += ";";
+ sourceListValue += source_file.GetSourceName() + ".cxx";
+ sourceListValue += ";";
+ sourceListValue += moc_file.GetSourceName() + ".cxx";
}
}
+ m_Makefile->AddDefinition(m_SourceList.c_str(), sourceListValue.c_str());
return true;
}
diff --git a/Source/cmSourceFilesCommand.cxx b/Source/cmSourceFilesCommand.cxx
index 0024f9e..63d06e5 100644
--- a/Source/cmSourceFilesCommand.cxx
+++ b/Source/cmSourceFilesCommand.cxx
@@ -34,8 +34,16 @@ bool cmSourceFilesCommand::InitialPass(std::vector<std::string> const& argsIn)
}
std::vector<std::string> args;
cmSystemTools::ExpandListArguments(argsIn, args);
-
+ std::string sourceListValue;
+
+ // was the list already populated
std::string name = args[0];
+ const char *def = m_Makefile->GetDefinition(name.c_str());
+ if (def)
+ {
+ sourceListValue = def;
+ }
+
int generated = 0;
@@ -54,8 +62,12 @@ bool cmSourceFilesCommand::InitialPass(std::vector<std::string> const& argsIn)
if(sf)
{
// if the source file is already in the makefile,
- // then add the pointer to the source list without creating a cmSourceFile
- m_Makefile->GetSources()[name].push_back(sf);
+ // then add the pointer to the source list without creating cmSourceFile
+ if (sourceListValue.size() > 0)
+ {
+ sourceListValue += ";";
+ }
+ sourceListValue += copy;
continue;
}
cmSourceFile file;
@@ -79,11 +91,13 @@ bool cmSourceFilesCommand::InitialPass(std::vector<std::string> const& argsIn)
}
else
{
- file.SetName(name_no_ext.c_str(), m_Makefile->GetCurrentOutputDirectory(),
+ file.SetName(name_no_ext.c_str(),
+ m_Makefile->GetCurrentOutputDirectory(),
ext.c_str(), false);
}
}
else
+ {
// if this is a full path then
if((path.size() && path[0] == '/') ||
(path.size() > 1 && path[1] == ':'))
@@ -99,9 +113,16 @@ bool cmSourceFilesCommand::InitialPass(std::vector<std::string> const& argsIn)
m_Makefile->GetSourceExtensions(),
m_Makefile->GetHeaderExtensions());
}
- m_Makefile->AddSource(file, name.c_str());
+ }
+ m_Makefile->AddSource(file);
+ if (sourceListValue.size() > 0)
+ {
+ sourceListValue += ";";
+ }
+ sourceListValue += copy;
}
+ m_Makefile->AddDefinition(name.c_str(), sourceListValue.c_str());
return true;
}
diff --git a/Source/cmSourceFilesRemoveCommand.cxx b/Source/cmSourceFilesRemoveCommand.cxx
index 3c5274a..2f1b259 100644
--- a/Source/cmSourceFilesRemoveCommand.cxx
+++ b/Source/cmSourceFilesRemoveCommand.cxx
@@ -17,7 +17,7 @@
#include "cmSourceFilesRemoveCommand.h"
// cmSourceFilesRemoveCommand
-bool cmSourceFilesRemoveCommand::InitialPass(std::vector<std::string> const& argsIn)
+bool cmSourceFilesRemoveCommand::InitialPass(std::vector<std::string> const& args)
{
const char* versionValue
= m_Makefile->GetDefinition("CMAKE_MINIMUM_REQUIRED_VERSION");
@@ -26,56 +26,60 @@ bool cmSourceFilesRemoveCommand::InitialPass(std::vector<std::string> const& arg
this->SetError("The SOURCE_FILES_REMOVE command has been deprecated in CMake version 1.4. You should use the REMOVE command instead.\n");
return false;
}
- if(argsIn.size() < 1 )
+
+ if(args.size() < 2 )
{
this->SetError("called with incorrect number of arguments");
return false;
}
- std::vector<std::string> args;
- cmSystemTools::ExpandListArguments(argsIn, args);
- int generated = 0;
- for(std::vector<std::string>::const_iterator i = (args.begin() + 1);
- i != args.end(); ++i)
+ const char* variable = args[0].c_str(); // VAR is always first
+ // get the old value
+ const char* cacheValue
+ = m_Makefile->GetDefinition(variable);
+
+ // expand the variable
+ std::vector<std::string> varArgsExpanded;
+ std::vector<std::string> temp;
+ temp.push_back(std::string(cacheValue));
+ cmSystemTools::ExpandListArguments(temp, varArgsExpanded);
+
+ // expand the args
+ // check for REMOVE(VAR v1 v2 ... vn)
+ std::vector<std::string> argsExpanded;
+ std::vector<std::string> temp2;
+ for(unsigned int j = 1; j < args.size(); ++j)
{
- std::string copy = *i;
- if ( copy == "GENERATED" )
- {
- generated = 1;
- continue;
- }
- cmSourceFile file;
- if ( generated )
+ temp2.push_back(args[j]);
+ }
+ cmSystemTools::ExpandListArguments(temp2, argsExpanded);
+
+ // now create the new value
+ std::string value;
+ for(unsigned int j = 0; j < varArgsExpanded.size(); ++j)
+ {
+ int found = 0;
+ for(unsigned int k = 0; k < argsExpanded.size(); ++k)
{
- // This file will be generated, so we should not check
- // if it exist.
- std::string ext = cmSystemTools::GetFilenameExtension(copy);
- std::string path = cmSystemTools::GetFilenamePath(copy);
- std::string name_no_ext = cmSystemTools::GetFilenameName(copy.c_str());
- name_no_ext = name_no_ext.substr(0, name_no_ext.length()-ext.length());
- if ( ext.length() && ext[0] == '.' )
- {
- ext = ext.substr(1);
- }
- if((path.size() && path[0] == '/') ||
- (path.size() > 1 && path[1] == ':'))
- {
- file.SetName(name_no_ext.c_str(), path.c_str(), ext.c_str(), false);
- }
- else
- {
- file.SetName(name_no_ext.c_str(), m_Makefile->GetCurrentOutputDirectory(),
- ext.c_str(), false);
- }
+ if (varArgsExpanded[j] == argsExpanded[k])
+ {
+ found = 1;
+ break;
+ }
}
- else
+ if (!found)
{
- file.SetName((*i).c_str(), m_Makefile->GetCurrentDirectory(),
- m_Makefile->GetSourceExtensions(),
- m_Makefile->GetHeaderExtensions());
+ if (value.size())
+ {
+ value += ";";
+ }
+ value += varArgsExpanded[j];
}
- m_Makefile->RemoveSource(file, args[0].c_str());
}
+
+ // add the definition
+ m_Makefile->AddDefinition(variable, value.c_str());
+
return true;
}
diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx
index 5730eb8..8a11240 100644
--- a/Source/cmSystemTools.cxx
+++ b/Source/cmSystemTools.cxx
@@ -1865,7 +1865,7 @@ std::string cmSystemTools::GetFilenameExtension(const std::string& filename)
* Return file name without extension of a full filename (i.e. without path).
* Warning: it considers the longest extension (for example: .tar.gz)
*/
-std::string cmSystemTools::GetFilenameNameWithoutExtension(const std::string& filename)
+std::string cmSystemTools::GetFilenameWithoutExtension(const std::string& filename)
{
std::string name = cmSystemTools::GetFilenameName(filename);
std::string::size_type dot_pos = name.find(".");
diff --git a/Source/cmSystemTools.h b/Source/cmSystemTools.h
index 623a6ed..b7f8911 100644
--- a/Source/cmSystemTools.h
+++ b/Source/cmSystemTools.h
@@ -253,7 +253,7 @@ public:
static std::string GetFilenameExtension(const std::string&);
///! return file name without extension of a full filename.
- static std::string GetFilenameNameWithoutExtension(const std::string&);
+ static std::string GetFilenameWithoutExtension(const std::string&);
static long int ModifiedTime(const char* filename);
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index d654342..3c0d052 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -39,19 +39,6 @@ void cmTarget::GenerateSourceFilesFromSourceLists( cmMakefile &mf)
std::string temps = *s;
mf.ExpandVariablesInString(temps);
- // look for a srclist, this is old code we really don't want
- // any source lists in the future.
- if (mf.GetSources().find(temps) != mf.GetSources().end())
- {
- const std::vector<cmSourceFile*> &clsList =
- mf.GetSources().find(temps)->second;
- // if we ahave a limited build list, use it
- m_SourceFiles.insert(m_SourceFiles.end(),
- clsList.begin(),
- clsList.end());
- done = 1;
- }
-
// Next if one wasn't found then assume it is a single class
if (!done && mf.GetSource(temps.c_str()))
{
@@ -64,25 +51,16 @@ void cmTarget::GenerateSourceFilesFromSourceLists( cmMakefile &mf)
// where a source list would be passed into here, by making it
// a vector we need to possibly lookup the variable to maintain
// CMake 1.2 compatability.
+ const char* versionValue
+ = mf.GetDefinition("CMAKE_MINIMUM_REQUIRED_VERSION");
if (!done)
{
- const char* versionValue
- = mf.GetDefinition("CMAKE_MINIMUM_REQUIRED_VERSION");
if (!versionValue || atof(versionValue) <= 1.2)
{
const char* varValue =
mf.GetDefinition(temps.c_str());
// if the definition exists
- // and it has an extension in it then assume it is a source file
- // the problem is that ADD_EXECUTABLE creates a definition with the
- // same name as the executable which could be the same name as the
- // source file without the extension, so if you do this:
- // ADD_EXECUTABLE(foo foo) where foo.cxx is a source file, then
- // foo will be varValue will be defined to the path of the executable, but
- // not a source list as we expect, so look for a "." in the string to see
- // if it is a file or not.
- if (varValue
- && strchr(varValue, '.'))
+ if (varValue)
{
std::vector<std::string> tval;
tval.push_back(varValue);
@@ -340,7 +318,10 @@ cmTarget::AnalyzeLibDependencies( const cmMakefile& mf )
{
if( addLibDirs )
{
- const char* libpath = mf.GetDefinition( k->c_str() );
+ // who the hell knows what this is, I think that K contains the
+ // name of a library but ... Ken
+ std::string libPathStr = *k + "_CMAKE_PATH";
+ const char* libpath = mf.GetDefinition( libPathStr.c_str() );
if( libpath )
{
// Don't add a link directory that is already present.
diff --git a/Source/cmTargetLinkLibrariesCommand.cxx b/Source/cmTargetLinkLibrariesCommand.cxx
index 143cf86..e2816ee 100644
--- a/Source/cmTargetLinkLibrariesCommand.cxx
+++ b/Source/cmTargetLinkLibrariesCommand.cxx
@@ -54,7 +54,8 @@ bool cmTargetLinkLibrariesCommand::InitialPass(std::vector<std::string> const& a
const char* ldir = m_Makefile->GetDefinition("LIBRARY_OUTPUT_PATH");
if (cmSystemTools::IsOff(ldir))
{
- const char* dir = m_Makefile->GetDefinition(i->c_str());
+ std::string libPath = *i + "_CMAKE_PATH";
+ const char* dir = m_Makefile->GetDefinition(libPath.c_str());
if( dir )
{
m_Makefile->AddLinkDirectoryForTarget(args[0].c_str(), dir );
diff --git a/Source/cmUnixMakefileGenerator.cxx b/Source/cmUnixMakefileGenerator.cxx
index c8ed941..62ae125 100644
--- a/Source/cmUnixMakefileGenerator.cxx
+++ b/Source/cmUnixMakefileGenerator.cxx
@@ -942,7 +942,8 @@ void cmUnixMakefileGenerator::OutputDependLibs(std::ostream& fout)
// loop over the list of directories that the libraries might
// be in, looking for an ADD_LIBRARY(lib...) line. This would
// be stored in the cache
- const char* cacheValue = m_Makefile->GetDefinition(lib->c_str());
+ std::string libPath = *lib + "_CMAKE_PATH";
+ const char* cacheValue = m_Makefile->GetDefinition(libPath.c_str());
// if cache and not the current directory add a rule, to
// jump into the directory and build for the first time
if(cacheValue &&
@@ -1058,7 +1059,9 @@ bool cmUnixMakefileGenerator::SamePath(const char* path1, const char* path2)
void cmUnixMakefileGenerator::OutputLibDepend(std::ostream& fout,
const char* name)
{
- const char* cacheValue = m_Makefile->GetDefinition(name);
+ std::string libPath = name;
+ libPath += "_CMAKE_PATH";
+ const char* cacheValue = m_Makefile->GetDefinition(libPath.c_str());
if(cacheValue )
{
// if there is a cache value, then this is a library that cmake
@@ -1112,7 +1115,9 @@ void cmUnixMakefileGenerator::OutputLibDepend(std::ostream& fout,
void cmUnixMakefileGenerator::OutputExeDepend(std::ostream& fout,
const char* name)
{
- const char* cacheValue = m_Makefile->GetDefinition(name);
+ std::string exePath = name;
+ exePath += "_CMAKE_PATH";
+ const char* cacheValue = m_Makefile->GetDefinition(exePath.c_str());
if(cacheValue )
{
// if there is a cache value, then this is a executable/utility that cmake
diff --git a/Source/cmVTKMakeInstantiatorCommand.cxx b/Source/cmVTKMakeInstantiatorCommand.cxx
index d649117..bf8466e 100644
--- a/Source/cmVTKMakeInstantiatorCommand.cxx
+++ b/Source/cmVTKMakeInstantiatorCommand.cxx
@@ -28,11 +28,10 @@ cmVTKMakeInstantiatorCommand
return false;
}
std::vector<std::string> args;
- cmSystemTools::ExpandListArguments(argsIn, args);
-
- m_ClassName = args[0];
+ m_Makefile->ExpandSourceListArguments(argsIn, args, 2);
+ std::string sourceListValue;
- std::string outSourceList = args[1];
+ m_ClassName = args[0];
std::vector<cmStdString> inSourceLists;
m_ExportMacro = "-";
@@ -112,32 +111,17 @@ cmVTKMakeInstantiatorCommand
for(std::vector<cmStdString>::const_iterator s = inSourceLists.begin();
s != inSourceLists.end(); ++s)
{
- // Find the source list specified.
- cmMakefile::SourceMap::iterator srcListIter =
- m_Makefile->GetSources().find(*s);
+ std::string srcName = cmSystemTools::GetFilenameWithoutExtension(*s);
+ cmSourceFile *sf = m_Makefile->GetSource(s->c_str());
- if(srcListIter == m_Makefile->GetSources().end())
+ // Wrap-excluded and abstract classes do not have a New() method.
+ // vtkIndent and vtkTimeStamp are special cases and are not
+ // vtkObject subclasses.
+ if(
+ (!sf || (!sf->GetWrapExclude() && !sf->GetIsAnAbstractClass())) &&
+ ((srcName != "vtkIndent") && (srcName != "vtkTimeStamp")))
{
- std::string errStr = "No source list named " + *s;
- this->SetError(errStr.c_str());
- return false;
- }
-
- std::vector<cmSourceFile*>& srcList = srcListIter->second;
-
- // Collect the names of the classes.
- for(std::vector<cmSourceFile*>::iterator src = srcList.begin();
- src != srcList.end();++src)
- {
- // Wrap-excluded and abstract classes do not have a New() method.
- // vtkIndent and vtkTimeStamp are special cases and are not
- // vtkObject subclasses.
- if(!(*src)->GetWrapExclude() && !(*src)->GetIsAnAbstractClass()
- && ((*src)->GetSourceName() != "vtkIndent")
- && ((*src)->GetSourceName() != "vtkTimeStamp"))
- {
- m_Classes.push_back((*src)->GetSourceName());
- }
+ m_Classes.push_back(srcName);
}
}
@@ -173,7 +157,8 @@ cmVTKMakeInstantiatorCommand
file.SetName(fileName.c_str(), filePath.c_str(),
m_Makefile->GetSourceExtensions(),
m_Makefile->GetHeaderExtensions());
- m_Makefile->AddSource(file, outSourceList.c_str());
+ m_Makefile->AddSource(file);
+ sourceListValue += file.GetSourceName() + ".cxx";
}
size_t numClasses = m_Classes.size();
@@ -207,9 +192,12 @@ cmVTKMakeInstantiatorCommand
file.SetName(fileName.c_str(), filePath.c_str(),
m_Makefile->GetSourceExtensions(),
m_Makefile->GetHeaderExtensions());
- m_Makefile->AddSource(file, outSourceList.c_str());
+ m_Makefile->AddSource(file);
+ sourceListValue += ";";
+ sourceListValue += file.GetSourceName() + ".cxx";
}
+ m_Makefile->AddDefinition(args[1].c_str(), sourceListValue.c_str());
return true;
}
diff --git a/Source/cmVTKWrapJavaCommand.cxx b/Source/cmVTKWrapJavaCommand.cxx
index 84634a2..787fb3b 100644
--- a/Source/cmVTKWrapJavaCommand.cxx
+++ b/Source/cmVTKWrapJavaCommand.cxx
@@ -25,7 +25,7 @@ bool cmVTKWrapJavaCommand::InitialPass(std::vector<std::string> const& argsIn)
return false;
}
std::vector<std::string> args;
- cmSystemTools::ExpandListArguments(argsIn, args);
+ m_Makefile->ExpandSourceListArguments(argsIn, args, 2);
// Now check and see if the value has been stored in the cache
// already, if so use that value and don't look for the program
@@ -42,35 +42,29 @@ bool cmVTKWrapJavaCommand::InitialPass(std::vector<std::string> const& argsIn)
m_SourceList = args[1];
// get the list of classes for this library
- cmMakefile::SourceMap &Classes = m_Makefile->GetSources();
for(std::vector<std::string>::const_iterator j = (args.begin() + 2);
j != args.end(); ++j)
{
- cmMakefile::SourceMap::iterator l = Classes.find(*j);
- if (l == Classes.end())
- {
- this->SetError("bad source list passed to VTKWrapJavaCommand");
- return false;
- }
- for(std::vector<cmSourceFile*>::iterator i = l->second.begin();
- i != l->second.end(); i++)
+ cmSourceFile *curr = m_Makefile->GetSource(j->c_str());
+
+ // if we should wrap the class
+ if (!curr || !curr->GetWrapExclude())
{
- cmSourceFile &curr = *(*i);
- // if we should wrap the class
- if (!curr.GetWrapExclude())
+ cmSourceFile file;
+ if (curr)
{
- cmSourceFile file;
- file.SetIsAnAbstractClass(curr.IsAnAbstractClass());
- std::string newName = curr.GetSourceName() + "Java";
- file.SetName(newName.c_str(), m_Makefile->GetCurrentOutputDirectory(),
- "cxx",false);
- std::string hname = cdir + "/" + curr.GetSourceName() + ".h";
- m_WrapHeaders.push_back(hname);
- // add starting depends
- file.GetDepends().push_back(hname);
- m_WrapClasses.push_back(file);
- m_OriginalNames.push_back(curr.GetSourceName());
+ file.SetIsAnAbstractClass(curr->IsAnAbstractClass());
}
+ std::string srcName = cmSystemTools::GetFilenameWithoutExtension(*j);
+ std::string newName = srcName + "Java";
+ file.SetName(newName.c_str(), m_Makefile->GetCurrentOutputDirectory(),
+ "cxx",false);
+ std::string hname = cdir + "/" + srcName + ".h";
+ m_WrapHeaders.push_back(hname);
+ // add starting depends
+ file.GetDepends().push_back(hname);
+ m_WrapClasses.push_back(file);
+ m_OriginalNames.push_back(srcName);
}
}
@@ -89,9 +83,17 @@ void cmVTKWrapJavaCommand::FinalPass()
std::string pjava = "${VTK_PARSE_JAVA_EXE}";
std::string hints = "${VTK_WRAP_HINTS}";
std::string resultDirectory = "${VTK_JAVA_HOME}";
+ std::string sourceListValue;
m_Makefile->ExpandVariablesInString(hints);
+ // was the list already populated
+ const char *def = m_Makefile->GetDefinition(m_SourceList.c_str());
+ if (def)
+ {
+ sourceListValue = def;
+ }
+
// wrap all the .h files
depends.push_back(wjava);
depends2.push_back(pjava);
@@ -102,7 +104,12 @@ void cmVTKWrapJavaCommand::FinalPass()
}
for(size_t classNum = 0; classNum < lastClass; classNum++)
{
- m_Makefile->AddSource(m_WrapClasses[classNum],m_SourceList.c_str());
+ m_Makefile->AddSource(m_WrapClasses[classNum]);
+ if (sourceListValue.size() > 0)
+ {
+ sourceListValue += ";";
+ }
+ sourceListValue += m_WrapClasses[classNum].GetSourceName() + ".cxx";
// wrap java
std::string res = m_Makefile->GetCurrentOutputDirectory();
@@ -146,6 +153,7 @@ void cmVTKWrapJavaCommand::FinalPass()
alldepends,
empty);
+ m_Makefile->AddDefinition(m_SourceList.c_str(), sourceListValue.c_str());
}
diff --git a/Source/cmVTKWrapPythonCommand.cxx b/Source/cmVTKWrapPythonCommand.cxx
index 7748942..2f23559 100644
--- a/Source/cmVTKWrapPythonCommand.cxx
+++ b/Source/cmVTKWrapPythonCommand.cxx
@@ -25,7 +25,7 @@ bool cmVTKWrapPythonCommand::InitialPass(std::vector<std::string> const& argsIn)
return false;
}
std::vector<std::string> args;
- cmSystemTools::ExpandListArguments(argsIn, args);
+ m_Makefile->ExpandSourceListArguments(argsIn, args, 2);
// Now check and see if the value has been stored in the cache
// already, if so use that value and don't look for the program
@@ -43,34 +43,28 @@ bool cmVTKWrapPythonCommand::InitialPass(std::vector<std::string> const& argsIn)
m_SourceList = args[1];
// get the list of classes for this library
- cmMakefile::SourceMap &Classes = m_Makefile->GetSources();
- for(std::vector<std::string>::const_iterator j = (args.begin() + 2);
+ for(std::vector<std::string>::iterator j = (args.begin() + 2);
j != args.end(); ++j)
{
- cmMakefile::SourceMap::iterator l = Classes.find(*j);
- if (l == Classes.end())
+ cmSourceFile *curr = m_Makefile->GetSource(j->c_str());
+
+ // if we should wrap the class
+ if (!curr || !curr->GetWrapExclude())
{
- this->SetError("bad source list passed to VTKWrapPythonCommand");
- return false;
- }
- for(std::vector<cmSourceFile*>::iterator i = l->second.begin();
- i != l->second.end(); i++)
- {
- cmSourceFile &curr = *(*i);
- // if we should wrap the class
- if (!curr.GetWrapExclude())
+ cmSourceFile file;
+ if (curr)
{
- cmSourceFile file;
- file.SetIsAnAbstractClass(curr.IsAnAbstractClass());
- std::string newName = curr.GetSourceName() + "Python";
- file.SetName(newName.c_str(), m_Makefile->GetCurrentOutputDirectory(),
- "cxx",false);
- std::string hname = cdir + "/" + curr.GetSourceName() + ".h";
- m_WrapHeaders.push_back(hname);
- // add starting depends
- file.GetDepends().push_back(hname);
- m_WrapClasses.push_back(file);
+ file.SetIsAnAbstractClass(curr->IsAnAbstractClass());
}
+ std::string srcName = cmSystemTools::GetFilenameWithoutExtension(*j);
+ std::string newName = srcName + "Python";
+ file.SetName(newName.c_str(), m_Makefile->GetCurrentOutputDirectory(),
+ "cxx",false);
+ std::string hname = cdir + "/" + srcName + ".h";
+ m_WrapHeaders.push_back(hname);
+ // add starting depends
+ file.GetDepends().push_back(hname);
+ m_WrapClasses.push_back(file);
}
}
@@ -84,9 +78,18 @@ void cmVTKWrapPythonCommand::FinalPass()
std::vector<std::string> depends;
std::string wpython = "${VTK_WRAP_PYTHON_EXE}";
std::string hints = "${VTK_WRAP_HINTS}";
+ std::string sourceListValue;
m_Makefile->ExpandVariablesInString(hints);
+ // was the list already populated
+ const char *def = m_Makefile->GetDefinition(m_SourceList.c_str());
+ if (def)
+ {
+ sourceListValue = def;
+ sourceListValue += ";";
+ }
+
// Create the init file
std::string res = m_LibraryName;
res += "Init.cxx";
@@ -99,8 +102,9 @@ void cmVTKWrapPythonCommand::FinalPass()
newName += "Init";
cfile.SetName(newName.c_str(), m_Makefile->GetCurrentOutputDirectory(),
"cxx",false);
- m_Makefile->AddSource(cfile,m_SourceList.c_str());
-
+ m_Makefile->AddSource(cfile);
+ sourceListValue += newName + ".cxx";
+
// wrap all the .h files
depends.push_back(wpython);
if (strcmp("${VTK_WRAP_HINTS}",hints.c_str()))
@@ -109,7 +113,7 @@ void cmVTKWrapPythonCommand::FinalPass()
}
for(size_t classNum = 0; classNum < lastClass; classNum++)
{
- m_Makefile->AddSource(m_WrapClasses[classNum],m_SourceList.c_str());
+ m_Makefile->AddSource(m_WrapClasses[classNum]);
std::string res = m_Makefile->GetCurrentOutputDirectory();
res += "/";
res += m_WrapClasses[classNum].GetSourceName() + ".cxx";
@@ -121,11 +125,14 @@ void cmVTKWrapPythonCommand::FinalPass()
}
args.push_back((m_WrapClasses[classNum].IsAnAbstractClass() ? "0" : "1"));
args.push_back(res);
+ sourceListValue += ";";
+ sourceListValue += m_WrapClasses[classNum].GetSourceName() + ".cxx";
+
m_Makefile->AddCustomCommand(m_WrapHeaders[classNum].c_str(),
wpython.c_str(), args, depends,
res.c_str(), m_LibraryName.c_str());
}
-
+ m_Makefile->AddDefinition(m_SourceList.c_str(), sourceListValue.c_str());
}
bool cmVTKWrapPythonCommand::CreateInitFile(std::string& res)
diff --git a/Source/cmVTKWrapTclCommand.cxx b/Source/cmVTKWrapTclCommand.cxx
index f7f0f26..f0c1a7e 100644
--- a/Source/cmVTKWrapTclCommand.cxx
+++ b/Source/cmVTKWrapTclCommand.cxx
@@ -25,10 +25,19 @@ bool cmVTKWrapTclCommand::InitialPass(std::vector<std::string> const& argsIn)
return false;
}
std::vector<std::string> args;
- cmSystemTools::ExpandListArguments(argsIn, args);
+
// keep the library name
- m_LibraryName = args[0];
+ m_LibraryName = argsIn[0];
+ if (argsIn[1] == std::string("SOURCES"))
+ {
+ m_Makefile->ExpandSourceListArguments(argsIn, args, 3);
+ }
+ else
+ {
+ m_Makefile->ExpandSourceListArguments(argsIn, args, 2);
+ }
+
// Now check and see if the value has been stored in the cache
// already, if so use that value and don't look for the program
if(!m_Makefile->IsOn("VTK_WRAP_TCL"))
@@ -39,7 +48,7 @@ bool cmVTKWrapTclCommand::InitialPass(std::vector<std::string> const& argsIn)
// extract the sources and commands parameters
std::vector<std::string> sources;
bool doing_sources = true;
-
+
for(std::vector<std::string>::const_iterator j = (args.begin() + 1);
j != args.end(); ++j)
{
@@ -73,34 +82,28 @@ bool cmVTKWrapTclCommand::InitialPass(std::vector<std::string> const& argsIn)
// get the resulting source list name
m_SourceList = sources[0];
- cmMakefile::SourceMap &Classes = m_Makefile->GetSources();
for(std::vector<std::string>::iterator j = (sources.begin() + 1);
j != sources.end(); ++j)
{
- cmMakefile::SourceMap::iterator l = Classes.find(*j);
- if (l == Classes.end())
- {
- this->SetError("bad source list passed to VTKWrapTclCommand");
- return false;
- }
- for(std::vector<cmSourceFile*>::iterator i = l->second.begin();
- i != l->second.end(); i++)
+ cmSourceFile *curr = m_Makefile->GetSource(j->c_str());
+
+ // if we should wrap the class
+ if (!curr || !curr->GetWrapExclude())
{
- cmSourceFile &curr = *(*i);
- // if we should wrap the class
- if (!curr.GetWrapExclude())
+ cmSourceFile file;
+ if (curr)
{
- cmSourceFile file;
- file.SetIsAnAbstractClass(curr.IsAnAbstractClass());
- std::string newName = curr.GetSourceName() + "Tcl";
- file.SetName(newName.c_str(), m_Makefile->GetCurrentOutputDirectory(),
- "cxx",false);
- std::string hname = cdir + "/" + curr.GetSourceName() + ".h";
- m_WrapHeaders.push_back(hname);
- // add starting depends
- file.GetDepends().push_back(hname);
- m_WrapClasses.push_back(file);
+ file.SetIsAnAbstractClass(curr->IsAnAbstractClass());
}
+ std::string srcName = cmSystemTools::GetFilenameWithoutExtension(*j);
+ std::string newName = srcName + "Tcl";
+ std::string hname = cdir + "/" + srcName + ".h";
+ file.SetName(newName.c_str(), m_Makefile->GetCurrentOutputDirectory(),
+ "cxx",false);
+ m_WrapHeaders.push_back(hname);
+ // add starting depends
+ file.GetDepends().push_back(hname);
+ m_WrapClasses.push_back(file);
}
}
}
@@ -117,6 +120,15 @@ void cmVTKWrapTclCommand::FinalPass()
std::string hints = "${VTK_WRAP_HINTS}";
m_Makefile->ExpandVariablesInString(hints);
+ std::string sourceListValue;
+
+ // was the list already populated
+ const char *def = m_Makefile->GetDefinition(m_SourceList.c_str());
+ if (def)
+ {
+ sourceListValue = def;
+ sourceListValue += ";";
+ }
// Create the init file
std::string res = m_LibraryName;
@@ -130,8 +142,9 @@ void cmVTKWrapTclCommand::FinalPass()
newName += "Init";
cfile.SetName(newName.c_str(), m_Makefile->GetCurrentOutputDirectory(),
"cxx",false);
- m_Makefile->AddSource(cfile,m_SourceList.c_str());
-
+ m_Makefile->AddSource(cfile);
+ sourceListValue += newName + ".cxx";
+
// wrap all the .h files
depends.push_back(wtcl);
if (strcmp("${VTK_WRAP_HINTS}",hints.c_str()))
@@ -140,7 +153,7 @@ void cmVTKWrapTclCommand::FinalPass()
}
for(size_t classNum = 0; classNum < lastClass; classNum++)
{
- m_Makefile->AddSource(m_WrapClasses[classNum],m_SourceList.c_str());
+ m_Makefile->AddSource(m_WrapClasses[classNum]);
std::vector<std::string> args;
args.push_back(m_WrapHeaders[classNum]);
if (strcmp("${VTK_WRAP_HINTS}",hints.c_str()))
@@ -152,12 +165,15 @@ void cmVTKWrapTclCommand::FinalPass()
res += "/";
res += m_WrapClasses[classNum].GetSourceName() + ".cxx";
args.push_back(res);
+ sourceListValue += ";";
+ sourceListValue += m_WrapClasses[classNum].GetSourceName() + ".cxx";
m_Makefile->AddCustomCommand(m_WrapHeaders[classNum].c_str(),
wtcl.c_str(), args, depends,
res.c_str(), m_LibraryName.c_str());
+
}
-
+ m_Makefile->AddDefinition(m_SourceList.c_str(), sourceListValue.c_str());
}
bool cmVTKWrapTclCommand::CreateInitFile(std::string& res)
diff --git a/Source/cmWrapExcludeFilesCommand.cxx b/Source/cmWrapExcludeFilesCommand.cxx
index 2bc4e84..90c98c2 100644
--- a/Source/cmWrapExcludeFilesCommand.cxx
+++ b/Source/cmWrapExcludeFilesCommand.cxx
@@ -33,22 +33,42 @@ bool cmWrapExcludeFilesCommand::InitialPass(std::vector<std::string> const& args
return false;
}
std::vector<std::string> args;
- cmSystemTools::ExpandListArguments(argsIn, args);
- cmMakefile::SourceMap &Classes = m_Makefile->GetSources();
+ m_Makefile->ExpandSourceListArguments(argsIn, args, 0);
+
for(std::vector<std::string>::const_iterator j = args.begin();
j != args.end(); ++j)
{
- for(cmMakefile::SourceMap::iterator l = Classes.begin();
- l != Classes.end(); l++)
+ // if the file is already in the makefile just set properites on it
+ cmSourceFile* sf = m_Makefile->GetSource(j->c_str());
+ if(sf)
{
- for(std::vector<cmSourceFile*>::iterator i = l->second.begin();
- i != l->second.end(); i++)
+ sf->SetWrapExclude(true);
+ }
+ // if file is not already in the makefile, then add it
+ else
+ {
+ std::string newfile = *j;
+ cmSourceFile file;
+ std::string path = cmSystemTools::GetFilenamePath(newfile);
+ // set the flags
+ file.SetWrapExclude(true);
+ // if this is a full path then
+ if((path.size() && path[0] == '/') ||
+ (path.size() > 1 && path[1] == ':'))
{
- if((*i)->GetSourceName() == (*j))
- {
- (*i)->SetWrapExclude(true);
- }
+ file.SetName(cmSystemTools::GetFilenameName(newfile.c_str()).c_str(),
+ path.c_str(),
+ m_Makefile->GetSourceExtensions(),
+ m_Makefile->GetHeaderExtensions());
}
+ else
+ {
+ file.SetName(newfile.c_str(), m_Makefile->GetCurrentDirectory(),
+ m_Makefile->GetSourceExtensions(),
+ m_Makefile->GetHeaderExtensions());
+ }
+ // add the source file to the makefile
+ m_Makefile->AddSource(file);
}
}
return true;
diff --git a/Tests/Complex/Library/CMakeLists.txt b/Tests/Complex/Library/CMakeLists.txt
index 0f9c5eb..cf6b976 100644
--- a/Tests/Complex/Library/CMakeLists.txt
+++ b/Tests/Complex/Library/CMakeLists.txt
@@ -18,7 +18,7 @@ SOURCE_FILES(LibrarySources
GENERATED
nonexisting_file)
SOURCE_FILES_REMOVE(LibrarySources create_file.cxx GENERATED nonexisting_file)
-ADD_LIBRARY(CMakeTestLibrary LibrarySources)
+ADD_LIBRARY(CMakeTestLibrary ${LibrarySources})
IF(WIN32)
IF(NOT CYGWIN)
@@ -37,7 +37,7 @@ ENDIF(WIN32)
# Create shared library
#
SOURCE_FILES(SharedLibrarySources sharedFile)
-ADD_LIBRARY(CMakeTestLibraryShared SHARED SharedLibrarySources)
+ADD_LIBRARY(CMakeTestLibraryShared SHARED ${SharedLibrarySources})
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DTEST_C_FLAGS")
ADD_LIBRARY(CMakeTestCLibraryShared SHARED testConly.c)
diff --git a/Tests/ComplexOneConfig/Library/CMakeLists.txt b/Tests/ComplexOneConfig/Library/CMakeLists.txt
index 0f9c5eb..cf6b976 100644
--- a/Tests/ComplexOneConfig/Library/CMakeLists.txt
+++ b/Tests/ComplexOneConfig/Library/CMakeLists.txt
@@ -18,7 +18,7 @@ SOURCE_FILES(LibrarySources
GENERATED
nonexisting_file)
SOURCE_FILES_REMOVE(LibrarySources create_file.cxx GENERATED nonexisting_file)
-ADD_LIBRARY(CMakeTestLibrary LibrarySources)
+ADD_LIBRARY(CMakeTestLibrary ${LibrarySources})
IF(WIN32)
IF(NOT CYGWIN)
@@ -37,7 +37,7 @@ ENDIF(WIN32)
# Create shared library
#
SOURCE_FILES(SharedLibrarySources sharedFile)
-ADD_LIBRARY(CMakeTestLibraryShared SHARED SharedLibrarySources)
+ADD_LIBRARY(CMakeTestLibraryShared SHARED ${SharedLibrarySources})
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DTEST_C_FLAGS")
ADD_LIBRARY(CMakeTestCLibraryShared SHARED testConly.c)
diff --git a/Tests/ComplexRelativePaths/Library/CMakeLists.txt b/Tests/ComplexRelativePaths/Library/CMakeLists.txt
index 0f9c5eb..cf6b976 100644
--- a/Tests/ComplexRelativePaths/Library/CMakeLists.txt
+++ b/Tests/ComplexRelativePaths/Library/CMakeLists.txt
@@ -18,7 +18,7 @@ SOURCE_FILES(LibrarySources
GENERATED
nonexisting_file)
SOURCE_FILES_REMOVE(LibrarySources create_file.cxx GENERATED nonexisting_file)
-ADD_LIBRARY(CMakeTestLibrary LibrarySources)
+ADD_LIBRARY(CMakeTestLibrary ${LibrarySources})
IF(WIN32)
IF(NOT CYGWIN)
@@ -37,7 +37,7 @@ ENDIF(WIN32)
# Create shared library
#
SOURCE_FILES(SharedLibrarySources sharedFile)
-ADD_LIBRARY(CMakeTestLibraryShared SHARED SharedLibrarySources)
+ADD_LIBRARY(CMakeTestLibraryShared SHARED ${SharedLibrarySources})
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DTEST_C_FLAGS")
ADD_LIBRARY(CMakeTestCLibraryShared SHARED testConly.c)