Subject: how to turn off automatic libtool expansion in PLIST?
To: None <tech-pkg@netbsd.org>
From: Greg Troxel <gdt@ir.bbn.com>
List: tech-pkg
Date: 11/12/2004 15:40:20
executive summary: having foo.la in PLIST is interpreted as also
having all the referenced files, and if foo.la is a symlink to bar.la,
pkg_install and pkg_delete complain about overwritten/missing files.

I just made an up-to-date package for guile-pg (guile interface for
PostgreSQL) in wip/guile-pg.  The only ugliness in the package stems
from guile-pg installing a symlink:

$ l /usr/pkg/lib/guile/site/database
total 144
lrwxr-xr-x  1 root  wheel     11 Nov 12 15:20 libpostgres.la -> postgres.la
-r--r--r--  1 root  wheel   2806 Nov 12 15:20 postgres-col-defs.scm
-r--r--r--  1 root  wheel   9882 Nov 12 15:20 postgres-meta.scm
-r--r--r--  1 root  wheel   3644 Nov 12 15:20 postgres-resx.scm
-r--r--r--  1 root  wheel  24073 Nov 12 15:20 postgres-table.scm
-r--r--r--  1 root  wheel  11345 Nov 12 15:20 postgres-types.scm
-rw-r--r--  1 root  wheel  43368 Nov 12 15:20 postgres.a
-rwxr-xr-x  1 root  wheel    898 Nov 12 15:20 postgres.la
lrwxr-xr-x  1 root  wheel     17 Nov 12 15:20 postgres.so -> postgres.so.0.0.0
lrwxr-xr-x  1 root  wheel     17 Nov 12 15:20 postgres.so.0 -> postgres.so.0.0.0
-rwxr-xr-x  1 root  wheel  47248 Nov 12 15:20 postgres.so.0.0.0

In guile-pg's world view (and in the guile-pg's mainainter's forked
guile), binary guile modules should be named with just the module
name.  In guile 1.6.x (current FSF stable), the binary guile module
'(foo bar baz)' is looked for in foo/bar/libbaz.la.  Earlier I sent a
bug report to guile-pg, resulting in the compatibility symlink.

So, the automatic .la PLIST handling is dysfunctionally smart here.
Is there a way to turn it off for a given file?  Should
scripts/print-la-libnames simply not expand .la files that are
symlinks?

I realize that guile-pg is an odd package in this respect, but I'm
trying to patch the package as little as possible; removing the
symlink and renaming the library seems like a lot of work.

$ sudo pkg_add /usr/pkgsrc/packages/All/guile-pg-0.22.tgz 
pkg_add: Overwriting /usr/pkg/lib/guile/site/database/postgres.a - pkg guile-pg-0.22 bogus/conflicting?
pkg_add: Overwriting /usr/pkg/lib/guile/site/database/postgres.so - pkg guile-pg-0.22 bogus/conflicting?
pkg_add: Overwriting /usr/pkg/lib/guile/site/database/postgres.so.0 - pkg guile-pg-0.22 bogus/conflicting?
pkg_add: Overwriting /usr/pkg/lib/guile/site/database/postgres.so.0.0.0 - pkg guile-pg-0.22 bogus/conflicting?
$ sudo pkg_delete guile-pg
pkg_delete: file `/usr/pkg/lib/guile/site/database/postgres.a' doesn't really exist
pkg_delete: can't readlink `/usr/pkg/lib/guile/site/database/postgres.so'
pkg_delete: can't readlink `/usr/pkg/lib/guile/site/database/postgres.so.0'
pkg_delete: file `/usr/pkg/lib/guile/site/database/postgres.so.0.0.0' doesn't really exist
pkg_delete: couldn't entirely delete package `guile-pg-0.22'
(perhaps the packing list is incorrectly specified?)

Despite all this, guile-pg passes 'make check' (modulo a pg version
nit in an output string comparison, which isn't a guile-pg bug).