IDE: compile: warn if target filename is a directory

git-svn-id: trunk@58033 -
This commit is contained in:
mattias 2018-05-26 07:29:28 +00:00
parent b9e42b85a9
commit 6365ee6f91
2 changed files with 36 additions and 14 deletions

View File

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

View File

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