IDE: FindProgram: resolve leading ~ under Unix

git-svn-id: trunk@48132 -
This commit is contained in:
mattias 2015-03-04 15:44:24 +00:00
parent a819e545f5
commit f93f158c57
2 changed files with 19 additions and 6 deletions

View File

@ -4189,6 +4189,7 @@ function TCompilationToolOptions.Execute(const WorkingDir, ToolTitle,
var var
ExtTool: TAbstractExternalTool; ExtTool: TAbstractExternalTool;
begin begin
if Command='' then exit(mrOk);
if SourceEditorManagerIntf<>nil then if SourceEditorManagerIntf<>nil then
SourceEditorManagerIntf.ClearErrorLines; SourceEditorManagerIntf.ClearErrorLines;
@ -4217,11 +4218,14 @@ var
Filename: String; Filename: String;
begin begin
CurCommand:=GetParsedCommand; CurCommand:=GetParsedCommand;
//debugln(['TCompilationToolOptions.CreateExtTool CurCommand=[',CurCommand,']']);
if CurCommand='' then if CurCommand='' then
exit(nil); exit(nil);
SplitCmdLine(CurCommand,ProgramFilename,Params); SplitCmdLine(CurCommand,ProgramFilename,Params);
//debugln(['TCompilationToolOptions.CreateExtTool Prg=[',ProgramFilename,'] Params=[',Params,']']);
if not FilenameIsAbsolute(ProgramFilename) then begin if not FilenameIsAbsolute(ProgramFilename) then begin
Filename:=FindProgram(ProgramFilename,WorkingDir,true); Filename:=FindProgram(ProgramFilename,WorkingDir,true);
//debugln(['TCompilationToolOptions.CreateExtTool Found=[',Filename,']']);
if Filename<>'' then ProgramFilename:=Filename; if Filename<>'' then ProgramFilename:=Filename;
end; end;
Result:=ExternalToolList.Add(ToolTitle); Result:=ExternalToolList.Add(ToolTitle);

View File

@ -118,7 +118,7 @@ function FindShortFileNameOnDisk(const Filename: string): string;
function CreateNonExistingFilename(const BaseFilename: string): string; function CreateNonExistingFilename(const BaseFilename: string): string;
function FindFPCTool(const Executable, CompilerFilename: string): string; function FindFPCTool(const Executable, CompilerFilename: string): string;
procedure ResolveLinksInFileList(List: TStrings; RemoveDanglingLinks: Boolean); procedure ResolveLinksInFileList(List: TStrings; RemoveDanglingLinks: Boolean);
function FindProgram(const Programname, BaseDirectory: string; function FindProgram(ProgramName, BaseDirectory: string;
WithBaseDirectory: boolean): string; WithBaseDirectory: boolean): string;
// search paths // search paths
@ -1501,14 +1501,23 @@ begin
Result:=true; Result:=true;
end; end;
function FindProgram(const Programname, BaseDirectory: string; function FindProgram(ProgramName, BaseDirectory: string;
WithBaseDirectory: boolean): string; WithBaseDirectory: boolean): string;
var var
Flags: TSearchFileInPathFlags; Flags: TSearchFileInPathFlags;
begin begin
if FilenameIsAbsolute(Programname) then begin Result:='';
if FileExistsUTF8(Programname) then if ProgramName='' then exit;
Result:=Programname {$IFDEF Unix}
if ProgramName[1]='~' then begin
Delete(ProgramName,1,1);
ProgramName:=GetEnvironmentVariableUTF8('HOME')+ProgramName;
end;
{$ENDIF}
ProgramName:=ResolveDots(ProgramName);
if FilenameIsAbsolute(ProgramName) then begin
if FileExistsCached(ProgramName) then
Result:=ProgramName
else else
Result:=''; Result:='';
exit; exit;
@ -1516,7 +1525,7 @@ begin
Flags:=[]; Flags:=[];
if not WithBaseDirectory then if not WithBaseDirectory then
Include(Flags,sffDontSearchInBasePath); Include(Flags,sffDontSearchInBasePath);
Result:=FileUtil.SearchFileInPath(Programname,BaseDirectory, Result:=FileUtil.SearchFileInPath(ProgramName,BaseDirectory,
GetProgramSearchPath,PathSep,Flags); GetProgramSearchPath,PathSep,Flags);
end; end;