mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-24 11:09:15 +02:00
+ infrastructure for target specific resourcefile classes
git-svn-id: trunk@6564 -
This commit is contained in:
parent
2566e38eae
commit
4ceadcbc6e
@ -25,15 +25,17 @@ unit comprsrc;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Systems;
|
||||
|
||||
type
|
||||
presourcefile=^tresourcefile;
|
||||
tresourcefile=object
|
||||
tresourcefile = class(TAbstractResourceFile)
|
||||
private
|
||||
fname : string;
|
||||
fname : ansistring;
|
||||
public
|
||||
constructor Init(const fn:string);
|
||||
destructor Done;
|
||||
procedure Compile;virtual;
|
||||
constructor Create(const fn : ansistring);override;
|
||||
procedure Compile;virtual;
|
||||
procedure PostProcessResourcefile(const s : ansistring);virtual;
|
||||
end;
|
||||
|
||||
procedure CompileResourceFiles;
|
||||
@ -43,7 +45,7 @@ implementation
|
||||
|
||||
uses
|
||||
SysUtils,
|
||||
Systems,cutils,cfileutils,
|
||||
cutils,cfileutils,
|
||||
Globtype,Globals,Verbose,Fmodule,
|
||||
Script;
|
||||
|
||||
@ -51,13 +53,13 @@ uses
|
||||
TRESOURCEFILE
|
||||
****************************************************************************}
|
||||
|
||||
constructor tresourcefile.init(const fn:string);
|
||||
constructor tresourcefile.create(const fn : ansistring);
|
||||
begin
|
||||
fname:=fn;
|
||||
end;
|
||||
|
||||
|
||||
destructor tresourcefile.done;
|
||||
procedure tresourcefile.PostProcessResourcefile(const s : ansistring);
|
||||
begin
|
||||
end;
|
||||
|
||||
@ -121,6 +123,7 @@ begin
|
||||
end
|
||||
end;
|
||||
end;
|
||||
PostProcessResourcefile(maybequoted(resobj));
|
||||
{ Update asmres when externmode is set }
|
||||
if cs_link_nolink in current_settings.globalswitches then
|
||||
AsmRes.AddLinkCommand(resbin,s,'');
|
||||
@ -131,7 +134,7 @@ end;
|
||||
|
||||
procedure CompileResourceFiles;
|
||||
var
|
||||
hr : presourcefile;
|
||||
resourcefile : tresourcefile;
|
||||
begin
|
||||
{ OS/2 (EMX) must be processed elsewhere (in the linking/binding stage).
|
||||
same with MacOS}
|
||||
@ -141,9 +144,9 @@ begin
|
||||
begin
|
||||
if target_info.res<>res_none then
|
||||
begin
|
||||
hr:=new(presourcefile,init(current_module.ResourceFiles.getfirst));
|
||||
hr^.compile;
|
||||
dispose(hr,done);
|
||||
resourcefile:=TResourceFile(resinfos[target_info.res]^.resourcefileclass).create(current_module.ResourceFiles.getfirst);
|
||||
resourcefile.compile;
|
||||
resourcefile.free;
|
||||
end
|
||||
else
|
||||
Message(scan_e_resourcefiles_not_supported);
|
||||
|
@ -816,7 +816,7 @@ implementation
|
||||
tg.direction:=1;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
{$endif}
|
||||
{ Create register allocator }
|
||||
cg.init_register_allocators;
|
||||
|
@ -215,6 +215,12 @@ interface
|
||||
TAbstractAssemblerClass = class of TAbstractAssembler;
|
||||
|
||||
|
||||
TAbstractResourceFile = class
|
||||
constructor create(const fn : ansistring);virtual;abstract;
|
||||
end;
|
||||
TAbstractResourceFileClass = class of TAbstractResourceFile;
|
||||
|
||||
|
||||
palignmentinfo = ^talignmentinfo;
|
||||
talignmentinfo = record
|
||||
procalign,
|
||||
@ -263,6 +269,7 @@ interface
|
||||
id : tres;
|
||||
resbin : string[8];
|
||||
rescmd : string[50];
|
||||
resourcefileclass : TAbstractResourceFileClass;
|
||||
end;
|
||||
|
||||
pdbginfo = ^tdbginfo;
|
||||
@ -414,7 +421,7 @@ interface
|
||||
procedure UpdateAlignment(var d:talignmentinfo;const s:talignmentinfo);
|
||||
|
||||
procedure RegisterTarget(const r:tsysteminfo);
|
||||
procedure RegisterRes(const r:tresinfo);
|
||||
procedure RegisterRes(const r:tresinfo; rcf : TAbstractResourceFileClass);
|
||||
procedure RegisterAr(const r:tarinfo);
|
||||
{ Register the external linker. This routine is called to setup the
|
||||
class to use for the linker. It returns the tsysteminfo structure
|
||||
@ -658,7 +665,7 @@ begin
|
||||
end;
|
||||
|
||||
|
||||
procedure RegisterRes(const r:tresinfo);
|
||||
procedure RegisterRes(const r:tresinfo; rcf : TAbstractResourceFileClass);
|
||||
var
|
||||
t : tres;
|
||||
begin
|
||||
@ -668,6 +675,7 @@ begin
|
||||
else
|
||||
Getmem(resinfos[t],sizeof(tresinfo));
|
||||
resinfos[t]^:=r;
|
||||
resinfos[t]^.resourcefileclass:=rcf;
|
||||
end;
|
||||
|
||||
|
||||
|
@ -41,7 +41,7 @@ implementation
|
||||
cutils,cfileutils,cclasses,
|
||||
globtype,comphook,systems,symconst,symsym,symdef,
|
||||
globals,verbose,fmodule,script,ogbase,
|
||||
import,link,i_emx,ppu;
|
||||
comprsrc,import,link,i_emx,ppu;
|
||||
|
||||
type
|
||||
TImportLibEMX=class(timportlib)
|
||||
@ -526,6 +526,6 @@ end;
|
||||
initialization
|
||||
RegisterExternalLinker(system_i386_emx_info,TLinkerEMX);
|
||||
RegisterImport(system_i386_emx,TImportLibEMX);
|
||||
RegisterRes(res_emxbind_info);
|
||||
RegisterRes(res_emxbind_info,TResourceFile);
|
||||
RegisterTarget(system_i386_emx_info);
|
||||
end.
|
||||
|
@ -72,6 +72,7 @@ implementation
|
||||
fmodule,
|
||||
aasmbase,aasmtai,aasmdata,aasmcpu,cpubase,
|
||||
cgbase,cgobj,cgutils,ogbase,ncgutil,
|
||||
comprsrc,
|
||||
i_linux
|
||||
;
|
||||
|
||||
@ -891,7 +892,7 @@ initialization
|
||||
RegisterImport(system_i386_linux,timportliblinux);
|
||||
RegisterExport(system_i386_linux,texportliblinux);
|
||||
RegisterTarget(system_i386_linux_info);
|
||||
RegisterRes(res_elf32_info);
|
||||
RegisterRes(res_elf32_info,TResourceFile);
|
||||
|
||||
RegisterExternalLinker(system_x86_6432_linux_info,TLinkerLinux);
|
||||
RegisterImport(system_x86_6432_linux,timportliblinux);
|
||||
@ -927,7 +928,7 @@ initialization
|
||||
RegisterImport(system_x86_64_linux,timportliblinux);
|
||||
RegisterExport(system_x86_64_linux,texportliblinux);
|
||||
RegisterTarget(system_x86_64_linux_info);
|
||||
RegisterRes(res_elf64_info);
|
||||
RegisterRes(res_elf64_info,TResourceFile);
|
||||
{$endif x86_64}
|
||||
{$ifdef SPARC}
|
||||
RegisterExternalLinker(system_sparc_linux_info,TLinkerLinux);
|
||||
|
@ -45,7 +45,8 @@ implementation
|
||||
uses
|
||||
SysUtils,
|
||||
cutils,cfileutils,cclasses,
|
||||
globtype,globals,systems,verbose,script,fmodule,i_palmos;
|
||||
globtype,globals,systems,verbose,script,fmodule,i_palmos,
|
||||
comprsrc;
|
||||
|
||||
{****************************************************************************
|
||||
TLinkerPalmOS
|
||||
@ -208,10 +209,10 @@ end;
|
||||
initialization
|
||||
{$ifdef m68k}
|
||||
RegisterTarget(system_m68k_palmos_info);
|
||||
RegisterRes(res_m68k_palmos_info);
|
||||
RegisterRes(res_m68k_palmos_info,TResourceFile);
|
||||
{$endif m68k}
|
||||
{$ifdef arm}
|
||||
RegisterTarget(system_arm_palmos_info);
|
||||
RegisterRes(res_arm_palmos_info);
|
||||
RegisterRes(res_arm_palmos_info,TResourceFile);
|
||||
{$endif arm}
|
||||
end.
|
||||
|
@ -31,7 +31,7 @@ interface
|
||||
symconst,symdef,symsym,
|
||||
script,gendef,
|
||||
cpubase,
|
||||
import,export,link,cgobj,i_win;
|
||||
import,export,link,comprsrc,cgobj,i_win;
|
||||
|
||||
|
||||
const
|
||||
@ -91,6 +91,10 @@ interface
|
||||
end;
|
||||
|
||||
|
||||
TWinResourceFile = class(TResourceFile)
|
||||
end;
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
@ -1718,7 +1722,7 @@ initialization
|
||||
RegisterImport(system_i386_win32,TImportLibWin);
|
||||
RegisterExport(system_i386_win32,TExportLibWin);
|
||||
RegisterDLLScanner(system_i386_win32,TDLLScannerWin);
|
||||
RegisterRes(res_gnu_windres_info);
|
||||
RegisterRes(res_gnu_windres_info,TWinResourceFile);
|
||||
RegisterTarget(system_i386_win32_info);
|
||||
{ WinCE }
|
||||
RegisterExternalLinker(system_i386_wince_info,TExternalLinkerWin);
|
||||
@ -1733,7 +1737,7 @@ initialization
|
||||
RegisterImport(system_x86_64_win64,TImportLibWin);
|
||||
RegisterExport(system_x86_64_win64,TExportLibWin);
|
||||
RegisterDLLScanner(system_x86_64_win64,TDLLScannerWin);
|
||||
RegisterRes(res_gnu_windres_info);
|
||||
RegisterRes(res_gnu_windres_info,TWinResourceFile);
|
||||
RegisterTarget(system_x64_win64_info);
|
||||
{$endif x86_64}
|
||||
{$ifdef arm}
|
||||
@ -1741,7 +1745,7 @@ initialization
|
||||
RegisterInternalLinker(system_arm_wince_info,TInternalLinkerWin);
|
||||
RegisterImport(system_arm_wince,TImportLibWin);
|
||||
RegisterExport(system_arm_wince,TExportLibWin);
|
||||
RegisterRes(res_gnu_wince_windres_info);
|
||||
RegisterRes(res_gnu_wince_windres_info,TWinResourceFile);
|
||||
RegisterTarget(system_arm_wince_info);
|
||||
{$endif arm}
|
||||
end.
|
||||
|
Loading…
Reference in New Issue
Block a user