aboutsummaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorRob Landley <rob@landley.net>2013-03-26 19:24:11 -0400
committerMichal Marek <mmarek@suse.cz>2013-04-09 06:50:29 -0400
commite0e2fa4b515cd61aabb5b32e8b816ed97dbe2490 (patch)
treeafda82ee617364e938a9c26fac92fc44a3ddfac9 /scripts
parent5b83df2b4661c03373b38374d0ef830b7819b875 (diff)
headers_install.pl: convert to headers_install.sh
Remove perl from make headers_install by replacing a perl script (doing a simple regex search and replace) with a smaller, faster, simpler, POSIX-2008 shell script implementation. The new shell script is a single for loop calling sed and piping its output through unifdef to produce the target file. Same as last time except for minor tweak to deal with code review from here: http://lkml.indiana.edu/hypermail/linux/kernel/1302.3/00078.html (Note that this drops the "arch" argument, which isn't used. Kbuild already points to the right input files on the command line.) Signed-off-by: Rob Landley <rob@landley.net> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Josh Boyer <jwboyer@redhat.com> Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> Cc: David Howells <dhowell@redhat.com> Acked-by: Sam Ravnborg <sam@ravnborg.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Michal Marek <mmarek@suse.cz>
Diffstat (limited to 'scripts')
-rw-r--r--scripts/Makefile.headersinst4
-rw-r--r--scripts/headers_install.pl63
-rw-r--r--scripts/headers_install.sh43
3 files changed, 45 insertions, 65 deletions
diff --git a/scripts/Makefile.headersinst b/scripts/Makefile.headersinst
index 477d137c0557..182084d728c8 100644
--- a/scripts/Makefile.headersinst
+++ b/scripts/Makefile.headersinst
@@ -72,7 +72,7 @@ printdir = $(patsubst $(INSTALL_HDR_PATH)/%/,%,$(dir $@))
72quiet_cmd_install = INSTALL $(printdir) ($(words $(all-files))\ 72quiet_cmd_install = INSTALL $(printdir) ($(words $(all-files))\
73 file$(if $(word 2, $(all-files)),s)) 73 file$(if $(word 2, $(all-files)),s))
74 cmd_install = \ 74 cmd_install = \
75 $(PERL) $< $(installdir) $(SRCARCH) $(input-files); \ 75 $(CONFIG_SHELL) $< $(installdir) $(input-files); \
76 for F in $(wrapper-files); do \ 76 for F in $(wrapper-files); do \
77 echo "\#include <asm-generic/$$F>" > $(installdir)/$$F; \ 77 echo "\#include <asm-generic/$$F>" > $(installdir)/$$F; \
78 done; \ 78 done; \
@@ -98,7 +98,7 @@ __headersinst: $(subdirs) $(install-file)
98 @: 98 @:
99 99
100targets += $(install-file) 100targets += $(install-file)
101$(install-file): scripts/headers_install.pl $(input-files) FORCE 101$(install-file): scripts/headers_install.sh $(input-files) FORCE
102 $(if $(unwanted),$(call cmd,remove),) 102 $(if $(unwanted),$(call cmd,remove),)
103 $(if $(wildcard $(dir $@)),,$(shell mkdir -p $(dir $@))) 103 $(if $(wildcard $(dir $@)),,$(shell mkdir -p $(dir $@)))
104 $(call if_changed,install) 104 $(call if_changed,install)
diff --git a/scripts/headers_install.pl b/scripts/headers_install.pl
deleted file mode 100644
index 581ca99c96f2..000000000000
--- a/scripts/headers_install.pl
+++ /dev/null
@@ -1,63 +0,0 @@
1#!/usr/bin/perl -w
2#
3# headers_install prepare the listed header files for use in
4# user space and copy the files to their destination.
5#
6# Usage: headers_install.pl readdir installdir arch [files...]
7# installdir: dir to install the files to
8# arch: current architecture
9# arch is used to force a reinstallation when the arch
10# changes because kbuild then detect a command line change.
11# files: list of files to check
12#
13# Step in preparation for users space:
14# 1) Drop all use of compiler.h definitions
15# 2) Drop include of compiler.h
16# 3) Drop all sections defined out by __KERNEL__ (using unifdef)
17
18use strict;
19
20my ($installdir, $arch, @files) = @ARGV;
21
22my $unifdef = "scripts/unifdef -U__KERNEL__ -D__EXPORTED_HEADERS__";
23
24foreach my $filename (@files) {
25 my $file = $filename;
26 $file =~ s!^.*/!!;
27
28 my $tmpfile = "$installdir/$file.tmp";
29
30 open(my $in, '<', $filename)
31 or die "$filename: $!\n";
32 open(my $out, '>', $tmpfile)
33 or die "$tmpfile: $!\n";
34 while (my $line = <$in>) {
35 $line =~ s/([\s(])__user\s/$1/g;
36 $line =~ s/([\s(])__force\s/$1/g;
37 $line =~ s/([\s(])__iomem\s/$1/g;
38 $line =~ s/\s__attribute_const__\s/ /g;
39 $line =~ s/\s__attribute_const__$//g;
40 $line =~ s/\b__packed\b/__attribute__((packed))/g;
41 $line =~ s/^#include <linux\/compiler.h>//;
42 $line =~ s/(^|\s)(inline)\b/$1__$2__/g;
43 $line =~ s/(^|\s)(asm)\b(\s|[(]|$)/$1__$2__$3/g;
44 $line =~ s/(^|\s|[(])(volatile)\b(\s|[(]|$)/$1__$2__$3/g;
45 $line =~ s/#ifndef\s+_UAPI/#ifndef /;
46 $line =~ s/#define\s+_UAPI/#define /;
47 $line =~ s!#endif\s+/[*]\s*_UAPI!#endif /* !;
48 printf {$out} "%s", $line;
49 }
50 close $out;
51 close $in;
52
53 system $unifdef . " $tmpfile > $installdir/$file";
54 # unifdef will exit 0 on success, and will exit 1 when the
55 # file was processed successfully but no changes were made,
56 # so abort only when it's higher than that.
57 my $e = $? >> 8;
58 if ($e > 1) {
59 die "$tmpfile: $!\n";
60 }
61 unlink $tmpfile;
62}
63exit 0;
diff --git a/scripts/headers_install.sh b/scripts/headers_install.sh
new file mode 100644
index 000000000000..643764f53ea7
--- /dev/null
+++ b/scripts/headers_install.sh
@@ -0,0 +1,43 @@
1#!/bin/sh
2
3if [ $# -lt 1 ]
4then
5 echo "Usage: headers_install.sh OUTDIR [FILES...]
6 echo
7 echo "Prepares kernel header files for use by user space, by removing"
8 echo "all compiler.h definitions and #includes, removing any"
9 echo "#ifdef __KERNEL__ sections, and putting __underscores__ around"
10 echo "asm/inline/volatile keywords."
11 echo
12 echo "OUTDIR: directory to write each userspace header FILE to."
13 echo "FILES: list of header files to operate on."
14
15 exit 1
16fi
17
18# Grab arguments
19
20OUTDIR="$1"
21shift
22
23# Iterate through files listed on command line
24
25FILE=
26trap 'rm -f "$OUTDIR/$FILE" "$OUTDIR/$FILE.sed"' EXIT
27for i in "$@"
28do
29 FILE="$(basename "$i")"
30 sed -r \
31 -e 's/([ \t(])(__user|__force|__iomem)[ \t]/\1/g' \
32 -e 's/__attribute_const__([ \t]|$)/\1/g' \
33 -e 's@^#include <linux/compiler.h>@@' \
34 -e 's/(^|[^a-zA-Z0-9])__packed([^a-zA-Z0-9_]|$)/\1__attribute__((packed))\2/g' \
35 -e 's/(^|[ \t(])(inline|asm|volatile)([ \t(]|$)/\1__\2__\3/g' \
36 -e 's@#(ifndef|define|endif[ \t]*/[*])[ \t]*_UAPI@#\1 @' \
37 "$i" > "$OUTDIR/$FILE.sed" || exit 1
38 scripts/unifdef -U__KERNEL__ -D__EXPORTED_HEADERS__ "$OUTDIR/$FILE.sed" \
39 > "$OUTDIR/$FILE"
40 [ $? -gt 1 ] && exit 1
41 rm -f "$OUTDIR/$FILE.sed"
42done
43trap - EXIT