[GIT *] make headers_install

From: David Woodhouse
Date: Sun Jul 02 2006 - 05:56:44 EST


Linus, please pull from git://git.infradead.org/hdrinstall-2.6.git

This implements a 'headers_install' make target, which takes a selected
subset of kernel headers and exports them in a form which is usable by
system libraries and tools, also removing all #ifdef __KERNEL__ from
them.

This provides a number of benefits to all concerned.

- it makes life a _lot_ easier for those who have to maintain such a
set of headers for distributions, or for building toolchains.
Previously, these were often maintained manually, adding new
structures and ioctls to a set of header files which were originally
copied from an older kernel and cleaned up. Now, they can be obtained
directly in a form which is useful. It was the fact that I own the
'glibc-kernheaders' package in Fedora which finally prompted me to
follow up on this.

- it makes life easier for those whose libraries or tools must _use_
such headers, because it means that the set of available headers can
be _consistent_ across all distributions and toolchains rather than
having random differences.

- that consistency also allows us to reduce the abuse of kernel headers
by random userspace, by removing files which userspace has no
business with. For example, we can simply drop asm/atomic.h from the
export to stop people from abusing it in userspace -- when we did
that kind of thing in Fedora alone, we got lots of complaints that
"it works in $OTHERDISTRO". (I haven't done that yet except in the
Fedora version; I was concentrating on the mechanism before we start
to enforce such policy).

- we can take diffs between the exported headers from one version to
the next, and see any ABI-affecting changes clearly. This should help
us to keep tabs on ABI changes. I've already kicked the GFS2 guys and
had them fix a problem with 32-bit userspace on 64-bit kernel,
because after 'make headers_install' I was able to see their ABI
change in isolation instead of hidden amongst the rest of their
patches.

- The additional 'make headers_check' target also allows us to run some
basic sanity checks on the exported headers. Currently, I've only
checked that they don't attempt to include headers which aren't
marked for export -- but Arjan van de Ven has offered patches which
go a little further than that. We could check for bogus types like
'u32' being used instead of '__u32', etc. And perhaps we could even
check that headers are _compilable_ in their standalone form,
although that isn't usually assumed to be the case since they don't
all include all their dependencies. Still, the mechanism is there for
us to do with it as we see fit.

It's based on an original implementation by Arnd Bergmann, hacked around
a bit by myself, and reviewed and cleaned up by Sam Ravnborg. It
includes some additional processing provided by Tim Yamin who handles
kernel headers for the Gentoo distribution.

It uses the BSD 'unifdef' tool, which is available by 'yum install
unifdef' on Fedora systems, and I believe is also available by similar
means in Debian. Sam's actually expressed a desire to stick a copy of
unifdef.c into the kernel's scripts/ directory, and Tony Finch (the BSD
author/maintainer) has agreed to that -- Sam will probably follow up
with an appropriate patch shortly, once he's sorted out the dependency
issues with that and cross-building.

The result of this export is already shipping in the 'glibc-kernheaders'
package in Fedora Core 6 test 1. I've also been working with those who own
equivalent packages in other distributions, and there is a _lot_ of
interest in switching over to this method.

Ignoring the new Kbuild files which just list the files to be exported
from each directory under include/, the diffstat is as follows:

Makefile | 17 ++++
scripts/Makefile.headersinst | 158 +++++++++++++++++++++++++++++++++
scripts/hdrcheck.sh | 8 ++
49 files changed, 399 insertions(+), 0 deletions(-)

David S. Miller:
Restrict headers exported to userspace for SPARC and SPARC64

David Woodhouse:
Basic implementation of 'make headers_install'
Basic implementation of 'make headers_check'
Add generic Kbuild files for 'make headers_install'
Add Kbuild file for PowerPC 'make headers_install'
Add Kbuild file for x86_64 'make headers_install'
Add Kbuild file for i386 'make headers_install'
Add Kbuild file for S390 'make headers_install'
Add Kbuild file for IA64 'make headers_install'
Add Kbuild file for SPARC 'make headers_install'
Add Kbuild file for Alpha 'make headers_install'
Add empty Kbuild files for 'make headers_install' in remaining arches.
Remove export of include/linux/isdn/tpam.h

Jean Delvare:
Remove <linux/i2c-id.h> and <linux/i2c-algo-ite.h> from userspace export

--
dwmw2

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/