mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-12 17:09:35 +02:00
* Added ability to generate target-dependencies
git-svn-id: trunk@20579 -
This commit is contained in:
parent
0d545c68de
commit
ae5c440864
@ -89,6 +89,7 @@ function GetTargetsMacro(aTargets: TTargets): string;
|
||||
var
|
||||
ATarget: TTarget;
|
||||
i: Integer;
|
||||
d: integer;
|
||||
begin
|
||||
if aTargets.Count=0 then
|
||||
Exit;
|
||||
@ -100,6 +101,15 @@ begin
|
||||
result := result + GetConditionalAdd(ATarget.Name + ATarget.Extension, ATarget.CPUs, ATarget.OSes,' T := AddUnit');
|
||||
if atarget.ResourceStrings then
|
||||
result := result + ' T.Resourcestrings := True;'+LineEnding;
|
||||
for d := 0 to aTarget.Dependencies.Count-1 do
|
||||
begin
|
||||
if ATarget.Dependencies[d].DependencyType=depInclude then
|
||||
result := result + ' T.Dependencies.AddInclude('''+ATarget.Dependencies[d].Value+''');'+LineEnding
|
||||
else if ATarget.Dependencies[d].DependencyType=depUnit then
|
||||
result := result + ' T.Dependencies.AddUnit('''+ATarget.Dependencies[d].Value+''');'+LineEnding
|
||||
else
|
||||
result := result + ' T.Dependencies.Add('''+ATarget.Dependencies[d].Value+''');'+LineEnding;
|
||||
end;
|
||||
end;
|
||||
result := result +
|
||||
' end;';
|
||||
|
@ -108,13 +108,13 @@ begin
|
||||
else if AJsonObject.Names[m] = ValueCaption then
|
||||
ADependency.Value := AJsonObject.Items[m].AsString
|
||||
else
|
||||
raise Exception.CreateFmt('Unknown dependency property ''%s''.',[AJsonObject.Names[m]]);
|
||||
raise Exception.CreateFmt('Unknown conditional property ''%s''.',[AJsonObject.Names[m]]);
|
||||
end {case}
|
||||
end;
|
||||
|
||||
end
|
||||
else
|
||||
raise Exception.CreateFmt('Invalid dependency. (%s)',[AJsonData.AsString]);
|
||||
raise Exception.CreateFmt('Invalid conditional. (%s)',[AJsonData.AsString]);
|
||||
end;
|
||||
|
||||
procedure ParseConditionalArray(ACondStrings: TConditionalStrings; AJsonData: TJSonData; ValueCaption: string);
|
||||
@ -132,6 +132,54 @@ begin
|
||||
ParseConditionalString(ACondStrings.add(''), AJsonData, ValueCaption);
|
||||
end;
|
||||
|
||||
procedure ParseDependenciesArray(ACondStrings: TDependencies; AJsonData: TJSonData; ValueCaption: string; aDepType: TDependencyType);
|
||||
var
|
||||
AJSonArray: TJSONArray;
|
||||
n: Integer;
|
||||
|
||||
function GetDep: TDependency;
|
||||
begin
|
||||
if aDepType=depInclude then
|
||||
result := ACondStrings.AddInclude('')
|
||||
else if aDepType=depUnit then
|
||||
result := ACondStrings.AddUnit('')
|
||||
else
|
||||
result := ACondStrings.Add('');
|
||||
end;
|
||||
|
||||
begin
|
||||
if AJsonData.JSONType = jtArray then
|
||||
begin
|
||||
AJSonArray := AJsonData as TJSONArray;
|
||||
for n := 0 to AJSonArray.Count-1 do
|
||||
ParseConditionalString(GetDep, AJSonArray.Items[n], ValueCaption);
|
||||
end
|
||||
else
|
||||
ParseConditionalString(GetDep, AJsonData, ValueCaption);
|
||||
end;
|
||||
|
||||
procedure ParseDependencies(aDependencies: TDependencies; aJSONData: TJSONData);
|
||||
var
|
||||
AJsonObject: TJSONObject;
|
||||
m: Integer;
|
||||
begin
|
||||
if aJSONData.JSONType<>jtObject then
|
||||
raise exception.create('A target''s dependency has to be an object which encapsulated the different types of dependencies.')
|
||||
else
|
||||
begin
|
||||
AJsonObject := aJSONData as TJSONObject;
|
||||
for m := 0 to AJsonObject.Count-1 do
|
||||
begin
|
||||
case AJsonObject.Names[m] of
|
||||
'includefiles' : ParseDependenciesArray(aDependencies, AJsonObject.items[m],'filename', depInclude);
|
||||
'units' : ParseDependenciesArray(aDependencies, AJsonObject.items[m],'filename', depUnit);
|
||||
else
|
||||
raise Exception.CreateFmt('Unknown dependency property ''%s''.',[AJsonObject.Names[m]]);
|
||||
end {case}
|
||||
end;
|
||||
end
|
||||
end;
|
||||
|
||||
procedure ParseUnitTarget(aTarget: TTarget; aJSONData: TJSONData);
|
||||
var
|
||||
AJsonObject: TJSONObject;
|
||||
@ -149,6 +197,7 @@ begin
|
||||
'resourcestrings' : atarget.ResourceStrings := (AJsonObject.items[m] as TJSONBoolean).AsBoolean;
|
||||
'oses' : aTarget.OSes := ExtStringToOSes(AJsonObject.Items[m].AsString);
|
||||
'cpus' : aTarget.cpus := ExtStringToCPUs(AJsonObject.Items[m].AsString);
|
||||
'dependencies' : ParseDependencies(aTarget.Dependencies, AJsonObject.Items[m]);
|
||||
else
|
||||
raise Exception.CreateFmt('Unknown targets property ''%s''.',[AJsonObject.Names[m]]);
|
||||
end {case}
|
||||
|
Loading…
Reference in New Issue
Block a user