+ infrastructure for target specific resourcefile classes

git-svn-id: trunk@6564 -
This commit is contained in:
florian 2007-02-19 19:02:21 +00:00
parent 2566e38eae
commit 4ceadcbc6e
7 changed files with 44 additions and 27 deletions

View File

@ -25,15 +25,17 @@ unit comprsrc;
interface interface
uses
Systems;
type type
presourcefile=^tresourcefile; tresourcefile = class(TAbstractResourceFile)
tresourcefile=object
private private
fname : string; fname : ansistring;
public public
constructor Init(const fn:string); constructor Create(const fn : ansistring);override;
destructor Done;
procedure Compile;virtual; procedure Compile;virtual;
procedure PostProcessResourcefile(const s : ansistring);virtual;
end; end;
procedure CompileResourceFiles; procedure CompileResourceFiles;
@ -43,7 +45,7 @@ implementation
uses uses
SysUtils, SysUtils,
Systems,cutils,cfileutils, cutils,cfileutils,
Globtype,Globals,Verbose,Fmodule, Globtype,Globals,Verbose,Fmodule,
Script; Script;
@ -51,13 +53,13 @@ uses
TRESOURCEFILE TRESOURCEFILE
****************************************************************************} ****************************************************************************}
constructor tresourcefile.init(const fn:string); constructor tresourcefile.create(const fn : ansistring);
begin begin
fname:=fn; fname:=fn;
end; end;
destructor tresourcefile.done; procedure tresourcefile.PostProcessResourcefile(const s : ansistring);
begin begin
end; end;
@ -121,6 +123,7 @@ begin
end end
end; end;
end; end;
PostProcessResourcefile(maybequoted(resobj));
{ Update asmres when externmode is set } { Update asmres when externmode is set }
if cs_link_nolink in current_settings.globalswitches then if cs_link_nolink in current_settings.globalswitches then
AsmRes.AddLinkCommand(resbin,s,''); AsmRes.AddLinkCommand(resbin,s,'');
@ -131,7 +134,7 @@ end;
procedure CompileResourceFiles; procedure CompileResourceFiles;
var var
hr : presourcefile; resourcefile : tresourcefile;
begin begin
{ OS/2 (EMX) must be processed elsewhere (in the linking/binding stage). { OS/2 (EMX) must be processed elsewhere (in the linking/binding stage).
same with MacOS} same with MacOS}
@ -141,9 +144,9 @@ begin
begin begin
if target_info.res<>res_none then if target_info.res<>res_none then
begin begin
hr:=new(presourcefile,init(current_module.ResourceFiles.getfirst)); resourcefile:=TResourceFile(resinfos[target_info.res]^.resourcefileclass).create(current_module.ResourceFiles.getfirst);
hr^.compile; resourcefile.compile;
dispose(hr,done); resourcefile.free;
end end
else else
Message(scan_e_resourcefiles_not_supported); Message(scan_e_resourcefiles_not_supported);

View File

@ -215,6 +215,12 @@ interface
TAbstractAssemblerClass = class of TAbstractAssembler; TAbstractAssemblerClass = class of TAbstractAssembler;
TAbstractResourceFile = class
constructor create(const fn : ansistring);virtual;abstract;
end;
TAbstractResourceFileClass = class of TAbstractResourceFile;
palignmentinfo = ^talignmentinfo; palignmentinfo = ^talignmentinfo;
talignmentinfo = record talignmentinfo = record
procalign, procalign,
@ -263,6 +269,7 @@ interface
id : tres; id : tres;
resbin : string[8]; resbin : string[8];
rescmd : string[50]; rescmd : string[50];
resourcefileclass : TAbstractResourceFileClass;
end; end;
pdbginfo = ^tdbginfo; pdbginfo = ^tdbginfo;
@ -414,7 +421,7 @@ interface
procedure UpdateAlignment(var d:talignmentinfo;const s:talignmentinfo); procedure UpdateAlignment(var d:talignmentinfo;const s:talignmentinfo);
procedure RegisterTarget(const r:tsysteminfo); procedure RegisterTarget(const r:tsysteminfo);
procedure RegisterRes(const r:tresinfo); procedure RegisterRes(const r:tresinfo; rcf : TAbstractResourceFileClass);
procedure RegisterAr(const r:tarinfo); procedure RegisterAr(const r:tarinfo);
{ Register the external linker. This routine is called to setup the { Register the external linker. This routine is called to setup the
class to use for the linker. It returns the tsysteminfo structure class to use for the linker. It returns the tsysteminfo structure
@ -658,7 +665,7 @@ begin
end; end;
procedure RegisterRes(const r:tresinfo); procedure RegisterRes(const r:tresinfo; rcf : TAbstractResourceFileClass);
var var
t : tres; t : tres;
begin begin
@ -668,6 +675,7 @@ begin
else else
Getmem(resinfos[t],sizeof(tresinfo)); Getmem(resinfos[t],sizeof(tresinfo));
resinfos[t]^:=r; resinfos[t]^:=r;
resinfos[t]^.resourcefileclass:=rcf;
end; end;

View File

@ -41,7 +41,7 @@ implementation
cutils,cfileutils,cclasses, cutils,cfileutils,cclasses,
globtype,comphook,systems,symconst,symsym,symdef, globtype,comphook,systems,symconst,symsym,symdef,
globals,verbose,fmodule,script,ogbase, globals,verbose,fmodule,script,ogbase,
import,link,i_emx,ppu; comprsrc,import,link,i_emx,ppu;
type type
TImportLibEMX=class(timportlib) TImportLibEMX=class(timportlib)
@ -526,6 +526,6 @@ end;
initialization initialization
RegisterExternalLinker(system_i386_emx_info,TLinkerEMX); RegisterExternalLinker(system_i386_emx_info,TLinkerEMX);
RegisterImport(system_i386_emx,TImportLibEMX); RegisterImport(system_i386_emx,TImportLibEMX);
RegisterRes(res_emxbind_info); RegisterRes(res_emxbind_info,TResourceFile);
RegisterTarget(system_i386_emx_info); RegisterTarget(system_i386_emx_info);
end. end.

View File

@ -72,6 +72,7 @@ implementation
fmodule, fmodule,
aasmbase,aasmtai,aasmdata,aasmcpu,cpubase, aasmbase,aasmtai,aasmdata,aasmcpu,cpubase,
cgbase,cgobj,cgutils,ogbase,ncgutil, cgbase,cgobj,cgutils,ogbase,ncgutil,
comprsrc,
i_linux i_linux
; ;
@ -891,7 +892,7 @@ initialization
RegisterImport(system_i386_linux,timportliblinux); RegisterImport(system_i386_linux,timportliblinux);
RegisterExport(system_i386_linux,texportliblinux); RegisterExport(system_i386_linux,texportliblinux);
RegisterTarget(system_i386_linux_info); RegisterTarget(system_i386_linux_info);
RegisterRes(res_elf32_info); RegisterRes(res_elf32_info,TResourceFile);
RegisterExternalLinker(system_x86_6432_linux_info,TLinkerLinux); RegisterExternalLinker(system_x86_6432_linux_info,TLinkerLinux);
RegisterImport(system_x86_6432_linux,timportliblinux); RegisterImport(system_x86_6432_linux,timportliblinux);
@ -927,7 +928,7 @@ initialization
RegisterImport(system_x86_64_linux,timportliblinux); RegisterImport(system_x86_64_linux,timportliblinux);
RegisterExport(system_x86_64_linux,texportliblinux); RegisterExport(system_x86_64_linux,texportliblinux);
RegisterTarget(system_x86_64_linux_info); RegisterTarget(system_x86_64_linux_info);
RegisterRes(res_elf64_info); RegisterRes(res_elf64_info,TResourceFile);
{$endif x86_64} {$endif x86_64}
{$ifdef SPARC} {$ifdef SPARC}
RegisterExternalLinker(system_sparc_linux_info,TLinkerLinux); RegisterExternalLinker(system_sparc_linux_info,TLinkerLinux);

View File

@ -45,7 +45,8 @@ implementation
uses uses
SysUtils, SysUtils,
cutils,cfileutils,cclasses, cutils,cfileutils,cclasses,
globtype,globals,systems,verbose,script,fmodule,i_palmos; globtype,globals,systems,verbose,script,fmodule,i_palmos,
comprsrc;
{**************************************************************************** {****************************************************************************
TLinkerPalmOS TLinkerPalmOS
@ -208,10 +209,10 @@ end;
initialization initialization
{$ifdef m68k} {$ifdef m68k}
RegisterTarget(system_m68k_palmos_info); RegisterTarget(system_m68k_palmos_info);
RegisterRes(res_m68k_palmos_info); RegisterRes(res_m68k_palmos_info,TResourceFile);
{$endif m68k} {$endif m68k}
{$ifdef arm} {$ifdef arm}
RegisterTarget(system_arm_palmos_info); RegisterTarget(system_arm_palmos_info);
RegisterRes(res_arm_palmos_info); RegisterRes(res_arm_palmos_info,TResourceFile);
{$endif arm} {$endif arm}
end. end.

View File

@ -31,7 +31,7 @@ interface
symconst,symdef,symsym, symconst,symdef,symsym,
script,gendef, script,gendef,
cpubase, cpubase,
import,export,link,cgobj,i_win; import,export,link,comprsrc,cgobj,i_win;
const const
@ -91,6 +91,10 @@ interface
end; end;
TWinResourceFile = class(TResourceFile)
end;
implementation implementation
uses uses
@ -1718,7 +1722,7 @@ initialization
RegisterImport(system_i386_win32,TImportLibWin); RegisterImport(system_i386_win32,TImportLibWin);
RegisterExport(system_i386_win32,TExportLibWin); RegisterExport(system_i386_win32,TExportLibWin);
RegisterDLLScanner(system_i386_win32,TDLLScannerWin); RegisterDLLScanner(system_i386_win32,TDLLScannerWin);
RegisterRes(res_gnu_windres_info); RegisterRes(res_gnu_windres_info,TWinResourceFile);
RegisterTarget(system_i386_win32_info); RegisterTarget(system_i386_win32_info);
{ WinCE } { WinCE }
RegisterExternalLinker(system_i386_wince_info,TExternalLinkerWin); RegisterExternalLinker(system_i386_wince_info,TExternalLinkerWin);
@ -1733,7 +1737,7 @@ initialization
RegisterImport(system_x86_64_win64,TImportLibWin); RegisterImport(system_x86_64_win64,TImportLibWin);
RegisterExport(system_x86_64_win64,TExportLibWin); RegisterExport(system_x86_64_win64,TExportLibWin);
RegisterDLLScanner(system_x86_64_win64,TDLLScannerWin); RegisterDLLScanner(system_x86_64_win64,TDLLScannerWin);
RegisterRes(res_gnu_windres_info); RegisterRes(res_gnu_windres_info,TWinResourceFile);
RegisterTarget(system_x64_win64_info); RegisterTarget(system_x64_win64_info);
{$endif x86_64} {$endif x86_64}
{$ifdef arm} {$ifdef arm}
@ -1741,7 +1745,7 @@ initialization
RegisterInternalLinker(system_arm_wince_info,TInternalLinkerWin); RegisterInternalLinker(system_arm_wince_info,TInternalLinkerWin);
RegisterImport(system_arm_wince,TImportLibWin); RegisterImport(system_arm_wince,TImportLibWin);
RegisterExport(system_arm_wince,TExportLibWin); RegisterExport(system_arm_wince,TExportLibWin);
RegisterRes(res_gnu_wince_windres_info); RegisterRes(res_gnu_wince_windres_info,TWinResourceFile);
RegisterTarget(system_arm_wince_info); RegisterTarget(system_arm_wince_info);
{$endif arm} {$endif arm}
end. end.