devel packages with only one .pc file

Toshio Kuratomi toshio at tiki-lounge.com
Wed Sep 6 17:01:20 UTC 2006


On Tue, 2006-09-05 at 08:45 -0500, Josh Boyer wrote:

> You all realize that the amount of time spent on this thread so far is
> about 10x greater than it would have been to just fix the packages to
> match the policy, right?

It's important to understand why a policy exists.  Then you can question
whether it applies to all the circumstances it states or come up with a
better way of achieving the end-goal.  And that can lead to better
guidelines.

In this case I'm leaning towards changing the rules because it seems the
reason for the policy might not apply to Mono packages:

Mono packages contain two type of pkgconfig files.  One type is for C
glue libraries that link C code and Mono code.  These should be treated
just like normal pkgconfig files and be placed into a -devel subpackage
along with the C headers and .so file.  This is what is done in
libbeagle and libbeagle-devel (subpackages of beagle), for instance.

The other type is for programs linking together Mono libraries.  In this
case, the .pc will have lines which look like this (cut from banshee):

  Requires: gtk-sharp-2.0 gconf-sharp-2.0
  Libs: -r:/usr/lib64/banshee/Banshee.Base.dll \
    -r:/usr/lib64/banshee/Banshee.Widgets.dll \
    -r:/usr/lib64/banshee/entagged-sharp.dll \
    -r:/usr/lib64/banshee/hal-sharp.dll \
    -r:/usr/lib64/banshee/MusicBrainz.dll -r:Mono.Posix

The Libs: line refers to Mono .dll files which are needed at runtime as
well as build time.  The Requires: line references other Mono pkgconfig
files which are similar.  These files do not appear to drag in
dependencies on C pkg-config files and their -devel packages.  AFAICS,
by their nature, they never will (alexl, please correct me if that is
incorrect.)

So a mono package with only a pkgconfig file as development information
won't drag in -devel type information from other packages.

Now we have Ralf's point.  A package may have other types of information
that qualify as -devel at some later point in time (api doc, for
instance) or it may depend on a package which later gains the same and
needs to split off a devel package.  For the specific case of docs, I
think we'd want to split large development documentation into its own
-doc or -apidoc subpackage anyway.

For the general case there is a bit of trouble.  Say foo-1.0.pc
Requires: bar-1.0.pc Requires: baz-1.0.  When I initially package this
there is no other devel information so all is well.  But down the road
baz adds more developer-relevant information.  Suddenly, foo is pulling
in files it shouldn't on end-user systems.

How can we work around this?
1) Do as the guideline suggests.  .pc files go in a separate -devel
subpackage.

2) Make an exception for packages whose only -devel type file is a .pc
so they can stay the way they are.  Add Matthias Saou's suggested
virtual Provides: %{name}-devel = %{version}-%{release} and have
consumers of pkgconfig files use the virtual provides.  If other -devel
type files are added we make the virtual provide into a real subpackage.
Other packages which depend on the package for their pkgconfig files
have to periodically check for the existence of real -devel packages and
if they exist, spawn new -devel packages of their own that just have a
single pkgconfig file and the dependencies on the -devel otherwise the
runtime package will drag in the pkgconfig dependency tree.

3) Make an exception for packages whose only -devel type file is a .pc
so they can stay the way they are.  If other -devel type files are
added, we have to split off a new subpackage and fix all the
BuildRequires: in dependent packages to point to the new -devel.  Every
package that has a Require on that package because of pkgconfig
dependencies has to grow a -devel package with just the pkgconfig file
inside it and the proper dependencies otherwise the pkgconfig files will
break.

4) For Mono applications, pkgconfig files that deal with informing the
mono build chain of the location of the .dlls belong in the main
package.  Other -devel files belong in a subpackage.

I think #1 is the most robust solution and the friendliest to reviewers
because there are fewer special cases.  #2 is going to result in too
much work for packagers (who have to watch for their dependent packages
changing) and reviewers.

#3 requires reviewers to understand the special case of pkgconfig files
not dragging in extra dependencies but allows us to stop having
"ridiculous" single file subpackages in many cases.  It requires
packagers to fix their packages if a -devel package is created further
up the dep chain (so if glib-sharp grew the need for a -devel package,
the whole gtk stack would need to be changed to have -devel packages.)
Reviewers and packagers must understand that mono packages can have
pkgconfig files for the C bindings and for the mono .dll and they need
to be treated differently.

#4 is kludgy as written because it only applies to packages written in
Mono rather than being generalizable to packages which have/don't have a
certain feature.  But we have certain unwritten guidelines which are
similar (In python, we could put .py files from %{python_sitelib} into a
-devel or -debuginfo package because they are not needed for running the
programs but we don't)  It is directly opposite to the treatment of
pkgconfig files from C (in C, pkgconfig files MUST go in a -devel
subpackage.  In Mono, pkgconfig files MUST be placed in the main
package.)  It requires reviewers and packagers to understand that mono
packages may have two different sets of pkgconfig files with different
rules.  This supposes that a mono pkgconfig file will only drag in files
that are also needed at runtime.  (alexl, please correct me if I'm
wrong.)

I think #1 is the best for clarity.  But I would also be willing to see
the rule revised to something like #3 or #4 because I don't think most
mono packages are going to have -devel files other than the pkgconfig
file  (alexl, please correct me if you see this differently.)  Compared
against each other, I think #3's major drawback is psychological: mono
packagers may be hesitant to create -devel subpackages because the
change will cascade to other packages, causing more work.  #4's main
drawback is its direct conflict with the guidelines for C pkgconfig
files.

-Toshio
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
URL: <http://listman.redhat.com/archives/fedora-maintainers/attachments/20060906/0866f2a4/attachment.sig>


More information about the Fedora-maintainers mailing list