Author: gedmurphy
Date: Thu Dec 3 17:09:09 2009
New Revision: 44377
URL:
http://svn.reactos.org/svn/reactos?rev=44377&view=rev
Log:
- Initial re-architecture of the msvc backend.
- Split the MSVCBackend class into it's respective worker objects :
- * Use an abstract ProjMaker base class which we can now use to better implement support
for future VS releases
- * Move sln creation into its own class
- Don't create the .user files anymore, they're not required for our use.
- Remove support for Visual Studio 6, Visual Studio 2002 and Visual Studio 2003
Although I haven't tested it, I'm 99.9% sure this breaks 'make msvc#' so
DON'T RUN IT yet unless you want your vcproj files destroyed.
Added:
trunk/reactos/tools/rbuild/backend/msvc/projmaker.cpp (with props)
trunk/reactos/tools/rbuild/backend/msvc/slnmaker.cpp (with props)
Modified:
trunk/reactos/tools/rbuild/backend/msvc/msvc.cpp
trunk/reactos/tools/rbuild/backend/msvc/msvc.h
trunk/reactos/tools/rbuild/backend/msvc/vcprojmaker.cpp
trunk/reactos/tools/rbuild/backend/msvc/vcxprojmaker.cpp
trunk/reactos/tools/rbuild/rbuild.h
trunk/reactos/tools/rbuild/rbuild.mak
trunk/reactos/tools/rbuild/rbuild.vcproj
Modified: trunk/reactos/tools/rbuild/backend/msvc/msvc.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/backend/msvc/…
==============================================================================
--- trunk/reactos/tools/rbuild/backend/msvc/msvc.cpp [iso-8859-1] (original)
+++ trunk/reactos/tools/rbuild/backend/msvc/msvc.cpp [iso-8859-1] Thu Dec 3 17:09:09
2009
@@ -4,6 +4,7 @@
* Copyright (C) 2005 Steven Edwards
* Copyright (C) 2005 Royce Mitchell
* Copyright (C) 2006 Christoph von Wittich
+ * Copyright (C) 2009 Ged Murphy
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -48,6 +49,31 @@
} factory;
+MSVCConfiguration::MSVCConfiguration ( const OptimizationType optimization, const
HeadersType headers, const std::string &name )
+{
+ this->optimization = optimization;
+ this->headers = headers;
+ if ( name != "" )
+ this->name = name;
+ else
+ {
+ std::string headers_name;
+ if ( headers == MSVCHeaders )
+ headers_name = "";
+ else
+ headers_name = " - ReactOS headers";
+ if ( optimization == Debug )
+ this->name = "Debug" + headers_name;
+ else if ( optimization == Release )
+ this->name = "Release" + headers_name;
+ else if ( optimization == Speed )
+ this->name = "Speed" + headers_name;
+ else if ( optimization == RosBuild )
+ this->name = "RosBuild";
+ else
+ this->name = "Unknown" + headers_name;
+ }
+}
MSVCBackend::MSVCBackend(Project &project,
Configuration& configuration) : Backend(project, configuration)
@@ -89,28 +115,16 @@
}
string filename_sln ( ProjectNode.name );
- if ( configuration.VSProjectVersion == "6.00" )
- filename_sln += "_auto.dsw";
- else
- filename_sln += "_auto.sln";
-
+ filename_sln += "_auto.sln";
printf ( "Creating MSVC workspace: %s\n", filename_sln.c_str() );
+ // Write out the project files
ProcessModules();
- m_slnFile = fopen ( filename_sln.c_str(), "wb" );
-
- if ( !m_slnFile )
- {
- printf ( "Could not create file '%s'.\n", filename_sln.c_str() );
- return;
- }
-
- if ( configuration.VSProjectVersion == "6.00" )
- _generate_wine_dsw ( m_slnFile );
- else
- _generate_sln ( m_slnFile );
-
- fclose ( m_slnFile );
+
+ // Write the solution file
+ SlnMaker slnMaker( configuration, ProjectNode, m_configurations, filename_sln );
+ slnMaker._generate_sln ( _get_solution_version(), _get_studio_version() );
+
printf ( "Done.\n" );
}
@@ -122,12 +136,14 @@
module.guid = _gen_guid();
- if (configuration.VSProjectVersion == "6.00")
- _generate_dsp ( module );
- else if (configuration.VSProjectVersion == "10.00")
- _generate_vcxproj ( module );
+ ProjMaker *projMaker;
+
+ if (configuration.VSProjectVersion == "10.00")
+ projMaker = new VCXProjMaker( configuration, m_configurations, "test" );
else
- _generate_vcproj ( module );
+ projMaker = new VCProjMaker( configuration, m_configurations, "test" );
+
+ projMaker->_generate_proj_file ( module );
}
}
@@ -225,14 +241,6 @@
}
std::string
-MSVCBackend::OptFileName ( const Module& module ) const
-{
- return FixSeparatorForSystemCommand(
- ReplaceExtension ( module.output->relative_path + "\\" +
module.output->name, "_" + _get_vc_dir() + "_auto.opt" )
- );
-}
-
-std::string
MSVCBackend::SuoFileName ( const Module& module ) const
{
return FixSeparatorForSystemCommand(
@@ -241,14 +249,6 @@
}
std::string
-MSVCBackend::DswFileName ( const Module& module ) const
-{
- return FixSeparatorForSystemCommand(
- ReplaceExtension ( module.output->relative_path + "\\" +
module.output->name, "_auto.dsw" )
- );
-}
-
-std::string
MSVCBackend::SlnFileName ( const Module& module ) const
{
return FixSeparatorForSystemCommand(
@@ -265,14 +265,6 @@
}
std::string
-MSVCBackend::DspFileName ( const Module& module ) const
-{
- return FixSeparatorForSystemCommand(
- ReplaceExtension ( module.output->relative_path + "\\" +
module.output->name, "_auto.dsp" )
- );
-}
-
-std::string
MSVCBackend::VcprojFileName ( const Module& module ) const
{
return FixSeparatorForSystemCommand(
@@ -282,20 +274,12 @@
std::string MSVCBackend::_get_vc_dir ( void ) const
{
- if ( configuration.VSProjectVersion == "6.00" )
- return "vc6";
- else if ( configuration.VSProjectVersion == "7.00" )
- return "vc70";
- else if ( configuration.VSProjectVersion == "7.10" )
- return "vc71";
- else if ( configuration.VSProjectVersion == "8.00" )
+ if ( configuration.VSProjectVersion == "8.00" )
return "vc8";
else if ( configuration.VSProjectVersion == "10.00" )
return "vc10";
else /* default to VS2008 */
return "vc9";
-
-
}
void
@@ -404,9 +388,6 @@
string basepath = module.output->relative_path;
remove ( NcbFileName ( module ).c_str () );
- remove ( DspFileName ( module ).c_str () );
- remove ( DswFileName ( module ).c_str () );
- remove ( OptFileName ( module ).c_str () );
remove ( SlnFileName ( module ).c_str () );
remove ( SuoFileName ( module ).c_str () );
remove ( VcprojFileName ( module ).c_str () );
@@ -414,12 +395,12 @@
string username = getenv ( "USERNAME" );
string computername = getenv ( "COMPUTERNAME" );
string vcproj_file_user = "";
-
+#if 0
if ((computername != "") && (username != ""))
vcproj_file_user = VcprojFileName ( module ) + "." + computername +
"." + username + ".user";
remove ( vcproj_file_user.c_str () );
-
+#endif
_get_object_files ( module, out );
_get_def_files ( module, out );
for ( size_t j = 0; j < out.size (); j++)
@@ -430,10 +411,8 @@
}
string filename_sln = ProjectNode.name + ".sln";
- string filename_dsw = ProjectNode.name + ".dsw";
remove ( filename_sln.c_str () );
- remove ( filename_dsw.c_str () );
}
bool
@@ -475,3 +454,64 @@
printf ("Installed File :'%s'\n",installdir.c_str () );
}
}
+
+std::string
+MSVCBackend::_get_solution_version ( void )
+{
+ string version;
+
+ if (configuration.VSProjectVersion.empty())
+ configuration.VSProjectVersion = MS_VS_DEF_VERSION;
+
+ else if (configuration.VSProjectVersion == "8.00")
+ version = "9.00";
+
+ else if (configuration.VSProjectVersion == "9.00")
+ version = "10.00";
+
+ else if (configuration.VSProjectVersion == "10.00")
+ version = "11.00";
+
+ return version;
+}
+
+std::string
+MSVCBackend::_get_studio_version ( void )
+{
+ string version;
+
+ if (configuration.VSProjectVersion.empty())
+ configuration.VSProjectVersion = MS_VS_DEF_VERSION;
+
+ else if (configuration.VSProjectVersion == "8.00")
+ version = "2005";
+
+ else if (configuration.VSProjectVersion == "9.00")
+ version = "2008";
+
+ else if (configuration.VSProjectVersion == "10.00")
+ version = "2010";
+
+ return version;
+}
+
+const Property*
+MSVCBackend::_lookup_property ( const Module& module, const std::string& name )
const
+{
+ std::map<std::string, Property*>::const_iterator p;
+
+ /* Check local values */
+ p = module.non_if_data.properties.find(name);
+
+ if ( p != module.non_if_data.properties.end() )
+ return p->second;
+
+ // TODO FIXME - should we check local if-ed properties?
+ p = module.project.non_if_data.properties.find(name);
+
+ if ( p != module.project.non_if_data.properties.end() )
+ return p->second;
+
+ // TODO FIXME - should we check global if-ed properties?
+ return NULL;
+}
Modified: trunk/reactos/tools/rbuild/backend/msvc/msvc.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/backend/msvc/…
==============================================================================
--- trunk/reactos/tools/rbuild/backend/msvc/msvc.h [iso-8859-1] (original)
+++ trunk/reactos/tools/rbuild/backend/msvc/msvc.h [iso-8859-1] Thu Dec 3 17:09:09 2009
@@ -25,6 +25,10 @@
#include "../backend.h"
+#ifdef OUT
+#undef OUT
+#endif//OUT
+
class FileUnit
{
@@ -98,11 +102,8 @@
void OutputFolders();
void OutputFileUnits();
- std::string DspFileName ( const Module& module ) const;
std::string VcprojFileName ( const Module& module ) const;
- std::string DswFileName ( const Module& module ) const;
std::string SlnFileName ( const Module& module ) const;
- std::string OptFileName ( const Module& module ) const;
std::string SuoFileName ( const Module& module ) const;
std::string NcbFileName ( const Module& module ) const;
@@ -113,37 +114,38 @@
int m_unitCount;
- FILE* m_dswFile;
- FILE* m_slnFile;
- FILE* m_rulesFile;
-
- // functions in msvcmaker.cpp:
-
- void _generate_dsp ( const Module& module );
- void _generate_dsw_header ( FILE* OUT );
- void _generate_dsw_project (
- FILE* OUT,
- const Module& module,
- std::string dsp_file,
- const std::vector<Dependency*>& dependencies );
-
- void _generate_dsw_footer ( FILE* OUT );
- void _generate_wine_dsw ( FILE* OUT );
-
- // functions in vcprojmaker.cpp:
-
- std::string _strip_gcc_deffile(std::string Filename, std::string sourcedir, std::string
objdir);
+ std::string _gen_guid();
+
std::string _get_solution_version ( void );
std::string _get_studio_version ( void );
- std::string _gen_guid();
- std::string _replace_str(
- std::string string1,
- const std::string &find_str,
- const std::string &replace_str);
-
std::string _get_vc_dir ( void ) const;
- // These are used in both _generate_vcproj and _generate_standard_configuration
+ void _clean_project_files ( void );
+ void _get_object_files ( const Module& module, std::vector<std::string>&
out ) const;
+ void _get_def_files ( const Module& module, std::vector<std::string>& out
) const;
+ void _install_files ( const std::string& vcdir, const std::string& config );
+ bool _copy_file ( const std::string& inputname, const std::string& targetname )
const;
+ const Property* _lookup_property ( const Module& module, const std::string&
name ) const;
+};
+
+
+// Abstract class
+class ProjMaker
+{
+ public:
+ ProjMaker ( );
+ ProjMaker ( Configuration& buildConfig, const
std::vector<MSVCConfiguration*>& msvc_configs, std::string filename );
+ virtual ~ProjMaker() {}
+
+ virtual void _generate_proj_file ( const Module& module ) = 0;
+ virtual void _generate_user_configuration ();
+
+ protected:
+ Configuration configuration;
+ std::vector<MSVCConfiguration*> m_configurations;
+ std::string vcproj_file;
+ FILE* OUT;
+
std::vector<std::string> header_files;
std::vector<std::string> includes;
std::vector<std::string> includes_ros;
@@ -151,36 +153,72 @@
std::set<std::string> common_defines;
std::string baseaddr;
- void _generate_standard_configuration(
- FILE* OUT,
- const Module& module,
- const MSVCConfiguration& cfg,
- BinaryType binaryType );
- void _generate_makefile_configuration( FILE* OUT, const Module& module, const
MSVCConfiguration& cfg );
-
- void _generate_vcproj ( const Module& module );
- void _generate_vcxproj ( const Module& module );
-
- void _generate_sln_header ( FILE* OUT );
- void _generate_sln_footer ( FILE* OUT );
- void _generate_sln ( FILE* OUT );
+ std::string VcprojFileName ( const Module& module ) const;
+ std::string _get_vc_dir ( void ) const;
+
+ std::string _strip_gcc_deffile(std::string Filename, std::string sourcedir, std::string
objdir);
+ std::string _get_solution_version ( void );
+ std::string _get_studio_version ( void );
+ std::string _replace_str( std::string string1, const std::string &find_str, const
std::string &replace_str);
+
+ void _generate_standard_configuration( const Module& module, const
MSVCConfiguration& cfg, BinaryType binaryType );
+ void _generate_makefile_configuration( const Module& module, const
MSVCConfiguration& cfg );
+};
+
+class VCProjMaker : public ProjMaker
+{
+ public:
+ VCProjMaker ( );
+ VCProjMaker ( Configuration& buildConfig, const
std::vector<MSVCConfiguration*>& msvc_configs, std::string filename );
+ virtual ~VCProjMaker ();
+
+ void _generate_proj_file ( const Module& module );
+ void _generate_user_configuration ();
+
+ private:
+ void _generate_standard_configuration( const Module& module, const
MSVCConfiguration& cfg, BinaryType binaryType );
+ void _generate_makefile_configuration( const Module& module, const
MSVCConfiguration& cfg );
+};
+
+class VCXProjMaker : public ProjMaker
+{
+ public:
+ VCXProjMaker ( );
+ VCXProjMaker ( Configuration& buildConfig, const
std::vector<MSVCConfiguration*>& msvc_configs, std::string filename );
+ virtual ~VCXProjMaker ();
+
+ void _generate_proj_file ( const Module& module );
+ void _generate_user_configuration ();
+
+ private:
+ void _generate_standard_configuration( const Module& module, const
MSVCConfiguration& cfg, BinaryType binaryType );
+ void _generate_makefile_configuration( const Module& module, const
MSVCConfiguration& cfg );
+};
+
+class SlnMaker
+{
+ public:
+ SlnMaker ( Configuration& buildConfig, Project& ProjectNode, const
std::vector<MSVCConfiguration*>& configurations, std::string filename_sln );
+ ~SlnMaker ();
+
+ void _generate_sln ( std::string solution_version, std::string studio_version );
+
+ private:
+ Configuration m_configuration;
+ Project* m_ProjectNode;
+ std::vector<MSVCConfiguration*> m_configurations;
+ FILE* OUT;
+
+ void _generate_sln_header ( std::string solution_version, std::string studio_version
);
+ void _generate_sln_footer ( );
//void _generate_rules_file ( FILE* OUT );
void _generate_sln_project (
- FILE* OUT,
const Module& module,
std::string vcproj_file,
std::string sln_guid,
std::string vcproj_guid,
const std::vector<Library*>& libraries );
- void _generate_sln_configurations (
- FILE* OUT,
- std::string vcproj_guid );
- void _clean_project_files ( void );
- void _get_object_files ( const Module& module, std::vector<std::string>&
out ) const;
- void _get_def_files ( const Module& module, std::vector<std::string>& out
) const;
- void _install_files ( const std::string& vcdir, const std::string& config );
- bool _copy_file ( const std::string& inputname, const std::string& targetname )
const;
- const Property* _lookup_property ( const Module& module, const std::string&
name ) const;
+ void _generate_sln_configurations ( std::string vcproj_guid );
};
#endif // __MSVC_H__
Added: trunk/reactos/tools/rbuild/backend/msvc/projmaker.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/backend/msvc/…
==============================================================================
--- trunk/reactos/tools/rbuild/backend/msvc/projmaker.cpp (added)
+++ trunk/reactos/tools/rbuild/backend/msvc/projmaker.cpp [iso-8859-1] Thu Dec 3 17:09:09
2009
@@ -1,0 +1,226 @@
+/*
+ * Copyright (C) 2002 Patrik Stridvall
+ * Copyright (C) 2005 Royce Mitchell III
+ * Copyright (C) 2006 Hervé Poussineau
+ * Copyright (C) 2006 Christoph von Wittich
+ * Copyright (C) 2009 Ged Murphy
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifdef _MSC_VER
+#pragma warning ( disable : 4786 )
+#endif//_MSC_VER
+
+#include <string>
+#include <vector>
+#include <set>
+#include <algorithm>
+#include <fstream>
+#include <iostream>
+
+#include <stdio.h>
+
+#include "msvc.h"
+
+using std::string;
+using std::vector;
+using std::set;
+
+typedef set<string> StringSet;
+
+#ifdef OUT
+#undef OUT
+#endif//OUT
+
+ProjMaker::ProjMaker ( )
+{
+ vcproj_file = "";
+}
+
+ProjMaker::ProjMaker ( Configuration& buildConfig,
+ const std::vector<MSVCConfiguration*>& msvc_configs,
+ std::string filename )
+{
+ configuration = buildConfig;
+ m_configurations = msvc_configs;
+ vcproj_file = filename;
+}
+
+void
+ProjMaker::_generate_proj_file ( const Module& module )
+{
+ printf("_generate_proj_file not implemented for the base class\n");
+}
+
+void
+ProjMaker::_generate_user_configuration()
+{
+#if 0
+ /* User configuration file */
+ if (vcproj_file_user != "")
+ {
+ OUT = fopen ( vcproj_file_user.c_str(), "wb" );
+ fprintf ( OUT, "<?xml version=\"1.0\" encoding =
\"Windows-1252\"?>\r\n" );
+ fprintf ( OUT, "<VisualStudioUserFile\r\n" );
+ fprintf ( OUT, "\tProjectType=\"Visual C++\"\r\n" );
+ fprintf ( OUT, "\tVersion=\"%s\"\r\n",
configuration.VSProjectVersion.c_str() );
+ fprintf ( OUT, "\tShowAllFiles=\"false\"\r\n" );
+ fprintf ( OUT, "\t>\r\n" );
+
+ fprintf ( OUT, "\t<Configurations>\r\n" );
+ for ( size_t icfg = 0; icfg < m_configurations.size(); icfg++ )
+ {
+ const MSVCConfiguration& cfg = *m_configurations[icfg];
+ fprintf ( OUT, "\t\t<Configuration\r\n" );
+ fprintf ( OUT, "\t\t\tName=\"%s|Win32\"\r\n", cfg.name.c_str() );
+ fprintf ( OUT, "\t\t\t>\r\n" );
+ fprintf ( OUT, "\t\t\t<DebugSettings\r\n" );
+ if ( module_type == ".cpl" )
+ {
+ fprintf ( OUT, "\t\t\t\tCommand=\"rundll32.exe\"\r\n" );
+ fprintf ( OUT, "\t\t\t\tCommandArguments=\" shell32,Control_RunDLL
"$(TargetPath)",@\"\r\n" );
+ }
+ else
+ {
+ fprintf ( OUT, "\t\t\t\tCommand=\"$(TargetPath)\"\r\n" );
+ fprintf ( OUT, "\t\t\t\tCommandArguments=\"\"\r\n" );
+ }
+ fprintf ( OUT, "\t\t\t\tAttach=\"false\"\r\n" );
+ fprintf ( OUT, "\t\t\t\tDebuggerType=\"3\"\r\n" );
+ fprintf ( OUT, "\t\t\t\tRemote=\"1\"\r\n" );
+ string remote_machine = "\t\t\t\tRemoteMachine=\"" + computername +
"\"\r\n";
+ fprintf ( OUT, remote_machine.c_str() );
+ fprintf ( OUT, "\t\t\t\tRemoteCommand=\"\"\r\n" );
+ fprintf ( OUT, "\t\t\t\tHttpUrl=\"\"\r\n" );
+ fprintf ( OUT, "\t\t\t\tPDBPath=\"\"\r\n" );
+ fprintf ( OUT, "\t\t\t\tSQLDebugging=\"\"\r\n" );
+ fprintf ( OUT, "\t\t\t\tEnvironment=\"\"\r\n" );
+ fprintf ( OUT, "\t\t\t\tEnvironmentMerge=\"true\"\r\n" );
+ fprintf ( OUT, "\t\t\t\tDebuggerFlavor=\"\"\r\n" );
+ fprintf ( OUT, "\t\t\t\tMPIRunCommand=\"\"\r\n" );
+ fprintf ( OUT, "\t\t\t\tMPIRunArguments=\"\"\r\n" );
+ fprintf ( OUT, "\t\t\t\tMPIRunWorkingDirectory=\"\"\r\n" );
+ fprintf ( OUT, "\t\t\t\tApplicationCommand=\"\"\r\n" );
+ fprintf ( OUT, "\t\t\t\tApplicationArguments=\"\"\r\n" );
+ fprintf ( OUT, "\t\t\t\tShimCommand=\"\"\r\n" );
+ fprintf ( OUT, "\t\t\t\tMPIAcceptMode=\"\"\r\n" );
+ fprintf ( OUT, "\t\t\t\tMPIAcceptFilter=\"\"\r\n" );
+ fprintf ( OUT, "\t\t\t/>\r\n" );
+ fprintf ( OUT, "\t\t</Configuration>\r\n" );
+ }
+ fprintf ( OUT, "\t</Configurations>\r\n" );
+ fprintf ( OUT, "</VisualStudioUserFile>\r\n" );
+ fclose ( OUT );
+ }
+#endif
+}
+
+
+void
+ProjMaker::_generate_standard_configuration( const Module& module, const
MSVCConfiguration& cfg, BinaryType binaryType )
+{
+ printf("_generate_standard_configuration not implemented for the base
class\n");
+}
+
+void
+ProjMaker::_generate_makefile_configuration( const Module& module, const
MSVCConfiguration& cfg )
+{
+ printf("_generate_makefile_configuration not implemented for the base
class\n");
+}
+
+std::string
+ProjMaker::_get_vc_dir ( void ) const
+{
+ if ( configuration.VSProjectVersion == "8.00" )
+ return "vc8";
+ else if ( configuration.VSProjectVersion == "10.00" )
+ return "vc10";
+ else /* default to VS2008 */
+ return "vc9";
+}
+
+std::string
+ProjMaker::VcprojFileName ( const Module& module ) const
+{
+ return FixSeparatorForSystemCommand(
+ ReplaceExtension ( module.output->relative_path + "\\" + module.name,
"_" + _get_vc_dir() + "_auto.vcproj" )
+ );
+}
+
+std::string
+ProjMaker::_strip_gcc_deffile(std::string Filename, std::string sourcedir, std::string
objdir)
+{
+ std::string NewFilename = Environment::GetIntermediatePath () + "\\" + objdir
+ "\\" + Filename;
+ // we don't like infinite loops - so replace it in two steps
+ NewFilename = _replace_str(NewFilename, ".def", "_msvc.de");
+ NewFilename = _replace_str(NewFilename, "_msvc.de", "_msvc.def");
+ Filename = sourcedir + "\\" + Filename;
+
+ Directory dir(objdir);
+ dir.GenerateTree(IntermediateDirectory, false);
+
+ std::fstream in_file(Filename.c_str(), std::ios::in);
+ std::fstream out_file(NewFilename.c_str(), std::ios::out);
+ std::string::size_type pos;
+ DWORD i = 0;
+
+ std::string line;
+ while (std::getline(in_file, line))
+ {
+ pos = line.find("@", 0);
+ while (std::string::npos != pos)
+ {
+ if (pos > 1)
+ {
+ // make sure it is stdcall and no ordinal
+ if (line[pos -1] != ' ')
+ {
+ i = 0;
+ while (true)
+ {
+ i++;
+ if ((line[pos + i] < '0') || (line[pos + i] > '9'))
+ break;
+ }
+ line.replace(pos, i, "");
+ }
+ }
+ pos = line.find("@", pos + 1);
+ }
+
+ line += "\n";
+ out_file << line;
+ }
+ in_file.close();
+ out_file.close();
+
+ return NewFilename;
+}
+
+std::string
+ProjMaker::_replace_str(std::string string1, const std::string &find_str, const
std::string &replace_str)
+{
+ std::string::size_type pos = string1.find(find_str, 0);
+ int intLen = find_str.length();
+
+ while(std::string::npos != pos)
+ {
+ string1.replace(pos, intLen, replace_str);
+ pos = string1.find(find_str, intLen + pos);
+ }
+
+ return string1;
+}
Propchange: trunk/reactos/tools/rbuild/backend/msvc/projmaker.cpp
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/reactos/tools/rbuild/backend/msvc/slnmaker.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/backend/msvc/…
==============================================================================
--- trunk/reactos/tools/rbuild/backend/msvc/slnmaker.cpp (added)
+++ trunk/reactos/tools/rbuild/backend/msvc/slnmaker.cpp [iso-8859-1] Thu Dec 3 17:09:09
2009
@@ -1,0 +1,172 @@
+/*
+ * Copyright (C) 2002 Patrik Stridvall
+ * Copyright (C) 2005 Royce Mitchell III
+ * Copyright (C) 2006 Hervé Poussineau
+ * Copyright (C) 2006 Christoph von Wittich
+ * Copyright (C) 2009 Ged Murphy
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifdef _MSC_VER
+#pragma warning ( disable : 4786 )
+#endif//_MSC_VER
+
+#include <string>
+#include <vector>
+#include <set>
+#include <algorithm>
+#include <fstream>
+#include <iostream>
+
+#include <stdio.h>
+
+#include "msvc.h"
+
+using std::string;
+using std::vector;
+using std::set;
+
+
+
+SlnMaker::SlnMaker ( Configuration& buildConfig,
+ Project& ProjectNode,
+ const std::vector<MSVCConfiguration*>& configurations,
+ std::string filename_sln )
+{
+ m_configuration = buildConfig;
+ m_ProjectNode = &ProjectNode;
+ m_configurations = configurations;
+
+ OUT = fopen ( filename_sln.c_str(), "wb" );
+
+ if ( !OUT )
+ {
+ printf ( "Could not create file '%s'.\n", filename_sln.c_str() );
+ }
+}
+
+SlnMaker::~SlnMaker()
+{
+ fclose ( OUT );
+}
+
+void
+SlnMaker::_generate_sln_header ( std::string solution_version, std::string studio_version
)
+{
+ //fprintf ( OUT, "Microsoft Visual Studio Solution File, Format Version
%s\r\n", _get_solution_version().c_str() );
+ //fprintf ( OUT, "# Visual Studio %s\r\n", _get_studio_version().c_str() );
+ fprintf ( OUT, "Microsoft Visual Studio Solution File, Format Version %s\r\n",
solution_version.c_str() );
+ fprintf ( OUT, "# Visual Studio %s\r\n", studio_version.c_str() );
+ fprintf ( OUT, "\r\n" );
+}
+
+
+void
+SlnMaker::_generate_sln_project (
+ const Module& module,
+ std::string vcproj_file,
+ std::string sln_guid,
+ std::string vcproj_guid,
+ const std::vector<Library*>& libraries )
+{
+ vcproj_file = DosSeparator ( std::string(".\\") + vcproj_file );
+
+ 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() );
+/*
+ //FIXME: only omit ProjectDependencies in VS 2005 when there are no dependencies
+ //NOTE: VS 2002 do not use ProjectSection; it uses GlobalSection instead
+ if ((configuration.VSProjectVersion == "7.10") || (libraries.size() > 0))
{
+ fprintf ( OUT, "\tProjectSection(ProjectDependencies) = postProject\r\n" );
+ for ( size_t i = 0; i < libraries.size(); i++ )
+ {
+ const Module& module = *libraries[i]->importedModule;
+ fprintf ( OUT, "\t\t%s = %s\r\n", module.guid.c_str(), module.guid.c_str()
);
+ }
+ fprintf ( OUT, "\tEndProjectSection\r\n" );
+ }
+*/
+ fprintf ( OUT, "EndProject\r\n" );
+}
+
+
+void
+SlnMaker::_generate_sln_footer ( )
+{
+ fprintf ( OUT, "Global\r\n" );
+ fprintf ( OUT, "\tGlobalSection(SolutionConfigurationPlatforms) =
preSolution\r\n" );
+ for ( size_t i = 0; i < m_configurations.size(); i++ )
+ fprintf ( OUT, "\t\t%s = %s\r\n", m_configurations[i]->name.c_str(),
m_configurations[i]->name.c_str() );
+ fprintf ( OUT, "\tEndGlobalSection\r\n" );
+
+ fprintf ( OUT, "\tGlobalSection(ProjectConfigurationPlatforms) =
postSolution\r\n" );
+ for( std::map<std::string, Module*>::const_iterator p =
m_ProjectNode->modules.begin(); p != m_ProjectNode->modules.end(); ++ p )
+ {
+ Module& module = *p->second;
+ std::string guid = module.guid;
+ _generate_sln_configurations ( guid.c_str() );
+ }
+ fprintf ( OUT, "\tEndGlobalSection\r\n" );
+/*
+ fprintf ( OUT, "\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n" );
+ fprintf ( OUT, "\tEndGlobalSection\r\n" );
+ fprintf ( OUT, "\tGlobalSection(ExtensibilityAddIns) = postSolution\r\n" );
+ fprintf ( OUT, "\tEndGlobalSection\r\n" );
+*/
+
+ if (m_configuration.VSProjectVersion == "7.00") {
+ fprintf ( OUT, "\tGlobalSection(ProjectDependencies) = postSolution\r\n" );
+ //FIXME: Add dependencies for VS 2002
+ fprintf ( OUT, "\tEndGlobalSection\r\n" );
+ }
+ else {
+ fprintf ( OUT, "\tGlobalSection(SolutionProperties) = preSolution\r\n" );
+ fprintf ( OUT, "\t\tHideSolutionNode = FALSE\r\n" );
+ fprintf ( OUT, "\tEndGlobalSection\r\n" );
+ }
+
+ fprintf ( OUT, "EndGlobal\r\n" );
+ fprintf ( OUT, "\r\n" );
+}
+
+
+void
+SlnMaker::_generate_sln_configurations ( std::string vcproj_guid )
+{
+ for ( size_t i = 0; i < m_configurations.size (); i++)
+ {
+ const MSVCConfiguration& cfg = *m_configurations[i];
+ fprintf ( OUT, "\t\t%s.%s|Win32.ActiveCfg = %s|Win32\r\n",
vcproj_guid.c_str(), cfg.name.c_str(), cfg.name.c_str() );
+ fprintf ( OUT, "\t\t%s.%s|Win32.Build.0 = %s|Win32\r\n", vcproj_guid.c_str(),
cfg.name.c_str(), cfg.name.c_str() );
+ }
+}
+
+void
+SlnMaker::_generate_sln ( std::string solution_version, std::string studio_version )
+{
+ string sln_guid = "{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}";
+ vector<string> guids;
+
+ _generate_sln_header( solution_version, studio_version);
+ // TODO FIXME - is it necessary to sort them?
+ for( std::map<std::string, Module*>::const_iterator p =
m_ProjectNode->modules.begin(); p != m_ProjectNode->modules.end(); ++ p )
+ {
+ Module& module = *p->second;
+
+ //std::string vcproj_file =
+ _generate_sln_project ( module, module.name, sln_guid, module.guid,
module.non_if_data.libraries );
+ }
+ _generate_sln_footer ( );
+}
Propchange: trunk/reactos/tools/rbuild/backend/msvc/slnmaker.cpp
------------------------------------------------------------------------------
svn:eol-style = native
Modified: trunk/reactos/tools/rbuild/backend/msvc/vcprojmaker.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/backend/msvc/…
==============================================================================
--- trunk/reactos/tools/rbuild/backend/msvc/vcprojmaker.cpp [iso-8859-1] (original)
+++ trunk/reactos/tools/rbuild/backend/msvc/vcprojmaker.cpp [iso-8859-1] Thu Dec 3
17:09:09 2009
@@ -53,38 +53,38 @@
}
};
-MSVCConfiguration::MSVCConfiguration ( const OptimizationType optimization, const
HeadersType headers, const std::string &name )
+
+VCProjMaker::VCProjMaker ( )
{
- this->optimization = optimization;
- this->headers = headers;
- if ( name != "" )
- this->name = name;
- else
- {
- std::string headers_name;
- if ( headers == MSVCHeaders )
- headers_name = "";
- else
- headers_name = " - ReactOS headers";
- if ( optimization == Debug )
- this->name = "Debug" + headers_name;
- else if ( optimization == Release )
- this->name = "Release" + headers_name;
- else if ( optimization == Speed )
- this->name = "Speed" + headers_name;
- else if ( optimization == RosBuild )
- this->name = "RosBuild";
- else
- this->name = "Unknown" + headers_name;
- }
+ vcproj_file = "";
}
+VCProjMaker::VCProjMaker ( Configuration& buildConfig,
+ const std::vector<MSVCConfiguration*>& msvc_configs,
+ std::string filename )
+{
+ configuration = buildConfig;
+ m_configurations = msvc_configs;
+ vcproj_file = filename;
+
+ OUT = fopen ( vcproj_file.c_str(), "wb" );
+
+ if ( !OUT )
+ {
+ printf ( "Could not create file '%s'.\n", vcproj_file.c_str() );
+ }
+}
+
+VCProjMaker::~VCProjMaker()
+{
+ fclose ( OUT );
+}
+
void
-MSVCBackend::_generate_vcproj ( const Module& module )
+VCProjMaker::_generate_proj_file ( const Module& module )
{
size_t i;
- string vcproj_file = VcprojFileName(module);
string computername;
string username;
@@ -108,7 +108,6 @@
vcproj_file_user = vcproj_file + "." + computername + "." +
username + ".user";
printf ( "Creating
MSVC.NET project: '%s'\n", vcproj_file.c_str() );
- FILE* OUT = fopen ( vcproj_file.c_str(), "wb" );
string path_basedir = module.GetPathToBaseDir ();
string intenv = Environment::GetIntermediatePath ();
@@ -263,11 +262,11 @@
if ( cfg.optimization == RosBuild )
{
- _generate_makefile_configuration( OUT, module, cfg );
+ _generate_makefile_configuration( module, cfg );
}
else
{
- _generate_standard_configuration( OUT, module, cfg, binaryType );
+ _generate_standard_configuration( module, cfg, binaryType );
}
}
fprintf ( OUT, "\t</Configurations>\r\n" );
@@ -440,70 +439,15 @@
fprintf ( OUT, "\t<Globals>\r\n" );
fprintf ( OUT, "\t</Globals>\r\n" );
fprintf ( OUT, "</VisualStudioProject>\r\n" );
- fclose ( OUT );
-
-#if 0
- /* User configuration file */
- if (vcproj_file_user != "")
- {
- OUT = fopen ( vcproj_file_user.c_str(), "wb" );
- fprintf ( OUT, "<?xml version=\"1.0\" encoding =
\"Windows-1252\"?>\r\n" );
- fprintf ( OUT, "<VisualStudioUserFile\r\n" );
- fprintf ( OUT, "\tProjectType=\"Visual C++\"\r\n" );
- fprintf ( OUT, "\tVersion=\"%s\"\r\n",
configuration.VSProjectVersion.c_str() );
- fprintf ( OUT, "\tShowAllFiles=\"false\"\r\n" );
- fprintf ( OUT, "\t>\r\n" );
-
- fprintf ( OUT, "\t<Configurations>\r\n" );
- for ( size_t icfg = 0; icfg < m_configurations.size(); icfg++ )
- {
- const MSVCConfiguration& cfg = *m_configurations[icfg];
- fprintf ( OUT, "\t\t<Configuration\r\n" );
- fprintf ( OUT, "\t\t\tName=\"%s|Win32\"\r\n", cfg.name.c_str() );
- fprintf ( OUT, "\t\t\t>\r\n" );
- fprintf ( OUT, "\t\t\t<DebugSettings\r\n" );
- if ( module_type == ".cpl" )
- {
- fprintf ( OUT, "\t\t\t\tCommand=\"rundll32.exe\"\r\n" );
- fprintf ( OUT, "\t\t\t\tCommandArguments=\" shell32,Control_RunDLL
"$(TargetPath)",@\"\r\n" );
- }
- else
- {
- fprintf ( OUT, "\t\t\t\tCommand=\"$(TargetPath)\"\r\n" );
- fprintf ( OUT, "\t\t\t\tCommandArguments=\"\"\r\n" );
- }
- fprintf ( OUT, "\t\t\t\tAttach=\"false\"\r\n" );
- fprintf ( OUT, "\t\t\t\tDebuggerType=\"3\"\r\n" );
- fprintf ( OUT, "\t\t\t\tRemote=\"1\"\r\n" );
- string remote_machine = "\t\t\t\tRemoteMachine=\"" + computername +
"\"\r\n";
- fprintf ( OUT, remote_machine.c_str() );
- fprintf ( OUT, "\t\t\t\tRemoteCommand=\"\"\r\n" );
- fprintf ( OUT, "\t\t\t\tHttpUrl=\"\"\r\n" );
- fprintf ( OUT, "\t\t\t\tPDBPath=\"\"\r\n" );
- fprintf ( OUT, "\t\t\t\tSQLDebugging=\"\"\r\n" );
- fprintf ( OUT, "\t\t\t\tEnvironment=\"\"\r\n" );
- fprintf ( OUT, "\t\t\t\tEnvironmentMerge=\"true\"\r\n" );
- fprintf ( OUT, "\t\t\t\tDebuggerFlavor=\"\"\r\n" );
- fprintf ( OUT, "\t\t\t\tMPIRunCommand=\"\"\r\n" );
- fprintf ( OUT, "\t\t\t\tMPIRunArguments=\"\"\r\n" );
- fprintf ( OUT, "\t\t\t\tMPIRunWorkingDirectory=\"\"\r\n" );
- fprintf ( OUT, "\t\t\t\tApplicationCommand=\"\"\r\n" );
- fprintf ( OUT, "\t\t\t\tApplicationArguments=\"\"\r\n" );
- fprintf ( OUT, "\t\t\t\tShimCommand=\"\"\r\n" );
- fprintf ( OUT, "\t\t\t\tMPIAcceptMode=\"\"\r\n" );
- fprintf ( OUT, "\t\t\t\tMPIAcceptFilter=\"\"\r\n" );
- fprintf ( OUT, "\t\t\t/>\r\n" );
- fprintf ( OUT, "\t\t</Configuration>\r\n" );
- }
- fprintf ( OUT, "\t</Configurations>\r\n" );
- fprintf ( OUT, "</VisualStudioUserFile>\r\n" );
- fclose ( OUT );
- }
-#endif
}
-void MSVCBackend::_generate_standard_configuration( FILE* OUT,
- const Module& module,
+void VCProjMaker::_generate_user_configuration ()
+{
+ // Call base implementation
+ ProjMaker::_generate_user_configuration ();
+}
+
+void VCProjMaker::_generate_standard_configuration( const Module& module,
const MSVCConfiguration& cfg,
BinaryType binaryType )
{
@@ -942,7 +886,7 @@
void
-MSVCBackend::_generate_makefile_configuration( FILE* OUT, const Module& module, const
MSVCConfiguration& cfg )
+VCProjMaker::_generate_makefile_configuration( const Module& module, const
MSVCConfiguration& cfg )
{
string path_basedir = module.GetPathToBaseDir ();
string intenv = Environment::GetIntermediatePath ();
@@ -1002,248 +946,3 @@
fprintf ( OUT, "\t\t\t/>\r\n" );
fprintf ( OUT, "\t\t</Configuration>\r\n" );
}
-
-
-std::string
-MSVCBackend::_strip_gcc_deffile(std::string Filename, std::string sourcedir, std::string
objdir)
-{
- std::string NewFilename = Environment::GetIntermediatePath () + "\\" + objdir
+ "\\" + Filename;
- // we don't like infinite loops - so replace it in two steps
- NewFilename = _replace_str(NewFilename, ".def", "_msvc.de");
- NewFilename = _replace_str(NewFilename, "_msvc.de", "_msvc.def");
- Filename = sourcedir + "\\" + Filename;
-
- Directory dir(objdir);
- dir.GenerateTree(IntermediateDirectory, false);
-
- std::fstream in_file(Filename.c_str(), std::ios::in);
- std::fstream out_file(NewFilename.c_str(), std::ios::out);
- std::string::size_type pos;
- DWORD i = 0;
-
- std::string line;
- while (std::getline(in_file, line))
- {
- pos = line.find("@", 0);
- while (std::string::npos != pos)
- {
- if (pos > 1)
- {
- // make sure it is stdcall and no ordinal
- if (line[pos -1] != ' ')
- {
- i = 0;
- while (true)
- {
- i++;
- if ((line[pos + i] < '0') || (line[pos + i] > '9'))
- break;
- }
- line.replace(pos, i, "");
- }
- }
- pos = line.find("@", pos + 1);
- }
-
- line += "\n";
- out_file << line;
- }
- in_file.close();
- out_file.close();
-
- return NewFilename;
-}
-
-std::string
-MSVCBackend::_replace_str(std::string string1, const std::string &find_str, const
std::string &replace_str)
-{
- std::string::size_type pos = string1.find(find_str, 0);
- int intLen = find_str.length();
-
- while(std::string::npos != pos)
- {
- string1.replace(pos, intLen, replace_str);
- pos = string1.find(find_str, intLen + pos);
- }
-
- return string1;
-}
-
-std::string
-MSVCBackend::_get_solution_version ( void )
-{
- string version;
-
- if (configuration.VSProjectVersion.empty())
- configuration.VSProjectVersion = MS_VS_DEF_VERSION;
-
- else if (configuration.VSProjectVersion == "7.00")
- version = "7.00";
-
- else if (configuration.VSProjectVersion == "7.10")
- version = "8.00";
-
- else if (configuration.VSProjectVersion == "8.00")
- version = "9.00";
-
- else if (configuration.VSProjectVersion == "9.00")
- version = "10.00";
-
- else if (configuration.VSProjectVersion == "10.00")
- version = "11.00";
-
- return version;
-}
-
-std::string
-MSVCBackend::_get_studio_version ( void )
-{
- string version;
-
- if (configuration.VSProjectVersion.empty())
- configuration.VSProjectVersion = MS_VS_DEF_VERSION;
-
- else if (configuration.VSProjectVersion == "7.00")
- version = "2002";
-
- else if (configuration.VSProjectVersion == "7.10")
- version = "2003";
-
- else if (configuration.VSProjectVersion == "8.00")
- version = "2005";
-
- else if (configuration.VSProjectVersion == "9.00")
- version = "2008";
-
- else if (configuration.VSProjectVersion == "10.00")
- version = "2010";
-
- return version;
-}
-
-void
-MSVCBackend::_generate_sln_header ( FILE* OUT )
-{
- fprintf ( OUT, "Microsoft Visual Studio Solution File, Format Version %s\r\n",
_get_solution_version().c_str() );
- fprintf ( OUT, "# Visual Studio %s\r\n", _get_studio_version().c_str() );
- fprintf ( OUT, "\r\n" );
-}
-
-
-void
-MSVCBackend::_generate_sln_project (
- FILE* OUT,
- const Module& module,
- std::string vcproj_file,
- std::string sln_guid,
- std::string vcproj_guid,
- const std::vector<Library*>& libraries )
-{
- vcproj_file = DosSeparator ( std::string(".\\") + vcproj_file );
-
- 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() );
-
- //FIXME: only omit ProjectDependencies in VS 2005 when there are no dependencies
- //NOTE: VS 2002 do not use ProjectSection; it uses GlobalSection instead
- if ((configuration.VSProjectVersion == "7.10") || (libraries.size() > 0))
{
- fprintf ( OUT, "\tProjectSection(ProjectDependencies) = postProject\r\n" );
- for ( size_t i = 0; i < libraries.size(); i++ )
- {
- const Module& module = *libraries[i]->importedModule;
- fprintf ( OUT, "\t\t%s = %s\r\n", module.guid.c_str(), module.guid.c_str()
);
- }
- fprintf ( OUT, "\tEndProjectSection\r\n" );
- }
-
- fprintf ( OUT, "EndProject\r\n" );
-}
-
-
-void
-MSVCBackend::_generate_sln_footer ( FILE* OUT )
-{
- fprintf ( OUT, "Global\r\n" );
- fprintf ( OUT, "\tGlobalSection(SolutionConfigurationPlatforms) =
preSolution\r\n" );
- for ( size_t i = 0; i < m_configurations.size(); i++ )
- fprintf ( OUT, "\t\t%s = %s\r\n", m_configurations[i]->name.c_str(),
m_configurations[i]->name.c_str() );
- fprintf ( OUT, "\tEndGlobalSection\r\n" );
-
- fprintf ( OUT, "\tGlobalSection(ProjectConfigurationPlatforms) =
postSolution\r\n" );
- for( std::map<std::string, Module*>::const_iterator p =
ProjectNode.modules.begin(); p != ProjectNode.modules.end(); ++ p )
- {
- Module& module = *p->second;
- std::string guid = module.guid;
- _generate_sln_configurations ( OUT, guid.c_str() );
- }
- fprintf ( OUT, "\tEndGlobalSection\r\n" );
-/*
- fprintf ( OUT, "\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n" );
- fprintf ( OUT, "\tEndGlobalSection\r\n" );
- fprintf ( OUT, "\tGlobalSection(ExtensibilityAddIns) = postSolution\r\n" );
- fprintf ( OUT, "\tEndGlobalSection\r\n" );
-*/
- if (configuration.VSProjectVersion == "7.00") {
- fprintf ( OUT, "\tGlobalSection(ProjectDependencies) = postSolution\r\n" );
- //FIXME: Add dependencies for VS 2002
- fprintf ( OUT, "\tEndGlobalSection\r\n" );
- }
- else {
- fprintf ( OUT, "\tGlobalSection(SolutionProperties) = preSolution\r\n" );
- fprintf ( OUT, "\t\tHideSolutionNode = FALSE\r\n" );
- fprintf ( OUT, "\tEndGlobalSection\r\n" );
- }
-
- fprintf ( OUT, "EndGlobal\r\n" );
- fprintf ( OUT, "\r\n" );
-}
-
-
-void
-MSVCBackend::_generate_sln_configurations ( FILE* OUT, std::string vcproj_guid )
-{
- for ( size_t i = 0; i < m_configurations.size (); i++)
- {
- const MSVCConfiguration& cfg = *m_configurations[i];
- fprintf ( OUT, "\t\t%s.%s|Win32.ActiveCfg = %s|Win32\r\n",
vcproj_guid.c_str(), cfg.name.c_str(), cfg.name.c_str() );
- fprintf ( OUT, "\t\t%s.%s|Win32.Build.0 = %s|Win32\r\n", vcproj_guid.c_str(),
cfg.name.c_str(), cfg.name.c_str() );
- }
-}
-
-void
-MSVCBackend::_generate_sln ( FILE* OUT )
-{
- string sln_guid = "{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}";
- vector<string> guids;
-
- _generate_sln_header(OUT);
- // TODO FIXME - is it necessary to sort them?
- for( std::map<std::string, Module*>::const_iterator p =
ProjectNode.modules.begin(); p != ProjectNode.modules.end(); ++ p )
- {
- Module& module = *p->second;
-
- std::string vcproj_file = VcprojFileName ( module );
- _generate_sln_project ( OUT, module, vcproj_file, sln_guid, module.guid,
module.non_if_data.libraries );
- }
- _generate_sln_footer ( OUT );
-}
-
-const Property*
-MSVCBackend::_lookup_property ( const Module& module, const std::string& name )
const
-{
- std::map<std::string, Property*>::const_iterator p;
-
- /* Check local values */
- p = module.non_if_data.properties.find(name);
-
- if ( p != module.non_if_data.properties.end() )
- return p->second;
-
- // TODO FIXME - should we check local if-ed properties?
- p = module.project.non_if_data.properties.find(name);
-
- if ( p != module.project.non_if_data.properties.end() )
- return p->second;
-
- // TODO FIXME - should we check global if-ed properties?
- return NULL;
-}
Modified: trunk/reactos/tools/rbuild/backend/msvc/vcxprojmaker.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/backend/msvc/…
==============================================================================
--- trunk/reactos/tools/rbuild/backend/msvc/vcxprojmaker.cpp [iso-8859-1] (original)
+++ trunk/reactos/tools/rbuild/backend/msvc/vcxprojmaker.cpp [iso-8859-1] Thu Dec 3
17:09:09 2009
@@ -1,4 +1,8 @@
/*
+ * Copyright (C) 2002 Patrik Stridvall
+ * Copyright (C) 2005 Royce Mitchell III
+ * Copyright (C) 2006 Hervé Poussineau
+ * Copyright (C) 2006 Christoph von Wittich
* Copyright (C) 2009 Ged Murphy
*
* This program is free software; you can redistribute it and/or modify
@@ -15,6 +19,10 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+
+#ifdef _MSC_VER
+#pragma warning ( disable : 4786 )
+#endif//_MSC_VER
#include <string>
#include <vector>
@@ -37,141 +45,57 @@
#undef OUT
#endif//OUT
+
+VCXProjMaker::VCXProjMaker ( )
+{
+ vcproj_file = "";
+}
+
+VCXProjMaker::VCXProjMaker ( Configuration& buildConfig,
+ const std::vector<MSVCConfiguration*>& msvc_configs,
+ std::string filename )
+{
+ configuration = buildConfig;
+ m_configurations = msvc_configs;
+ vcproj_file = filename;
+
+ OUT = fopen ( vcproj_file.c_str(), "wb" );
+
+ if ( !OUT )
+ {
+ printf ( "Could not create file '%s'.\n", vcproj_file.c_str() );
+ }
+}
+
+VCXProjMaker::~VCXProjMaker()
+{
+ fclose ( OUT );
+}
+
void
-MSVCBackend::_generate_vcxproj ( const Module& module )
+VCXProjMaker::_generate_proj_file ( const Module& module )
{
- size_t i;
+ // TODO: Implement me
+ ProjMaker::_generate_proj_file ( module );
+}
- string vcproj_file = VcprojFileName(module);
- string computername;
- string username;
- string intermediatedir = "";
+void
+VCXProjMaker::_generate_user_configuration ()
+{
+ // Call base implementation
+ ProjMaker::_generate_user_configuration ();
+}
- if (getenv ( "USERNAME" ) != NULL)
- username = getenv ( "USERNAME" );
- if (getenv ( "COMPUTERNAME" ) != NULL)
- computername = getenv ( "COMPUTERNAME" );
- else if (getenv ( "HOSTNAME" ) != NULL)
- computername = getenv ( "HOSTNAME" );
+void
+VCXProjMaker::_generate_standard_configuration( const Module& module, const
MSVCConfiguration& cfg, BinaryType binaryType )
+{
+ // TODO: Implement me
+ ProjMaker::_generate_standard_configuration ( module, cfg, binaryType );
+}
- printf ( "Creating MSVC project: '%s'\n", vcproj_file.c_str() );
- FILE* OUT = fopen ( vcproj_file.c_str(), "wb" );
-
- string path_basedir = module.GetPathToBaseDir ();
- string intenv = Environment::GetIntermediatePath ();
- string outenv = Environment::GetOutputPath ();
- string outdir;
- string intdir;
- string vcdir;
-
- if ( intenv == "obj-i386" )
- intdir = path_basedir + "obj-i386"; /* append relative dir from project dir
*/
- else
- intdir = intenv;
-
- if ( outenv == "output-i386" )
- outdir = path_basedir + "output-i386";
- else
- outdir = outenv;
-
- if ( configuration.UseVSVersionInPath )
- {
- vcdir = DEF_SSEP + _get_vc_dir();
- }
-
-
-
- bool include_idl = false;
-
- vector<string> source_files, resource_files;
- vector<const IfableData*> ifs_list;
- ifs_list.push_back ( &module.project.non_if_data );
- ifs_list.push_back ( &module.non_if_data );
-
- while ( ifs_list.size() )
- {
- const IfableData& data = *ifs_list.back();
- ifs_list.pop_back();
- const vector<File*>& files = data.files;
- for ( i = 0; i < files.size(); i++ )
- {
- if (files[i]->file.directory != SourceDirectory)
- continue;
-
- // We want the full path here for directory support later on
- string path = Path::RelativeFromDirectory (
- files[i]->file.relative_path,
- module.output->relative_path );
- string file = path + std::string("\\") + files[i]->file.name;
-
- if ( !stricmp ( Right(file,3).c_str(), ".rc" ) )
- resource_files.push_back ( file );
- else if ( !stricmp ( Right(file,2).c_str(), ".h" ) )
- header_files.push_back ( file );
- else
- source_files.push_back ( file );
- }
- const vector<Include*>& incs = data.includes;
- for ( i = 0; i < incs.size(); i++ )
- {
- string path = Path::RelativeFromDirectory (
- incs[i]->directory->relative_path,
- module.output->relative_path );
- if ( module.type != RpcServer && module.type != RpcClient )
- {
- if ( path.find ("/include/reactos/idl") != string::npos)
- {
- include_idl = true;
- continue;
- }
- }
- // switch between general headers and ros headers
- if ( !strncmp(incs[i]->directory->relative_path.c_str(),
"include\\crt", 11 ) ||
- !strncmp(incs[i]->directory->relative_path.c_str(),
"include\\ddk", 11 ) ||
- !strncmp(incs[i]->directory->relative_path.c_str(),
"include\\GL", 10 ) ||
- !strncmp(incs[i]->directory->relative_path.c_str(),
"include\\psdk", 12 ) ||
- !strncmp(incs[i]->directory->relative_path.c_str(),
"include\\reactos\\wine", 20 ) )
- {
- if (strncmp(incs[i]->directory->relative_path.c_str(),
"include\\crt", 11 ))
- // not crt include
- includes_ros.push_back ( path );
- }
- else
- {
- includes.push_back ( path );
- }
- }
- const vector<Library*>& libs = data.libraries;
- for ( i = 0; i < libs.size(); i++ )
- {
- string libpath = outdir + "\\" +
libs[i]->importedModule->output->relative_path + "\\" + _get_vc_dir() +
"\\---\\" + libs[i]->name + ".lib";
- libraries.push_back ( libpath );
- }
- const vector<Define*>& defs = data.defines;
- for ( i = 0; i < defs.size(); i++ )
- {
- if ( defs[i]->backend != "" && defs[i]->backend !=
"msvc" )
- continue;
-
- if ( defs[i]->value[0] )
- common_defines.insert( defs[i]->name + "=" + defs[i]->value );
- else
- common_defines.insert( defs[i]->name );
- }
- for ( std::map<std::string, Property*>::const_iterator p =
data.properties.begin(); p != data.properties.end(); ++ p )
- {
- Property& prop = *p->second;
- if ( strstr ( module.baseaddress.c_str(), prop.name.c_str() ) )
- baseaddr = prop.value;
- }
- }
- /* include intermediate path for reactos.rc */
- string version = intdir + "\\include";
- includes.push_back (version);
- version += "\\reactos";
- includes.push_back (version);
-
- string include_string;
-
- fprintf ( OUT, "<?xml version=\"1.0\" encoding =
\"Windows-1252\"?>\r\n" );
+void
+VCXProjMaker::_generate_makefile_configuration( const Module& module, const
MSVCConfiguration& cfg )
+{
+ // TODO: Implement me
+ ProjMaker::_generate_makefile_configuration ( module, cfg );
}
Modified: trunk/reactos/tools/rbuild/rbuild.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/rbuild.h?rev=…
==============================================================================
--- trunk/reactos/tools/rbuild/rbuild.h [iso-8859-1] (original)
+++ trunk/reactos/tools/rbuild/rbuild.h [iso-8859-1] Thu Dec 3 17:09:09 2009
@@ -68,7 +68,7 @@
#define DEF_SBAD_SEP "\\"
#endif
-#define MS_VS_DEF_VERSION "7.10"
+#define MS_VS_DEF_VERSION "8.00"
class XmlNode;
class Directory;
Modified: trunk/reactos/tools/rbuild/rbuild.mak
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/rbuild.mak?re…
==============================================================================
--- trunk/reactos/tools/rbuild/rbuild.mak [iso-8859-1] (original)
+++ trunk/reactos/tools/rbuild/rbuild.mak [iso-8859-1] Thu Dec 3 17:09:09 2009
@@ -227,7 +227,8 @@
RBUILD_BACKEND_MSVC_BASE_SOURCES = $(addprefix $(RBUILD_MSVC_BASE_), \
genguid.cpp \
msvc.cpp \
- msvcmaker.cpp \
+ projmaker.cpp \
+ slnmaker.cpp \
vcprojmaker.cpp \
vcxprojmaker.cpp \
)
@@ -522,8 +523,12 @@
$(RBUILD_MSVC_INT_)msvc.o: $(RBUILD_MSVC_BASE_)msvc.cpp $(RBUILD_HEADERS) |
$(RBUILD_MSVC_INT)
$(ECHO_HOSTCC)
${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@
-
-$(RBUILD_MSVC_INT_)msvcmaker.o: $(RBUILD_MSVC_BASE_)msvcmaker.cpp $(RBUILD_HEADERS) |
$(RBUILD_MSVC_INT)
+
+$(RBUILD_MSVC_INT_)projmaker.o: $(RBUILD_MSVC_BASE_)projmaker.cpp $(RBUILD_HEADERS) |
$(RBUILD_MSVC_INT)
+ $(ECHO_HOSTCC)
+ ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@
+
+$(RBUILD_MSVC_INT_)slnmaker.o: $(RBUILD_MSVC_BASE_)slnmaker.cpp $(RBUILD_HEADERS) |
$(RBUILD_MSVC_INT)
$(ECHO_HOSTCC)
${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@
Modified: trunk/reactos/tools/rbuild/rbuild.vcproj
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/rbuild.vcproj…
==============================================================================
--- trunk/reactos/tools/rbuild/rbuild.vcproj [iso-8859-1] (original)
+++ trunk/reactos/tools/rbuild/rbuild.vcproj [iso-8859-1] Thu Dec 3 17:09:09 2009
@@ -287,28 +287,12 @@
</File>
<File
- RelativePath="backend\msvc\msvcmaker.cpp"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
+ RelativePath=".\backend\msvc\projmaker.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\backend\msvc\slnmaker.cpp"
+ >
</File>
<File
RelativePath="backend\msvc\vcprojmaker.cpp"