adding gccasm.rules to vcproj files
now it is possible to compile .s files with msvc
Modified: trunk/reactos/tools/rbuild/backend/msvc/msvc.cpp
Modified: trunk/reactos/tools/rbuild/backend/msvc/msvc.h
Modified: trunk/reactos/tools/rbuild/backend/msvc/vcprojmaker.cpp

Modified: trunk/reactos/tools/rbuild/backend/msvc/msvc.cpp
--- trunk/reactos/tools/rbuild/backend/msvc/msvc.cpp	2005-10-22 01:46:46 UTC (rev 18670)
+++ trunk/reactos/tools/rbuild/backend/msvc/msvc.cpp	2005-10-22 02:27:37 UTC (rev 18671)
@@ -54,10 +54,21 @@
 void MSVCBackend::Process()
 {
 	string filename_sln ( ProjectNode.name );
+	string filename_rules = "gccasm.rules";
+	
 	if ( configuration.VSProjectVersion == "6.00" )
 		filename_sln += ".dsw";
-	else
+	else {
 		filename_sln += ".sln";
+
+		m_rulesFile = fopen ( filename_rules.c_str(), "wb" );
+		if ( m_rulesFile )
+		{
+			_generate_rules_file ( m_rulesFile );
+		}
+		fclose ( m_rulesFile );
+	}
+
 	printf ( "Creating MSVC workspace: %s\n", filename_sln.c_str() );
 	
 	ProcessModules();

Modified: trunk/reactos/tools/rbuild/backend/msvc/msvc.h
--- trunk/reactos/tools/rbuild/backend/msvc/msvc.h	2005-10-22 01:46:46 UTC (rev 18670)
+++ trunk/reactos/tools/rbuild/backend/msvc/msvc.h	2005-10-22 02:27:37 UTC (rev 18671)
@@ -63,6 +63,7 @@
 
 		FILE* m_dswFile;
 		FILE* m_slnFile;
+		FILE* m_rulesFile;
 
 		// functions in msvcmaker.cpp:
 
@@ -79,6 +80,7 @@
 
 		// functions in vcprojmaker.cpp:
 
+		std::string _get_solution_verion ( void );
 		std::string _gen_guid();
 		std::string _replace_str(
 			std::string string1,
@@ -90,10 +92,11 @@
 		void _generate_sln_header ( FILE* OUT );
 		void _generate_sln_footer ( FILE* OUT );
 		void _generate_sln ( FILE* OUT );
+		void _generate_rules_file ( FILE* OUT );
 		void _generate_sln_project (
 			FILE* OUT,
 			const Module& module,
-			std::string dsp_file,
+			std::string vcproj_file,
 			std::string sln_guid,
 			std::string vcproj_guid,
 			const std::vector<Dependency*>& dependencies );

Modified: trunk/reactos/tools/rbuild/backend/msvc/vcprojmaker.cpp
--- trunk/reactos/tools/rbuild/backend/msvc/vcprojmaker.cpp	2005-10-22 01:46:46 UTC (rev 18670)
+++ trunk/reactos/tools/rbuild/backend/msvc/vcprojmaker.cpp	2005-10-22 02:27:37 UTC (rev 18671)
@@ -190,6 +190,15 @@
 	fprintf ( OUT, "\t\t\tName=\"Win32\"/>\r\n" );
 	fprintf ( OUT, "\t</Platforms>\r\n" );
 
+	fprintf ( OUT, "\t<ToolFiles>\r\n" );
+	fprintf ( OUT, "\t\t<ToolFile\r\n" );
+
+	string path = Path::RelativeFromDirectory ( ProjectNode.name, module.GetBasePath() );
+	path.erase(path.find(ProjectNode.name, 0), ProjectNode.name.size() + 1);
+
+	fprintf ( OUT, "\t\t\tRelativePath=\"%s/gccasm.rules\"/>\r\n", path.c_str() );
+	fprintf ( OUT, "\t</ToolFiles>\r\n" );
+
 	int n = 0;
 
 	std::string output_dir;
@@ -352,7 +361,7 @@
 	// Source files
 	fprintf ( OUT, "\t\t<Filter\r\n" );
 	fprintf ( OUT, "\t\t\tName=\"Source Files\"\r\n" );
-	fprintf ( OUT, "\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\">\r\n" );
+	fprintf ( OUT, "\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;S\">\r\n" );
 	for ( size_t isrcfile = 0; isrcfile < source_files.size(); isrcfile++ )
 	{
 		const string& source_file = DosSeparator(source_files[isrcfile]);
@@ -410,14 +419,13 @@
         return string1;
 } 
 
-void
-MSVCBackend::_generate_sln_header ( FILE* OUT )
-{
+std::string
+MSVCBackend::_get_solution_verion ( void ) {
+    string version;
+
     if (configuration.VSProjectVersion.empty())
         configuration.VSProjectVersion = MS_VS_DEF_VERSION;
 
-    string version;
-
     if (configuration.VSProjectVersion == "7.00")
 		version = "7.00";
 
@@ -427,7 +435,38 @@
     if (configuration.VSProjectVersion == "8.00")
 		version = "9.00";
 
-    fprintf ( OUT, "Microsoft Visual Studio Solution File, Format Version %s\r\n", version.c_str() );
+	return version;
+}
+
+
+void
+MSVCBackend::_generate_rules_file ( FILE* OUT )
+{
+	fprintf ( OUT, "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n" );
+	fprintf ( OUT, "<VisualStudioToolFile\r\n" );
+	fprintf ( OUT, "\tName=\"GCC Assembler\"\r\n" );
+	fprintf ( OUT, "\tVersion=\"%s\"\r\n", _get_solution_verion().c_str() );
+	fprintf ( OUT, "\t>\r\n" );
+	fprintf ( OUT, "\t<Rules>\r\n" );
+	fprintf ( OUT, "\t\t<CustomBuildRule\r\n" );
+	fprintf ( OUT, "\t\t\tName=\"Assembler\"\r\n" );
+	fprintf ( OUT, "\t\t\tDisplayName=\"Assembler Files\"\r\n" );
+	fprintf ( OUT, "\t\t\tCommandLine=\"cl /E &quot;$(InputPath)&quot; | as -o &quot;$(OutDir)\\$(InputName).obj&quot;\"\r\n" );
+	fprintf ( OUT, "\t\t\tOutputs=\"$(OutDir)\\$(InputName).obj\"\r\n" );	
+	fprintf ( OUT, "\t\t\tFileExtensions=\"*.S\"\r\n" );
+	fprintf ( OUT, "\t\t\tExecutionDescription=\"asm\"\r\n" );
+	fprintf ( OUT, "\t\t\t>\r\n" );
+	fprintf ( OUT, "\t\t\t<Properties>\r\n" );
+	fprintf ( OUT, "\t\t\t</Properties>\r\n" );
+	fprintf ( OUT, "\t\t</CustomBuildRule>\r\n" );
+	fprintf ( OUT, "\t</Rules>\r\n" );
+	fprintf ( OUT, "</VisualStudioToolFile>\r\n" );
+}
+
+void
+MSVCBackend::_generate_sln_header ( FILE* OUT )
+{
+    fprintf ( OUT, "Microsoft Visual Studio Solution File, Format Version %s\r\n", _get_solution_verion().c_str() );
     fprintf ( OUT, "# Visual Studio 2005\r\n" );
     fprintf ( OUT, "\r\n" );
 }