[Pkg-firebird-general] [Firebird-devel] firebird 1.5 debian packages - please help

Mark O'Donohue mark.odonohue@firebirdsql.org
Tue, 06 Jul 2004 10:53:13 +1000


This is a multi-part message in MIME format.
--------------080904000407020502020402
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit


I see Nickolay has answered most of your question but just in case it helps.

Daniel Urban wrote:
> Hi
> 
> Is firebird/lib/libfbclient.so.1.5.0 diffrent in super server
> and classic server?

No they are the same.


> If no could I make (in your opinion) one package firebird-client with
> this library(ies)?

> And for what purpose is firebird/lib/libfbembed.so.1.5.0 in classic server
> instalation and why it isn't in super server instalation?
> 

libfbembed.so.1.5.0

In Previous fb/ib installs there were two different libgds.so's.

classic libgds.so -> libfbembed.so
super libgds.so -> libfbclient.so


Classic (the original one) did embedded connections (ie the program 
directly opens the db file) for local db access and remote connections 
are done over port 3050.

In classic libgds.so in fact holds the complete database engine.

However classic has one major drawback - it is not multithreaded 
(although future versons it seems will be).


The super version (now libfbclient.so) handles only the client side of 
the db protocol (ie it needs to talk over port 3050 to a server)  - It 
is smaller (since it's only the client side) and it also handles 
multithreaded clients.

So use libfbclient.so for most purposes, and libfbembed.so if you want 
some special effects.


Usually it's installed as:

/usr/lib/libgds.so -> /opt/firebird/lib/libfbclient.so

for super and

/usr/lib/libgds.so -> /opt/firebird/lib/libfbembed.so

for classic

Btw, since the interface is idential for both, the two libraries are 
somewhat interchangable in fact there is a tool, (for embedded) that 
allows you to switch what libgds.so points to:

/opt/firebird/bin/changeGdsLibraryCompatibleLink.sh

This works fine except when the application is multithreaded.


(I've attached it, but it's also part of the standard install base).


 >  and why it isn't in super server instalation?

libfbclient was included in classic install as,  there was a need for 
multithreaded client in classic package.


Once Jims Vulcan/fb3.0 (or whatever) is merged libfbembed.so will make 
more sense, with embeded/server as options. Currently it's easier/best 
to keep them as seperate packages.



Cheers

Mark

--------------080904000407020502020402
Content-Type: text/x-sh;
 name="changeGdsLibraryCompatibleLink.sh"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="changeGdsLibraryCompatibleLink.sh"

#!/bin/sh
#
#  This library is part of the Firebird project
#
#  This library is free software; you can redistribute it and/or
#  modify it under the terms of the GNU Lesser General Public
#  License as published by the Free Software Foundation; either
#  version 2.1 of the License, or (at your option) any later version.
#  You may obtain a copy of the Licence at
#  http://www.gnu.org/licences/lgpl.html
#  
#  As a special exception this file can also be included in modules
#  with other source code as long as that source code has been 
#  released under an Open Source Initiative certificed licence.  
#  More information about OSI certification can be found at: 
#  http://www.opensource.org 
#  
#  This module is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU Lesser General Public Licence for more details.
#  
#  This module was created by members of the firebird development 
#  team.  All individual contributions remain the Copyright (C) of 
#  those individuals and all rights are reserved.  Contributors to 
#  this file are either listed below or can be obtained from a CVS 
#  history command.
# 
#   Created by:  Mark O'Donohue <mark.odonohue@ludwig.edu.au>
# 
#   Contributor(s):
#  
# 
#   $Id: changeGdsLibraryCompatibleLink.sh.in,v 1.1.2.1 2003/12/23 23:13:55 skywalker Exp $
# 


# This script allows the user to change the link on classic for the 
# client library from 
#
#  a) libfbembed.so  original classic direct connection
#  b) libfbclient.so multithreaded client connection
#

#------------------------------------------------------------------------
# Prompt for response, store result in Answer

Answer=""

AskQuestion() {
    Test=$1
    DefaultAns=$2
    echo -n "${1}"
    Answer="$DefaultAns"
    read Answer

    if [ -z $Answer ]
      then
        Answer=$DefaultAns
    fi
}


#------------------------------------------------------------------------
#  remove Link

removeLink() {
    fileName=$1

    if [ -L $fileName ]
      then
        rm -f $fileName
    fi

}


#------------------------------------------------------------------------
#  quitIfRealFile
# Remove the backward comparibility links for libgds.so

quitIfRealFile() {

    fileToCheck=$1

    # Don't worry about symbolic links
    if [ -L $fileToCheck ]
      then
        return
    fi

    if [ -f $fileToCheck ]
      then
        echo "The file $fileToCheck is a real file not just a link to an "
        echo "existing file.  It therefore may be from a"
        echo "previous firebird or InterBase(r) installation"
        echo "You will need to manually check the status of this file"
        echo "and remove it before running this script again"
        exit
    fi
}


#------------------------------------------------------------------------
#  removeLinks
# Remove the backward comparibility links for libgds.so

removeLinks() {
    removeLink /usr/lib/libgds.so
    removeLink /usr/lib/libgds.so.0
}


#------------------------------------------------------------------------
#  createLinksForBackCompatibility
#  Create links for back compatibility to InterBase and Firebird1.0 
#  linked systems.

createLinksForBackCompatibility() {

    # These two links are required for compatibility with existing ib programs
    # If the program had been linked with libgds.so then this link is required
    # to ensure it loads the fb equivalent.  Eventually these should be 
    # optional and in a seperate rpm install.  MOD 7-Nov-2002.

    newLibrary=$FBRootDir/lib/$1

    removeLinks

    ln -s $newLibrary /usr/lib/libgds.so
    ln -s $newLibrary /usr/lib/libgds.so.0


}

#------------------------------------------------------------------------
#  printStatus

printStatus() {
    printStatus=`ls -l /usr/lib/libgds.so | sed 's@^.* /usr@/usr@'`
    echo $printStatus

}
    

#= Main ====================================================================


    FBRootDir=/opt/firebird
    FBBin=$FBRootDir/bin

cat <<EOF
For classic server there are two optional backward compatible client libraries.
These are libfbclient.so and libfbembed.so.  

libfbclient.so) enables your client to be multithreaded but must connect to a 
                database via a server.  
libfbembed.so)  allows the client to directly open the database file, but does
                not support multithreaded access

Your current setting is:
EOF
    printStatus

    echo ""

    quitIfRealFile /usr/lib/libgds.so
    quitIfRealFile /usr/lib/libgds.so.0

    
    AskQuestion "Which option would you like to choose (client|embed|remove) [client] " "client"

    case $Answer in
    embed) 
        createLinksForBackCompatibility libfbembed.so
        ;;
    client)
        createLinksForBackCompatibility libfbclient.so
        ;;
    remove)
        removeLinks
        ;;
    *)
        echo "Unknown option $Answer chosen"
        ;;
    esac

--------------080904000407020502020402--