You may be wondering, why in the world did one nice, easy xorg-x11 package turn into almost 300 separate ones? And you'd certainly be justified in this. =) It's not something Gentoo is doing independently of upstream X.Org; they're splitting up all the packages into separate releases, and we're just following along.
You can read up on the details at the
We want to enumerate the dependencies as finely as possible, so people don't to have unused cruft lying all over their systems for things they don't even use, such as XPrint. So you want to depend directly upon the library and header packages you need rather than any sort of virtual.
Also, we can't guarantee that people will still have subpackages installed just because they have a metabuild installed, and eliminating that possibility of breakage will save us all a lot of time that would be spent marking bugs INVALID.
If I find any packages depending upon any of the metabuilds there will be, I won't hesitate to hassle and haze the maintainer unto eternity.
First step is to either install modular X or find somebody who has it installed. This can be done in a chroot -- there's no need to actually run X, you just need to have its files available for dependency checking.
$ wget http://dev.gentoo.org/~dberkholz/scripts/linking_libs \ http://dev.gentoo.org/~dberkholz/scripts/included_headers \ http://dev.gentoo.org/~betelgeuse/scripts/deputils/checkdeps.rb \ http://dev.gentoo.org/~betelgeuse/scripts/deputils/pkgutil.rb
The first script,
$ ls /var/log/portage/*gdm* -l -rw-r--r-- 1 root portage 556551 2006-01-09 11:41 /var/log/portage/8430-gdm-2.8.0.7.log -rw-r--r-- 1 root portage 855 2006-01-09 11:42 /var/log/portage/8431-gdm-2.8.0.7.log $ linking_libs /var/log/portage/8430-gdm-2.8.0.7.log
The second script,
The third script,
Running the first two scripts should get you a good list of packages for both RDEPEND (for libraries) and DEPEND (headers and libraries). If a library shows up in the RDEPEND list that doesn't show up in the DEPEND list, be suspicious; it may be a "false dependency," (a library that's linked against for no reason). One known example of a true dependency like this is libXt; many packages check for libXt headers to check for X.
Occasionally the relative header search in
If you specify the
It's worth spending the time to figure out whether libraries or headers that aren't found need to be added to the dependency list, particularly in the header case since you don't need the headers installed to run the scan.
In some cases, packages require an actual X server of some sort. But if they don't actually require it during the installation, I encourage you to not put it into the RDEPEND. This breaks headless X installations, where the programs actually run on another machine so only need local libraries and headers.
There are already a number of X servers in the tree, so if you do need an X server, please include them all. Modular X's servers are in xorg-server; there's a DirectFB server at xdirectfb; kdrive provides tiny X servers; and of course old <xorg-x11-7. Do specify the version restriction on xorg-x11, to ensure an X server instead of a metabuild. In the near future, I anticipate kdrive moving to xserver. If you do require an X server, please contact a member of the X team. We may create a virtual for it if a sufficient number of packages require it.
On to actually adding the dependencies -- you'll want a structure like this:
RDEPEND="|| ( ( x11-libs/libXfoo
x11-libs/libXbar
blah? ( x11-libs/libXblah )
whatever else shows up in the library run
)
virtual/x11
)
DEPEND="${RDEPEND}
|| ( ( x11-proto/fooproto
blah? ( x11-proto/blahproto )
whatever else shows up in both script runs
)
virtual/x11
)
The goal here is defaulting to the new, modular X, but allowing people to also fulfill the dependencies with the old, monolithic xorg-x11 package. We're dropping virtual/x11 entirely to encourage the enumeration of proper dependencies.
For the initial run through the tree, the porting task force only fixes the newest ebuild available to ~arch users, and anything newer (KEYWORDS=-* or package.mask). Individual package maintainers may choose to do this and allow the unported ebuilds to gradually fade from the tree, but they will probably want to port all their ebuilds at once. Repoman will soon die on any ebuild with a hard dependency on virtual/x11.
Many people have the xinerama USE flag deactivated. But if, when you're running
Caleb raised a good point, and that is, how do you deal with all the USE flags on packages that have a ton of optional X library dependencies? In many cases, it will make sense to always force on or off flags. Also, you can make this easier by grouping flags. Make sure you're naming the flags by their functions and not by the libraries or packages they use.
If you're a developer, commit them. If not, file a new bug, assigned to the
package maintainers (in metadata.xml). Have it block bug