mirror of
https://gitlab.com/freepascal.org/fpc/pas2js.git
synced 2025-08-12 16:09:04 +02:00
fcl-passrc: fixed search include file mode objfpc in dir of current include file
This commit is contained in:
parent
2865164d2b
commit
31103c3c9f
@ -123,8 +123,11 @@ begin
|
|||||||
D:=ExtractFilePath(FileName);
|
D:=ExtractFilePath(FileName);
|
||||||
If (D='') then
|
If (D='') then
|
||||||
D:='.';
|
D:='.';
|
||||||
|
FResolver.ModuleDirectory:=D;
|
||||||
FResolver.BaseDirectory:=D;
|
FResolver.BaseDirectory:=D;
|
||||||
FResolver.AddIncludePath(D);
|
|
||||||
|
FResolver.AddIncludePath(D); // still needed?
|
||||||
|
|
||||||
FScanner:=TPascalScanner.Create(FResolver);
|
FScanner:=TPascalScanner.Create(FResolver);
|
||||||
FScanner.OpenFile(FileName);
|
FScanner.OpenFile(FileName);
|
||||||
FContainer:=TSrcContainer.Create;
|
FContainer:=TSrcContainer.Create;
|
||||||
|
@ -490,12 +490,15 @@ type
|
|||||||
TBaseFileResolver = class
|
TBaseFileResolver = class
|
||||||
private
|
private
|
||||||
FBaseDirectory: string;
|
FBaseDirectory: string;
|
||||||
|
FMode: TModeSwitch;
|
||||||
|
FModuleDirectory: string;
|
||||||
FResourcePaths,
|
FResourcePaths,
|
||||||
FIncludePaths: TStringList;
|
FIncludePaths: TStringList;
|
||||||
FStrictFileCase : Boolean;
|
FStrictFileCase : Boolean;
|
||||||
Protected
|
Protected
|
||||||
function FindIncludeFileName(const aFilename: string): String; virtual; abstract;
|
function FindIncludeFileName(const aFilename: string): String; virtual; abstract;
|
||||||
procedure SetBaseDirectory(AValue: string); virtual;
|
procedure SetBaseDirectory(AValue: string); virtual;
|
||||||
|
procedure SetModuleDirectory(AValue: string); virtual;
|
||||||
procedure SetStrictFileCase(AValue: Boolean); virtual;
|
procedure SetStrictFileCase(AValue: Boolean); virtual;
|
||||||
Property IncludePaths: TStringList Read FIncludePaths;
|
Property IncludePaths: TStringList Read FIncludePaths;
|
||||||
Property ResourcePaths: TStringList Read FResourcePaths;
|
Property ResourcePaths: TStringList Read FResourcePaths;
|
||||||
@ -507,8 +510,10 @@ type
|
|||||||
function FindResourceFileName(const AName: string): String; virtual; abstract;
|
function FindResourceFileName(const AName: string): String; virtual; abstract;
|
||||||
function FindSourceFile(const AName: string): TLineReader; virtual; abstract;
|
function FindSourceFile(const AName: string): TLineReader; virtual; abstract;
|
||||||
function FindIncludeFile(const AName: string): TLineReader; virtual; abstract;
|
function FindIncludeFile(const AName: string): TLineReader; virtual; abstract;
|
||||||
Property StrictFileCase : Boolean Read FStrictFileCase Write SetStrictFileCase;
|
property BaseDirectory: string read FBaseDirectory write SetBaseDirectory; // e.g. current path of include file
|
||||||
property BaseDirectory: string read FBaseDirectory write SetBaseDirectory;
|
property Mode: TModeSwitch read FMode write FMode;
|
||||||
|
property ModuleDirectory: string read FModuleDirectory write SetModuleDirectory; // e.g. path of module file
|
||||||
|
property StrictFileCase : Boolean Read FStrictFileCase Write SetStrictFileCase;
|
||||||
end;
|
end;
|
||||||
TBaseFileResolverClass = Class of TBaseFileResolver;
|
TBaseFileResolverClass = Class of TBaseFileResolver;
|
||||||
|
|
||||||
@ -2454,22 +2459,30 @@ end;
|
|||||||
|
|
||||||
procedure TBaseFileResolver.SetBaseDirectory(AValue: string);
|
procedure TBaseFileResolver.SetBaseDirectory(AValue: string);
|
||||||
begin
|
begin
|
||||||
|
AValue:=IncludeTrailingPathDelimiter(AValue);
|
||||||
if FBaseDirectory=AValue then Exit;
|
if FBaseDirectory=AValue then Exit;
|
||||||
FBaseDirectory:=AValue;
|
FBaseDirectory:=AValue;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TBaseFileResolver.SetModuleDirectory(AValue: string);
|
||||||
|
begin
|
||||||
|
AValue:=IncludeTrailingPathDelimiter(AValue);
|
||||||
|
if FModuleDirectory=AValue then Exit;
|
||||||
|
FModuleDirectory:=AValue;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TBaseFileResolver.SetStrictFileCase(AValue: Boolean);
|
procedure TBaseFileResolver.SetStrictFileCase(AValue: Boolean);
|
||||||
begin
|
begin
|
||||||
if FStrictFileCase=AValue then Exit;
|
if FStrictFileCase=AValue then Exit;
|
||||||
FStrictFileCase:=AValue;
|
FStrictFileCase:=AValue;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
constructor TBaseFileResolver.Create;
|
constructor TBaseFileResolver.Create;
|
||||||
begin
|
begin
|
||||||
inherited Create;
|
inherited Create;
|
||||||
FIncludePaths := TStringList.Create;
|
FIncludePaths := TStringList.Create;
|
||||||
FResourcePaths := TStringList.Create;
|
FResourcePaths := TStringList.Create;
|
||||||
|
FMode:=msFPC;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
destructor TBaseFileResolver.Destroy;
|
destructor TBaseFileResolver.Destroy;
|
||||||
@ -2556,15 +2569,27 @@ function TFileResolver.FindIncludeFileName(const AName: string): String;
|
|||||||
|
|
||||||
begin
|
begin
|
||||||
Result:='';
|
Result:='';
|
||||||
|
// search in BaseDirectory (not in mode Delphi)
|
||||||
|
if (BaseDirectory<>'')
|
||||||
|
and ((ModuleDirectory='') or not (Mode in [msDelphi,msDelphiUnicode])) then
|
||||||
|
begin
|
||||||
|
Result:=SearchLowUpCase(BaseDirectory+FN);
|
||||||
|
if Result<>'' then exit;
|
||||||
|
end;
|
||||||
|
// search in ModuleDirectory
|
||||||
|
if (ModuleDirectory<>'') then
|
||||||
|
begin
|
||||||
|
Result:=SearchLowUpCase(ModuleDirectory+FN);
|
||||||
|
if Result<>'' then exit;
|
||||||
|
end;
|
||||||
|
// search in include paths
|
||||||
I:=0;
|
I:=0;
|
||||||
While (Result='') and (I<FIncludePaths.Count) do
|
While (I<FIncludePaths.Count) do
|
||||||
begin
|
begin
|
||||||
Result:=SearchLowUpCase(FIncludePaths[i]+FN);
|
Result:=SearchLowUpCase(FIncludePaths[i]+FN);
|
||||||
|
if Result<>'' then exit;
|
||||||
Inc(I);
|
Inc(I);
|
||||||
end;
|
end;
|
||||||
// search in BaseDirectory
|
|
||||||
if (Result='') and (BaseDirectory<>'') then
|
|
||||||
Result:=SearchLowUpCase(BaseDirectory+FN);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
var
|
var
|
||||||
@ -2930,6 +2955,7 @@ begin
|
|||||||
aPath:=ExtractFilePath(FCurFilename);
|
aPath:=ExtractFilePath(FCurFilename);
|
||||||
if (aPath<>'') then
|
if (aPath<>'') then
|
||||||
aPath:=IncludeTrailingPathDelimiter(aPath);
|
aPath:=IncludeTrailingPathDelimiter(aPath);
|
||||||
|
FileResolver.ModuleDirectory := aPath;
|
||||||
FileResolver.BaseDirectory := aPath;
|
FileResolver.BaseDirectory := aPath;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
if LogEvent(sleFile) then
|
if LogEvent(sleFile) then
|
||||||
@ -3371,9 +3397,9 @@ begin
|
|||||||
PushStackItem;
|
PushStackItem;
|
||||||
FCurSourceFile:=NewSourceFile;
|
FCurSourceFile:=NewSourceFile;
|
||||||
FCurFilename := Param;
|
FCurFilename := Param;
|
||||||
if FCurSourceFile is TFileLineReader then
|
if FCurSourceFile is TLineReader then
|
||||||
begin
|
begin
|
||||||
aFileName:=TFileLineReader(FCurSourceFile).Filename;
|
aFileName:=TLineReader(FCurSourceFile).Filename;
|
||||||
FileResolver.BaseDirectory := ExtractFilePath(aFileName);
|
FileResolver.BaseDirectory := ExtractFilePath(aFileName);
|
||||||
FCurFilename := aFileName; // nicer error messages
|
FCurFilename := aFileName; // nicer error messages
|
||||||
end;
|
end;
|
||||||
@ -3717,6 +3743,7 @@ procedure TPascalScanner.HandleMode(const Param: String);
|
|||||||
SetNonToken(tkotherwise);
|
SetNonToken(tkotherwise);
|
||||||
end;
|
end;
|
||||||
Handled:=false;
|
Handled:=false;
|
||||||
|
FileResolver.Mode:=LangMode;
|
||||||
if Assigned(OnModeChanged) then
|
if Assigned(OnModeChanged) then
|
||||||
OnModeChanged(Self,LangMode,false,Handled);
|
OnModeChanged(Self,LangMode,false,Handled);
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user