role:: questions
Justin B Rye
jbr at edlug.org.uk
Fri Dec 15 23:29:48 CET 2006
I seem to have developed a set of usage opinions about the role::
facet which might translate into tips, but I don't know whether
anybody else shares them, so I'd like to try fishing for comments.
TEST-CASE PACKAGES
I'm starting with some tricky cases in the hope that they'll leave
you with answers in mind that _don't_ match mine!
* gcc exists as a sort of "escalator" dependency package to keep
whatever-C-compiler-is-currently-default installed, but it isn't
empty - it contains the /usr/bin/gcc symlink, so you need it for
compiles. Is gcc role::dummy?
* the package mailreader contains CGI scripts, but puts nothing in
any $PATH directory. Is it a ::program, a ::plugin, or what?
* if a package contains nothing but .php files, is that a ::program?
* similarly, gnustep-foo.app packages don't put an executable on my
$PATH, they use symlinks to wrapperscripts, and hide their actual
contents under /usr/lib/GNUstep - ::program? ::plugin?
* are font-packages ::data or ::app-data? Or do they vary?
* linux-headers-2.6.X-foo must be ::devel-lib, but how about
linux-image-2.6.X-foo - ::program? ::TODO? Or what?
* are unionfs-modules-2.6.X-foo and libapache2-mod-foo ::plugin?
* libfoo-dbg is ::shared-lib plus some devel:: tag or other. They
seem to be getting devel::debugger - is that right?
* is cl-foo implemented-in::lisp role::shared-lib, like its
equivalents in ::perl or ::python or the like? Or are they
role::devel-lib? (And if it varies from one programming language
to the next, how about libfoo-ruby, -ocaml, -lua, -cil...?)
* is debian-policy ::documentation or ::data? How about
doc-linux-text?
ATTEMPTED USAGE GENERALISATIONS
This is the nearest I can get to a set of guidelines for the role::
tags.
* any package that exists purely for the sake of the dependencies in
its control file is role::dummy. It may pull in suites, it may
ensure exactly the right member of a set is installed, it may be a
name-change-handler package, or it may be something slightly more
complicated. One of the commonest inter-release problems is that
contentful packages get replaced by empty packages of the same
name, or vice-versa.
* I've just noticed that my local vocabulary file distinguishes a
role::metapackage, but the online editor doesn't. Is the idea
that it has been merged into role::dummy? (If so, good.)
* packages that put executables on $PATH are role::program. If they
put them elsewhere - in run-parts directories, /usr/lib/cgi-bin,
/usr/share/emacs/site-lisp etc - things aren't as clear. Such
packages usually include some straightforward utilities too, but
there's room for debate about whether they "count" - if foo-data
contains 10MB of XML, it's role::app-data, even if it does come
with a shell-oneliner /usr/sbin/update-foodata.
* you'd think role::shared-library packages would be easy to spot,
but unfortunately their names don't all begin with or even contain
the string "lib". Nor are libfoo-{bin,common,dev,doc} usually
libraries, and a plain libfoo package may turn out on closer
examination to be a role::dummy to pull in libfoo42.
* role::app-data packages are distinguished from ::shared-lib ones
by content - rather than loadable code, they contain XML, images,
config-files, TeX stylesheets or other infrastructure required at
runtime.
* role::plugin is mostly distinguished from role::shared-library by
dependency strength: if it provides code modules needed for a
program to work, it's ::shared-library, but if they just make it
more flexible, and particularly if they're specific to that one
app (so the dependency runs backwards), it's ::plugin. Plugins
may even cause new icons to appear on a desktop, but they aren't
role::program unless they run out of /usr/bin.
* packages tagged role::data are like ::app-data but are provided
directly for the benefit of users rather than for any particular
package. They're like role::plugin, but static data rather than
libraries. E-books are the classic example.
* role::documentation is for packages that actually contain docs
for Debian-relevant subjects - foo-doc packages are
::documentation, bibles are ::data, but the borderline is unclear.
Manpage-editors and infrastructure packages like dwww aren't
role::documentation or made-of::documentation, they're
works-with::documentation (or would be if that existed).
* role::source packages let you "apt-get install foo-source" - it's
effectively like "apt-get source foo", except that it goes through
the package database, so it can be used as a build dependency. Or
at least, I think that's the idea... also I suppose some nonfree
packages exist only in this form for license reasons.
* role::devel-lib packages provide code for use at build-time, other
than actual package source code. Usually they're recognisable by
the fact the package name ends in -dev, but there are exceptions
like manpages-dev (::documentation) and xutils-dev (::program),
plus plenty of ::dummy dev-packages.
So, how close am I to something people agree on?
--
JBR
Ankh kak! (Ancient Egyptian blessing)
More information about the Debtags-devel
mailing list