mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-18 05:09:19 +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
|
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);
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
|
||||||
|
@ -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.
|
||||||
|
@ -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);
|
||||||
|
@ -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.
|
||||||
|
@ -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.
|
||||||
|
Loading…
Reference in New Issue
Block a user