Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 7 May 2013 14:56:26 +0000 (07:56 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 7 May 2013 14:56:26 +0000 (07:56 -0700)
Pull kbuild changes from Michal Marek:
 "Kbuild commits for v3.10-rc1:

   - Fix make mrproper after mod/file2alias rework
   - Fix ld-option Makefile function
   - Rewrite headers_install to shell to drop Perl dependency.

  There are some more patches I have to look at, so I might send another
  pull request later.  Or just queue them for 3.11."

* 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild:
  Fix cleaning in scripts/mod
  headers_install.pl: convert to headers_install.sh
  kbuild: fix ld-option function

Documentation/kbuild/makefiles.txt
scripts/Kbuild.include
scripts/Makefile.headersinst
scripts/headers_install.pl [deleted file]
scripts/headers_install.sh [new file with mode: 0644]
scripts/mod/Makefile

index 5198b742fde1608330b799015573ecf97277531e..5836294fdbf700192842d661c5d447f1114a483c 100644 (file)
@@ -593,7 +593,7 @@ more details, with real examples.
 
        Example:
                #Makefile
-               LDFLAGS_vmlinux += $(call really-ld-option, -X)
+               LDFLAGS_vmlinux += $(call ld-option, -X)
 
 
 === 4 Host Program support
index 978416dd31ca0efeacfd938e961b241aca7633af..547e15daf03dc86dbfa72818122bc4c61929edb0 100644 (file)
@@ -148,7 +148,7 @@ cc-ldoption = $(call try-run,\
 # ld-option
 # Usage: LDFLAGS += $(call ld-option, -X)
 ld-option = $(call try-run,\
-       $(CC) /dev/null -c -o "$$TMPO" ; $(LD) $(1) "$$TMPO" -o "$$TMP",$(1),$(2))
+       $(CC) -x c /dev/null -c -o "$$TMPO" ; $(LD) $(1) "$$TMPO" -o "$$TMP",$(1),$(2))
 
 # ar-option
 # Usage: KBUILD_ARFLAGS := $(call ar-option,D)
index 477d137c0557b8b70571d9e6e0873e2af221d53b..182084d728c82d29b69170e642b3e978a8266f6e 100644 (file)
@@ -72,7 +72,7 @@ printdir = $(patsubst $(INSTALL_HDR_PATH)/%/,%,$(dir $@))
 quiet_cmd_install = INSTALL $(printdir) ($(words $(all-files))\
                             file$(if $(word 2, $(all-files)),s))
       cmd_install = \
-        $(PERL) $< $(installdir) $(SRCARCH) $(input-files); \
+        $(CONFIG_SHELL) $< $(installdir) $(input-files); \
         for F in $(wrapper-files); do                                   \
                 echo "\#include <asm-generic/$$F>" > $(installdir)/$$F;    \
         done;                                                           \
@@ -98,7 +98,7 @@ __headersinst: $(subdirs) $(install-file)
        @:
 
 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)
diff --git a/scripts/headers_install.pl b/scripts/headers_install.pl
deleted file mode 100644 (file)
index 581ca99..0000000
+++ /dev/null
@@ -1,63 +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...]
-# installdir: dir to install the files to
-# 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 ($installdir, $arch, @files) = @ARGV;
-
-my $unifdef = "scripts/unifdef -U__KERNEL__ -D__EXPORTED_HEADERS__";
-
-foreach my $filename (@files) {
-       my $file = $filename;
-       $file =~ s!^.*/!!;
-
-       my $tmpfile = "$installdir/$file.tmp";
-
-       open(my $in, '<', $filename)
-           or die "$filename: $!\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;
-               $line =~ s/#ifndef\s+_UAPI/#ifndef /;
-               $line =~ s/#define\s+_UAPI/#define /;
-               $line =~ s!#endif\s+/[*]\s*_UAPI!#endif /* !;
-               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;
diff --git a/scripts/headers_install.sh b/scripts/headers_install.sh
new file mode 100644 (file)
index 0000000..643764f
--- /dev/null
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+if [ $# -lt 1 ]
+then
+       echo "Usage: headers_install.sh 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 "OUTDIR: directory to write each userspace header FILE to."
+       echo "FILES:  list of header files to operate on."
+
+       exit 1
+fi
+
+# Grab arguments
+
+OUTDIR="$1"
+shift
+
+# Iterate through files listed on command line
+
+FILE=
+trap 'rm -f "$OUTDIR/$FILE" "$OUTDIR/$FILE.sed"' EXIT
+for i in "$@"
+do
+       FILE="$(basename "$i")"
+       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' \
+               -e 's@#(ifndef|define|endif[ \t]*/[*])[ \t]*_UAPI@#\1 @' \
+               "$i" > "$OUTDIR/$FILE.sed" || exit 1
+       scripts/unifdef -U__KERNEL__ -D__EXPORTED_HEADERS__ "$OUTDIR/$FILE.sed" \
+               > "$OUTDIR/$FILE"
+       [ $? -gt 1 ] && exit 1
+       rm -f "$OUTDIR/$FILE.sed"
+done
+trap - EXIT
index 9415b5663364c6cb5ce5b934be952de8a34ed3b0..75d59fcd48b8268bbd4254bc2478ab12ca641b7c 100644 (file)
@@ -37,6 +37,8 @@ scripts/mod/devicetable-offsets.s: scripts/mod/devicetable-offsets.c FORCE
 $(obj)/$(devicetable-offsets-file): scripts/mod/devicetable-offsets.s
        $(call cmd,offsets)
 
+targets += $(devicetable-offsets-file)
+
 # dependencies on generated files need to be listed explicitly
 
 $(obj)/modpost.o $(obj)/file2alias.o $(obj)/sumversion.o: $(obj)/elfconfig.h