diff --git a/applications/instantfpc/instantfpc.lpi b/applications/instantfpc/instantfpc.lpi
index 8019f09ab..ad416a07c 100644
--- a/applications/instantfpc/instantfpc.lpi
+++ b/applications/instantfpc/instantfpc.lpi
@@ -54,6 +54,12 @@
+
+
+
+
+
+
diff --git a/applications/instantfpc/instantfpc.pas b/applications/instantfpc/instantfpc.pas
index 75809f5b7..75b578ee0 100644
--- a/applications/instantfpc/instantfpc.pas
+++ b/applications/instantfpc/instantfpc.pas
@@ -25,7 +25,7 @@ uses
Classes, SysUtils, InstantFPTools;
const
- Version = '1.1';
+ Version = '1.2';
Procedure Usage;
@@ -189,7 +189,7 @@ begin
if not IsCacheValid(Src,CacheFilename,OutputFilename) then begin
// save source in cache to find out next time if something changed
Src.SaveToFile(CacheFilename);
- Compile(CacheFilename,OutputFilename);
+ Compile(Filename,CacheFilename,OutputFilename);
end;
// run
if RunIt then
diff --git a/applications/instantfpc/instantfptools.pas b/applications/instantfpc/instantfptools.pas
index a256cd90b..b8702aa68 100644
--- a/applications/instantfpc/instantfptools.pas
+++ b/applications/instantfpc/instantfptools.pas
@@ -17,6 +17,10 @@ unit InstantFPTools;
{$DEFINE UseExeSearch}
{$ENDIF}
+{$if defined(Windows) or defined(darwin)}
+{$define CaseInsensitiveFilenames}
+{$endif}
+
interface
uses
@@ -31,7 +35,8 @@ function GetCacheDir: string;
procedure SetCacheDir(AValue : string);
function IsCacheValid(Src: TStringList;
const CachedSrcFile, CachedExeFile: string): boolean;
-procedure Compile(const CacheFilename, OutputFilename: string);
+procedure Compile(const SrcFilename, CacheFilename, OutputFilename: string);
+procedure WriteCompilerOutput(SrcFilename, CacheFilename, CompilerOutput: string);
function GetCompiler: string;
procedure SetCompiler(AValue : string);
function GetCompilerParameters(const SrcFilename, OutputFilename: string): string;
@@ -141,6 +146,41 @@ begin
CmdCompiler:=AValue;
end;
+procedure WriteCompilerOutput(SrcFilename, CacheFilename, CompilerOutput: string);
+var
+ Lines: TStringList;
+ i: Integer;
+ Line: String;
+ p: SizeInt;
+begin
+ // replace in compiler output CacheFilename with SrcFilename
+ Lines:=TStringList.Create;
+ Lines.Text:=CompilerOutput;
+ {$IFDEF CaseInsensitiveFilenames}
+ CacheFilename:=LowerCase(CacheFilename);
+ {$ENDIF}
+ for i:=0 to Lines.Count-1 do begin
+ repeat
+ Line:=Lines[i];
+ {$IFDEF CaseInsensitiveFilenames}
+ Line:=LowerCase(Line);
+ {$ENDIF}
+ p:=Pos(CacheFilename,Line);
+ if p<1 then break;
+ {$IFDEF CaseInsensitiveFilenames}
+ Line:=Lines[i];
+ {$ENDIF}
+ Lines[i]:=copy(Line,1,p-1)+SrcFilename+copy(Line,p+length(CacheFilename),length(Line));
+ until false;
+ end;
+
+ // write to stdout
+ writeln(Lines.Text);
+ {$IFDEF IFFreeMem}
+ Lines.Free;
+ {$ENDIF}
+end;
+
function GetCompiler: string;
var
CompFile: String;
@@ -194,7 +234,7 @@ begin
end;
end;
-procedure Compile(const CacheFilename, OutputFilename: string);
+procedure Compile(const SrcFilename, CacheFilename, OutputFilename: string);
var
Compiler: String;
CompParams: String;
@@ -222,7 +262,7 @@ begin
ss.write(buf,count);
until Count=0;
if (not Proc.WaitOnExit) or (Proc.ExitStatus<>0) then begin
- write(ss.DataString);
+ WriteCompilerOutput(SrcFilename,CacheFilename,ss.DataString);
Halt(1);
end;
ss.Free;