[fpc-devel] SqlDB + Firebird application doesn't run on new Ubuntu installation
Michael Van Canneyt
michael at freepascal.org
Fri Nov 27 11:47:06 CET 2009
On Fri, 27 Nov 2009, Graeme Geldenhuys wrote:
> OK, below is one example of a patch, but there are alternative methods
> too, hence I am first posting here in the mailing list before I
> officially put something in Mantis.
>
> In the example below (which does work) I simply test for the newest
> major version first, then un-versioned, then backward compatibility library.
>
> ----------------------------------------
> diff --git a/packages/ibase/src/ibase60.inc b/packages/ibase/src/ibase60.inc
> index 5bc668d..54e2ab3 100644
> --- a/packages/ibase/src/ibase60.inc
> +++ b/packages/ibase/src/ibase60.inc
> @@ -2647,8 +2647,9 @@ begin
> end
> else
> begin
> - If (TryInitialiseIBase60(fbclib)=0) and
> - (TryInitialiseIBase60(gdslib)=0) then
> + If (TryInitialiseIBase60(fbclib+'.2')=0) and // major versioned
> + (TryInitialiseIBase60(fbclib)=0) and // un-versioned
> + (TryInitialiseIBase60(gdslib)=0) then // backward
> compatibility
> Raise EInOutError.CreateFmt(SErrDefaultsFailed,[gdslib,fbclib]);
> end;
> Result := RefCount;
> ----------------------------------------
>
>
> What I don't like about the patch above, is the 'and' statement.
> Wouldn't it be better (optimised) to do the following:
>
> if not v2 found then // libfbclient.so.2
> if not unversioned found then // libfbclient.so
> if not gds found then // libgds.so
> raise Exception.Create(...)
>
> That way it will stop at the first if that found a valid library. Yet
> another alternative to the above if statement, is to test for the
> unversioned library first - this should make Joost happy & non-Ubuntu
> installs. That way DB developers could simply adjust the unversioned
> library symlink (libfbclient.so) and FPC would automatically load the
> developers desired version of the library. I think this is the best
> option so far. eg:
>
>
> if not unversioned found then // libfbclient.so
> if not v2 found then // libfbclient.so.2
> if not gds found then // libgds.so
> raise Exception.Create(...)
>
>
> Your thoughts?
I'd use an array of library names and a for loop.
It is easier to extend. You can add fbclient.1 and
fbclient.3 to the array.
Michael.
More information about the fpc-devel
mailing list