mirror of
https://git.openafs.org/openafs.git
synced 2025-01-21 08:20:16 +00:00
Rewrite make_h_tree.pl in shell script
The current usage of make_h_tree.pl adds a build requirement of
/usr/bin/perl that we did not have prior to commit
1d6593e952
. Do the same thing in a
bourne shell script instead, so we don't need perl.
Note that this is not as generalized as make_h_tree.pl, but it doesn't
need to be. Specifically, this does not strip a leading ../ from found
include directives (nothing in the tree that includes h/* files uses
this), and header filenames containing whitespace almost certainly do
not work correctly.
The h => sys mapping is also much more hardcoded, but that's all we
were using this for anyway.
Change-Id: If07888abfdb9e8ec822b33abed0bf744b7210a52
Reviewed-on: http://gerrit.openafs.org/6790
Reviewed-by: Russ Allbery <rra@stanford.edu>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementix.org>
This commit is contained in:
parent
46e85dd468
commit
fb03b1380f
@ -2131,7 +2131,7 @@ AFSWEB:
|
||||
|
||||
h: $(TOP_SRC_AFS)/*.c $(TOP_SRC_VNOPS)/*.c $(TOP_SRC_RX)/*.c
|
||||
-$(RM) -rf h
|
||||
@TOP_SRCDIR@/libuafs/make_h_tree.pl $(TOP_SRC_AFS) $(TOP_SRC_VNOPS) \
|
||||
@TOP_SRCDIR@/libuafs/make_h_tree $(TOP_SRC_AFS) $(TOP_SRC_VNOPS) \
|
||||
$(TOP_SRC_RX)
|
||||
|
||||
setup_common: h
|
||||
|
28
src/libuafs/make_h_tree
Executable file
28
src/libuafs/make_h_tree
Executable file
@ -0,0 +1,28 @@
|
||||
#!/bin/sh -e
|
||||
|
||||
# make_h_tree
|
||||
# Generate an h tree that includes the appropriate sys headers
|
||||
#
|
||||
# Usage: make_h_tree ${SRC} ...
|
||||
#
|
||||
# The source files in the specified directories will be scanned for include
|
||||
# directives. 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. Since this script is
|
||||
# for userspace only, this effectively just makes a file called h/foo.h that
|
||||
# contains:
|
||||
# #include <sys/foo.h>
|
||||
# For every include directive that is found that looks like #include <h/foo.h>
|
||||
# This is an ugly hack to work around the naming of header files using h
|
||||
# instead of their proper names elsewhere in the code.
|
||||
|
||||
mkdir h
|
||||
|
||||
for dir in "$@" ; do
|
||||
for hsrc in `cat "$dir"/*.c | \
|
||||
sed -n -e 's|^[ ]*#[ ]*include[ ]*[<"]h/\([^>"/]*\)[>"].*$|\1|p' | \
|
||||
sort | uniq` ; do
|
||||
|
||||
echo "#include <sys/$hsrc>" > h/"$hsrc"
|
||||
done
|
||||
done
|
@ -1,45 +0,0 @@
|
||||
#!/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