From 14e1d28f21644ebb8ce3210bc95ad65564acfede Mon Sep 17 00:00:00 2001 From: mgaertner Date: Wed, 28 Sep 2011 14:05:56 +0000 Subject: [PATCH] instantfpc: compiler output: replace cache file name with source file name git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@2029 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- applications/instantfpc/instantfpc.lpi | 6 +++ applications/instantfpc/instantfpc.pas | 4 +- applications/instantfpc/instantfptools.pas | 46 ++++++++++++++++++++-- 3 files changed, 51 insertions(+), 5 deletions(-) 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;