mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-12 09:29:07 +02:00
* basic work for source package creation
git-svn-id: trunk@6594 -
This commit is contained in:
parent
a05917e982
commit
06961fe250
@ -71,8 +71,6 @@ Type
|
|||||||
|
|
||||||
{ TFPDepencencies }
|
{ TFPDepencencies }
|
||||||
|
|
||||||
{ TFPDependencies }
|
|
||||||
|
|
||||||
TFPDependencies = Class(TStreamCollection)
|
TFPDependencies = Class(TStreamCollection)
|
||||||
private
|
private
|
||||||
function GetDependency(Index : Integer): TFPDependency;
|
function GetDependency(Index : Integer): TFPDependency;
|
||||||
|
@ -637,17 +637,17 @@ end;
|
|||||||
procedure TFPXMLRepositoryHandler.DoXMLToPackages(E: TDomElement; PS: TFPPackages);
|
procedure TFPXMLRepositoryHandler.DoXMLToPackages(E: TDomElement; PS: TFPPackages);
|
||||||
|
|
||||||
Var
|
Var
|
||||||
PSN,PN : TDomElement;
|
PN : TDomElement;
|
||||||
P : TFPPackage;
|
P : TFPPackage;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
PN:=FindNextElement(PSN.FirstChild,SNodePackage);
|
PN:=FindNextElement(E.FirstChild,SNodePackage);
|
||||||
While (PN<>Nil) do
|
While (PN<>Nil) do
|
||||||
begin
|
begin
|
||||||
P:=PS.AddPackage('');
|
P:=PS.AddPackage('');
|
||||||
try
|
try
|
||||||
DoXMLToPackage(PN,P);
|
DoXMLToPackage(PN,P);
|
||||||
except
|
finally
|
||||||
P.Free;
|
P.Free;
|
||||||
end;
|
end;
|
||||||
PN:=FindNextElement(PN.NextSibling,SNodePackage);
|
PN:=FindNextElement(PN.NextSibling,SNodePackage);
|
||||||
@ -677,7 +677,7 @@ begin
|
|||||||
P:=R.AddPackage('');
|
P:=R.AddPackage('');
|
||||||
try
|
try
|
||||||
DoXMLToPackage(PN,P);
|
DoXMLToPackage(PN,P);
|
||||||
except
|
finally
|
||||||
P.Free;
|
P.Free;
|
||||||
end;
|
end;
|
||||||
PN:=FindNextElement(PN.NextSibling,SNodePackage);
|
PN:=FindNextElement(PN.NextSibling,SNodePackage);
|
||||||
|
@ -18,10 +18,21 @@ type
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{ TCreateArchive }
|
||||||
|
|
||||||
|
TCreateArchive = Class(TPackagehandler)
|
||||||
|
Private
|
||||||
|
Procedure CreateArchive;
|
||||||
|
Public
|
||||||
|
Function Execute(const Args:TActionArgs):boolean;override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
uses
|
uses
|
||||||
|
fprepos,
|
||||||
|
fpxmlrep,
|
||||||
zipper,
|
zipper,
|
||||||
uriparser,
|
uriparser,
|
||||||
pkgglobals,
|
pkgglobals,
|
||||||
@ -54,7 +65,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
{ TFPMakeCompiler }
|
{ TUnzipArchive }
|
||||||
|
|
||||||
Procedure TUnzipArchive.UnzipArchive;
|
Procedure TUnzipArchive.UnzipArchive;
|
||||||
Var
|
Var
|
||||||
@ -91,6 +102,48 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{ TCreateArchive }
|
||||||
|
|
||||||
|
procedure TCreateArchive.CreateArchive;
|
||||||
|
var
|
||||||
|
P : TFPPackage;
|
||||||
|
PS : TFPPackages;
|
||||||
|
X : TFPXMLRepositoryHandler;
|
||||||
|
i : integer;
|
||||||
|
begin
|
||||||
|
if assigned(CurrentPackage) then
|
||||||
|
Error(SErrOnlyLocalDir);
|
||||||
|
{ Generate manifest.xml if it doesn't exists yet }
|
||||||
|
if not FileExists(PackageManifestFile) then
|
||||||
|
ExecuteAction(CurrentPackage,'fpmakemanifest');
|
||||||
|
|
||||||
|
|
||||||
|
PS:=TFPPackages.Create(TFPPackage);
|
||||||
|
X:=TFPXMLRepositoryHandler.Create;
|
||||||
|
With X do
|
||||||
|
try
|
||||||
|
LoadFromXml(PS,PackageManifestFile);
|
||||||
|
finally
|
||||||
|
Free;
|
||||||
|
end;
|
||||||
|
|
||||||
|
for i:=0 to PS.Count-1 do
|
||||||
|
begin
|
||||||
|
P:=PS[i];
|
||||||
|
Writeln(P.Name);
|
||||||
|
Writeln(P.FileName);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function TCreateArchive.Execute(const Args: TActionArgs): boolean;
|
||||||
|
begin
|
||||||
|
CreateArchive;
|
||||||
|
Result:=true;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
initialization
|
initialization
|
||||||
RegisterPkgHandler('unziparchive',TUnzipArchive);
|
RegisterPkgHandler('unziparchive',TUnzipArchive);
|
||||||
|
RegisterPkgHandler('createarchive',TCreateArchive);
|
||||||
end.
|
end.
|
||||||
|
@ -42,6 +42,14 @@ type
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{ TFPMakeRunnerManifest }
|
||||||
|
|
||||||
|
TFPMakeRunnerManifest = Class(TFPMakeRunner)
|
||||||
|
Public
|
||||||
|
Function Execute(const Args:TActionArgs):boolean;override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
uses
|
uses
|
||||||
@ -54,6 +62,8 @@ uses
|
|||||||
Procedure TFPMakeCompiler.CompileFPMake;
|
Procedure TFPMakeCompiler.CompileFPMake;
|
||||||
Var
|
Var
|
||||||
O,C : String;
|
O,C : String;
|
||||||
|
RTLDir,
|
||||||
|
FPPkgDir,
|
||||||
FPMakeBin,
|
FPMakeBin,
|
||||||
FPMakeSrc : string;
|
FPMakeSrc : string;
|
||||||
HaveFpmake : boolean;
|
HaveFpmake : boolean;
|
||||||
@ -75,9 +85,21 @@ begin
|
|||||||
begin
|
begin
|
||||||
if Not HaveFPMake then
|
if Not HaveFPMake then
|
||||||
Error(SErrMissingFPMake);
|
Error(SErrMissingFPMake);
|
||||||
|
{ Detect installed units directories }
|
||||||
|
if not DirectoryExists(Defaults.FPMakeUnitDir) then
|
||||||
|
Error(SErrMissingDirectory,[Defaults.FPMakeUnitDir]);
|
||||||
|
RTLDir:=Defaults.FPMakeUnitDir+'..'+PathDelim+'rtl'+PathDelim;
|
||||||
|
if not DirectoryExists(RTLDir) then
|
||||||
|
Error(SErrMissingDirectory,[RTLDir]);
|
||||||
|
FPPkgDir:=Defaults.FPMakeUnitDir+'..'+PathDelim+'fppkg'+PathDelim;
|
||||||
|
if not DirectoryExists(FPPkgDir) then
|
||||||
|
FPPkgDir:='';
|
||||||
{ Call compiler }
|
{ Call compiler }
|
||||||
C:=Defaults.FPMakeCompiler;
|
C:=Defaults.FPMakeCompiler;
|
||||||
O:='-vi -n -Fu'+Defaults.FPMakeUnitDir+' -Fu'+Defaults.FPMakeUnitDir+'..'+PathDelim+'rtl'+PathDelim+' '+FPmakeSrc;
|
O:='-vi -n -Fu'+Defaults.FPMakeUnitDir+' -Fu'+RTLDir;
|
||||||
|
// if FPPkgDir<>'' then
|
||||||
|
// O:=O+' -Fu'+FPPkgDir+' -Fafpmkpkg';
|
||||||
|
O:=O+' '+FPmakeSrc;
|
||||||
If ExecuteProcess(C,O)<>0 then
|
If ExecuteProcess(C,O)<>0 then
|
||||||
Error(SErrFailedToCompileFPCMake)
|
Error(SErrFailedToCompileFPCMake)
|
||||||
end
|
end
|
||||||
@ -123,9 +145,17 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function TFPMakeRunnerManifest.Execute(const Args:TActionArgs):boolean;
|
||||||
|
begin
|
||||||
|
result:=(RunFPMake('manifest')=0);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
initialization
|
initialization
|
||||||
RegisterPkgHandler('compilefpmake',TFPMakeCompiler);
|
RegisterPkgHandler('compilefpmake',TFPMakeCompiler);
|
||||||
RegisterPkgHandler('fpmakebuild',TFPMakeRunnerBuild);
|
RegisterPkgHandler('fpmakebuild',TFPMakeRunnerBuild);
|
||||||
RegisterPkgHandler('fpmakeinstall',TFPMakeRunnerInstall);
|
RegisterPkgHandler('fpmakeinstall',TFPMakeRunnerInstall);
|
||||||
|
RegisterPkgHandler('fpmakemanifest',TFPMakeRunnerManifest);
|
||||||
end.
|
end.
|
||||||
|
@ -48,8 +48,9 @@ type
|
|||||||
Function ExecuteProcess(Const Prog,Args:String):Integer;
|
Function ExecuteProcess(Const Prog,Args:String):Integer;
|
||||||
Procedure SetCurrentDir(Const ADir:String);
|
Procedure SetCurrentDir(Const ADir:String);
|
||||||
function PackageBuildPath:String;
|
function PackageBuildPath:String;
|
||||||
function PackageRemoteArchive: String;
|
function PackageRemoteArchive:String;
|
||||||
function PackageLocalArchive:String;
|
function PackageLocalArchive:String;
|
||||||
|
function PackageManifestFile:String;
|
||||||
Public
|
Public
|
||||||
Constructor Create(AOwner:TComponent;APackage:TFPPackage); virtual;
|
Constructor Create(AOwner:TComponent;APackage:TFPPackage); virtual;
|
||||||
function PackageLogPrefix:String;
|
function PackageLogPrefix:String;
|
||||||
@ -170,6 +171,12 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function TPackageHandler.PackageManifestFile: String;
|
||||||
|
begin
|
||||||
|
Result:='manifest.xml';
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
function TPackageHandler.PackageLogPrefix:String;
|
function TPackageHandler.PackageLogPrefix:String;
|
||||||
begin
|
begin
|
||||||
if assigned(CurrentPackage) then
|
if assigned(CurrentPackage) then
|
||||||
|
@ -11,7 +11,9 @@ Resourcestring
|
|||||||
SErrMissingFPC = 'Could not find a fpc executable in the PATH';
|
SErrMissingFPC = 'Could not find a fpc executable in the PATH';
|
||||||
SErrMissingFPMake = 'Missing configuration fpmake.pp';
|
SErrMissingFPMake = 'Missing configuration fpmake.pp';
|
||||||
SErrMissingMakefilefpc = 'Missing configuration Makefile.fpc';
|
SErrMissingMakefilefpc = 'Missing configuration Makefile.fpc';
|
||||||
|
SErrMissingDirectory = 'Missing directory "%s"';
|
||||||
SErrNoPackageSpecified = 'No package specified';
|
SErrNoPackageSpecified = 'No package specified';
|
||||||
|
SErrOnlyLocalDir = 'The speficied command "%s" works only on current dir, not on a (remote) package';
|
||||||
SErrRunning = 'The FPC make tool encountered the following error:';
|
SErrRunning = 'The FPC make tool encountered the following error:';
|
||||||
SErrActionAlreadyRegistered= 'Action "%s" is already registered';
|
SErrActionAlreadyRegistered= 'Action "%s" is already registered';
|
||||||
SErrActionNotFound = 'Action "%s" is not supported';
|
SErrActionNotFound = 'Action "%s" is not supported';
|
||||||
|
Loading…
Reference in New Issue
Block a user