* internal fpmkunit source for bootstrapping

git-svn-id: trunk@8992 -
This commit is contained in:
peter 2007-10-29 18:12:40 +00:00
parent a0984505b2
commit 277147d1b1
6 changed files with 4498 additions and 21 deletions

1
.gitattributes vendored
View File

@ -8694,6 +8694,7 @@ utils/fppkg/fcl20/streamcoll.pp svneol=native#text/plain
utils/fppkg/fcl20/uriparser.pp svneol=native#text/plain
utils/fppkg/fcl20/zipper.pp svneol=native#text/plain
utils/fppkg/fcl20/zstream.pp svneol=native#text/plain
utils/fppkg/fpmkunitsrc.inc svneol=native#text/plain
utils/fppkg/fppkg.lpi svneol=native#text/plain
utils/fppkg/fppkg.pp svneol=native#text/plain
utils/fppkg/fprepos.pp svneol=native#text/plain

View File

@ -3564,6 +3564,15 @@ endif
fpc_makefile_sub2: $(addsuffix _makefile_dirs,$(TARGET_DIRS) $(TARGET_EXAMPLEDIRS))
fpc_makefile_dirs: fpc_makefile_sub1 fpc_makefile_sub2
fpc_makefiles: fpc_makefile fpc_makefile_dirs
ifndef DATA2INC
DATA2INC:=$(strip $(wildcard $(addsuffix /data2inc$(SRCEXEEXT),$(SEARCHPATH))))
ifeq ($(DATA2INC),)
DATA2INC= __missing_command_DATA2INC
else
DATA2INC:=$(firstword $(DATA2INC))
endif
endif
export DATA2INC
all: fpc_all
debug: fpc_debug
smart: fpc_smart
@ -3589,3 +3598,8 @@ ifneq ($(wildcard fpcmake.loc),)
include fpcmake.loc
endif
.NOTPARALLEL:
ifneq ($(DATA2INC),)
fpmkunitsrc.inc: $(DEFAULT_FPCDIR)/packages/fpmkunit/src/fpmkunit.pp
$(DATA2INC) -b -s $(DEFAULT_FPCDIR)/packages/fpmkunit/src/fpmkunit.pp fpmkunitsrc.inc fpmkunitsrc
endif
fppkg$(EXEEXT): $(wildcard pkg*.pp) fpmkunitsrc.inc

View File

@ -37,6 +37,7 @@ fpcdir=../..
[require]
packages=fcl-base fcl-xml fcl-process paszlib libcurl
tools=data2inc
[prerules]
# Compatibility to compile with 2.0.x
@ -49,3 +50,9 @@ endif
[rules]
.NOTPARALLEL:
ifneq ($(DATA2INC),)
fpmkunitsrc.inc: $(DEFAULT_FPCDIR)/packages/fpmkunit/src/fpmkunit.pp
$(DATA2INC) -b -s $(DEFAULT_FPCDIR)/packages/fpmkunit/src/fpmkunit.pp fpmkunitsrc.inc fpmkunitsrc
endif
fppkg$(EXEEXT): $(wildcard pkg*.pp) fpmkunitsrc.inc

4382
utils/fppkg/fpmkunitsrc.inc Normal file

File diff suppressed because it is too large Load Diff

View File

@ -56,6 +56,44 @@ type
Function Execute(const Args:TActionArgs):boolean;override;
end;
TMyMemoryStream=class(TMemoryStream)
public
constructor Create(p:pointer;mysize:integer);
end;
{$i fpmkunitsrc.inc}
procedure CreateFPMKUnitSource(const AFileName:string);
var
InStream,
OutStream : TStream;
pend : pchar;
begin
try
// Don't write trailing #0
pend:=pchar(@fpmkunitsrc)+sizeof(fpmkunitsrc)-1;
while pend^=#0 do
dec(pend);
InStream:=TMyMemoryStream.Create(@fpmkunitsrc,pend-pchar(@fpmkunitsrc));
OutStream:=TFileStream.Create(AFileName,fmCreate);
OutStream.CopyFrom(InStream,InStream.Size);
finally
InStream.Destroy;
OutStream.Destroy;
end;
end;
{*****************************************************************************
TMyMemoryStream
*****************************************************************************}
constructor TMyMemoryStream.Create(p:pointer;mysize:integer);
begin
inherited Create;
SetPointer(p,mysize);
end;
{ TFPMakeCompiler }
@ -63,12 +101,12 @@ Procedure TFPMakeCompiler.CompileFPMake;
const
TempBuildDir = 'build-fpmake';
Var
i : Integer;
OOptions,
BaseDir,
DepDir,
DepDir2,
FPMakeBin,
FPMakeSrc : string;
NeedFPMKUnitSource,
DoBootStrap,
HaveFpmake : boolean;
begin
@ -91,6 +129,7 @@ begin
Error(SErrMissingFPMake);
// Special bootstrapping mode to compile fpmake?
DoBootStrap:=False;
NeedFPMKUnitSource:=False;
if Options.BootStrap then
begin
{$ifdef check_bootstrap_names}
@ -115,33 +154,67 @@ begin
OOptions:=OOptions+' -g'
else
OOptions:=OOptions+' -O2 -XXs';
// Find required units directories
if DoBootStrap then
BaseDir:='../'
// Check overall unit dir, this must exist at least for RTL
if not DirectoryExists(Options.FPMakeUnitDir) then
Error(SErrMissingDirectory,[Options.FPMakeUnitDir]);
// Add FPMKUnit unit dir, if not found we use the internal fpmkunit source
DepDir:=IncludeTrailingPathDelimiter(Options.FPMakeUnitDir+'fpmkunit');
if DirectoryExists(DepDir) then
OOptions:=OOptions+' -Fu'+DepDir
else
BaseDir:=Options.FPMakeUnitDir;
if not DirectoryExists(BaseDir) then
Error(SErrMissingDirectory,[BaseDir]);
for i:=high(FPMKUnitDeps) downto low(FPMKUnitDeps) do
begin
// RTL is always take from the installed compiler
if FPMKUnitDeps[i]='rtl' then
DepDir:=IncludeTrailingPathDelimiter(Options.FPMakeUnitDir+FPMKUnitDeps[i])
else
if DoBootStrap then
begin
if DoBootStrap then
DepDir:=IncludeTrailingPathDelimiter(BaseDir+FPMKUnitDeps[i]+PathDelim+'src')
else
DepDir:=IncludeTrailingPathDelimiter(BaseDir+FPMKUnitDeps[i]);
end;
if not DirectoryExists(DepDir) then
NeedFPMKUnitSource:=true;
OOptions:=OOptions+' -Fu'+TempBuildDir;
end
else
Error(SErrMissingDirectory,[DepDir]);
OOptions:=OOptions+' -Fu'+DepDir;
end;
// Add PaszLib and Hash units dir
DepDir:=IncludeTrailingPathDelimiter(Options.FPMakeUnitDir+'hash');
if not DirectoryExists(DepDir) then
begin
if DoBootStrap then
DepDir:=''
else
Error(SErrMissingDirectory,[DepDir]);
end;
DepDir2:=IncludeTrailingPathDelimiter(Options.FPMakeUnitDir+'paszlib');
if not FileExists(DepDir2+'zipper.ppu') then
begin
if DoBootStrap then
DepDir2:=''
else
Error(SErrMissingDirectory,[DepDir2]);
end;
if (DepDir<>'') and (DepDir2<>'') then
OOptions:=OOptions+' -Fu'+DepDir+' -Fu'+DepDir2
else
OOptions:=OOptions+' -dNO_UNIT_ZIPPER';
// Add Process unit
DepDir:=IncludeTrailingPathDelimiter(Options.FPMakeUnitDir+'fcl-process');
if DirectoryExists(DepDir) then
OOptions:=OOptions+' -Fu'+DepDir
else
begin
if DoBootStrap then
OOptions:=OOptions+' -dNO_UNIT_PROCESS'
else
Error(SErrMissingDirectory,[DepDir]);
end;
// Add RTL unit dir
DepDir:=IncludeTrailingPathDelimiter(Options.FPMakeUnitDir+'rtl');
if not DirectoryExists(DepDir) then
Error(SErrMissingDirectory,[DepDir]);
OOptions:=OOptions+' -Fu'+DepDir;
// Units in a directory for easy cleaning
DeleteDir(TempBuildDir);
ForceDirectories(TempBuildDir);
OOptions:=OOptions+' -FU'+TempBuildDir;
// Create fpmkunit.pp if needed
if NeedFPMKUnitSource then
CreateFPMKUnitSource(TempBuildDir+PathDelim+'fpmkunit.pp');
// Call compiler
If ExecuteProcess(Options.FPMakeCompiler,OOptions+' '+FPmakeSrc)<>0 then
Error(SErrFailedToCompileFPCMake);

View File

@ -18,7 +18,7 @@ Const
{$endif unix}
// Dependencies for compiling the fpmkunit unit
FPMKUnitDeps : array[0..3] of string[8] = ('rtl','hash','paszlib','fpmkunit');
FPMKUnitDeps : array[0..4] of string[11] = ('rtl','hash','paszlib','fcl-process','fpmkunit');
Type
TVerbosity = (vError,vWarning,vInfo,vCommands,vDebug);