diff --git a/components/codetools/directorycacher.pas b/components/codetools/directorycacher.pas index faa1385960..e1436ce9a7 100644 --- a/components/codetools/directorycacher.pas +++ b/components/codetools/directorycacher.pas @@ -1640,6 +1640,7 @@ var begin Result:=ChompPathDelim(TrimFilename(Filename)); if Result='' then exit; + //debugln(['TCTDirectoryCachePool.FindDiskFilename Filename=',Result]); {$IF defined(NotLiteralFilenames) or defined(CaseInsensitiveFilenames)} {$ELSE} if (not SearchCaseInsensitive) then exit; @@ -1647,9 +1648,14 @@ begin ADirectory:=ExtractFilePath(Result); if ADirectory=Result then exit; // e.g. / under Linux + if SearchCaseInsensitive then + // search recursively all directory parts + ADirectory:=AppendPathDelim(FindDiskFilename(ADirectory,true)); Cache:=GetCache(ADirectory,true,false); + //debugln(['TCTDirectoryCachePool.FindDiskFilename Dir=',Cache.Directory]); Result:=ExtractFileName(Result); DiskShortFilename:=Cache.FindFile(Result,ctsfcAllCase); + //debugln(['TCTDirectoryCachePool.FindDiskFilename DiskShortFilename=',DiskShortFilename]); if DiskShortFilename<>'' then Result:=DiskShortFilename; Result:=Cache.Directory+Result; end; diff --git a/components/codetools/examples/scanexamples/brokenfilenames.pas b/components/codetools/examples/scanexamples/brokenfilenames.pas index 713b3f6973..b2e961f904 100644 --- a/components/codetools/examples/scanexamples/brokenfilenames.pas +++ b/components/codetools/examples/scanexamples/brokenfilenames.pas @@ -19,7 +19,7 @@ uses {$ENDIF}; {$I BROKENincfiles.inc}// must be fixed to brokenincfiles.inc -{$I ../ScanExamples/BROKENincfiles.inc}// must be fixed to ../scanexamples/brokenincfiles.inc +{$I ../ScanInstances/BROKENincfile2.inc}// must be fixed to ../scaninstances/brokenincfiles.inc implementation diff --git a/components/codetools/stdcodetools.pas b/components/codetools/stdcodetools.pas index 31144c8097..00e9468bfb 100644 --- a/components/codetools/stdcodetools.pas +++ b/components/codetools/stdcodetools.pas @@ -6447,8 +6447,11 @@ var AFilePath:=ExtractFilePath(Result); if AFilePath<>'' then begin // search relative to unit + //debugln(['SearchIncludeFilename BaseDir+Result=',BaseDir+Result]); CurFilename:=DirectoryCache.Pool.FindDiskFilename(BaseDir+Result,true); - Result:=copy(CurFilename,length(BaseDir)+1,length(CurFilename)); + //debugln(['SearchIncludeFilename DiskFilename=',CurFilename]); + Result:=CreateRelativePath(CurFilename,BaseDir); + //debugln(['SearchIncludeFilename RelativeDiskFilename=',Result]); if FileExistsCached(CurFilename) then Add(FilenameSrcPos,CurFilename,true) else @@ -6504,7 +6507,7 @@ var end; AFilename:=SearchIncludeFilename(StartPos,AFilename); if OldFilename<>AFilename then begin - DebugLn('FixFilename replacing in '+Code.Filename+' include directive "',OldFilename,'" with "',AFilename,'"'); + DebugLn('TStandardCodeTool.FixIncludeFilenames.FixFilename replacing in '+Code.Filename+' include directive "',OldFilename,'" with "',AFilename,'"'); SourceChangeCache.ReplaceEx(gtNone,gtNone,0,0,Code,StartPos,EndPos,AFilename); end; end;