diff --git a/ide/lazarusidestrconsts.pas b/ide/lazarusidestrconsts.pas index d62a3a391e..4016e81a1d 100644 --- a/ide/lazarusidestrconsts.pas +++ b/ide/lazarusidestrconsts.pas @@ -255,13 +255,15 @@ resourcestring lisConfigDirectory = 'Lazarus config directory'; lisPkgMacroPackageDirectoryParameterIsPackageID = 'Package directory. ' - +'Parameter is package ID'; + +'Parameter is package ID, e.g. "Name" or "Name 1.0"'; lisPkgMacroPackageSourceSearchPathParameterIsPackageID = 'Package source ' - +'search path. Parameter is package ID'; + +'search path. Parameter is package ID, e.g. "Name" or "Name 1.0"'; lisPkgMacroPackageUnitSearchPathParameterIsPackageID = 'Package unit search ' - +'path. Parameter is package ID'; + +'path. Parameter is package ID, e.g. "Name" or "Name 1.0"'; lisPkgMacroPackageIncludeFilesSearchPathParameterIsPackageID = 'Package ' - +'include files search path. Parameter is package ID'; + +'include files search path. Parameter is package ID, e.g. "Name" or "Name 1.0"'; + lisPkgMacroPackageNameParameterIsPackageID = 'Package name. Parameter is package ID, e.g. "Name" or "Name 1.0"'; + lisPkgMacroPackageOutputDirectoryParameterIsPackageID = 'Package output directory. Parameter is package ID, e.g. "Name" or "Name 1.0"'; // main bar menu lisMenuFile = '&File'; diff --git a/packager/packagedefs.pas b/packager/packagedefs.pas index d47e7c3fc6..cb1176b3d8 100644 --- a/packager/packagedefs.pas +++ b/packager/packagedefs.pas @@ -2229,24 +2229,42 @@ begin end; end; + if s = '' then + begin // check local macros - if SysUtils.CompareText(MacroName,'PkgOutDir')=0 then begin - Handled:=true; - if Data=CompilerOptionMacroNormal then - s:=CompilerOptions.ParsedOpts.GetParsedValue(pcosOutputDir) - else - s:=CompilerOptions.ParsedOpts.GetParsedPIValue(pcosOutputDir); - exit; - end - else if SysUtils.CompareText(MacroName,'PkgDir')=0 then begin - Handled:=true; - s:=FDirectory; - exit; - end - else if SysUtils.CompareText(MacroName,'PkgName')=0 then begin - Handled:=true; - s:=Name; - exit; + if SysUtils.CompareText(MacroName,'PkgOutDir')=0 then begin + Handled:=true; + if Data=CompilerOptionMacroNormal then + s:=CompilerOptions.ParsedOpts.GetParsedValue(pcosOutputDir) + else + s:=CompilerOptions.ParsedOpts.GetParsedPIValue(pcosOutputDir); + exit; + end + else if SysUtils.CompareText(MacroName,'PkgDir')=0 then begin + Handled:=true; + s:=FDirectory; + exit; + end + else if SysUtils.CompareText(MacroName,'PkgName')=0 then begin + Handled:=true; + s:=Name; + exit; + end + else if SysUtils.CompareText(MacroName,'PkgIncPath')=0 then begin + Handled:=true; + s:=GetIncludePath(false); + exit; + end + else if SysUtils.CompareText(MacroName,'PkgSrcPath')=0 then begin + Handled:=true; + s:=SourceDirectories.CreateSearchPathFromAllFiles; + exit; + end + else if SysUtils.CompareText(MacroName,'PkgUnitPath')=0 then begin + Handled:=true; + s:=GetUnitPath(false); + exit; + end; end; // check global macros diff --git a/packager/packagesystem.pas b/packager/packagesystem.pas index 419066194c..7722422eea 100644 --- a/packager/packagesystem.pas +++ b/packager/packagesystem.pas @@ -251,11 +251,16 @@ type var {%H-}Abort: boolean): string; function MacroFunctionPkgIncPath(const s: string; const {%H-}Data: PtrInt; var {%H-}Abort: boolean): string; + function MacroFunctionPkgName(const s: string; const {%H-}Data: PtrInt; + var {%H-}Abort: boolean): string; + function MacroFunctionPkgOutDir(const s: string; const {%H-}Data: PtrInt; + var {%H-}Abort: boolean): string; function MacroFunctionCTPkgDir(Data: Pointer): boolean; function MacroFunctionCTPkgSrcPath(Data: Pointer): boolean; function MacroFunctionCTPkgUnitPath(Data: Pointer): boolean; function MacroFunctionCTPkgIncPath(Data: Pointer): boolean; function MacroFunctionCTPkgName(Data: Pointer): boolean; + function MacroFunctionCTPkgOutDir(Data: Pointer): boolean; function GetPackageFromMacroParameter(const TheID: string; out APackage: TLazPackage): boolean; public @@ -1027,6 +1032,12 @@ begin GlobalMacroList.Add(TTransferMacro.Create('PkgIncPath','', lisPkgMacroPackageIncludeFilesSearchPathParameterIsPackageID, @MacroFunctionPkgIncPath,[])); + GlobalMacroList.Add(TTransferMacro.Create('PkgName','', + lisPkgMacroPackageNameParameterIsPackageID, + @MacroFunctionPkgName,[])); + GlobalMacroList.Add(TTransferMacro.Create('PkgOutDir','', + lisPkgMacroPackageOutputDirectoryParameterIsPackageID, + @MacroFunctionPkgOutDir,[])); end; end; @@ -1182,6 +1193,23 @@ begin Result:=''; end; +function TLazPackageGraph.MacroFunctionPkgName(const s: string; + const Data: PtrInt; var Abort: boolean): string; +begin + Result := s; +end; + +function TLazPackageGraph.MacroFunctionPkgOutDir(const s: string; + const Data: PtrInt; var Abort: boolean): string; +var + APackage: TLazPackage; +begin + if GetPackageFromMacroParameter(s,APackage) then + Result:=APackage.GetOutputDirectory + else + Result:=''; +end; + function TLazPackageGraph.MacroFunctionCTPkgDir(Data: Pointer): boolean; var FuncData: PReadFunctionData; @@ -1235,6 +1263,17 @@ begin Result:=true; end; +function TLazPackageGraph.MacroFunctionCTPkgOutDir(Data: Pointer): boolean; +var + FuncData: PReadFunctionData; + APackage: TLazPackage; +begin + FuncData:=PReadFunctionData(Data); + Result:=GetPackageFromMacroParameter(FuncData^.Param,APackage); + if Result then + FuncData^.Result:=APackage.GetOutputDirectory; +end; + function TLazPackageGraph.GetPackageFromMacroParameter(const TheID: string; out APackage: TLazPackage): boolean; var diff --git a/packager/pkgmanager.pas b/packager/pkgmanager.pas index 8d6ea5828b..37050060fd 100644 --- a/packager/pkgmanager.pas +++ b/packager/pkgmanager.pas @@ -2973,6 +2973,8 @@ begin 'PKGINCPATH',nil,@PackageGraph.MacroFunctionCTPkgIncPath); CodeToolBoss.DefineTree.MacroFunctions.AddExtended( 'PKGNAME',nil,@PackageGraph.MacroFunctionCTPkgName); + CodeToolBoss.DefineTree.MacroFunctions.AddExtended( + 'PKGOUTDIR',nil,@PackageGraph.MacroFunctionCTPkgOutDir); LazPackageDescriptors:=TLazPackageDescriptors.Create; LazPackageDescriptors.AddDefaultPackageDescriptors;