From: Andrew Deason Date: Fri, 24 Feb 2012 00:28:21 +0000 (-0600) Subject: Rewrite make_h_tree.pl in shell script X-Git-Tag: upstream/1.8.0_pre1^2~2723 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=fb03b1380f82a6bdc8a78ad92069da38b4e98c26;p=packages%2Fo%2Fopenafs.git 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 1d6593e952ce82c778b1cd6e40c6e22ec756daf1. 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 Tested-by: BuildBot Reviewed-by: Derrick Brashear --- diff --git a/src/libuafs/Makefile.common.in b/src/libuafs/Makefile.common.in index 4bf9d77c5..2e4831ae1 100644 --- a/src/libuafs/Makefile.common.in +++ b/src/libuafs/Makefile.common.in @@ -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 diff --git a/src/libuafs/make_h_tree b/src/libuafs/make_h_tree new file mode 100755 index 000000000..2b8997312 --- /dev/null +++ b/src/libuafs/make_h_tree @@ -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 +# For every include directive that is found that looks like #include +# 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 " > h/"$hsrc" + done +done diff --git a/src/libuafs/make_h_tree.pl b/src/libuafs/make_h_tree.pl deleted file mode 100755 index d877be04a..000000000 --- a/src/libuafs/make_h_tree.pl +++ /dev/null @@ -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 \n"; - $H->close() or die "$inc: $!\n"; - $seen{$inc} = 1; - } - } - } - } -}