* quote parameters for compiler command line

git-svn-id: trunk@10131 -
This commit is contained in:
peter 2008-02-01 08:10:46 +00:00
parent 3ffcb2244e
commit 2400207ead

View File

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