summaryrefslogtreecommitdiffstats
path: root/Source/cmLocalVisualStudio10Generator.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'Source/cmLocalVisualStudio10Generator.cxx')
-rw-r--r--Source/cmLocalVisualStudio10Generator.cxx111
1 files changed, 111 insertions, 0 deletions
diff --git a/Source/cmLocalVisualStudio10Generator.cxx b/Source/cmLocalVisualStudio10Generator.cxx
new file mode 100644
index 0000000..37b5505
--- /dev/null
+++ b/Source/cmLocalVisualStudio10Generator.cxx
@@ -0,0 +1,111 @@
+/*============================================================================
+ CMake - Cross Platform Makefile Generator
+ Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
+
+ Distributed under the OSI-approved BSD License (the "License");
+ see accompanying file Copyright.txt for details.
+
+ This software is distributed WITHOUT ANY WARRANTY; without even the
+ implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the License for more information.
+============================================================================*/
+#include "cmLocalVisualStudio10Generator.h"
+
+#include "cmGlobalVisualStudio10Generator.h"
+#include "cmMakefile.h"
+#include "cmVisualStudio10TargetGenerator.h"
+#include "cmXMLParser.h"
+#include <cm_expat.h>
+
+class cmVS10XMLParser : public cmXMLParser
+{
+public:
+ virtual void EndElement(const std::string& /* name */) {}
+ virtual void CharacterDataHandler(const char* data, int length)
+ {
+ if (this->DoGUID) {
+ this->GUID.assign(data + 1, length - 2);
+ this->DoGUID = false;
+ }
+ }
+ virtual void StartElement(const std::string& name, const char**)
+ {
+ // once the GUID is found do nothing
+ if (!this->GUID.empty()) {
+ return;
+ }
+ if ("ProjectGUID" == name || "ProjectGuid" == name) {
+ this->DoGUID = true;
+ }
+ }
+ int InitializeParser()
+ {
+ this->DoGUID = false;
+ int ret = cmXMLParser::InitializeParser();
+ if (ret == 0) {
+ return ret;
+ }
+ // visual studio projects have a strange encoding, but it is
+ // really utf-8
+ XML_SetEncoding(static_cast<XML_Parser>(this->Parser), "utf-8");
+ return 1;
+ }
+ std::string GUID;
+ bool DoGUID;
+};
+
+cmLocalVisualStudio10Generator::cmLocalVisualStudio10Generator(
+ cmGlobalGenerator* gg, cmMakefile* mf)
+ : cmLocalVisualStudio7Generator(gg, mf)
+{
+}
+
+cmLocalVisualStudio10Generator::~cmLocalVisualStudio10Generator()
+{
+}
+
+void cmLocalVisualStudio10Generator::Generate()
+{
+
+ std::vector<cmGeneratorTarget*> tgts = this->GetGeneratorTargets();
+ for (std::vector<cmGeneratorTarget*>::iterator l = tgts.begin();
+ l != tgts.end(); ++l) {
+ if ((*l)->GetType() == cmState::INTERFACE_LIBRARY) {
+ continue;
+ }
+ if (static_cast<cmGlobalVisualStudioGenerator*>(this->GlobalGenerator)
+ ->TargetIsFortranOnly(*l)) {
+ this->CreateSingleVCProj((*l)->GetName().c_str(), *l);
+ } else {
+ cmVisualStudio10TargetGenerator tg(
+ *l, static_cast<cmGlobalVisualStudio10Generator*>(
+ this->GetGlobalGenerator()));
+ tg.Generate();
+ }
+ }
+ this->WriteStampFiles();
+}
+
+void cmLocalVisualStudio10Generator::ReadAndStoreExternalGUID(
+ const std::string& name, const char* path)
+{
+ cmVS10XMLParser parser;
+ parser.ParseFile(path);
+
+ // if we can not find a GUID then we will generate one later
+ if (parser.GUID.empty()) {
+ return;
+ }
+
+ std::string guidStoreName = name;
+ guidStoreName += "_GUID_CMAKE";
+ // save the GUID in the cache
+ this->GlobalGenerator->GetCMakeInstance()->AddCacheEntry(
+ guidStoreName.c_str(), parser.GUID.c_str(), "Stored GUID",
+ cmState::INTERNAL);
+}
+
+const char* cmLocalVisualStudio10Generator::ReportErrorLabel() const
+{
+ return ":VCEnd";
+}