summaryrefslogtreecommitdiffstats
path: root/Source/cmDSWMakefile.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'Source/cmDSWMakefile.cxx')
-rw-r--r--Source/cmDSWMakefile.cxx129
1 files changed, 129 insertions, 0 deletions
diff --git a/Source/cmDSWMakefile.cxx b/Source/cmDSWMakefile.cxx
new file mode 100644
index 0000000..ae72f4b
--- /dev/null
+++ b/Source/cmDSWMakefile.cxx
@@ -0,0 +1,129 @@
+#ifdef _MSC_VER
+#pragma warning ( disable : 4786 )
+#endif
+#include "cmDSWMakefile.h"
+#include "cmDSPBuilder.h"
+#include "cmSystemTools.h"
+#include <iostream>
+#include <fstream>
+#include <windows.h>
+
+
+// virtual override, ouput the makefile
+void cmDSWMakefile::OutputDSWFile()
+{
+ if(m_OutputDirectory == "")
+ {
+ // default to build in place
+ m_OutputDirectory = m_cmHomeDirectory;
+ }
+ // If the output directory is not the m_cmHomeDirectory
+ // then create it.
+ if(m_OutputDirectory != m_cmHomeDirectory)
+ {
+ if(!cmSystemTools::MakeDirectory(m_OutputDirectory.c_str()))
+ {
+ MessageBox(0, "Error creating directory ", 0, MB_OK);
+ MessageBox(0, m_OutputDirectory.c_str(), 0, MB_OK);
+ }
+ }
+
+
+ std::string fname;
+ fname = m_OutputDirectory;
+ fname += "/";
+ fname += this->m_LibraryName;
+ fname += ".dsw";
+ std::cerr << "writting dsw file " << fname.c_str() << std::endl;
+
+ std::ofstream fout(fname.c_str());
+ if(!fout)
+ {
+ std::cerr << "Error can not open " << fname.c_str() << " for write" << std::endl;
+ return;
+ }
+ this->WriteDSWFile(fout);
+}
+
+
+void cmDSWMakefile::WriteDSWFile(std::ostream& fout)
+{
+ this->WriteDSWHeader(fout);
+ for(std::vector<std::string>::iterator i = m_SubDirectories.begin();
+ i != m_SubDirectories.end(); ++i)
+ {
+ const char* dir = (*i).c_str();
+ std::vector<std::string> dspnames = this->CreateDSPFile(dir);
+ std::cerr << "Create dsp for " << dspnames.size() << " number of dsp files in " << dir << std::endl;
+ for(std::vector<std::string>::iterator si = dspnames.begin();
+ si != dspnames.end(); ++si)
+ {
+ std::string dspname = *si;
+ std::cerr << "Create dsp for " << (*si).c_str() << std::endl;
+ if(dspname == "")
+ {
+ std::cerr << "Project name not found in " << dir << "/Makefile.in" << std::endl;
+ std::cerr << "Skipping Project " << std::endl;
+ }
+ else
+ {
+ std::string subdir = "./";
+ subdir += dir;
+ this->WriteProject(fout, dspname.c_str(), subdir.c_str());
+ }
+ }
+ }
+ this->WriteDSWFooter(fout);
+}
+
+std::vector<std::string> cmDSWMakefile::CreateDSPFile(const char* subdir)
+{
+#undef GetCurrentDirectory
+ std::string currentDir = this->GetCurrentDirectory();
+ currentDir += "/";
+ currentDir += subdir;
+ cmDSPBuilder dsp;
+ dsp.SetOutputHomeDirectory(this->GetOutputDirectory());
+ dsp.SetHomeDirectory(this->GetHomeDirectory());
+ dsp.SetMakefileDirectory(currentDir.c_str());
+ std::string outdir = m_OutputDirectory;
+ outdir += "/";
+ outdir += subdir;
+ dsp.SetOutputDirectory(outdir.c_str());
+ currentDir += "/";
+ currentDir += "Makefile.in";
+ dsp.SetInputMakefilePath(currentDir.c_str());
+ dsp.CreateDSPFile();
+ return dsp.GetCreatedProjectNames();
+}
+
+
+void cmDSWMakefile::WriteProject(std::ostream& fout,
+ const char* dspname,
+ const char* dir)
+{
+ fout << "###############################################################################\n\n";
+ fout << "Project: \"" << dspname << "\"="
+ << dir << "\\" << dspname << ".dsp - Package Owner=<4>\n\n";
+ fout << "Package=<5>\n{{{\n}}}\n\n";
+ fout << "Package=<4>\n";
+ fout << "{{{\n";
+ // insert Begin Project Dependency Project_Dep_Name project stuff here
+ fout << "}}}\n\n";
+}
+
+void cmDSWMakefile::WriteDSWFooter(std::ostream& fout)
+{
+ fout << "###############################################################################\n\n";
+ fout << "Global:\n\n";
+ fout << "Package=<5>\n{{{\n}}}\n\n";
+ fout << "Package=<3>\n{{{\n}}}\n\n";
+ fout << "###############################################################################\n\n";
+}
+
+
+void cmDSWMakefile::WriteDSWHeader(std::ostream& fout)
+{
+ fout << "Microsoft Developer Studio Workspace File, Format Version 6.00\n";
+ fout << "# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!\n\n";
+}