mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-21 08:49:26 +02:00
* quote parameters for compiler command line
git-svn-id: trunk@10131 -
This commit is contained in:
parent
3ffcb2244e
commit
2400207ead
@ -1117,6 +1117,50 @@ begin
|
||||
end;
|
||||
|
||||
|
||||
function maybequoted(const s:string):string;
|
||||
const
|
||||
{$IFDEF MSWINDOWS}
|
||||
FORBIDDEN_CHARS = ['!', '@', '#', '$', '%', '^', '&', '*', '(', ')',
|
||||
'{', '}', '''', '`', '~'];
|
||||
{$ELSE}
|
||||
FORBIDDEN_CHARS = ['!', '@', '#', '$', '%', '^', '&', '*', '(', ')',
|
||||
'{', '}', '''', ':', '\', '`', '~'];
|
||||
{$ENDIF}
|
||||
var
|
||||
s1 : string;
|
||||
i : integer;
|
||||
quoted : boolean;
|
||||
begin
|
||||
quoted:=false;
|
||||
s1:='"';
|
||||
for i:=1 to length(s) do
|
||||
begin
|
||||
case s[i] of
|
||||
'"' :
|
||||
begin
|
||||
quoted:=true;
|
||||
s1:=s1+'\"';
|
||||
end;
|
||||
' ',
|
||||
#128..#255 :
|
||||
begin
|
||||
quoted:=true;
|
||||
s1:=s1+s[i];
|
||||
end;
|
||||
else begin
|
||||
if s[i] in FORBIDDEN_CHARS then
|
||||
quoted:=True;
|
||||
s1:=s1+s[i];
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
if quoted then
|
||||
maybequoted:=s1+'"'
|
||||
else
|
||||
maybequoted:=s;
|
||||
end;
|
||||
|
||||
|
||||
// Callback for Sysutils getapplicationname.
|
||||
Function GetFPMakeName : String;
|
||||
|
||||
@ -3408,33 +3452,37 @@ end;
|
||||
Function TBuildEngine.GetCompilerCommand(APackage : TPackage; ATarget : TTarget) : String;
|
||||
Var
|
||||
PD,OD : String;
|
||||
L : TStringList;
|
||||
L,Args : TStringList;
|
||||
|
||||
i : Integer;
|
||||
begin
|
||||
Args:=TStringList.Create;
|
||||
Args.Duplicates:=dupIgnore;
|
||||
|
||||
PD:=GetPackageDir(APackage,True);
|
||||
|
||||
Result := '';
|
||||
|
||||
//compiler configuration
|
||||
if Defaults.NoFPCCfg then
|
||||
Result := '-n';
|
||||
Args.Add('-n');
|
||||
|
||||
// Target OS
|
||||
Result:=Result+' -T'+OSToString(Defaults.OS);
|
||||
|
||||
// Compile mode
|
||||
If ATarget.Mode<>cmFPC then
|
||||
Result:=Result+' -M'+ModeToString(ATarget.Mode)
|
||||
Args.Add('-M'+ModeToString(ATarget.Mode))
|
||||
else If Defaults.Mode<>cmFPC then
|
||||
Result:=Result+' -M'+ModeToString(Defaults.Mode);
|
||||
Args.Add('-M'+ModeToString(Defaults.Mode));
|
||||
// Output file paths
|
||||
If ATarget.TargetType in ProgramTargets then
|
||||
begin
|
||||
OD:=GetBinOutputDir(APackage,True);
|
||||
Result:=Result+' -FE' + ExtractRelativePath(PD,OD);
|
||||
Args.Add('-FE' + ExtractRelativePath(PD,OD));
|
||||
end;
|
||||
OD:=GetUnitsOutputDir(APackage,True);
|
||||
Result := Result + ' -FU' + ExtractRelativePath(PD,OD);
|
||||
Args.Add('-FU' + ExtractRelativePath(PD,OD));
|
||||
// Object Path
|
||||
L:=TStringList.Create;
|
||||
L.Sorted:=true;
|
||||
@ -3442,7 +3490,7 @@ begin
|
||||
AddConditionalStrings(L,APackage.ObjectPath,Defaults.CPU,Defaults.OS);
|
||||
AddConditionalStrings(L,ATarget.ObjectPath,Defaults.CPU,Defaults.OS);
|
||||
for i:=0 to L.Count-1 do
|
||||
Result:=Result+' -Fo'+L[i];
|
||||
Args.Add('-Fo'+L[i]);
|
||||
FreeAndNil(L);
|
||||
// Unit Dirs
|
||||
L:=TStringList.Create;
|
||||
@ -3452,7 +3500,7 @@ begin
|
||||
AddConditionalStrings(L,APackage.UnitPath,Defaults.CPU,Defaults.OS);
|
||||
AddConditionalStrings(L,ATarget.UnitPath,Defaults.CPU,Defaults.OS);
|
||||
for i:=0 to L.Count-1 do
|
||||
Result:=Result+' -Fu'+L[i];
|
||||
Args.Add('-Fu'+L[i]);
|
||||
FreeAndNil(L);
|
||||
// Include Path
|
||||
L:=TStringList.Create;
|
||||
@ -3462,17 +3510,23 @@ begin
|
||||
AddConditionalStrings(L,APackage.IncludePath,Defaults.CPU,Defaults.OS);
|
||||
AddConditionalStrings(L,ATarget.IncludePath,Defaults.CPU,Defaults.OS);
|
||||
for i:=0 to L.Count-1 do
|
||||
Result:=Result+' -Fi'+L[i];
|
||||
Args.Add('-Fi'+L[i]);
|
||||
FreeAndNil(L);
|
||||
// Custom Options
|
||||
If (Defaults.Options<>'') then
|
||||
Result:=Result+' '+Defaults.Options;
|
||||
Args.Add(Defaults.Options);
|
||||
If (APackage.Options<>'') then
|
||||
Result:=Result+' '+APackage.Options;
|
||||
Args.Add(APackage.Options);
|
||||
If (ATarget.Options<>'') then
|
||||
Result:=Result+' '+ATarget.Options;
|
||||
Args.Add(ATarget.Options);
|
||||
// Add Filename to compile
|
||||
Result:=Result+' '+ExtractRelativePath(PD, ExpandFileName(ATarget.TargetSourceFileName));
|
||||
Args.Add(ExtractRelativePath(PD, ExpandFileName(ATarget.TargetSourceFileName)));
|
||||
// Convert to string
|
||||
Result:='';
|
||||
for i:=0 to Args.Count-1 do
|
||||
Result:=Result+' '+maybequoted(Args[i]);
|
||||
Delete(result,1,1);
|
||||
Args.Free;
|
||||
end;
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user