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';
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';

View File

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

View File

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

View File

@ -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;