summaryrefslogtreecommitdiffstats
path: root/patches
diff options
context:
space:
mode:
Diffstat (limited to 'patches')
-rw-r--r--patches/01_noperl-headers.patch154
1 files changed, 154 insertions, 0 deletions
diff --git a/patches/01_noperl-headers.patch b/patches/01_noperl-headers.patch
new file mode 100644
index 0000000..514eabe
--- /dev/null
+++ b/patches/01_noperl-headers.patch
@@ -0,0 +1,154 @@
+Subject: [PATCH] Replace scripts/headers_install.pl with a shell script.
+
+From: Rob Landley <rob@landley.net>
+
+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.
+
+Previous submission: Tuesday Jan 18, 2011
+Message-ID: <4D359E5C.1070002@parallels.com>
+
+Signed-off-by: Rob Landley <rob@landley.net>
+---
+
+ scripts/Makefile.headersinst | 6 +--
+ scripts/headers_install.pl | 58 ---------------------------------
+ scripts/headers_install.sh | 43 ++++++++++++++++++++++++
+ 3 files changed, 46 insertions(+), 61 deletions(-)
+
+diff -ruN linux-3.1/scripts/headers_install.sh linux-2.6.30/scripts/headers_install.sh
+--- linux-3.1/scripts/headers_install.sh
++++ linux/scripts/headers_install.sh
+@@ -0,0 +1,43 @@
++#!/bin/sh
++
++if [ $# -lt 2 ]
++then
++ echo "Usage: headers_install.sh INDIR OUTDIR [FILES...]
++ echo
++ echo "Prepares kernel header files for use by user space, by removing"
++ echo "all compiler.h definitions and #includes, removing any"
++ echo "#ifdef __KERNEL__ sections, and putting __underscores__ around"
++ echo "asm/inline/volatile keywords."
++ echo
++ echo "INDIR: directory to read each kernel header FILE from."
++ echo "OUTDIR: directory to write each userspace header FILE to."
++ echo "FILES: list of header files to operate on."
++
++ exit 1
++fi
++
++# Grab arguments
++
++INDIR="$1"
++shift
++OUTDIR="$1"
++shift
++
++# Iterate through files listed on command line
++
++trap "rm -f $OUTDIR/$i $OUTDIR.sed" EXIT
++for i in "$@"
++do
++ sed -r \
++ -e 's/([ \t(])(__user|__force|__iomem)[ \t]/\1/g' \
++ -e 's/__attribute_const__([ \t]|$)/\1/g' \
++ -e 's@^#include <linux/compiler.h>@@' \
++ -e 's/(^|[^a-zA-Z0-9])__packed([^a-zA-Z0-9_]|$)/\1__attribute__((packed))\2/g' \
++ -e 's/(^|[ \t])(inline|asm|volatile)([ \t(]|$)/\1__\2__\3/g' \
++ "$INDIR/$i" > "$OUTDIR/$i.sed" || exit 1
++ scripts/unifdef -U__KERNEL__ -D__EXPORTED_HEADERS__ "$OUTDIR/$i.sed" \
++ > "$OUTDIR/$i"
++ [ $? -gt 1 ] && exit 1
++ rm -f "$OUTDIR/$i.sed"
++done
++trap - EXIT
+diff -ruN linux-3.1/scripts/Makefile.headersinst
+--- linux-3.1/scripts/Makefile.headersinst
++++ linux/scripts/Makefile.headersinst
+@@ -55,9 +55,9 @@
+ quiet_cmd_install = INSTALL $(printdir) ($(words $(all-files))\
+ file$(if $(word 2, $(all-files)),s))
+ cmd_install = \
+- $(PERL) $< $(srctree)/$(obj) $(install) $(SRCARCH) $(header-y); \
+- $(PERL) $< $(objtree)/$(obj) $(install) $(SRCARCH) $(objhdr-y); \
+- $(PERL) $< $(objtree)/$(gen) $(install) $(SRCARCH) $(genhdr-y); \
++ $(CONFIG_SHELL) $< $(srctree)/$(obj) $(install) $(header-y); \
++ $(CONFIG_SHELL) $< $(objtree)/$(obj) $(install) $(objhdr-y); \
++ $(CONFIG_SHELL) $< $(objtree)/$(gen) $(install) $(genhdr-y); \
+ for F in $(wrapper-files); do \
+ echo "\#include <asm-generic/$$F>" > $(install)/$$F; \
+ done; \
+@@ -83,7 +83,7 @@
+ @:
+
+ targets += $(install-file)
+-$(install-file): scripts/headers_install.pl $(input-files) FORCE
++$(install-file): scripts/headers_install.sh $(input-files) FORCE
+ $(if $(unwanted),$(call cmd,remove),)
+ $(if $(wildcard $(dir $@)),,$(shell mkdir -p $(dir $@)))
+ $(call if_changed,install)
+--- a/scripts/headers_install.pl
++++ /dev/null
+@@ -1,58 +0,0 @@
+-#!/usr/bin/perl -w
+-#
+-# headers_install prepare the listed header files for use in
+-# user space and copy the files to their destination.
+-#
+-# Usage: headers_install.pl readdir installdir arch [files...]
+-# readdir: dir to open files
+-# installdir: dir to install the files
+-# arch: current architecture
+-# arch is used to force a reinstallation when the arch
+-# changes because kbuild then detect a command line change.
+-# files: list of files to check
+-#
+-# Step in preparation for users space:
+-# 1) Drop all use of compiler.h definitions
+-# 2) Drop include of compiler.h
+-# 3) Drop all sections defined out by __KERNEL__ (using unifdef)
+-
+-use strict;
+-
+-my ($readdir, $installdir, $arch, @files) = @ARGV;
+-
+-my $unifdef = "scripts/unifdef -U__KERNEL__ -D__EXPORTED_HEADERS__";
+-
+-foreach my $file (@files) {
+- my $tmpfile = "$installdir/$file.tmp";
+-
+- open(my $in, '<', "$readdir/$file")
+- or die "$readdir/$file: $!\n";
+- open(my $out, '>', $tmpfile)
+- or die "$tmpfile: $!\n";
+- while (my $line = <$in>) {
+- $line =~ s/([\s(])__user\s/$1/g;
+- $line =~ s/([\s(])__force\s/$1/g;
+- $line =~ s/([\s(])__iomem\s/$1/g;
+- $line =~ s/\s__attribute_const__\s/ /g;
+- $line =~ s/\s__attribute_const__$//g;
+- $line =~ s/\b__packed\b/__attribute__((packed))/g;
+- $line =~ s/^#include <linux\/compiler.h>//;
+- $line =~ s/(^|\s)(inline)\b/$1__$2__/g;
+- $line =~ s/(^|\s)(asm)\b(\s|[(]|$)/$1__$2__$3/g;
+- $line =~ s/(^|\s|[(])(volatile)\b(\s|[(]|$)/$1__$2__$3/g;
+- printf {$out} "%s", $line;
+- }
+- close $out;
+- close $in;
+-
+- system $unifdef . " $tmpfile > $installdir/$file";
+- # unifdef will exit 0 on success, and will exit 1 when the
+- # file was processed successfully but no changes were made,
+- # so abort only when it's higher than that.
+- my $e = $? >> 8;
+- if ($e > 1) {
+- die "$tmpfile: $!\n";
+- }
+- unlink $tmpfile;
+-}
+-exit 0;