summaryrefslogtreecommitdiffstats
path: root/Source/cmMakefileGenerator.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'Source/cmMakefileGenerator.cxx')
-rw-r--r--Source/cmMakefileGenerator.cxx45
1 files changed, 45 insertions, 0 deletions
diff --git a/Source/cmMakefileGenerator.cxx b/Source/cmMakefileGenerator.cxx
index d2c1b0c..a662029 100644
--- a/Source/cmMakefileGenerator.cxx
+++ b/Source/cmMakefileGenerator.cxx
@@ -40,8 +40,53 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=========================================================================*/
#include "cmMakefileGenerator.h"
+// static list of registered generators
+std::map<cmStdString, cmMakefileGenerator*>
+cmMakefileGenerator::s_RegisteredGenerators;
+
+
void cmMakefileGenerator::SetMakefile(cmMakefile* mf)
{
m_Makefile = mf;
}
+void cmMakefileGenerator::GetRegisteredGenerators(std::vector<std::string>& names)
+{
+ for(std::map<cmStdString, cmMakefileGenerator*>::iterator i
+ = s_RegisteredGenerators.begin();
+ i != s_RegisteredGenerators.end(); ++i)
+ {
+ names.push_back(i->first);
+ }
+}
+
+
+void
+cmMakefileGenerator::RegisterGenerator(cmMakefileGenerator* mg)
+{
+ std::map<cmStdString, cmMakefileGenerator*>::iterator i =
+ s_RegisteredGenerators.find(mg->GetName());
+ // delete re-registered objects
+ if(i != s_RegisteredGenerators.end())
+ {
+ delete i->second;
+ }
+ s_RegisteredGenerators[mg->GetName()] = mg;
+}
+
+
+cmMakefileGenerator*
+cmMakefileGenerator::CreateGenerator(const char* name)
+{
+ std::map<cmStdString, cmMakefileGenerator*>::iterator i;
+ for(i = s_RegisteredGenerators.begin();
+ i != s_RegisteredGenerators.end(); ++i)
+ {
+ cmMakefileGenerator* gen = i->second;
+ if(strcmp(name, gen->GetName()) == 0)
+ {
+ return gen->CreateObject();
+ }
+ }
+ return 0;
+}