Debian tcl/tk policy: where to put shared libs? - Debian

This is a discussion on Debian tcl/tk policy: where to put shared libs? - Debian ; Hi, I need some help packaging Tcl language bindings for ITK [1]. I've read the policy (in package tcl-doc) but I'm not sure whether I'm doing the right thing. I am essentially tcl illiterate, so please explain things in full. ...

+ Reply to Thread
Results 1 to 2 of 2

Thread: Debian tcl/tk policy: where to put shared libs?

  1. Debian tcl/tk policy: where to put shared libs?

    Hi,

    I need some help packaging Tcl language bindings for ITK [1]. I've
    read the policy (in package tcl-doc) but I'm not sure whether
    I'm doing the right thing.

    I am essentially tcl illiterate, so please explain things in full.
    Examples help.

    ITK generates about 9 shared libs and 4 .tcl files, including a
    pkgIndex.tcl. I'm only building for the default version of tcl right
    now, so I created a package tcl8.4-insighttoolkit3 and installed the
    tcl files into /usr/share/tcltk/tcl8.4/insighttoolkit3. Does that
    sound right?

    Now: where do the shared libs go? If this is covered in the policy, I
    have missed it. I decided to put them into /usr/lib.

    The pkgIndex.tcl file contains the following

    proc ConfigureTclPackage {libName version} {
    set libPrefix "lib"
    set libPath "[file dirname [file dirname [info script]]]"
    set libExt [info sharedlibextension]
    set libFile [file join $libPath "$libPrefix$libName$libExt"]
    set package [string tolower $libName]

    package ifneeded $package $version "
    namespace eval ::itk::loader {
    set curDir \[pwd\]
    cd {$libPath}
    if {\[catch { load \"$libFile\" } errorMessage \]} { puts \$errorMessage }
    cd \$curDir
    }
    "
    }

    With some puts-style debugging (as mentioned, I'm tcl illiterate), I
    concluded that this snippet is expecting the shared libs in the parent
    directory of that containing pkgIndex.tcl; i.e. libPath is set to
    /usr/share/tcltk/tcl8.4. Is this common practice or is it an upstream
    quirk? It doesn't strike me as a good idea to put shared objects into
    /usr/share/...

    My current plan is simply to patch this to read

    set libPath "/usr/lib"

    But that just as well could be "/usr/lib/tcltk/...." or somesuch.
    Hence my question about where to put shared libs.

    Any additional insights or pointers are most welcome. This is
    my first attempt at packaging Tcl bindings.

    Thanks,
    -Steve

    [1] http://packages.qa.debian.org/i/insighttoolkit.html
    The Tcl bindings are not yet present; it will be a new package
    appearing with version 3.6.0.

    P.S. I searched in vain for a debian-tcl mailing list, so I'm sending
    this to debian-devel as well as the two names listed in the Tcl/Tk
    policy package and the pkg-tcltk-devel list. If this is not the right
    place, please advise and do feel free to forward this email to the
    right place.

    -----BEGIN PGP SIGNATURE-----
    Version: GnuPG v1.4.6 (GNU/Linux)

    iD8DBQFIJ1hg0i2bPSHbMcURAnKTAJ4i5a3Nf28YsZ9HZWbLOw hCwLTmrgCghPIP
    uAsAmiTaQzb4FcsaQwD0Rg4=
    =Tk6E
    -----END PGP SIGNATURE-----


  2. Re: Debian tcl/tk policy: where to put shared libs?

    On Sun, May 11, 2008 at 03:34:40PM -0500, Steve M. Robbins wrote:
    > Hi,
    >
    > I need some help packaging Tcl language bindings for ITK [1]. I've
    > read the policy (in package tcl-doc) but I'm not sure whether
    > I'm doing the right thing.
    >
    > I am essentially tcl illiterate, so please explain things in full.
    > Examples help.
    >
    > ITK generates about 9 shared libs and 4 .tcl files, including a
    > pkgIndex.tcl. I'm only building for the default version of tcl right
    > now, so I created a package tcl8.4-insighttoolkit3 and installed the
    > tcl files into /usr/share/tcltk/tcl8.4/insighttoolkit3. Does that
    > sound right?
    >
    > Now: where do the shared libs go? If this is covered in the policy, I
    > have missed it. I decided to put them into /usr/lib.
    >


    /usr/lib/tcltk/ is the right path for shared libs like those you pointed.
    Only arch-independent files (e.g. .tcl files) should go into /usr/share/tcltk/.
    It is generally not appopriate moving them under a per-version tcl subdir
    there.


    > The pkgIndex.tcl file contains the following
    >
    > proc ConfigureTclPackage {libName version} {
    > set libPrefix "lib"
    > set libPath "[file dirname [file dirname [info script]]]"
    > set libExt [info sharedlibextension]
    > set libFile [file join $libPath "$libPrefix$libName$libExt"]
    > set package [string tolower $libName]
    >
    > package ifneeded $package $version "
    > namespace eval ::itk::loader {
    > set curDir \[pwd\]
    > cd {$libPath}
    > if {\[catch { load \"$libFile\" } errorMessage \]} { puts \$errorMessage }
    > cd \$curDir
    > }
    > "
    > }
    >
    > With some puts-style debugging (as mentioned, I'm tcl illiterate), I
    > concluded that this snippet is expecting the shared libs in the parent
    > directory of that containing pkgIndex.tcl; i.e. libPath is set to
    > /usr/share/tcltk/tcl8.4. Is this common practice or is it an upstream
    > quirk? It doesn't strike me as a good idea to put shared objects into
    > /usr/share/...
    >
    > My current plan is simply to patch this to read
    >
    > set libPath "/usr/lib"
    >
    > But that just as well could be "/usr/lib/tcltk/...." or somesuch.
    > Hence my question about where to put shared libs.
    >
    > Any additional insights or pointers are most welcome. This is
    > my first attempt at packaging Tcl bindings.
    >


    pkgIndex.tcl index is one of the ways to support packages in Tcl.
    That file can be either created by pkg_mkIndex or by hand when
    the automatic creation is not appropriate. In your case it seems
    it has been manually created. Using /usr/lib is not appropriate
    for the reasons listed in the draft policy, so it is better
    using a subdir there and try to use 'package require '
    within tclsh to see if the Tcl interpreter is finally able to
    load the extension and modules.

    > Thanks,
    > -Steve
    >
    > [1] http://packages.qa.debian.org/i/insighttoolkit.html
    > The Tcl bindings are not yet present; it will be a new package
    > appearing with version 3.6.0.
    >
    > P.S. I searched in vain for a debian-tcl mailing list, so I'm sending
    > this to debian-devel as well as the two names listed in the Tcl/Tk
    > policy package and the pkg-tcltk-devel list. If this is not the right
    > place, please advise and do feel free to forward this email to the
    > right place.


    This is the right place.

    --
    Francesco P. Lovergine


    --
    To UNSUBSCRIBE, email to debian-devel-REQUEST@lists.debian.org
    with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org

+ Reply to Thread