mirror of
https://git.openafs.org/openafs.git
synced 2025-01-19 23:40:13 +00:00
Generate stub header files for h/*.h files included in libuafs
Previously, the libuafs build created a symlink from h to /usr/include/sys so that files included under h/* by kernel source files could be found in the normal system header location. However, this assumption about the system header location is no longer valid. Debian and Ubuntu systems with multiarch have arch-specific include paths so that the same host can be used to build 32-bit and 64-bit binaries with different system headers, and those include paths are automatically searched by the compiler. This means some standard headers are no longer found directly in /usr/include/sys but are instead found in /usr/include/<arch>/sys. Using a stripped-down version of similar code for building the kernel module on Linux, create an h directory containing stub header files that just include the relevant system <sys/*.h> header file instead. This allows the compiler to implement its normal internal header search algorithm. Also remove all the other symlinks, such as sys, netinet, etc., that just pointed to the same directories under /usr/include. We can assume the normal compiler search algorithm will find these headers without requiring this assistance. Change-Id: Ie19d12e3d3f0068c88d0a9c83f6a96d51baee018 Reviewed-on: http://gerrit.openafs.org/5305 Tested-by: BuildBot <buildbot@rampaginggeek.com> Reviewed-by: Derrick Brashear <shadow@dementix.org>
This commit is contained in:
parent
0f4dfaed6b
commit
1d6593e952
@ -2039,8 +2039,8 @@ $(PERLUAFS)/ukernel.so: $(PERLUAFS)/ukernel_swig_perl.o UAFS.pic/libuafs_pic.a
|
||||
|
||||
clean:
|
||||
-$(RM) -rf UAFS* JUAFS* AFSWEB* PERLUAFS nsapi afsd afs afsint config rx
|
||||
-$(RM) -f h net netinet rpc ufs machine inet nfs sys linktest $(AFS_OS_CLEAN)
|
||||
|
||||
-$(RM) -rf h
|
||||
-$(RM) linktest $(AFS_OS_CLEAN)
|
||||
|
||||
install: UAFS/$(LIBUAFS) JUAFS/$(LIBJUAFS) UAFS.pic/libuafs_pic.a \
|
||||
@LIBUAFS_BUILD_PERL@
|
||||
@ -2102,15 +2102,10 @@ AFSWEB:
|
||||
mkdir -p $@
|
||||
|
||||
setup_common:
|
||||
-$(RM) -f h net netinet rpc ufs nfs machine sys inet nsapi afsd
|
||||
-ln -s ${ISYSROOT}/usr/include/sys h
|
||||
-ln -s ${ISYSROOT}/usr/include/net net
|
||||
-ln -s ${ISYSROOT}/usr/include/netinet netinet
|
||||
-ln -s ${ISYSROOT}/usr/include/rpc rpc
|
||||
-ln -s ${ISYSROOT}/usr/include/sys sys
|
||||
-ln -s ${ISYSROOT}/usr/include/nfs nfs
|
||||
-ln -s ${ISYSROOT}/usr/include/inet inet
|
||||
-ln -s ${ISYSROOT}/usr/include/ufs ufs
|
||||
-$(RM) -f nsapi afsd
|
||||
-$(RM) -rf h
|
||||
@TOP_SRCDIR@/libuafs/make_h_tree.pl $(TOP_SRC_AFS) $(TOP_SRC_VNOPS) \
|
||||
$(TOP_SRC_RX)
|
||||
-ln -s $(TOP_SRCDIR)/afsd afsd
|
||||
-ln -s $(NS_INCL) nsapi
|
||||
|
||||
|
45
src/libuafs/make_h_tree.pl
Executable file
45
src/libuafs/make_h_tree.pl
Executable file
@ -0,0 +1,45 @@
|
||||
#!/usr/bin/perl
|
||||
# make_h_tree.pl
|
||||
# Generate an h tree that includes the appropriate sys headers
|
||||
#
|
||||
# Usage: make_h_tree.pl ${SRC} ...
|
||||
#
|
||||
# The specified makefiles will be scanned for variable values. The h
|
||||
# directory will be created under the current directory and populated with
|
||||
# stubs that include the actual header file for every header included by any
|
||||
# source file in the ${SRC} directories. This is an ugly hack to work around
|
||||
# the naming of header files using h instead of their proper names elsewhere
|
||||
# in the code.
|
||||
|
||||
use IO::File;
|
||||
|
||||
if (@ARGV < 1) {
|
||||
die "Usage: $0 SRC ...\n";
|
||||
}
|
||||
|
||||
%remap = ('h' => 'sys');
|
||||
foreach $src (keys %remap) {
|
||||
mkdir($src, 0777) or die "$src: $!\n";
|
||||
%seen = ();
|
||||
@q = map { glob ("$_/*.[Sc]") } @ARGV;
|
||||
while (@q) {
|
||||
$src = shift @q;
|
||||
$content = new IO::File($src, O_RDONLY) or die "$src: $!\n";
|
||||
LINE:
|
||||
while (<$content>) {
|
||||
chomp;
|
||||
if (/^\s*\#\s*include\s*[<\"](?:\.\.\/)?([^\/>\"]*)(.*?)[>\"]/) {
|
||||
$inc = "$1$2";
|
||||
if (exists $seen{$inc}) {
|
||||
next;
|
||||
} elsif (exists $remap{$1} && $2 !~ /.\//) {
|
||||
$H = new IO::File("$inc", O_WRONLY|O_CREAT|O_TRUNC, 0666)
|
||||
or die "$inc: $!\n";
|
||||
print $H "#include <sys$2>\n";
|
||||
$H->close() or die "$inc: $!\n";
|
||||
$seen{$inc} = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user