[lazarus] Wrong note in windows: Lazarus source directory notset

Mattias Gaertner nc-gaertnma at netcologne.de
Sun Dec 21 08:20:53 EST 2003


On Sat, 20 Dec 2003 22:06:00 +0100  Vincent Snijders <vslist at zonnet.nl>
wrote:

> To test things a bit further a made a testprogram:
> program direxists;
> 
> {$mode objfpc}{$H+}
> 
> uses
>   Classes, SysUtils;

Here you must add FileCtrl. The IDE uses it. Some functions in FileCtrl were
added later to sysutils with the same name, but not necessarily the exact
behaviour. There are now ambigious functions.
I will rename the DirectoryExists function in FileCtrl to DirPathExists.

   
> var
>   path: string;
> 
> begin
>   path := ExtractFileDir(ParamStr(0));
>   writeln(format('FPC version: %s',[{$I %FPCVERSION}]));
>   writeln(format('DirectoryExists(''%s''): ',[path]),
>     DirectoryExists(path));
>   writeln(format('FileExists(''%s''): ',[path]),
>     FileExists(path));
>   path := path + DirectorySeparator;
>   writeln(format('DirectoryExists(''%s''): ',[path]),
>     DirectoryExists(path));
>   writeln(format('FileExists(''%s''): ',[path]),
>     FileExists(path));
> end.
> 
> On linux the output for fpc 1.0.11 and fpc 1.9.1 is the same, it
> doesn't matter if the name has a directory seperator appended:
> DirectoryExists('/home/vsds/lazarus/projects/bugs/fileexists'): TRUE
> FileExists('/home/vsds/lazarus/projects/bugs/fileexists'): TRUE
> DirectoryExists('/home/vsds/lazarus/projects/bugs/fileexists/'): TRUE
> FileExists('/home/vsds/lazarus/projects/bugs/fileexists/'): TRUE

same under wine (with and without FileCtrl).

 
> On win32 the output depends on the fpc version:
> FPC version: 1.0.11
> DirectoryExists('V:\LAZARUS\PROJECTS\BUGS\FILEEXISTS'): TRUE
> FileExists('V:\LAZARUS\PROJECTS\BUGS\FILEEXISTS'): TRUE
> DirectoryExists('V:\LAZARUS\PROJECTS\BUGS\FILEEXISTS\'): TRUE
> FileExists('V:\LAZARUS\PROJECTS\BUGS\FILEEXISTS\'): FALSE
> 
> FPC version: 1.9.1
> DirectoryExists('V:\LAZARUS\PROJECTS\BUGS\FILEEXISTS'): TRUE
> FileExists('V:\LAZARUS\PROJECTS\BUGS\FILEEXISTS'): TRUE
> DirectoryExists('V:\LAZARUS\PROJECTS\BUGS\FILEEXISTS\'): FALSE
> FileExists('V:\LAZARUS\PROJECTS\BUGS\FILEEXISTS\'): FALSE
> 
> Since I first tested with fpc 1.0.11, I thought replacing FileExists
> with DirectoryExists would solve the incomptible behaviour between linux
> and win32. But with fpc 1.9.1 that doesn't help.
> There are two incompatibilities here:
> 1. FileExists doesn't behave the same on win32 and linux. (Is this a
> bug?)
> 2. DirectoryExists doesn't behave the same on win32 for fpc 1.0.11
> and fpc 1.9. (Is this a bug?)

Maybe. The question is, which one is right. You can argue, that for Delphi
compatibility the linux behaviour is wrong. But to reduce code in the IDE we
need a function, that test directory paths with appended path delimiter.

 
> So unless these incompatibilties are fixed (by the fpc team), we should
> call DirectoryExists without appended directory seperator.
> 
> I see two ways to proceed then:
> 1. Making calls like
> DirectoryExists(ChompPathDelim(EnvironmentOptions.LazarusDirectory))
> 2. In for example TEnvironmentOptions instead of  
>   FLazarusDirectory:=AppendPathDelim(TrimFilename(AValue));
> do 
>   FLazarusDirectory:=ChompPathDelim(TrimFilename(AValue));

IMO appending a path delimiter makes it easy to spot (especially for
newbies), that the IDE expects a file to be a directory. 

 
> What do you prefer?

1. add a new platform independent function that does
DirectoryExists(ChompPathDelim()).


Mattias






More information about the Lazarus mailing list