Hopefully, the definitive spec files commit. Dedicated to Samuel Serapión, who reported issues with my previous commits.

modified   tools/rbuild/backend/mingw/modulehandler.cpp
   Specifying .spec/.pspec files twice (<importlibrary> and <file>) didn't really make sense (stubs are unusable without the .def and viceversa), so they can now be only specified in <importlibrary>. I'd rather drop <importlibrary> completely and specify .def/.spec/.pspec as <file>s, but it's too hard so it'll have to wait. At least we got rid of one invocation of the preprocessor for .pspec files
   Simplified and improved rules to generate spec and stub files from .pspec
   Did you know we set the wrong DLL name in autogenerated .def files? Always pass the right name to winebuild with --filename, just to be sure
   Fully support compiling .pspec/.spec files from the intermediate directory
   Import libraries don't actually depend on stub/thunk files

modified   tools/rbuild/backend/mingw/modulehandler.h
   Removed some dead code

modified   tools/rbuild/backend/mingw/rule.cpp
modified   tools/rbuild/module.cpp
modified   tools/rbuild/rbuild.h
   Allow <importlibrary dllname="..." ...> in all module types. Why? Why not?

modified   Makefile
   Added ECHO_CPP to echo invocations of the C preprocessor

Everything else: removed all <file> entries for .spec/.pspec files. It was just maintenance overhead

svn path=/trunk/; revision=37270
This commit is contained in:
KJK::Hyperion 2008-11-10 02:31:24 +00:00
parent f05d09c4b3
commit 8b822b8a26
86 changed files with 64 additions and 133 deletions

View file

@ -214,6 +214,7 @@ ifeq ($(HALFVERBOSEECHO),yes)
ECHO_BUILDNO =@echo $(QUOTE)[BUILDNO] $@$(QUOTE)
ECHO_INVOKE =@echo $(QUOTE)[INVOKE] $<$(QUOTE)
ECHO_PCH =@echo $(QUOTE)[PCH] $@$(QUOTE)
ECHO_CPP =@echo $(QUOTE)[CPP] $@$(QUOTE)
ECHO_CC =@echo $(QUOTE)[CC] $<$(QUOTE)
ECHO_CL =@echo $(QUOTE)[CL] $<$(QUOTE)
ECHO_GAS =@echo $(QUOTE)[GAS] $<$(QUOTE)
@ -246,6 +247,7 @@ else
ECHO_BUILDNO =
ECHO_INVOKE =
ECHO_PCH =
ECHO_CPP =
ECHO_CC =
ECHO_GAS =
ECHO_NASM =

View file

@ -9,6 +9,5 @@
<library>ntdll</library>
<file>msdmo.c</file>
<file>msdmo.rc</file>
<file>msdmo.spec</file>
</module>
</group>

View file

@ -47,6 +47,5 @@
<file>control.c</file>
<file>avisplit.c</file>
<file>version.rc</file>
<file>quartz.spec</file>
</module>
</group>

View file

@ -35,5 +35,4 @@
<file>volume.c</file>
<file>volumetexture.c</file>
<file>version.rc</file>
<file>d3d9.spec</file>
</module>

View file

@ -13,7 +13,6 @@
<file>registrar.c</file>
<file>rsrc.rc</file>
<include base="atl" root="intermediate">.</include>
<file>atl.spec</file>
<library>wine</library>
<library>uuid</library>
<library>ole32</library>

View file

@ -21,5 +21,4 @@
<file>browseui_main.c</file>
<file>regsvr.c</file>
<file>version.rc</file>
<file>browseui.spec</file>
</module>

View file

@ -10,7 +10,6 @@
<file>fci.c</file>
<file>fdi.c</file>
<file>cabinet.rc</file>
<file>cabinet.spec</file>
<library>wine</library>
<library>kernel32</library>
<library>ntdll</library>

View file

@ -9,5 +9,4 @@
<library>kernel32</library>
<library>ntdll</library>
<file>clusapi.c</file>
<file>clusapi.spec</file>
</module>

View file

@ -43,7 +43,6 @@
<file>treeview.c</file>
<file>updown.c</file>
<file>rsrc.rc</file>
<file>comctl32.spec</file>
<library>wine</library>
<library>user32</library>
<library>gdi32</library>

View file

@ -15,7 +15,6 @@
<file>fontdlg.c</file>
<file>printdlg.c</file>
<file>rsrc.rc</file>
<file>comdlg32.spec</file>
<library>wine</library>
<library>uuid</library>
<library>shell32</library>

View file

@ -10,7 +10,6 @@
<define name="_WIN32_WINNT">0x600</define>
<file>credui_main.c</file>
<file>credui.rc</file>
<file>credui.spec</file>
<library>wine</library>
<library>advapi32</library>
<library>user32</library>

View file

@ -35,5 +35,4 @@
<file>ctl.c</file>
<file>message.c</file>
<file>crypt32.rc</file>
<file>crypt32.spec</file>
</module>

View file

@ -10,5 +10,4 @@
<library>kernel32</library>
<library>ntdll</library>
<file>cryptdll.c</file>
<file>cryptdll.spec</file>
</module>

View file

@ -13,6 +13,5 @@
<library>wininet</library>
<library>ntdll</library>
<file>cryptnet_main.c</file>
<file>cryptnet.spec</file>
</module>
</group>

View file

@ -8,7 +8,6 @@
<include base="ReactOS">include/reactos/wine</include>
<define name="__WINESRC__" />
<file>main.c</file>
<file>cryptui.spec</file>
<library>wine</library>
<library>kernel32</library>
<library>ntdll</library>

View file

@ -25,7 +25,6 @@
<file>storage.c</file>
<file>symbol.c</file>
<file>type.c</file>
<file>dbghelp.spec</file>
<library>wine</library>
<library>psapi</library>
<library>kernel32</library>

View file

@ -7,7 +7,6 @@
<include base="ReactOS">include/reactos/wine</include>
<define name="__WINESRC__" />
<file>dciman_main.c</file>
<file>dciman32.spec</file>
<library>wine</library>
<library>kernel32</library>
<library>ntdll</library>

View file

@ -12,6 +12,5 @@
<file>hwpage.c</file>
<file>misc.c</file>
<file>stubs.c</file>
<file>devmgr.spec</file>
<pch>precomp.h</pch>
</module>

View file

@ -8,5 +8,4 @@
<library>iphlpapi</library>
<file>dhcpcsvc.c</file>
<file>dhcpcsvc.rc</file>
<file>dhcpcsvc.spec</file>
</module>

View file

@ -14,5 +14,4 @@
<file>assembly.c</file>
<file>fusion.c</file>
<file>fusion_main.c</file>
<file>fusion.spec</file>
</module>

View file

@ -19,7 +19,6 @@
<file>pen.c</file>
<file>region.c</file>
<file>stringformat.c</file>
<file>gdiplus.spec</file>
<library>wine</library>
<library>uuid</library>
<library>shlwapi</library>

View file

@ -11,7 +11,6 @@
<file>extserv.c</file>
<file>hlink_main.c</file>
<file>link.c</file>
<file>hlink.spec</file>
<library>wine</library>
<library>shell32</library>
<library>ole32</library>

View file

@ -8,5 +8,4 @@
<library>wine</library>
<file>icmp_main.c</file>
<file>icmp.rc</file>
<file>icmp.spec</file>
</module>

View file

@ -10,6 +10,5 @@
<file>integrity.c</file>
<file>modify.c</file>
<file>imagehlp.rc</file>
<file>imagehlp.spec</file>
<pch>precomp.h</pch>
</module>

View file

@ -9,7 +9,6 @@
<define name="_WIN32_WINNT">0x600</define>
<file>imm.c</file>
<file>version.rc</file>
<file>imm32.spec</file>
<library>wine</library>
<library>user32</library>
<library>gdi32</library>

View file

@ -16,7 +16,6 @@
<file>pop3transport.c</file>
<file>regsvr.c</file>
<file>smtptransport.c</file>
<file>inetcomm.spec</file>
<library>wine</library>
<library>uuid</library>
<library>ole32</library>

View file

@ -7,7 +7,6 @@
<include base="ReactOS">include/reactos/wine</include>
<define name="__WINESRC__" />
<file>main.c</file>
<file>inetmib1.spec</file>
<library>wine</library>
<library>snmpapi</library>
<library>kernel32</library>

View file

@ -17,5 +17,4 @@
<file>resinfo_reactos.c</file>
<file>route_reactos.c</file>
<file>iphlpapi.rc</file>
<file>iphlpapi.spec</file>
</module>

View file

@ -11,7 +11,6 @@
<file>prop.c</file>
<file>sendmail.c</file>
<file>util.c</file>
<file>mapi32.spec</file>
<library>wine</library>
<library>shlwapi</library>
<library>shell32</library>

View file

@ -10,7 +10,6 @@
<define name="_WIN32_WINNT">0x600</define>
<file>mlang.c</file>
<file>regsvr.c</file>
<file>mlang.spec</file>
<library>wine</library>
<library>ole32</library>
<library>user32</library>

View file

@ -10,5 +10,4 @@
<library>netapi32</library>
<file>modemui.c</file>
<file>modemui.rc</file>
<file>modemui.spec</file>
</module>

View file

@ -13,7 +13,6 @@
<file>pwcache.c</file>
<file>wnet.c</file>
<file>mpr.rc</file>
<file>mpr.spec</file>
<library>wine</library>
<library>user32</library>
<library>advapi32</library>

View file

@ -6,5 +6,4 @@
<library>wine</library>
<library>kernel32</library>
<file>mprapi.c</file>
<file>mprapi.spec</file>
</module>

View file

@ -15,5 +15,4 @@
<file>msacm32_main.c</file>
<file>pcmconverter.c</file>
<file>stream.c</file>
<file>msacm32.spec</file>
</module>

View file

@ -7,5 +7,4 @@
<library>uuid</library>
<file>corruntimehost.c</file>
<file>mscoree_main.c</file>
<file>mscoree.spec</file>
</module>

View file

@ -14,5 +14,4 @@
<file>stubs.c</file>
<file>tui.c</file>
<file>msgina.rc</file>
<file>msgina.spec</file>
</module>

View file

@ -57,7 +57,6 @@
<file>view.c</file>
<file>rsrc.rc</file>
<include base="mshtml" root="intermediate">.</include>
<file>mshtml.spec</file>
<library>wine</library>
<library>strmiids</library>
<library>uuid</library>

View file

@ -52,7 +52,6 @@
<file>where.c</file>
<file>msi.rc</file>
<include base="msi" root="intermediate">.</include>
<file>msi.spec</file>
<library>wine</library>
<library>uuid</library>
<library>urlmon</library>

View file

@ -16,7 +16,6 @@
<file>task_trigger.c</file>
<file>mstask_local.idl</file>
<file>rsrc.rc</file>
<file>mstask.spec</file>
<library>wine</library>
<library>uuid</library>
<library>ole32</library>

View file

@ -7,7 +7,6 @@
<include base="ReactOS">include/reactos/wine</include>
<define name="__WINESRC__" />
<file>msvcrt20.c</file>
<file>msvcrt20.spec</file>
<library>wine</library>
<library>msvcrt</library>
<library>kernel32</library>

View file

@ -7,7 +7,6 @@
<include base="ReactOS">include/reactos/wine</include>
<define name="__WINESRC__" />
<file>msvcrt40.c</file>
<file>msvcrt40.spec</file>
<library>wine</library>
<library>msvcrt</library>
<library>kernel32</library>

View file

@ -10,7 +10,6 @@
<file>msvideo_main.c</file>
<file>drawdib.c</file>
<file>rsrc.rc</file>
<file>msvfw32.spec</file>
<library>wine</library>
<library>winmm</library>
<library>version</library>

View file

@ -53,7 +53,6 @@
<file>domimpl.c</file>
<file>entityref.c</file>
<file>version.rc</file>
<file>msxml3.spec</file>
</module>
<module name="msxml3_v1" type="embeddedtypelib">
<dependency>stdole2</dependency>

View file

@ -7,5 +7,4 @@
<library>kernel32</library>
<library>ntdll</library>
<file>nddeapi.c</file>
<file>nddeapi.spec</file>
</module>

View file

@ -18,7 +18,6 @@
<file>netbios.c</file>
<file>share.c</file>
<file>wksta.c</file>
<file>netapi32.spec</file>
<library>wine</library>
<library>iphlpapi</library>
<library>ws2_32</library>

View file

@ -16,7 +16,6 @@
<library>comctl32</library>
<library>ws2_32</library>
<file>netcfgx.c</file>
<file>netcfgx.spec</file>
<file>classfactory.c</file>
<file>netcfg_iface.c</file>
<file>inetcfgcomp_iface.c</file>

View file

@ -23,7 +23,6 @@
<file>netshell.rc</file>
<file>classfactory.c</file>
<file>connectmanager.c</file>
<file>netshell.spec</file>
<file>lanconnectui.c</file>
<file>lanstatusui.c</file>
</module>

View file

@ -5,7 +5,6 @@
<file>stubs.c</file>
<file>wizard.c</file>
<file>newdev.rc</file>
<file>newdev.spec</file>
<library>wine</library>
<library>gdi32</library>
<library>comctl32</library>

View file

@ -8,5 +8,4 @@
<library>kernel32</library>
<library>ntdll</library>
<file>ntdsapi.c</file>
<file>ntdsapi.spec</file>
</module>

View file

@ -9,6 +9,5 @@
<library>wine</library>
<library>kernel32</library>
<file>proxyodbc.c</file>
<file>odbc32.spec</file>
</module>
</group>

View file

@ -12,6 +12,5 @@
<library>uuid</library>
<library>ntdll</library>
<file>odbccp32.c</file>
<file>odbccp32.spec</file>
</module>
</group>

View file

@ -61,7 +61,6 @@
<file>dcom.idl</file>
<file>irot.idl</file>
<include base="ole32" root="intermediate">.</include>
<file>ole32.spec</file>
</module>
<module name="ole32_irot_server" type="rpcserver">
<file>irot.idl</file>

View file

@ -8,7 +8,6 @@
<include base="ReactOS">include/reactos/wine</include>
<define name="__WINESRC__" />
<file>main.c</file>
<file>oleacc.spec</file>
<library>wine</library>
<library>kernel32</library>
<library>ntdll</library>

View file

@ -29,7 +29,6 @@
<file>oleaut32.rc</file>
<file>oleaut32_oaidl.idl</file>
<include base="oleaut32" root="intermediate">.</include>
<file>oleaut32.spec</file>
<library>oleaut32_proxy</library>
<library>wine</library>
<library>ole32</library>

View file

@ -8,5 +8,4 @@
<library>kernel32</library>
<library>ntdll</library>
<file>pdh_main.c</file>
<file>pdh.spec</file>
</module>

View file

@ -9,5 +9,4 @@
<library>ntdll</library>
<file>printui.c</file>
<file>printui.rc</file>
<file>printui.spec</file>
</module>

View file

@ -5,5 +5,4 @@
<library>kernel32</library>
<library>uuid</library>
<file>pstorec.c</file>
<file>pstorec.spec</file>
</module>

View file

@ -7,7 +7,6 @@
<include base="ReactOS">include/reactos/wine</include>
<define name="__WINESRC__" />
<file>rasapi.c</file>
<file>rasapi32.spec</file>
<library>wine</library>
<library>kernel32</library>
<library>ntdll</library>

View file

@ -8,5 +8,4 @@
<library>uuid</library>
<file>rasdlg.c</file>
<file>rasdlg.rc</file>
<file>rasdlg.spec</file>
</module>

View file

@ -8,5 +8,4 @@
<library>uuid</library>
<file>rasman.c</file>
<file>rasman.rc</file>
<file>rasman.spec</file>
</module>

View file

@ -39,7 +39,6 @@
<file>rpcrt4.rc</file>
<file>epm.idl</file>
<include base="rpcrt4" root="intermediate">.</include>
<file>rpcrt4.spec</file>
</module>
<module name="rpcrt4_epm_client" type="rpcclient">
<file>epm.idl</file>

View file

@ -13,5 +13,4 @@
<file>schannel_main.c</file>
<file>usermode.c</file>
<file>version.rc</file>
<file>schannel.spec</file>
</module>

View file

@ -36,5 +36,4 @@
<file>stubs.c</file>
<file>rpc.c</file>
<file>setupapi.rc</file>
<file>setupapi.spec</file>
</module>

View file

@ -3,6 +3,5 @@
<include base="sfc">.</include>
<library>kernel32</library>
<file>sfc.c</file>
<file>sfc.spec</file>
<pch>precomp.h</pch>
</module>

View file

@ -3,6 +3,5 @@
<include base="sfc_os">.</include>
<library>kernel32</library>
<file>sfc_os.c</file>
<file>sfc_os.spec</file>
<pch>precomp.h</pch>
</module>

View file

@ -28,5 +28,4 @@
<file>view.c</file>
<file>webbrowser.c</file>
<file>shdocvw.rc</file>
<file>shdocvw.spec</file>
</module>

View file

@ -70,7 +70,6 @@
<file>shv_def_cmenu.c</file>
<file>startmenu.c</file>
<file>ros-systray.c</file>
<file>shell32.spec</file>
<file>fprop.c</file>
<file>drive.c</file>
<file>she_ocmenu.c</file>

View file

@ -11,5 +11,4 @@
<library>gdiplus</library>
<file>shimgvw.c</file>
<file>shimgvw.rc</file>
<file>shimgvw.spec</file>
</module>

View file

@ -21,7 +21,6 @@
<file>url.c</file>
<file>wsprintf.c</file>
<file>shlwapi.rc</file>
<file>shlwapi.spec</file>
<library>wine</library>
<library>uuid</library>
<library>user32</library>

View file

@ -7,7 +7,6 @@
<include base="ReactOS">include/reactos/wine</include>
<define name="__WINESRC__" />
<file>sxs.c</file>
<file>sxs.spec</file>
<library>wine</library>
<library>kernel32</library>
<library>ntdll</library>

View file

@ -9,7 +9,6 @@
<file>assisted.c</file>
<file>line.c</file>
<file>phone.c</file>
<file>tapi32.spec</file>
<library>wine</library>
<library>advapi32</library>
<library>kernel32</library>

View file

@ -25,7 +25,6 @@
<file>umstream.c</file>
<file>urlmon_main.c</file>
<file>rsrc.rc</file>
<file>urlmon.spec</file>
<library>wine</library>
<library>uuid</library>
<library>ole32</library>

View file

@ -7,7 +7,6 @@
<include base="ReactOS">include/reactos/wine</include>
<define name="__WINESRC__" />
<file>usp10.c</file>
<file>usp10.spec</file>
<library>wine</library>
<library>gdi32</library>
<library>kernel32</library>

View file

@ -15,7 +15,6 @@
<file>system.c</file>
<file>uxini.c</file>
<file>version.rc</file>
<file>uxtheme.spec</file>
<library>wine</library>
<library>user32</library>
<library>gdi32</library>

View file

@ -30,6 +30,5 @@
<file>wininet_main.c</file>
<file>rsrc.rc</file>
<file>version.rc</file>
<file>wininet.spec</file>
</module>
</group>

View file

@ -26,6 +26,5 @@
<file>winmm.c</file>
<file>registry.c</file>
<file>winmm_res.rc</file>
<file>winmm.spec</file>
</module>
</group>

View file

@ -17,5 +17,4 @@
<file>asn.c</file>
<file>softpub.c</file>
<file>version.rc</file>
<file>wintrust.spec</file>
</module>

View file

@ -27,7 +27,6 @@
<file>search.c</file>
<file>value.c</file>
<file>wldap32.rc</file>
<file>wldap32.spec</file>
<library>wine</library>
<library>user32</library>
<library>kernel32</library>

View file

@ -7,7 +7,6 @@
<include base="ReactOS">include/reactos/wine</include>
<define name="__WINESRC__" />
<file>wtsapi32.c</file>
<file>wtsapi32.spec</file>
<library>wine</library>
<library>kernel32</library>
<library>ntdll</library>

View file

@ -6,5 +6,4 @@
<library>hal</library>
<file>usbd.c</file>
<file>usbd.rc</file>
<file>usbd.spec</file>
</module>

View file

@ -10,5 +10,4 @@
<file>screen.c</file>
<file>surface.c</file>
<file>framebufacc.rc</file>
<file>framebufacc.spec</file>
</module>

View file

@ -420,8 +420,6 @@ MingwModuleHandler::GetObjectFilename (
newExtension = "_" + module.name + ".coff";
else if (extension == ".mc")
newExtension = ".rc";
else if (extension == ".spec" || extension == ".pspec")
newExtension = "_" + module.name + ".stubs.o";
else if (extension == ".idl")
{
if ( module.type == RpcServer )
@ -540,26 +538,6 @@ MingwModuleHandler::GenerateDependsTarget () const
module.name.c_str () );
}
string
MingwModuleHandler::GetObjectFilenames ()
{
const vector<CompilationUnit*>& compilationUnits = module.non_if_data.compilationUnits;
if ( compilationUnits.size () == 0 )
return "";
string objectFilenames ( "" );
for ( size_t i = 0; i < compilationUnits.size (); i++ )
{
if ( objectFilenames.size () > 0 )
objectFilenames += " ";
const FileLocation& compilationName = compilationUnits[i]->GetFilename ();
const FileLocation *object_file = GetObjectFilename ( &compilationName, module );
objectFilenames += backend->GetFullName ( *object_file );
delete object_file;
}
return objectFilenames;
}
/* static */ string
MingwModuleHandler::GenerateGccDefineParametersFromVector (
const vector<Define*>& defines,
@ -1001,6 +979,22 @@ MingwModuleHandler::GenerateObjectMacros (
delete object_file;
}
CleanupCompilationUnitVector ( sourceCompilationUnits );
if ( IsSpecDefinitionFile() )
{
const FileLocation *stubs_file = new FileLocation(
IntermediateDirectory,
module.importLibrary->source->relative_path,
ReplaceExtension ( module.importLibrary->source->name, "_" + module.name + ".stubs.o" ) );
fprintf (
fMakefile,
"%s += %s\n",
objectsMacro.c_str(),
backend->GetFullName ( *stubs_file ).c_str () );
delete stubs_file;
}
}
/* caller needs to delete the returned object */
@ -1056,33 +1050,34 @@ Rule wmcRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).rc
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).rc",
"$(INTERMEDIATE)$(SEP)include$(SEP)reactos$(SEP)$(source_name_noext).h",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL );
Rule winebuildPDefRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).auto.def: $(source)$(dependencies) $(WINEBUILD_TARGET) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
Rule winebuildPDefRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).spec: $(source)$(dependencies) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
"\t$(ECHO_CPP)\n"
"\t${gcc} -xc -E ${$(module_name)_RCFLAGS} $(source) > $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).spec\n\n"
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).auto.def: $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).spec $(WINEBUILD_TARGET) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
"\t$(ECHO_WINEBLD)\n"
"\t${gcc} -xc -E ${$(module_name)_RCFLAGS} $(source) > $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).def.spec\n"
"\t$(Q)$(WINEBUILD_TARGET) $(WINEBUILD_FLAGS) -o $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).auto.def --def -E $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).def.spec\n\n",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).def.spec",
"\t$(Q)$(WINEBUILD_TARGET) $(WINEBUILD_FLAGS) -o $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).auto.def --def -E $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).spec --filename $(module_dllname)\n\n",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).spec",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).auto.def",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL );
Rule winebuildPRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.c: $(source_path)$(SEP)$(source_name_noext).pspec $(WINEBUILD_TARGET)\n"
Rule winebuildPRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.c: $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).spec $(WINEBUILD_TARGET) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
"\t$(ECHO_WINEBLD)\n"
"\t${gcc} -xc -E ${$(module_name)_RCFLAGS} $(source) > $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.spec\n"
"\t$(Q)$(WINEBUILD_TARGET) $(WINEBUILD_FLAGS) -o $(INTERMEDIATE)$(SEP)$(source_path)$(SEP)$(source_name_noext)_$(module_name).stubs.c --pedll $(INTERMEDIATE)$(SEP)$(source_path)$(SEP)$(source_name_noext)_$(module_name).stubs.spec\n"
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.o: $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.c$(dependencies) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
"\t$(Q)$(WINEBUILD_TARGET) $(WINEBUILD_FLAGS) -o $@ --pedll $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).spec --filename $(module_dllname)\n\n"
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.o: $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.c | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
"\t$(ECHO_CC)\n"
"\t${gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -c $<\n",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.spec",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).spec",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.c",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.o",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL );
Rule winebuildDefRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).auto.def: $(source)$(dependencies) $(WINEBUILD_TARGET) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
"\t$(ECHO_WINEBLD)\n"
"\t$(Q)$(WINEBUILD_TARGET) $(WINEBUILD_FLAGS) -o $(INTERMEDIATE)$(SEP)$(source_path)$(SEP)$(source_name_noext)_$(module_name).auto.def --def -E $(source)\n\n",
"\t$(Q)$(WINEBUILD_TARGET) $(WINEBUILD_FLAGS) -o $(INTERMEDIATE)$(SEP)$(source_path)$(SEP)$(source_name_noext)_$(module_name).auto.def --def -E $(source) --filename $(module_dllname)\n\n",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).spec",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).auto.def",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL );
Rule winebuildRule ( "$(INTERMEDIATE)$(SEP)$(source_path)$(SEP)$(source_name_noext)_$(module_name).stubs.c: $(source_path)$(SEP)$(source_name_noext).spec $(WINEBUILD_TARGET)\n"
Rule winebuildRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.c: $(source_path)$(SEP)$(source_name_noext).spec $(WINEBUILD_TARGET)\n"
"\t$(ECHO_WINEBLD)\n"
"\t$(Q)$(WINEBUILD_TARGET) $(WINEBUILD_FLAGS) -o $(INTERMEDIATE)$(SEP)$(source_path)$(SEP)$(source_name_noext)_$(module_name).stubs.c --pedll $(source_path)$(SEP)$(source_name_noext).spec\n"
"\t$(Q)$(WINEBUILD_TARGET) $(WINEBUILD_FLAGS) -o $@ --pedll $(source_path)$(SEP)$(source_name_noext).spec --filename $(module_dllname)\n"
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.o: $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.c$(dependencies) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
"\t$(ECHO_CC)\n"
"\t${gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -c $<\n",
@ -1258,8 +1253,6 @@ MingwModuleHandler::GenerateCommands (
{ HostDontCare, TypeDontCare, ".asm", &nasmRule },
{ HostDontCare, TypeDontCare, ".rc", &windresRule },
{ HostDontCare, TypeDontCare, ".mc", &wmcRule },
{ HostDontCare, TypeDontCare, ".pspec", &winebuildPRule },
{ HostDontCare, TypeDontCare, ".spec", &winebuildRule },
{ HostDontCare, RpcServer, ".idl", &widlServerRule },
{ HostDontCare, RpcClient, ".idl", &widlClientRule },
{ HostDontCare, RpcProxy, ".idl", &widlProxyRule },
@ -1485,8 +1478,6 @@ MingwModuleHandler::GenerateLinkerCommand (
linkerParameters.find ("-nostdlib") == string::npos &&
!(module.type == KernelModeDLL || module.type == KernelModeDriver);
string targetName ( module.output->name );
if ( !module.HasImportLibrary() )
{
fprintf ( fMakefile,
@ -1524,7 +1515,7 @@ MingwModuleHandler::GenerateLinkerCommand (
fprintf ( fMakefile,
"\t${dlltool} --dllname %s --def %s --output-exp $@%s%s\n",
targetName.c_str (),
module.GetDllName ().c_str (),
definitionFilename ? backend->GetFullName ( *definitionFilename ).c_str () : "",
module.mangledSymbols ? "" : " --kill-at",
module.underscoreSymbols ? " --add-underscore" : "" );
@ -1621,6 +1612,20 @@ MingwModuleHandler::GenerateObjectFileTargets ( const IfableData& data )
moduleDependencies );
}
CleanupCompilationUnitVector ( sourceCompilationUnits );
SpecFileType spec = IsSpecDefinitionFile ();
if ( spec )
{
Rule * defRule;
if (spec == PSpec)
defRule = &winebuildPRule;
else
defRule = &winebuildRule;
defRule->Execute ( fMakefile, backend, module, module.importLibrary->source, clean_files );
}
}
void
@ -1683,7 +1688,7 @@ MingwModuleHandler::GenerateArchiveTarget ()
fprintf ( fMakefile,
"\t${dlltool} --dllname %s --def %s --output-lib $@%s%s\n",
module.importLibrary->dllname.c_str (),
module.GetDllName ().c_str (),
backend->GetFullName ( *definitionFilename ).c_str (),
module.mangledSymbols ? "" : " --kill-at",
module.underscoreSymbols ? " --add-underscore" : "" );
@ -2200,10 +2205,12 @@ MingwModuleHandler::IsSpecDefinitionFile () const
if(!module.importLibrary)
return None;
if(module.importLibrary->source->name.rfind(".spec") != string::npos)
std::string ext = GetExtension ( *module.importLibrary->source );
if ( ext == ".spec" )
return Spec;
if(module.importLibrary->source->name.rfind(".pspec") != string::npos)
if ( ext == ".pspec" )
return PSpec;
return None;
@ -2239,9 +2246,6 @@ MingwModuleHandler::GenerateImportLibraryTargetIfNeeded ()
const FileLocation *defFilename = GetDefinitionFilename ();
string empty = "tools" + sSep + "rbuild" + sSep + "empty.def";
vector<FileLocation> deps;
GetDefinitionDependencies ( deps );
fprintf ( fMakefile, "# IMPORT LIBRARY RULE\n" );
fprintf ( fMakefile, "%s:",
@ -2253,11 +2257,6 @@ MingwModuleHandler::GenerateImportLibraryTargetIfNeeded ()
backend->GetFullName ( *defFilename ).c_str () );
}
size_t i, iend = deps.size();
for ( i = 0; i < iend; i++ )
fprintf ( fMakefile, " %s",
backend->GetFullName ( deps[i] ).c_str () );
fprintf ( fMakefile, " | %s\n",
backend->GetFullPath ( *library_target ).c_str () );
@ -2265,7 +2264,7 @@ MingwModuleHandler::GenerateImportLibraryTargetIfNeeded ()
fprintf ( fMakefile,
"\t${dlltool} --dllname %s --def %s --output-lib %s%s%s\n\n",
module.output->name.c_str (),
module.GetDllName ().c_str (),
defFilename ? backend->GetFullName ( *defFilename ).c_str ()
: empty.c_str (),
backend->GetFullName ( *library_target ).c_str (),

View file

@ -97,8 +97,6 @@ protected:
const FileLocation* GetObjectFilename ( const FileLocation* sourceFile,
const Module& module ) const;
std::string GetObjectFilenames ();
std::string GetPreconditionDependenciesName () const;
std::string GetCFlagsMacro () const;
static std::string GetObjectsMacro ( const Module& );

View file

@ -55,6 +55,7 @@ FixString ( const string& str, Backend *backend, const Module& module, const Fil
}
ReplaceVariable ( ret, "$(dependencies)", dep );
ReplaceVariable ( ret, "$(module_name)", module.name );
ReplaceVariable ( ret, "$(module_dllname)", module.GetDllName() );
ReplaceVariable ( ret, "$(module_output)", GetTargetMacro ( module, true ) );
ReplaceVariable ( ret, "$(SEP)", sSep );

View file

@ -1362,6 +1362,16 @@ Module::SetImportLibrary ( ImportLibrary* importLibrary )
HasImportLibrary () ? "lib" + name + ".a" : output->name );
}
std::string
Module::GetDllName () const
{
if ( importLibrary && !importLibrary->dllname.empty() )
return importLibrary->dllname;
else if ( output )
return output->name;
else
throw new InvalidOperationException ( __FILE__, __LINE__, "Module %s has no dllname." );
}
File::File ( DirectoryLocation directory,
const string& relative_path,

View file

@ -395,6 +395,7 @@ public:
bool HasFileWithExtension ( const IfableData&, const std::string& extension ) const;
void InvokeModule () const;
void ProcessXML ();
std::string GetDllName() const;
private:
void SetImportLibrary ( ImportLibrary* importLibrary );
DirectoryLocation GetTargetDirectoryTree () const;