From 6365ee6f91dcf4fd5dcb5beca05b4f0312e91ca7 Mon Sep 17 00:00:00 2001 From: mattias Date: Sat, 26 May 2018 07:29:28 +0000 Subject: [PATCH] IDE: compile: warn if target filename is a directory git-svn-id: trunk@58033 - --- ide/lazarusidestrconsts.pas | 4 ++++ ide/main.pp | 46 ++++++++++++++++++++++++++----------- 2 files changed, 36 insertions(+), 14 deletions(-) diff --git a/ide/lazarusidestrconsts.pas b/ide/lazarusidestrconsts.pas index 12e08a836b..1f91f43530 100644 --- a/ide/lazarusidestrconsts.pas +++ b/ide/lazarusidestrconsts.pas @@ -1031,8 +1031,12 @@ resourcestring lisTheProjectUsesFPCResourcesWhichRequireAtLeast = 'The project uses ' +'FPC resources, which require at least FPC 2.4'; lisCreateDirectory = 'Create directory?'; + lisFileFound = 'File found'; + lisTheTargetDirectoryIsAFile = 'The target directory is a file:%s'; lisTheOutputDirectoryIsMissing = 'The output directory "%s" is missing.'; lisCreateIt = 'Create it'; + lisInvalidFileName = 'Invalid file name'; + lisTheTargetFileNameIsADirectory = 'The target file name is a directory'; // file dialogs lisOpenFile = 'Open File'; diff --git a/ide/main.pp b/ide/main.pp index 2cfd1e52f0..703b574474 100644 --- a/ide/main.pp +++ b/ide/main.pp @@ -6594,7 +6594,7 @@ var TargetExeName: String; TargetExeDirectory: String; FPCVersion, FPCRelease, FPCPatch: integer; - aCompileHint: String; + aCompileHint, ShortFilename: String; OldToolStatus: TIDEToolStatus; IsComplete: Boolean; StartTime: TDateTime; @@ -6784,21 +6784,39 @@ begin // create target output directory TargetExeName := Project1.CompilerOptions.CreateTargetFilename; TargetExeDirectory:=ExtractFilePath(TargetExeName); - if (FilenameIsAbsolute(TargetExeDirectory)) - and (not DirPathExistsCached(TargetExeDirectory)) then begin - if not FileIsInPath(TargetExeDirectory,WorkingDir) then begin - Result:=IDEQuestionDialog(lisCreateDirectory, - Format(lisTheOutputDirectoryIsMissing, [TargetExeDirectory]), - mtConfirmation, [mrYes, lisCreateIt, - mrCancel]); - if Result<>mrYes then exit; - end; - Result:=ForceDirectoryInteractive(TargetExeDirectory,[mbRetry]); - if Result<>mrOk then begin - debugln(['Error: (lazarus) [TMainIDE.DoBuildProject] ForceDirectoryInteractive "',TargetExeDirectory,'" failed']); - exit; + if FilenameIsAbsolute(TargetExeDirectory) then begin + if FileExistsCached(TargetExeDirectory) then begin + if not DirPathExistsCached(TargetExeDirectory) then begin + Result:=IDEQuestionDialog(lisFileFound, + Format(lisTheTargetDirectoryIsAFile, [sLineBreak + +TargetExeDirectory]), + mtWarning, [mrCancel,mrIgnore]); + if Result<>mrIgnore then exit(mrCancel); + end; + end else begin + if not FileIsInPath(TargetExeDirectory,WorkingDir) then begin + Result:=IDEQuestionDialog(lisCreateDirectory, + Format(lisTheOutputDirectoryIsMissing, [TargetExeDirectory]), + mtConfirmation, [mrYes, lisCreateIt, + mrCancel]); + if Result<>mrYes then exit; + end; + Result:=ForceDirectoryInteractive(TargetExeDirectory,[mbRetry]); + if Result<>mrOk then begin + debugln(['Error: (lazarus) [TMainIDE.DoBuildProject] ForceDirectoryInteractive "',TargetExeDirectory,'" failed']); + exit; + end; end; end; + ShortFilename:=ExtractFileName(TargetExeName); + if (ShortFilename='') or (ShortFilename='.') or (ShortFilename='..') + or (FilenameIsAbsolute(TargetExeName) and DirPathExistsCached(TargetExeName)) then + begin + Result:=IDEQuestionDialog(lisInvalidFileName, + lisTheTargetFileNameIsADirectory, + mtWarning, [mrCancel,mrIgnore]); + if Result<>mrIgnore then exit(mrCancel); + end; // create application bundle if Project1.UseAppBundle and (Project1.MainUnitID>=0)