Linux Archive

Linux Archive (http://www.linux-archive.org/)
-   Debian Development (http://www.linux-archive.org/debian-development/)
-   -   Debian tcl/tk policy: where to put shared libs? (http://www.linux-archive.org/debian-development/86036-debian-tcl-tk-policy-where-put-shared-libs.html)

"Steve M. Robbins" 05-11-2008 08:34 PM

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.

"Francesco P. Lovergine" 05-12-2008 12:01 PM

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/<your_pkg> 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/<your_pkg>.
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 <package_name>'
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


All times are GMT. The time now is 07:47 AM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.