IDE: package macros with parameters usable in packages, new macro PkgOutDir, from Luiz Americo

git-svn-id: trunk@50472 -
This commit is contained in:
mattias 2015-11-22 18:31:00 +00:00
parent ec869d657e
commit 674d60d033
4 changed files with 82 additions and 21 deletions

View File

@ -255,13 +255,15 @@ resourcestring
lisConfigDirectory = 'Lazarus config directory'; lisConfigDirectory = 'Lazarus config directory';
lisPkgMacroPackageDirectoryParameterIsPackageID = 'Package directory. ' lisPkgMacroPackageDirectoryParameterIsPackageID = 'Package directory. '
+'Parameter is package ID'; +'Parameter is package ID, e.g. "Name" or "Name 1.0"';
lisPkgMacroPackageSourceSearchPathParameterIsPackageID = 'Package source ' 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 ' lisPkgMacroPackageUnitSearchPathParameterIsPackageID = 'Package unit search '
+'path. Parameter is package ID'; +'path. Parameter is package ID, e.g. "Name" or "Name 1.0"';
lisPkgMacroPackageIncludeFilesSearchPathParameterIsPackageID = 'Package ' 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 // main bar menu
lisMenuFile = '&File'; lisMenuFile = '&File';

View File

@ -2229,6 +2229,8 @@ begin
end; end;
end; end;
if s = '' then
begin
// check local macros // check local macros
if SysUtils.CompareText(MacroName,'PkgOutDir')=0 then begin if SysUtils.CompareText(MacroName,'PkgOutDir')=0 then begin
Handled:=true; Handled:=true;
@ -2247,6 +2249,22 @@ begin
Handled:=true; Handled:=true;
s:=Name; s:=Name;
exit; 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; end;
// check global macros // check global macros

View File

@ -251,11 +251,16 @@ type
var {%H-}Abort: boolean): string; var {%H-}Abort: boolean): string;
function MacroFunctionPkgIncPath(const s: string; const {%H-}Data: PtrInt; function MacroFunctionPkgIncPath(const s: string; const {%H-}Data: PtrInt;
var {%H-}Abort: boolean): string; 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 MacroFunctionCTPkgDir(Data: Pointer): boolean;
function MacroFunctionCTPkgSrcPath(Data: Pointer): boolean; function MacroFunctionCTPkgSrcPath(Data: Pointer): boolean;
function MacroFunctionCTPkgUnitPath(Data: Pointer): boolean; function MacroFunctionCTPkgUnitPath(Data: Pointer): boolean;
function MacroFunctionCTPkgIncPath(Data: Pointer): boolean; function MacroFunctionCTPkgIncPath(Data: Pointer): boolean;
function MacroFunctionCTPkgName(Data: Pointer): boolean; function MacroFunctionCTPkgName(Data: Pointer): boolean;
function MacroFunctionCTPkgOutDir(Data: Pointer): boolean;
function GetPackageFromMacroParameter(const TheID: string; function GetPackageFromMacroParameter(const TheID: string;
out APackage: TLazPackage): boolean; out APackage: TLazPackage): boolean;
public public
@ -1027,6 +1032,12 @@ begin
GlobalMacroList.Add(TTransferMacro.Create('PkgIncPath','', GlobalMacroList.Add(TTransferMacro.Create('PkgIncPath','',
lisPkgMacroPackageIncludeFilesSearchPathParameterIsPackageID, lisPkgMacroPackageIncludeFilesSearchPathParameterIsPackageID,
@MacroFunctionPkgIncPath,[])); @MacroFunctionPkgIncPath,[]));
GlobalMacroList.Add(TTransferMacro.Create('PkgName','',
lisPkgMacroPackageNameParameterIsPackageID,
@MacroFunctionPkgName,[]));
GlobalMacroList.Add(TTransferMacro.Create('PkgOutDir','',
lisPkgMacroPackageOutputDirectoryParameterIsPackageID,
@MacroFunctionPkgOutDir,[]));
end; end;
end; end;
@ -1182,6 +1193,23 @@ begin
Result:=''; Result:='';
end; 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; function TLazPackageGraph.MacroFunctionCTPkgDir(Data: Pointer): boolean;
var var
FuncData: PReadFunctionData; FuncData: PReadFunctionData;
@ -1235,6 +1263,17 @@ begin
Result:=true; Result:=true;
end; 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; function TLazPackageGraph.GetPackageFromMacroParameter(const TheID: string;
out APackage: TLazPackage): boolean; out APackage: TLazPackage): boolean;
var var

View File

@ -2973,6 +2973,8 @@ begin
'PKGINCPATH',nil,@PackageGraph.MacroFunctionCTPkgIncPath); 'PKGINCPATH',nil,@PackageGraph.MacroFunctionCTPkgIncPath);
CodeToolBoss.DefineTree.MacroFunctions.AddExtended( CodeToolBoss.DefineTree.MacroFunctions.AddExtended(
'PKGNAME',nil,@PackageGraph.MacroFunctionCTPkgName); 'PKGNAME',nil,@PackageGraph.MacroFunctionCTPkgName);
CodeToolBoss.DefineTree.MacroFunctions.AddExtended(
'PKGOUTDIR',nil,@PackageGraph.MacroFunctionCTPkgOutDir);
LazPackageDescriptors:=TLazPackageDescriptors.Create; LazPackageDescriptors:=TLazPackageDescriptors.Create;
LazPackageDescriptors.AddDefaultPackageDescriptors; LazPackageDescriptors.AddDefaultPackageDescriptors;