fix for creating *.sln file
authorChristoph von Wittich <christoph_vw@reactos.org>
Thu, 20 Oct 2005 08:46:55 +0000 (08:46 +0000)
committerChristoph von Wittich <christoph_vw@reactos.org>
Thu, 20 Oct 2005 08:46:55 +0000 (08:46 +0000)
svn path=/trunk/; revision=18622

reactos/tools/rbuild/backend/msvc/genguid.cpp
reactos/tools/rbuild/backend/msvc/msvc.h
reactos/tools/rbuild/backend/msvc/vcprojmaker.cpp

index bfe11b3..f3dc7ed 100644 (file)
  *\r
  */\r
 
+\r
+#include "msvc.h"\r
+#include <string>\r
+\r
+using std::string;\r
+\r
 #ifdef _WIN32\r
 #include <objbase.h>\r
 #include <stdio.h>\r
@@ -32,12 +38,15 @@ static CoInitializeFunc *pCoInitialize = NULL;
 static CoUninitializeFunc *pCoUninitialize = NULL;\r
 static CoCreateGuidFunc *pCoCreateGuid = NULL;
 \r
-void gen_guid()\r
+\r
+std::string\r
+MSVCBackend::_gen_guid()\r
 {\r
        GUID m_guid;\r
        HRESULT result;\r
        bool good_guid = false;\r
-\r
+       char* guid;\r
+       \r
        // Load ole32. We will need it later on\r
        HMODULE olelib = LoadLibrary ( "ole32.dll" );\r
        if ( olelib != NULL )\r
@@ -67,16 +76,20 @@ void gen_guid()
        {\r
                // TODO FIXME - fall-back to random #'s\r
        }\r
-       const char* strfmt = "%08lX-%04X-%04x-%02X%02X-%02X%02X%02X%02X%02X%02X\r\n";\r
-       printf(strfmt,m_guid.Data1,m_guid.Data2,m_guid.Data3,m_guid.Data4[0],\r
+       const char* strfmt = "%08lX-%04X-%04x-%02X%02X-%02X%02X%02X%02X%02X%02X";\r
+       sprintf(guid, strfmt,m_guid.Data1,m_guid.Data2,m_guid.Data3,m_guid.Data4[0],\r
                m_guid.Data4[1],m_guid.Data4[2],m_guid.Data4[3],m_guid.Data4[4],m_guid.Data4[5],\r
                m_guid.Data4[6],m_guid.Data4[7],m_guid.Data1,m_guid.Data2,m_guid.Data3,m_guid.Data4[0],\r
                m_guid.Data4[1],m_guid.Data4[2],m_guid.Data4[3],m_guid.Data4[4],m_guid.Data4[5],\r
                m_guid.Data4[6],m_guid.Data4[7]);\r
+       \r
+       return guid;\r
 }\r
 
-#else /* Linux, etc */
-void gen_guid()\r
+#else /* Linux, etc */\r
+
+std::string\r
+MSVCBackend::_gen_guid()\r
 {\r
 }
 #endif /* WIN32/Linux */
index f8805bd..ccabc4e 100644 (file)
@@ -78,10 +78,21 @@ class MSVCBackend : public Backend
                void _generate_wine_dsw ( FILE* OUT );\r
 \r
                // functions in vcprojmaker.cpp:\r
+\r
+               std::string _gen_guid();\r
                void _generate_vcproj ( const Module& module );\r
 \r
                void _generate_sln_header ( FILE* OUT );\r
+               void _generate_sln_footer ( FILE* OUT );\r
                void _generate_sln ( FILE* OUT );\r
+               void _generate_sln_project (\r
+                       FILE* OUT,\r
+                       const Module& module,\r
+                       std::string dsp_file,\r
+                       std::string sln_guid,\r
+                       std::string vcproj_guid,\r
+                       const std::vector<Dependency*>& dependencies );\r
+\r
 };\r
 \r
 #endif // __MSVC_H__\r
index aed7bc3..dd2463e 100644 (file)
@@ -409,9 +409,52 @@ MSVCBackend::_generate_sln_header ( FILE* OUT )
     fprintf ( OUT, "\r\n" );\r
 }\r
 \r
+\r
+void\r
+MSVCBackend::_generate_sln_project (\r
+       FILE* OUT,\r
+       const Module& module,\r
+       std::string vcproj_file,\r
+       std::string sln_guid,\r
+       std::string vcproj_guid,\r
+       const std::vector<Dependency*>& dependencies )\r
+{\r
+       \r
+    vcproj_file = DosSeparator ( std::string(".\\") + vcproj_file );\r
+\r
+       fprintf ( OUT, "Project(\"%s\") = \"%s\", \"%s\", \"%s\"\r\n", sln_guid.c_str() , module.name.c_str(), vcproj_file.c_str(), vcproj_guid.c_str() );\r
+       fprintf ( OUT, "        ProjectSection(ProjectDependencies) = postProject\r\n" );\r
+       fprintf ( OUT, "        EndProjectSection\r\n" );\r
+       fprintf ( OUT, "EndProject\r\n" );\r
+}\r
+\r
+\r
+void\r
+MSVCBackend::_generate_sln_footer ( FILE* OUT )\r
+{\r
+    fprintf ( OUT, "Global\r\n" );\r
+\r
+       fprintf ( OUT, "        GlobalSection(SolutionConfiguration) = preSolution\r\n" );\r
+       fprintf ( OUT, "                Debug = Debug\r\n" );\r
+       fprintf ( OUT, "                Release = Release\r\n" );\r
+       fprintf ( OUT, "        EndGlobalSection\r\n" );\r
+\r
+       fprintf ( OUT, "        GlobalSection(ExtensibilityGlobals) = postSolution\r\n" );\r
+       fprintf ( OUT, "        EndGlobalSection\r\n" );\r
+       fprintf ( OUT, "        GlobalSection(ExtensibilityAddIns) = postSolution\r\n" );\r
+       fprintf ( OUT, "        EndGlobalSection\r\n" );\r
+       fprintf ( OUT, "EndGlobal\r\n" );\r
+\r
+\r
+    fprintf ( OUT, "\r\n" );\r
+}\r
+\r
+\r
 void\r
 MSVCBackend::_generate_sln ( FILE* OUT )\r
 {\r
+       string sln_guid = "{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}";\r
+\r
        _generate_sln_header(OUT);\r
        // TODO FIXME - is it necessary to sort them?\r
        for ( size_t i = 0; i < ProjectNode.modules.size(); i++ )\r
@@ -419,31 +462,9 @@ MSVCBackend::_generate_sln ( FILE* OUT )
                Module& module = *ProjectNode.modules[i];\r
 \r
                std::string vcproj_file = VcprojFileName ( module );\r
-               _generate_dsw_project ( OUT, module, vcproj_file, module.dependencies );\r
+               std::string vcproj_guid = _gen_guid();\r
+               _generate_sln_project ( OUT, module, vcproj_file, sln_guid, vcproj_guid, module.dependencies );\r
     }\r
-//    _generate_dsw_footer ( OUT );\r
+    _generate_sln_footer ( OUT );\r
 }\r
 \r
-\r
-\r
-/*\r
-       m_devFile << "Microsoft Visual Studio Solution File, Format Version 9.00" << endl;\r
-       m_devFile << "# Visual Studio 2005" << endl;\r
-\r
-       m_devFile << "# FIXME Project listings here" << endl;\r
-       m_devFile << "EndProject" << endl;\r
-       m_devFile << "Global" << endl;\r
-       m_devFile << "  GlobalSection(SolutionConfigurationPlatforms) = preSolution" << endl;\r
-       m_devFile << "          Debug|Win32 = Debug|Win32" << endl;\r
-       m_devFile << "          Release|Win32 = Release|Win32" << endl;\r
-       m_devFile << "  EndGlobalSection" << endl;\r
-       m_devFile << "  GlobalSection(ProjectConfigurationPlatforms) = postSolution" << endl;\r
-       m_devFile << "  #FIXME Project Listings Here" << endl;\r
-       m_devFile << "  EndGlobalSection" << endl;\r
-       m_devFile << "  GlobalSection(SolutionProperties) = preSolution" << endl;\r
-       m_devFile << "          HideSolutionNode = FALSE" << endl;\r
-       m_devFile << "  EndGlobalSection" << endl;\r
-       m_devFile << "EndGlobal" << endl;\r
-\r
-       m_devFile << endl << endl;\r
-*/\r