summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Biddiscombe <jbiddiscombe@skippingmouse.co.uk>2001-06-22 13:47:02 (GMT)
committerJohn Biddiscombe <jbiddiscombe@skippingmouse.co.uk>2001-06-22 13:47:02 (GMT)
commite1e7b8adcafed947de7845b82420634d3b302268 (patch)
tree60072901f600bfe3ed0c3ba288e7b72ff8727e04
parent6bf0be8e134288b31b8c3bc4bebe6ed11c1b7570 (diff)
downloadCMake-e1e7b8adcafed947de7845b82420634d3b302268.zip
CMake-e1e7b8adcafed947de7845b82420634d3b302268.tar.gz
CMake-e1e7b8adcafed947de7845b82420634d3b302268.tar.bz2
ENH: Added RemoveSource(...) to complement AddSource. New command
SOURCE_FILES_REMOVE uses it and can be used to take files out of the build
-rw-r--r--Source/cmMakefile.cxx27
-rw-r--r--Source/cmMakefile.h5
2 files changed, 29 insertions, 3 deletions
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index eedeb45..acd18c8 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -164,17 +164,17 @@ void cmMakefile::Print() const
{
// print the class lists
std::cout << "classes:\n";
- for(SourceMap::const_iterator l = m_Sources.begin();
+ 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();
+ 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();
l != m_Targets.end(); l++)
@@ -413,6 +413,27 @@ void cmMakefile::AddSource(cmSourceFile& cmfile, const char *srclist)
m_Sources[srclist].push_back(cmfile);
}
+struct FindSrcByName : std::binary_function<cmSourceFile, cmSourceFile, bool>
+{
+ public:
+ bool operator () (const cmSourceFile &f, const cmSourceFile &test) const
+ {
+ return !stricmp(f.GetSourceName().c_str(),test.GetSourceName().c_str());
+ }
+};
+
+void cmMakefile::RemoveSource(cmSourceFile& cmfile,const char *srclist)
+{
+ std::vector<cmSourceFile> &maplist = m_Sources[srclist];
+ std::vector<cmSourceFile>::iterator f =
+ std::find_if(maplist.begin(), maplist.end(), std::bind2nd(FindSrcByName(),cmfile));
+// std::vector<cmSourceFile>::iterator f = find_if(maplist.begin(), maplist.end(), matches(srclist);
+ if (f!=maplist.end())
+ {
+ maplist.erase(f);
+ }
+}
+
void cmMakefile::AddCustomCommand(const char* source,
const char* command,
const char* commandArgs,
diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h
index bce13ac..d430f04 100644
--- a/Source/cmMakefile.h
+++ b/Source/cmMakefile.h
@@ -233,6 +233,11 @@ public:
void AddSource(cmSourceFile& ,const char *srcListName);
/**
+ * Remove a class/source file from the build.
+ */
+ void RemoveSource(cmSourceFile& ,const char *srcListName);
+
+ /**
* Add a source group for consideration when adding a new source.
*/
void AddSourceGroup(const char* name, const char* regex);