Browse Source

* 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 -

joost 8 years ago
parent
commit
295c274940

+ 1 - 14
packages/fppkg/src/pkghandler.pp

@@ -124,20 +124,7 @@ end;
 
 
 function PackageBuildPath(APackage:TFPPackage):String;
 function PackageBuildPath(APackage:TFPPackage):String;
 begin
 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),'')
     Result:=GFPpkg.Options.GlobalSection.BuildDir+ChangeFileExt(ExtractFileName(APackage.LocalFileName),'')
   else if Assigned(APackage.PackagesStructure) and (APackage.PackagesStructure.GetBuildPathDirectory(APackage)<>'') then
   else if Assigned(APackage.PackagesStructure) and (APackage.PackagesStructure.GetBuildPathDirectory(APackage)<>'') then
     Result:=APackage.PackagesStructure.GetBuildPathDirectory(APackage)
     Result:=APackage.PackagesStructure.GetBuildPathDirectory(APackage)

+ 20 - 2
packages/fppkg/src/pkgpackagesstructure.pp

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

+ 1 - 1
utils/fppkg/fppkg.pp

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