* Determine the path of the <currentdirectory> package within the

PackageStructure. Set it to the current-directory at application start.
   This because the creation of manifest files could change the current
   directory while scanning for packages.

git-svn-id: trunk@34670 -
This commit is contained in:
joost 2016-10-08 16:56:20 +00:00
parent 1d2dca50a9
commit 295c274940
3 changed files with 22 additions and 17 deletions

View File

@ -124,20 +124,7 @@ end;
function PackageBuildPath(APackage:TFPPackage):String;
begin
if APackage.Name=CurrentDirPackageName then
begin
// It could be that to resolve some dependencies, the current directory changes. The first time
// PackageBuildPath is called the dependencies are not resolved yet, so store the current directory
// for later calls.
if CurrentDir='' then
begin
Result:='.';
CurrentDir := SysUtils.GetCurrentDir;
end
else
Result:=CurrentDir;
end
else if (APackage.Name=CmdLinePackageName) or (APackage.Name=URLPackageName) then
if (APackage.Name=CmdLinePackageName) or (APackage.Name=URLPackageName) then
Result:=GFPpkg.Options.GlobalSection.BuildDir+ChangeFileExt(ExtractFileName(APackage.LocalFileName),'')
else if Assigned(APackage.PackagesStructure) and (APackage.PackagesStructure.GetBuildPathDirectory(APackage)<>'') then
Result:=APackage.PackagesStructure.GetBuildPathDirectory(APackage)

View File

@ -32,7 +32,7 @@ type
FPath: string;
FCompilerOptions: TCompilerOptions;
public
constructor Create(AOwner: TComponent; APath: string; ACompilerOptions: TCompilerOptions);
constructor Create(AOwner: TComponent; APath: string; ACompilerOptions: TCompilerOptions); virtual;
end;
{ TFPInstalledPackagesStructure }
@ -53,7 +53,9 @@ type
TFPCurrentDirectoryPackagesStructure = class(TFPCustomFileSystemPackagesStructure)
public
constructor Create(AOwner: TComponent; APath: string; ACompilerOptions: TCompilerOptions); override;
function AddPackagesToRepository(ARepository: TFPRepository): Boolean; override;
function GetBuildPathDirectory(APackage: TFPPackage): string; override;
end;
{ TFPOriginalSourcePackagesStructure }
@ -155,11 +157,27 @@ end;
{ TFPCurrentDirectoryPackagesStructure }
constructor TFPCurrentDirectoryPackagesStructure.Create(AOwner: TComponent; APath: string;
ACompilerOptions: TCompilerOptions);
begin
if APath = '' then
APath := GetCurrentDir;
inherited Create(AOwner, APath, ACompilerOptions);
end;
function TFPCurrentDirectoryPackagesStructure.AddPackagesToRepository(
ARepository: TFPRepository): Boolean;
var
Package: TFPPackage;
begin
Result := True;
ARepository.AddPackage(CurrentDirPackageName);
Package := ARepository.AddPackage(CurrentDirPackageName);
Package.PackagesStructure := Self;
end;
function TFPCurrentDirectoryPackagesStructure.GetBuildPathDirectory(APackage: TFPPackage): string;
begin
Result := FPath;
end;
{ TFPRemotePackagesStructure }

View File

@ -370,7 +370,7 @@ begin
Repo.RepositoryType := fprtAvailable;
Repo.RepositoryName := 'CurrentDirectory';
Repo.Description := 'Package in current directory';
InstPackages := TFPCurrentDirectoryPackagesStructure.Create(GFPpkg, '', GFPpkg.CompilerOptions);
InstPackages := TFPCurrentDirectoryPackagesStructure.Create(GFPpkg, OldCurrDir, GFPpkg.CompilerOptions);
InstPackages.AddPackagesToRepository(Repo);
Repo.DefaultPackagesStructure := InstPackages;
end;