Author: hpoussin
Date: Fri Feb 8 22:10:19 2008
New Revision: 32226
URL:
http://svn.reactos.org/svn/reactos?rev=32226&view=rev
Log:
Add Rule class, which writes to Makefile how to handle a source file
Later, hardcoded rules should be read from .rbuild files
Added:
trunk/reactos/tools/rbuild/backend/mingw/rule.cpp (with props)
trunk/reactos/tools/rbuild/backend/mingw/rule.h (with props)
Modified:
trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp
trunk/reactos/tools/rbuild/backend/mingw/modulehandler.h
trunk/reactos/tools/rbuild/rbuild.mak
Modified: trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/backend/mingw…
==============================================================================
--- trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp (original)
+++ trunk/reactos/tools/rbuild/backend/mingw/modulehandler.cpp Fri Feb 8 22:10:19 2008
@@ -22,6 +22,7 @@
#include "../../rbuild.h"
#include "mingw.h"
#include "modulehandler.h"
+#include "rule.h"
using std::set;
using std::string;
@@ -1245,6 +1246,43 @@
ReplaceExtension ( module.pch->file.name, "_" +
module.name + ".gch" ) );
}
+Rule gasRule (
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).o:
$(source) $(module_rbuild) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
+ "\t$(ECHO_GAS)\n"
+ "\t${gcc} -x assembler-with-cpp -c $< -o $@ -D__ASM__
$($(module_name)_CFLAGS)\n",
+
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).o",
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL );
+Rule bootRule ( "$(module_output): $(source) $(module_rbuild) |
$(OUTPUT)$(SEP)$(source_dir)\n"
+ "\t$(ECHO_NASM)\n"
+ "\t$(Q)${nasm} -f win32 $< -o $@
$($(module_name)_NASMFLAGS)\n",
+ "$(OUTPUT)$(SEP)$(source_dir)$(SEP)", NULL );
+Rule nasmRule (
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).o:
$(source) $(module_rbuild) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
+ "\t$(ECHO_NASM)\n"
+ "\t$(Q)${nasm} -f win32 $< -o $@
$($(module_name)_NASMFLAGS)\n",
+
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).o",
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL );
+Rule windresRule (
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).coff:
$(source) $(module_rbuild) $(WRC_TARGET) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
+ "\t$(ECHO_WRC)\n"
+ "\t${gcc} -xc -E -DRC_INVOKED ${$(module_name)_RCFLAGS} $(source)
> $(TEMPORARY)$(SEP)$(module_name).$(source_name_noext).rci.tmp\n"
+ "\t$(Q)$(WRC_TARGET) ${$(module_name)_RCFLAGS}
$(TEMPORARY)$(SEP)$(module_name).$(source_name_noext).rci.tmp
$(TEMPORARY)$(SEP)$(module_name).$(source_name_noext).res.tmp\n"
+ "\t-@${rm}
$(TEMPORARY)$(SEP)$(module_name).$(source_name_noext).rci.tmp 2>$(NUL)\n"
+ "\t${windres}
$(TEMPORARY)$(SEP)$(module_name).$(source_name_noext).res.tmp -o $@\n"
+ "\t-@${rm}
$(TEMPORARY)$(SEP)$(module_name).$(source_name_noext).res.tmp 2>$(NUL)\n",
+
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).coff",
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL );
+Rule wmcRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).rc
$(INTERMEDIATE)$(SEP)include$(SEP)reactos$(SEP)$(source_name_noext).h: $(WMC_TARGET)
$(source)\n"
+ "\t$(ECHO_WMC)\n"
+ "\t$(Q)$(WMC_TARGET) -i -H
$(INTERMEDIATE)$(SEP)include$(SEP)reactos$(SEP)$(source_name_noext).h -o
$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).rc $(source)\n",
+
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).rc",
"$(INTERMEDIATE)$(SEP)include$(SEP)reactos$(SEP)$(source_name_noext).h", NULL
);
+Rule winebuildRule (
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).spec.def: $(source)
$(module_rbuild) $(WINEBUILD_TARGET) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
+ "\t$(ECHO_WINEBLD)\n"
+ "\t$(Q)$(WINEBUILD_TARGET) -o
$(INTERMEDIATE)$(SEP)$(source_path)$(SEP)$(source_name_noext).spec.def --def -E
$(source_path)$(SEP)$(source_name_noext).spec\n"
+
"$(INTERMEDIATE)$(SEP)$(source_path)$(SEP)$(source_name_noext).stubs.c:
$(source_path)$(SEP)$(source_name_noext).spec $(WINEBUILD_TARGET)\n"
+ "\t$(ECHO_WINEBLD)\n"
+ "\t$(Q)$(WINEBUILD_TARGET) -o
$(INTERMEDIATE)$(SEP)$(source_path)$(SEP)$(source_name_noext).stubs.c --pedll
$(source_path)$(SEP)$(source_name_noext).spec\n",
+
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).spec.def",
+
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).stubs.c",
+ "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL );
+
void
MingwModuleHandler::GenerateGccCommand (
const FileLocation* sourceFile,
@@ -1286,175 +1324,7 @@
delete pchFilename;
}
-void
-MingwModuleHandler::GenerateGccAssemblerCommand (
- const FileLocation* sourceFile,
- const string& cc,
- const string& cflagsMacro )
-{
- string dependencies = backend->GetFullName ( *sourceFile );
- dependencies += " " + NormalizeFilename ( module.xmlbuildFile );
-
- const FileLocation *objectFilename = GetObjectFilename (
- sourceFile, module, &clean_files );
- fprintf ( fMakefile,
- "%s: %s | %s\n",
- backend->GetFullName ( *objectFilename ).c_str (),
- dependencies.c_str (),
- backend->GetFullPath ( *objectFilename ).c_str () );
- fprintf ( fMakefile, "\t$(ECHO_GAS)\n" );
- fprintf ( fMakefile,
- "\t%s -x assembler-with-cpp -c $< -o $@ -D__ASM__ %s\n",
- cc.c_str (),
- cflagsMacro.c_str () );
-
- delete objectFilename;
-}
-
-void
-MingwModuleHandler::GenerateNasmCommand (
- const FileLocation* sourceFile,
- const string& nasmflagsMacro )
-{
- string dependencies = backend->GetFullName ( *sourceFile );
- dependencies += " " + NormalizeFilename ( module.xmlbuildFile );
-
- const FileLocation *objectFilename = GetObjectFilename (
- sourceFile, module, &clean_files );
- fprintf ( fMakefile,
- "%s: %s | %s\n",
- backend->GetFullName ( *objectFilename ).c_str (),
- dependencies.c_str (),
- backend->GetFullPath ( *objectFilename ).c_str () );
- fprintf ( fMakefile, "\t$(ECHO_NASM)\n" );
- fprintf ( fMakefile,
- "\t%s -f win32 $< -o $@ %s\n",
- "$(Q)${nasm}",
- nasmflagsMacro.c_str () );
-
- delete objectFilename;
-}
-
-void
-MingwModuleHandler::GenerateWindresCommand (
- const FileLocation* sourceFile,
- const string& windresflagsMacro )
-{
- string dependencies = backend->GetFullName ( *sourceFile );
- dependencies += " " + NormalizeFilename ( module.xmlbuildFile );
-
- const FileLocation *objectFilename = GetObjectFilename ( sourceFile, module,
&clean_files );
-
- string sourceFilenamePart = module.name + "." + ReplaceExtension (
sourceFile->name, "" );
- FileLocation rciFilename ( TemporaryDirectory,
- "",
- sourceFilenamePart + ".rci.tmp" );
- FileLocation resFilename ( TemporaryDirectory,
- "",
- sourceFilenamePart + ".res.tmp" );
-
- fprintf ( fMakefile,
- "%s: %s $(WRC_TARGET) | %s\n",
- backend->GetFullName ( *objectFilename ).c_str (),
- dependencies.c_str (),
- backend->GetFullPath ( *objectFilename ).c_str () );
- fprintf ( fMakefile, "\t$(ECHO_WRC)\n" );
- fprintf ( fMakefile,
- "\t${gcc} -xc -E -DRC_INVOKED ${%s} %s > %s\n",
- windresflagsMacro.c_str (),
- backend->GetFullName ( *sourceFile ).c_str (),
- backend->GetFullName ( rciFilename ).c_str () );
- fprintf ( fMakefile,
- "\t$(Q)$(WRC_TARGET) ${%s} %s %s\n",
- windresflagsMacro.c_str (),
- backend->GetFullName ( rciFilename ).c_str (),
- backend->GetFullName ( resFilename ).c_str () );
- fprintf ( fMakefile,
- "\t-@${rm} %s 2>$(NUL)\n",
- backend->GetFullName ( rciFilename ).c_str () );
- fprintf ( fMakefile,
- "\t${windres} %s -o $@\n",
- backend->GetFullName ( resFilename ).c_str () );
- fprintf ( fMakefile,
- "\t-@${rm} %s 2>$(NUL)\n",
- backend->GetFullName ( resFilename ).c_str () );
-
- delete objectFilename;
-}
-
-void
-MingwModuleHandler::GenerateWinebuildCommands (
- const FileLocation* sourceFile )
-{
- string dependencies = backend->GetFullName ( *sourceFile );
- dependencies += " " + NormalizeFilename ( module.xmlbuildFile );
-
- string basename = GetBasename ( sourceFile->name );
- FileLocation def_file ( IntermediateDirectory,
- sourceFile->relative_path,
- basename + ".spec.def" );
- CLEAN_FILE ( def_file );
-
- const FileLocation *stub_file = GetActualSourceFilename ( sourceFile );
- CLEAN_FILE ( *stub_file );
-
- fprintf ( fMakefile,
- "%s: %s $(WINEBUILD_TARGET) | %s\n",
- backend->GetFullName ( def_file ).c_str (),
- dependencies.c_str (),
- backend->GetFullPath ( def_file ).c_str () );
- fprintf ( fMakefile, "\t$(ECHO_WINEBLD)\n" );
- fprintf ( fMakefile,
- "\t%s -o %s --def -E %s\n",
- "$(Q)$(WINEBUILD_TARGET)",
- backend->GetFullName ( def_file ).c_str (),
- backend->GetFullName ( *sourceFile ).c_str () );
- fprintf ( fMakefile,
- "%s: %s $(WINEBUILD_TARGET)\n",
- backend->GetFullName ( *stub_file ).c_str (),
- backend->GetFullName ( *sourceFile ).c_str () );
- fprintf ( fMakefile, "\t$(ECHO_WINEBLD)\n" );
- fprintf ( fMakefile,
- "\t%s -o %s --pedll %s\n",
- "$(Q)$(WINEBUILD_TARGET)",
- backend->GetFullName ( *stub_file ).c_str (),
- backend->GetFullName ( *sourceFile ).c_str () );
-
- delete stub_file;
-}
-
-void
-MingwModuleHandler::GenerateWmcCommands (
- const FileLocation* sourceFile )
-{
- string dependencies = backend->GetFullName ( *sourceFile );
- dependencies += " " + NormalizeFilename ( module.xmlbuildFile );
-
- string basename = GetBasename ( sourceFile->name );
- FileLocation rc_file ( IntermediateDirectory,
- sourceFile->relative_path,
- basename + ".rc" );
- FileLocation h_file ( IntermediateDirectory,
- "include/reactos",
- basename + ".h" );
- CLEAN_FILE ( rc_file );
- CLEAN_FILE ( h_file );
-
- fprintf ( fMakefile,
- "%s %s: $(WMC_TARGET) %s\n",
- backend->GetFullName ( rc_file ).c_str (),
- backend->GetFullName ( h_file ).c_str (),
- backend->GetFullName ( *sourceFile ).c_str () );
- fprintf ( fMakefile, "\t$(ECHO_WMC)\n" );
- fprintf ( fMakefile,
- "\t%s -i -H %s -o %s %s\n",
- "$(Q)$(WMC_TARGET)",
- backend->GetFullName ( h_file ).c_str (),
- backend->GetFullName ( rc_file ).c_str (),
- backend->GetFullName ( *sourceFile ).c_str () );
-}
-
-string
+const std::string&
MingwModuleHandler::GetWidlFlags ( const CompilationUnit& compilationUnit )
{
return compilationUnit.GetSwitches ();
@@ -1722,9 +1592,43 @@
{
const FileLocation& sourceFile = compilationUnit.GetFilename ();
string extension = GetExtension ( sourceFile );
+ std::transform ( extension.begin (), extension.end (), extension.begin (), tolower );
+
+ struct
+ {
+ HostType host;
+ ModuleType type;
+ string extension;
+ Rule* rule;
+ } rules[] = {
+ { HostDontCare, TypeDontCare, ".s", &gasRule },
+ { HostDontCare, BootSector, ".asm", &bootRule },
+ { HostDontCare, TypeDontCare, ".asm", &nasmRule },
+ { HostDontCare, TypeDontCare, ".rc", &windresRule },
+ { HostDontCare, TypeDontCare, ".mc", &wmcRule },
+ { HostDontCare, TypeDontCare, ".spec", &winebuildRule },
+ };
+ size_t i;
+ Rule *customRule = NULL;
+
+ for ( i = 0; i < sizeof ( rules ) / sizeof ( rules[0] ); i++ )
+ {
+ if ( rules[i].host != HostDontCare && rules[i].host != module.host )
+ continue;
+ if ( rules[i].type != TypeDontCare && rules[i].type != module.type )
+ continue;
+ if ( rules[i].extension != extension )
+ continue;
+ customRule = rules[i].rule;
+ break;
+ }
+
+ if ( customRule )
+ customRule->Execute ( fMakefile, backend, module, &sourceFile, clean_files );
+
string flags = cflagsMacro;
flags += " ";
- if ( extension == ".c" || extension == ".C" )
+ if ( extension == ".c" )
{
flags += GenerateCompilerParametersFromVector ( module.non_if_data.compilerFlags ,
CompilerTypeCC );
GenerateGccCommand ( &sourceFile,
@@ -1732,9 +1636,9 @@
cc,
flags );
}
- else if ( extension == ".cc" || extension == ".CC" ||
- extension == ".cpp" || extension == ".CPP" ||
- extension == ".cxx" || extension == ".CXX" )
+ else if ( extension == ".cc" ||
+ extension == ".cpp" ||
+ extension == ".cxx" )
{
flags += GenerateCompilerParametersFromVector ( module.non_if_data.compilerFlags ,
CompilerTypeCPP );
GenerateGccCommand ( &sourceFile,
@@ -1742,35 +1646,14 @@
cppc,
flags );
}
- else if ( extension == ".s" || extension == ".S" )
- {
- GenerateGccAssemblerCommand ( &sourceFile,
- cc,
- cflagsMacro );
- }
- else if ( extension == ".asm" || extension == ".ASM" )
- {
- GenerateNasmCommand ( &sourceFile,
- nasmflagsMacro );
- }
- else if ( extension == ".rc" || extension == ".RC" )
- {
- GenerateWindresCommand ( &sourceFile,
- windresflagsMacro );
- }
- else if ( extension == ".mc" || extension == ".MC" )
- {
- GenerateWmcCommands ( &sourceFile );
- }
- else if ( extension == ".spec" || extension == ".SPEC" )
- {
- GenerateWinebuildCommands ( &sourceFile );
+ else if ( extension == ".spec" )
+ {
GenerateGccCommand ( &sourceFile,
extraDependencies,
cc,
cflagsMacro );
}
- else if ( extension == ".idl" || extension == ".IDL" )
+ else if ( extension == ".idl" )
{
GenerateWidlCommands ( compilationUnit,
widlflagsMacro );
@@ -1782,7 +1665,7 @@
cflagsMacro );
}
}
- else
+ else if ( !customRule )
{
throw InvalidOperationException ( __FILE__,
__LINE__,
Modified: trunk/reactos/tools/rbuild/backend/mingw/modulehandler.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/backend/mingw…
==============================================================================
--- trunk/reactos/tools/rbuild/backend/mingw/modulehandler.h (original)
+++ trunk/reactos/tools/rbuild/backend/mingw/modulehandler.h Fri Feb 8 22:10:19 2008
@@ -155,16 +155,7 @@
const std::string& extraDependencies,
const std::string& cc,
const std::string& cflagsMacro );
- void GenerateGccAssemblerCommand ( const FileLocation* sourceFile,
- const std::string& cc,
- const std::string& cflagsMacro );
- void GenerateNasmCommand ( const FileLocation* sourceFile,
- const std::string& nasmflagsMacro );
- void GenerateWindresCommand ( const FileLocation* sourceFile,
- const std::string& windresflagsMacro );
- void GenerateWinebuildCommands ( const FileLocation* sourceFile );
- void GenerateWmcCommands ( const FileLocation* sourceFile);
- std::string GetWidlFlags ( const CompilationUnit& compilationUnit );
+ const std::string& GetWidlFlags ( const CompilationUnit& compilationUnit );
void GenerateWidlCommandsServer (
const CompilationUnit& compilationUnit,
const std::string& widlflagsMacro );
Added: trunk/reactos/tools/rbuild/backend/mingw/rule.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/backend/mingw…
==============================================================================
--- trunk/reactos/tools/rbuild/backend/mingw/rule.cpp (added)
+++ trunk/reactos/tools/rbuild/backend/mingw/rule.cpp Fri Feb 8 22:10:19 2008
@@ -1,0 +1,117 @@
+/*
+ * Copyright (C) 2008 Hervé Poussineau
+ *
+ * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "../../rbuild.h"
+#include "modulehandler.h"
+#include "rule.h"
+
+using std::string;
+
+static void
+ReplaceVariable( string& str,
+ const string& name,
+ const string& value )
+{
+ size_t i = str.find ( name );
+ while ( i != string::npos )
+ {
+ str.replace ( i, name.length (), value );
+ i = str.find ( name );
+ }
+}
+
+static std::string
+FixString ( const string& str, Backend *backend, const Module& module, const
FileLocation *source )
+{
+ string ret = str;
+
+ if ( source )
+ {
+ ReplaceVariable ( ret, "$(source_noext)", ReplaceExtension (
backend->GetFullName ( *source ), "" ) );
+ ReplaceVariable ( ret, "$(source)", backend->GetFullName ( *source ) );
+ ReplaceVariable ( ret, "$(source_dir)", source->relative_path );
+ ReplaceVariable ( ret, "$(source_name)", source->name );
+ ReplaceVariable ( ret, "$(source_name_noext)", ReplaceExtension (
source->name , "" ) );
+ ReplaceVariable ( ret, "$(source_path)", backend->GetFullPath ( *source )
);
+ }
+ ReplaceVariable ( ret, "$(module_name)", module.name );
+ ReplaceVariable ( ret, "$(module_rbuild)", module.xmlbuildFile );
+ ReplaceVariable ( ret, "$(module_output)", GetTargetMacro ( module, true ) );
+ ReplaceVariable ( ret, "$(SEP)", sSep );
+
+ return ret;
+}
+
+Rule::Rule( const std::string& command, const char *generatedFile1, ... )
+ : command ( command )
+{
+ va_list ap;
+ const char *s;
+
+ s = generatedFile1;
+ va_start ( ap, generatedFile1 );
+ while ( s )
+ {
+ generatedFiles.push_back ( s );
+ s = va_arg ( ap, const char* );
+ }
+ va_end ( ap );
+}
+
+
+void Rule::Execute ( FILE *outputFile,
+ MingwBackend *backend,
+ const Module& module,
+ const FileLocation *source,
+ string_list& clean_files )
+{
+ string cmd = FixString ( command, backend, module, source );
+
+ fprintf ( outputFile, "%s", cmd.c_str () );
+
+ for ( size_t i = 0; i < generatedFiles.size (); i++ )
+ {
+ string file = FixString ( generatedFiles[i], backend, module, source );
+ if ( file[file.length () - 1] != cSep )
+ {
+ clean_files.push_back ( file );
+ continue;
+ }
+
+ if ( file[0] != '$' )
+ throw InvalidOperationException ( __FILE__,
+ __LINE__,
+ "Invalid directory %s.",
+ file.c_str () );
+
+ size_t pos = file.find_first_of ( cSep );
+ string relative_path = file.substr ( pos + 1, file.length () - pos - 2 );
+ string dir = file.substr ( 0, pos );
+ if ( dir == "$(INTERMEDIATE)" )
+ backend->AddDirectoryTarget ( relative_path, backend->intermediateDirectory );
+ else if ( dir == "$(OUTPUT)" )
+ backend->AddDirectoryTarget ( relative_path, backend->outputDirectory );
+ else if ( dir == "$(INSTALL)" )
+ backend->AddDirectoryTarget ( relative_path, backend->installDirectory );
+ else
+ throw InvalidOperationException ( __FILE__,
+ __LINE__,
+ "Invalid directory %s.",
+ dir.c_str () );
+ }
+}
Propchange: trunk/reactos/tools/rbuild/backend/mingw/rule.cpp
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/reactos/tools/rbuild/backend/mingw/rule.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild/backend/mingw…
==============================================================================
--- trunk/reactos/tools/rbuild/backend/mingw/rule.h (added)
+++ trunk/reactos/tools/rbuild/backend/mingw/rule.h Fri Feb 8 22:10:19 2008
@@ -1,0 +1,38 @@
+/*
+ * Copyright (C) 2008 Hervé Poussineau
+ *
+ * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef MINGW_RULE_H
+#define MINGW_RULE_H
+
+#include "mingw.h"
+
+class Rule
+{
+public:
+ Rule ( const std::string& command, const char *generatedFile1, ... );
+ void Execute ( FILE *outputFile,
+ MingwBackend *backend,
+ const Module& module,
+ const FileLocation *source,
+ string_list& clean_files );
+private:
+ const std::string command;
+ string_list generatedFiles;
+};
+
+#endif
Propchange: trunk/reactos/tools/rbuild/backend/mingw/rule.h
------------------------------------------------------------------------------
svn:eol-style = native
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 (original)
+++ trunk/reactos/tools/rbuild/rbuild.mak Fri Feb 8 22:10:19 2008
@@ -200,6 +200,7 @@
mingw.cpp \
modulehandler.cpp \
proxymakefile.cpp \
+ rule.cpp \
)
RBUILD_BACKEND_DEVCPP_BASE_SOURCES = $(addprefix $(RBUILD_DEVCPP_BASE_), \
@@ -239,7 +240,7 @@
$(RBUILD_BACKEND_MSBUILD_BASE_SOURCES) \
$(RBUILD_BACKEND_BASE_)backend.cpp
-RBUILD_COMMON_SOURCES = \
+RBUILD_SOURCES = \
$(RBUILD_BACKEND_SOURCES) \
$(addprefix $(RBUILD_BASE_), \
global.cpp \
@@ -261,28 +262,18 @@
linkerscript.cpp \
module.cpp \
project.cpp \
+ rbuild.cpp \
stubbedcomponent.cpp \
syssetupgenerator.cpp \
testsupportcode.cpp \
xmlnode.cpp \
)
-RBUILD_SPECIAL_SOURCES = \
- $(RBUILD_BASE_)rbuild.cpp
-
-RBUILD_SOURCES = \
- $(RBUILD_COMMON_SOURCES) \
- $(RBUILD_SPECIAL_SOURCES)
-
-RBUILD_COMMON_OBJECTS = \
- $(addprefix $(INTERMEDIATE_), $(RBUILD_COMMON_SOURCES:.cpp=.o))
-
RBUILD_SPECIAL_OBJECTS = \
$(addprefix $(INTERMEDIATE_), $(RBUILD_SPECIAL_SOURCES:.cpp=.o))
RBUILD_OBJECTS = \
- $(RBUILD_COMMON_OBJECTS) \
- $(RBUILD_SPECIAL_OBJECTS)
+ $(addprefix $(INTERMEDIATE_), $(RBUILD_SOURCES:.cpp=.o))
RBUILD_BACKEND_DEVCPP_HEADERS = \
devcpp.h
@@ -304,7 +295,8 @@
RBUILD_BACKEND_MINGW_HEADERS = \
mingw.h \
- modulehandler.h
+ modulehandler.h \
+ rule.h
RBUILD_BACKEND_HEADERS = \
backend.h \
@@ -447,6 +439,10 @@
$(ECHO_CC)
${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@
+$(RBUILD_INT_)rule.o: $(RBUILD_BASE_)rule.cpp $(RBUILD_HEADERS) | $(RBUILD_INT)
+ $(ECHO_CC)
+ ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@
+
$(RBUILD_INT_)stubbedcomponent.o: $(RBUILD_BASE_)stubbedcomponent.cpp $(RBUILD_HEADERS) |
$(RBUILD_INT)
$(ECHO_CC)
${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@
@@ -480,6 +476,10 @@
${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@
$(RBUILD_MINGW_INT_)proxymakefile.o: $(RBUILD_MINGW_BASE_)proxymakefile.cpp
$(RBUILD_HEADERS) | $(RBUILD_MINGW_INT)
+ $(ECHO_CC)
+ ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@
+
+$(RBUILD_MINGW_INT_)rule.o: $(RBUILD_MINGW_BASE_)rule.cpp $(RBUILD_HEADERS) |
$(RBUILD_MINGW_INT)
$(ECHO_CC)
${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@