mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-15 16:09:27 +02:00
+ USE_EXTERNAL_COMPILER
This commit is contained in:
parent
f328e1860f
commit
c100dbf622
@ -13,6 +13,8 @@
|
|||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
|
||||||
**********************************************************************}
|
**********************************************************************}
|
||||||
|
{$i globdir.inc}
|
||||||
|
|
||||||
unit FPIntf;
|
unit FPIntf;
|
||||||
interface
|
interface
|
||||||
|
|
||||||
@ -28,11 +30,12 @@ procedure SetPrimaryFile(const fn:string);
|
|||||||
implementation
|
implementation
|
||||||
|
|
||||||
uses
|
uses
|
||||||
Compiler,
|
Compiler,CompHook,
|
||||||
{$ifndef NODEBUG}
|
{$ifndef NODEBUG}
|
||||||
FPDebug,
|
FPDebug,
|
||||||
{$endif NODEBUG}
|
{$endif NODEBUG}
|
||||||
FPVars,FPUtils,FPSwitch;
|
FPCompile,FPRedir,FPVars,
|
||||||
|
FPUtils,FPSwitch;
|
||||||
|
|
||||||
{****************************************************************************
|
{****************************************************************************
|
||||||
Run
|
Run
|
||||||
@ -63,15 +66,105 @@ end;
|
|||||||
procedure Compile(const FileName: string);
|
procedure Compile(const FileName: string);
|
||||||
var
|
var
|
||||||
cmd : string;
|
cmd : string;
|
||||||
|
{$ifdef USE_EXTERNAL_COMPILER}
|
||||||
|
CompilerOut : Text;
|
||||||
|
CompilerOutputLine : longint;
|
||||||
|
V,p,p1,p2,lineNb,ColumnNb : longint;
|
||||||
|
error : word;
|
||||||
|
ModuleName,Line : string;
|
||||||
|
error_in_reading : boolean;
|
||||||
|
{$endif USE_EXTERNAL_COMPILER}
|
||||||
begin
|
begin
|
||||||
|
{$ifndef USE_EXTERNAL_COMPILER}
|
||||||
cmd:='[fp.cfg] -d'+SwitchesModeStr[SwitchesMode];
|
cmd:='[fp.cfg] -d'+SwitchesModeStr[SwitchesMode];
|
||||||
if LinkAfter then
|
{$else USE_EXTERNAL_COMPILER}
|
||||||
cmd:=cmd+' -s';
|
cmd:='-n @fp.cfg -d'+SwitchesModeStr[SwitchesMode];
|
||||||
|
if not UseExternalCompiler then
|
||||||
|
{$endif USE_EXTERNAL_COMPILER}
|
||||||
|
if LinkAfter then
|
||||||
|
cmd:=cmd+' -s';
|
||||||
{ Add the switches from the primary file }
|
{ Add the switches from the primary file }
|
||||||
if PrimaryFileSwitches<>'' then
|
if PrimaryFileSwitches<>'' then
|
||||||
cmd:=cmd+' '+PrimaryFileSwitches;
|
cmd:=cmd+' '+PrimaryFileSwitches;
|
||||||
|
cmd:=cmd+' '+FileName;
|
||||||
{ call the compiler }
|
{ call the compiler }
|
||||||
Compiler.Compile(cmd+' '+FileName);
|
{$ifdef USE_EXTERNAL_COMPILER}
|
||||||
|
if UseExternalCompiler then
|
||||||
|
begin
|
||||||
|
If not LocateExeFile(ExternalCompilerExe) then
|
||||||
|
begin
|
||||||
|
CompilerMessageWindow^.AddMessage(
|
||||||
|
0,ExternalCompilerExe+' not found','',0,0);
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
CompilerMessageWindow^.AddMessage(
|
||||||
|
0,'Running: '+ExternalCompilerExe+' '+cmd,'',0,0);
|
||||||
|
if not ExecuteRedir(ExternalCompilerExe,cmd,'','ppc___.out','ppc___.err') then
|
||||||
|
begin
|
||||||
|
CompilerMessageWindow^.AddMessage(
|
||||||
|
V_error,'Error in external compilation','',0,0);
|
||||||
|
CompilerMessageWindow^.AddMessage(
|
||||||
|
V_error,'IOStatus = '+IntTostr(IOStatus),'',0,0);
|
||||||
|
CompilerMessageWindow^.AddMessage(
|
||||||
|
V_error,'ExecuteResult = '+IntTostr(ExecuteResult),'',0,0);
|
||||||
|
if IOStatus<>0 then
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
Assign(CompilerOut,'ppc___.out');
|
||||||
|
Reset(CompilerOut);
|
||||||
|
error_in_reading:=false;
|
||||||
|
CompilerOutputLine:=0;
|
||||||
|
While not eof(CompilerOut) do
|
||||||
|
begin
|
||||||
|
readln(CompilerOut,Line);
|
||||||
|
Inc(CompilerOutputLine);
|
||||||
|
p:=pos('(',line);
|
||||||
|
if p>0 then
|
||||||
|
begin
|
||||||
|
ModuleName:=copy(Line,1,p-1);
|
||||||
|
Line:=Copy(Line,p+1,255);
|
||||||
|
p1:=pos(',',Line);
|
||||||
|
val(copy(Line,1,p1-1),lineNb,error);
|
||||||
|
Line:=Copy(Line,p1+1,255);
|
||||||
|
p2:=pos(')',Line);
|
||||||
|
if error=0 then
|
||||||
|
val(copy(Line,1,p2-1),ColumnNb,error);
|
||||||
|
Line:=Copy(Line,p2+1,255);
|
||||||
|
V:=0;
|
||||||
|
If Pos(' Error:',line)=1 then
|
||||||
|
begin
|
||||||
|
V:=V_error;
|
||||||
|
Line:=Copy(Line,8,Length(Line));
|
||||||
|
end
|
||||||
|
else if Pos(' Fatal:',line)=1 then
|
||||||
|
begin
|
||||||
|
V:=V_fatal;
|
||||||
|
Line:=Copy(Line,8,Length(Line));
|
||||||
|
end
|
||||||
|
else if Pos(' Hint:',line)=1 then
|
||||||
|
begin
|
||||||
|
V:=V_hint;
|
||||||
|
Line:=Copy(Line,7,Length(Line));
|
||||||
|
end
|
||||||
|
else if Pos(' Note:',line)=1 then
|
||||||
|
begin
|
||||||
|
V:=V_note;
|
||||||
|
Line:=Copy(Line,7,Length(Line));
|
||||||
|
end;
|
||||||
|
if error=0 then
|
||||||
|
CompilerMessageWindow^.AddMessage(V,Line,ModuleName,LineNb,ColumnNb)
|
||||||
|
else
|
||||||
|
error_in_reading:=true;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
CompilerMessageWindow^.AddMessage(0,Line,'',0,0);
|
||||||
|
;
|
||||||
|
end;
|
||||||
|
Close(CompilerOut);
|
||||||
|
end
|
||||||
|
else
|
||||||
|
{$endif USE_EXTERNAL_COMPILER}
|
||||||
|
Compiler.Compile(cmd);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -113,7 +206,10 @@ end;
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.8 2000-01-03 11:38:34 michael
|
Revision 1.9 2000-03-01 22:37:25 pierre
|
||||||
|
+ USE_EXTERNAL_COMPILER
|
||||||
|
|
||||||
|
Revision 1.8 2000/01/03 11:38:34 michael
|
||||||
Changes from Gabor
|
Changes from Gabor
|
||||||
|
|
||||||
Revision 1.7 1999/09/16 14:34:59 pierre
|
Revision 1.7 1999/09/16 14:34:59 pierre
|
||||||
@ -155,4 +251,4 @@ end.
|
|||||||
+ options are now written/read
|
+ options are now written/read
|
||||||
+ find and replace routines
|
+ find and replace routines
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user