- Added 'MessageHeader' module type for handling .mc files

- turn .mc generated files (RC & Headers) into real dependencies

svn path=/trunk/; revision=33616
This commit is contained in:
Marc Piulachs 2008-05-20 19:46:14 +00:00
parent 3c976797cd
commit c912e98ba3
14 changed files with 1713 additions and 1652 deletions

View file

@ -28,6 +28,7 @@
<include>include/ndk</include> <include>include/ndk</include>
<include>include/reactos</include> <include>include/reactos</include>
<include root="intermediate">include/reactos</include> <include root="intermediate">include/reactos</include>
<include root="intermediate">include/reactos/mc</include>
<include>include/reactos/libs</include> <include>include/reactos/libs</include>
<directory name="base"> <directory name="base">

View file

@ -1,57 +1,56 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<!DOCTYPE module SYSTEM "../../tools/rbuild/project.dtd"> <!DOCTYPE module SYSTEM "../../tools/rbuild/project.dtd">
<module name="ntdll" type="win32dll" entrypoint="0" baseaddress="${BASEADDRESS_NTDLL}" installbase="system32" installname="ntdll.dll"> <group>
<bootstrap installbase="$(CDOUTPUT)/system32" /> <module name="ntdll" type="win32dll" entrypoint="0" baseaddress="${BASEADDRESS_NTDLL}" installbase="system32" installname="ntdll.dll">
<importlibrary definition="def/ntdll.def" /> <bootstrap installbase="$(CDOUTPUT)/system32" />
<include base="ntdll">inc</include> <importlibrary definition="def/ntdll.def" />
<include base="ntdll" root="intermediate">def</include> <include base="ntdll">inc</include>
<include base="ReactOS">include/reactos/subsys</include> <include base="ntdll" root="intermediate">def</include>
<define name="__NTDLL__" /> <include base="ReactOS">include/reactos/subsys</include>
<define name="_DISABLE_TIDENTS" /> <define name="__NTDLL__" />
<define name="_WIN32_WINNT">0x0502</define> <define name="_DISABLE_TIDENTS" />
<define name="_NTOSKRNL_" /> <define name="_WIN32_WINNT">0x0502</define>
<define name="__NO_CTYPE_INLINES" /> <define name="_NTOSKRNL_" />
<library>rtl</library> <define name="__NO_CTYPE_INLINES" />
<library>ntdllsys</library> <library>rtl</library>
<library>libcntpr</library> <library>ntdllsys</library>
<library>pseh</library> <library>libcntpr</library>
<linkerflag>-lgcc</linkerflag> <library>pseh</library>
<linkerflag>-nostdlib</linkerflag> <linkerflag>-lgcc</linkerflag>
<linkerflag>-nostartfiles</linkerflag> <linkerflag>-nostdlib</linkerflag>
<directory name="csr"> <linkerflag>-nostartfiles</linkerflag>
<file>api.c</file> <dependency>ntstatus</dependency>
<file>capture.c</file> <directory name="csr">
<file>connect.c</file> <file>api.c</file>
</directory> <file>capture.c</file>
<directory name="dbg"> <file>connect.c</file>
<file>dbgui.c</file> </directory>
</directory> <directory name="dbg">
<directory name="ldr"> <file>dbgui.c</file>
<file>startup.c</file> </directory>
<file>utils.c</file> <directory name="ldr">
</directory> <file>startup.c</file>
<directory name="main"> <file>utils.c</file>
<if property="ARCH" value="i386"> </directory>
<directory name="i386"> <directory name="main">
<file>dispatch.S</file> <if property="ARCH" value="i386">
</directory> <directory name="i386">
</if> <file>dispatch.S</file>
<ifnot property="ARCH" value="i386"> </directory>
<file>dispatch.c</file> </if>
</ifnot> <ifnot property="ARCH" value="i386">
</directory> <file>dispatch.c</file>
<directory name="rtl"> </ifnot>
<file>libsupp.c</file> </directory>
<file>version.c</file> <directory name="rtl">
</directory> <file>libsupp.c</file>
<directory name="def"> <file>version.c</file>
<file>ntdll.rc</file> </directory>
</directory> <directory name="def">
<directory name="inc"> <file>ntdll.rc</file>
<pch>ntdll.h</pch> </directory>
</directory> <directory name="inc">
<pch>ntdll.h</pch>
<directory name="def"> </directory>
<file>ntstatus.mc</file> </module>
</directory> </group>
</module>

View file

@ -1,138 +1,138 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<!DOCTYPE group SYSTEM "../../../tools/rbuild/project.dtd"> <!DOCTYPE group SYSTEM "../../../tools/rbuild/project.dtd">
<group> <group>
<module name="kernel32_base" type="objectlibrary" allowwarnings="true"> <module name="kernel32_base" type="objectlibrary" allowwarnings="true">
<include base="kernel32_base">.</include> <include base="kernel32_base">.</include>
<include base="kernel32_base">include</include> <include base="kernel32_base">include</include>
<include base="ReactOS">include/reactos/subsys</include> <include base="ReactOS">include/reactos/subsys</include>
<define name="_DISABLE_TIDENTS" /> <define name="_DISABLE_TIDENTS" />
<define name="_WIN32_WINNT">0x0600</define> <define name="_WIN32_WINNT">0x0600</define>
<define name="__NO_CTYPE_INLINES" /> <define name="__NO_CTYPE_INLINES" />
<define name="WINVER">0x609</define> <define name="WINVER">0x609</define>
<pch>k32.h</pch> <dependency>errcodes</dependency>
<directory name="debug"> <pch>k32.h</pch>
<file>debugger.c</file> <directory name="debug">
<file>output.c</file> <file>debugger.c</file>
</directory> <file>output.c</file>
<directory name="except"> </directory>
<file>except.c</file> <directory name="except">
</directory> <file>except.c</file>
<directory name="file"> </directory>
<file>backup.c</file> <directory name="file">
<file>bintype.c</file> <file>backup.c</file>
<file>cnotify.c</file> <file>bintype.c</file>
<file>copy.c</file> <file>cnotify.c</file>
<file>create.c</file> <file>copy.c</file>
<file>curdir.c</file> <file>create.c</file>
<file>delete.c</file> <file>curdir.c</file>
<file>deviceio.c</file> <file>delete.c</file>
<file>dir.c</file> <file>deviceio.c</file>
<file>dosdev.c</file> <file>dir.c</file>
<file>file.c</file> <file>dosdev.c</file>
<file>find.c</file> <file>file.c</file>
<file>hardlink.c</file> <file>find.c</file>
<file>iocompl.c</file> <file>hardlink.c</file>
<file>lfile.c</file> <file>iocompl.c</file>
<file>lock.c</file> <file>lfile.c</file>
<file>mailslot.c</file> <file>lock.c</file>
<file>move.c</file> <file>mailslot.c</file>
<file>npipe.c</file> <file>move.c</file>
<file>pipe.c</file> <file>npipe.c</file>
<file>rw.c</file> <file>pipe.c</file>
<file>tape.c</file> <file>rw.c</file>
<file>volume.c</file> <file>tape.c</file>
</directory> <file>volume.c</file>
<directory name="mem"> </directory>
<file>global.c</file> <directory name="mem">
<file>heap.c</file> <file>global.c</file>
<file>isbad.c</file> <file>heap.c</file>
<file>local.c</file> <file>isbad.c</file>
<file>procmem.c</file> <file>local.c</file>
<file>resnotify.c</file> <file>procmem.c</file>
<file>section.c</file> <file>resnotify.c</file>
<file>virtual.c</file> <file>section.c</file>
</directory> <file>virtual.c</file>
<directory name="misc"> </directory>
<file>actctx.c</file> <directory name="misc">
<file>atom.c</file> <file>actctx.c</file>
<file>chartype.c</file> <file>atom.c</file>
<file>comm.c</file> <file>chartype.c</file>
<file>computername.c</file> <file>comm.c</file>
<file>console.c</file> <file>computername.c</file>
<file>dllmain.c</file> <file>console.c</file>
<file>env.c</file> <file>dllmain.c</file>
<file>error.c</file> <file>env.c</file>
<file>errormsg.c</file> <file>error.c</file>
<file>handle.c</file> <file>errormsg.c</file>
<file>lang.c</file> <file>handle.c</file>
<file>ldr.c</file> <file>lang.c</file>
<file>lzexpand_main.c</file> <file>ldr.c</file>
<file>muldiv.c</file> <file>lzexpand_main.c</file>
<file>nls.c</file> <file>muldiv.c</file>
<file>perfcnt.c</file> <file>nls.c</file>
<file>recovery.c</file> <file>perfcnt.c</file>
<file>res.c</file> <file>recovery.c</file>
<file>stubs.c</file> <file>res.c</file>
<file>sysinfo.c</file> <file>stubs.c</file>
<file>time.c</file> <file>sysinfo.c</file>
<file>timerqueue.c</file> <file>time.c</file>
<file>toolhelp.c</file> <file>timerqueue.c</file>
<file>version.c</file> <file>toolhelp.c</file>
</directory> <file>version.c</file>
<directory name="process"> </directory>
<file>cmdline.c</file> <directory name="process">
<file>procsup.c</file> <file>cmdline.c</file>
<file>job.c</file> <file>procsup.c</file>
<file>proc.c</file> <file>job.c</file>
<file>session.c</file> <file>proc.c</file>
</directory> <file>session.c</file>
<directory name="string"> </directory>
<file>lstring.c</file> <directory name="string">
</directory> <file>lstring.c</file>
<directory name="synch"> </directory>
<file>condvar.c</file> <directory name="synch">
<file>critical.c</file> <file>condvar.c</file>
<file>event.c</file> <file>critical.c</file>
<file>mutex.c</file> <file>event.c</file>
<file>sem.c</file> <file>mutex.c</file>
<file>timer.c</file> <file>sem.c</file>
<file>wait.c</file> <file>timer.c</file>
</directory> <file>wait.c</file>
<directory name="thread"> </directory>
<file>fiber.c</file> <directory name="thread">
<file>fls.c</file> <file>fiber.c</file>
<file>thread.c</file> <file>fls.c</file>
<file>tls.c</file> <file>thread.c</file>
</directory> <file>tls.c</file>
<directory name="misc"> </directory>
<file>lcformat.c</file> <directory name="misc">
<file>profile.c</file> <file>lcformat.c</file>
<file>utils.c</file> <file>profile.c</file>
</directory> <file>utils.c</file>
<directory name="thread"> </directory>
<if property="ARCH" value="i386"> <directory name="thread">
<directory name="i386"> <if property="ARCH" value="i386">
<file>fiber.S</file> <directory name="i386">
<file>thread.S</file> <file>fiber.S</file>
</directory> <file>thread.S</file>
</if> </directory>
</directory> </if>
<file>errcodes.mc</file> </directory>
</module> </module>
<module name="kernel32" type="win32dll" baseaddress="${BASEADDRESS_KERNEL32}" installbase="system32" installname="kernel32.dll"> <module name="kernel32" type="win32dll" baseaddress="${BASEADDRESS_KERNEL32}" installbase="system32" installname="kernel32.dll">
<importlibrary definition="kernel32.def" /> <importlibrary definition="kernel32.def" />
<include base="kernel32">.</include> <include base="kernel32">.</include>
<include base="kernel32" root="intermediate">.</include> <include base="kernel32" root="intermediate">.</include>
<include base="kernel32">include</include> <include base="kernel32">include</include>
<define name="_DISABLE_TIDENTS" /> <define name="_DISABLE_TIDENTS" />
<define name="WINVER">0x0500</define> <define name="WINVER">0x0500</define>
<library>kernel32_base</library> <library>kernel32_base</library>
<library>wine</library> <library>wine</library>
<library>pseh</library> <library>pseh</library>
<library>ntdll</library> <library>ntdll</library>
<linkerflag>-lgcc</linkerflag> <linkerflag>-lgcc</linkerflag>
<linkerflag>-nostartfiles</linkerflag> <linkerflag>-nostartfiles</linkerflag>
<linkerflag>-nostdlib</linkerflag> <linkerflag>-nostdlib</linkerflag>
<file>kernel32.rc</file> <file>kernel32.rc</file>
</module> </module>
</group> </group>

View file

@ -0,0 +1,15 @@
<?xml version="1.0"?>
<!DOCTYPE module SYSTEM "../../tools/rbuild/project.dtd">
<group>
<module name="ntstatus" type="messageheader">
<file>ntstatus.mc</file>
</module>
<module name="bugcodes" type="messageheader">
<file>bugcodes.mc</file>
</module>
<module name="errcodes" type="messageheader">
<file>errcodes.mc</file>
</module>
</group>

View file

@ -4,6 +4,9 @@
<directory name="idl"> <directory name="idl">
<xi:include href="idl/idl.rbuild" /> <xi:include href="idl/idl.rbuild" />
</directory> </directory>
<directory name="mc">
<xi:include href="mc/mc.rbuild" />
</directory>
<directory name="wine"> <directory name="wine">
<xi:include href="wine/wineheaders.rbuild" /> <xi:include href="wine/wineheaders.rbuild" />
</directory> </directory>

View file

@ -32,6 +32,7 @@
<library>kdcom</library> <library>kdcom</library>
<library>bootvid</library> <library>bootvid</library>
<library>wdmguid</library> <library>wdmguid</library>
<dependency>bugcodes</dependency>
<directory name="include"> <directory name="include">
<pch>ntoskrnl.h</pch> <pch>ntoskrnl.h</pch>
</directory> </directory>
@ -440,7 +441,6 @@
<directory name="wmi"> <directory name="wmi">
<file>wmi.c</file> <file>wmi.c</file>
</directory> </directory>
<file>bugcodes.mc</file>
<file>ntoskrnl.rc</file> <file>ntoskrnl.rc</file>
<linkerflag>-nostartfiles</linkerflag> <linkerflag>-nostartfiles</linkerflag>
<linkerflag>-nostdlib</linkerflag> <linkerflag>-nostdlib</linkerflag>

View file

@ -242,6 +242,9 @@ MingwModuleHandler::InstanciateHandler (
case Alias: case Alias:
handler = new MingwAliasModuleHandler ( module ); handler = new MingwAliasModuleHandler ( module );
break; break;
case MessageHeader:
handler = new MingwMessageHeaderModuleHandler (module);
break;
case IdlHeader: case IdlHeader:
handler = new MingwIdlHeaderModuleHandler ( module ); handler = new MingwIdlHeaderModuleHandler ( module );
break; break;
@ -395,6 +398,8 @@ MingwModuleHandler::ReferenceObjects (
return true; return true;
if ( module.type == IdlHeader ) if ( module.type == IdlHeader )
return true; return true;
if ( module.type == MessageHeader)
return true;
return false; return false;
} }
@ -2309,22 +2314,31 @@ MingwModuleHandler::GetDefaultDependencies (
dependencies.push_back ( "$(DXSDK_TARGET) $(dxsdk_HEADERS)" ); dependencies.push_back ( "$(DXSDK_TARGET) $(dxsdk_HEADERS)" );
} }
/* Check if any dependent library relies on the generated headers */ if (module.name != "errcodes" &&
for ( size_t i = 0; i < module.project.modules.size (); i++ ) module.name != "bugcodes" &&
module.name != "ntstatus")
{ {
const Module& m = *module.project.modules[i]; dependencies.push_back ( "$(ERRCODES_TARGET) $(ERRCODES_MCHEADERS)" );
for ( size_t j = 0; j < m.non_if_data.compilationUnits.size (); j++ ) dependencies.push_back ( "$(BUGCODES_TARGET) $(BUGCODES_MCHEADERS)" );
{ dependencies.push_back ( "$(NTSTATUS_TARGET) $(NTSTATUS_MCHEADERS)" );
CompilationUnit& compilationUnit = *m.non_if_data.compilationUnits[j];
const FileLocation& sourceFile = compilationUnit.GetFilename ();
string extension = GetExtension ( sourceFile );
if (extension == ".mc" || extension == ".MC" )
{
string dependency = ssprintf ( "$(%s_MCHEADERS)", m.name.c_str () );
dependencies.push_back ( dependency );
}
}
} }
///* Check if any dependent library relies on the generated headers */
//for ( size_t i = 0; i < module.project.modules.size (); i++ )
//{
// const Module& m = *module.project.modules[i];
// for ( size_t j = 0; j < m.non_if_data.compilationUnits.size (); j++ )
// {
// CompilationUnit& compilationUnit = *m.non_if_data.compilationUnits[j];
// const FileLocation& sourceFile = compilationUnit.GetFilename ();
// string extension = GetExtension ( sourceFile );
// if (extension == ".mc" || extension == ".MC" )
// {
// string dependency = ssprintf ( "$(%s_MCHEADERS)", m.name.c_str () );
// dependencies.push_back ( dependency );
// }
// }
//}
} }
void void
@ -3827,6 +3841,19 @@ MingwAliasModuleHandler::Process ()
{ {
} }
MingwMessageHeaderModuleHandler::MingwMessageHeaderModuleHandler (
const Module& module_ )
: MingwModuleHandler ( module_ )
{
}
void
MingwMessageHeaderModuleHandler::Process ()
{
GenerateRules ();
}
MingwIdlHeaderModuleHandler::MingwIdlHeaderModuleHandler ( MingwIdlHeaderModuleHandler::MingwIdlHeaderModuleHandler (
const Module& module_ ) const Module& module_ )

View file

@ -469,6 +469,13 @@ public:
virtual void Process (); virtual void Process ();
}; };
class MingwMessageHeaderModuleHandler : public MingwModuleHandler
{
public:
MingwMessageHeaderModuleHandler ( const Module& module );
virtual HostType DefaultHost() { return HostFalse; }
virtual void Process ();
};
class MingwAliasModuleHandler : public MingwModuleHandler class MingwAliasModuleHandler : public MingwModuleHandler
{ {

View file

@ -71,6 +71,7 @@ Bootstrap::IsSupportedModuleType ( ModuleType type )
case RpcProxy: case RpcProxy:
case Alias: case Alias:
case IdlHeader: case IdlHeader:
case MessageHeader:
case EmbeddedTypeLib: case EmbeddedTypeLib:
case ElfExecutable: case ElfExecutable:
return false; return false;

View file

@ -1003,6 +1003,8 @@ Module::GetModuleType ( const string& location, const XMLAttribute& attribute )
return ElfExecutable; return ElfExecutable;
if ( attribute.value == "cabinet" ) if ( attribute.value == "cabinet" )
return Cabinet; return Cabinet;
if ( attribute.value == "messageheader" )
return MessageHeader;
throw InvalidAttributeValueException ( location, throw InvalidAttributeValueException ( location,
attribute.name, attribute.name,
attribute.value ); attribute.value );
@ -1045,6 +1047,7 @@ Module::GetTargetDirectoryTree () const
case RpcProxy: case RpcProxy:
case Alias: case Alias:
case IdlHeader: case IdlHeader:
case MessageHeader:
return IntermediateDirectory; return IntermediateDirectory;
case TypeDontCare: case TypeDontCare:
break; break;
@ -1104,6 +1107,7 @@ Module::GetDefaultModuleExtension () const
case Alias: case Alias:
case ElfExecutable: case ElfExecutable:
case IdlHeader: case IdlHeader:
case MessageHeader:
return ""; return "";
case EmbeddedTypeLib: case EmbeddedTypeLib:
return ".tlb"; return ".tlb";
@ -1160,6 +1164,7 @@ Module::GetDefaultModuleEntrypoint () const
case Alias: case Alias:
case BootProgram: case BootProgram:
case IdlHeader: case IdlHeader:
case MessageHeader:
case ElfExecutable: case ElfExecutable:
case EmbeddedTypeLib: case EmbeddedTypeLib:
case Cabinet: case Cabinet:
@ -1211,6 +1216,7 @@ Module::GetDefaultModuleBaseaddress () const
case Alias: case Alias:
case BootProgram: case BootProgram:
case IdlHeader: case IdlHeader:
case MessageHeader:
case EmbeddedTypeLib: case EmbeddedTypeLib:
case Cabinet: case Cabinet:
return ""; return "";
@ -1261,6 +1267,7 @@ Module::IsDLL () const
case RpcProxy: case RpcProxy:
case Alias: case Alias:
case IdlHeader: case IdlHeader:
case MessageHeader:
case EmbeddedTypeLib: case EmbeddedTypeLib:
case ElfExecutable: case ElfExecutable:
case Cabinet: case Cabinet:

View file

@ -305,7 +305,8 @@ enum ModuleType
HostStaticLibrary, HostStaticLibrary,
TypeDontCare, TypeDontCare,
Cabinet, Cabinet,
KeyboardLayout KeyboardLayout,
MessageHeader
}; };
enum HostType enum HostType