From patchwork Wed Feb 27 05:58:06 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Landley X-Patchwork-Id: 2192191 Return-Path: X-Original-To: patchwork-linux-kbuild@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork2.kernel.org (Postfix) with ESMTP id 3D636DF2F2 for ; Wed, 27 Feb 2013 05:58:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752293Ab3B0F6K (ORCPT ); Wed, 27 Feb 2013 00:58:10 -0500 Received: from mail-oa0-f45.google.com ([209.85.219.45]:63622 "EHLO mail-oa0-f45.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752846Ab3B0F6H (ORCPT ); Wed, 27 Feb 2013 00:58:07 -0500 Received: by mail-oa0-f45.google.com with SMTP id o6so420321oag.4 for ; Tue, 26 Feb 2013 21:58:07 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-received:date:from:cc:to:in-reply-to:message-id:subject :x-gm-message-state; bh=TXK4Uvok2jdr6wQFgCEkDTUQRP/P+G27OiH5LUIVEwQ=; b=NtRjUxCpuaNWBWixF+fpxD88GFriZSuBytMg9w+edj0uKSwloMeqHmXYuR/IVtIcOR fwdyh86t4Mpq81EDrUNGE+g2F4jjKnor4ahnnoaytS0muX18Spb7FXDQELV9oS0tfVEy GE9dWqAzO/b+gtnidPyqMJynmQc+UqW94rJxUhhcrYkObgOi8bv6Ko0rwjqIhrmGYBTE FzP9odNp05YcohS+8f4zyVXBMkRMmawCnlTC/T7zuEUlQ60YUt62jYrVH0igGIWThhhO PNRXFhTR/BYGHpgL7wkidy9Wc/y/g34fjfgZqkgbkCPKUO0zP7ut2M+Qsk4vVUdzun1k GDqg== X-Received: by 10.60.170.20 with SMTP id ai20mr1018667oec.33.1361944686925; Tue, 26 Feb 2013 21:58:06 -0800 (PST) Received: from [127.0.1.1] (c-50-148-218-118.hsd1.mn.comcast.net. [50.148.218.118]) by mx.google.com with ESMTPS id ka6sm6277533obb.3.2013.02.26.21.58.04 (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 26 Feb 2013 21:58:06 -0800 (PST) Date: Tue, 26 Feb 2013 21:58:06 -0800 (PST) From: Rob Landley Cc: linux-kernel@vger.kernel.org, Thomas Gleixner , Josh Boyer , "Paul E. McKenney" , Andrew Morton , David Howells , Michal Marek , Sam Ravnborg To: linux-kbuild@vger.kernel.org In-Reply-To: <1361944667.957820@landley.net> Message-Id: <1361944667.959170@landley.net> Subject: [PATCH 3/3] convert headers_install.pl to headers_install.sh X-Gm-Message-State: ALoCoQnFylV8NOvmqgZztqUhAMSUOS+iEH7LeWvNTHILl5AmJEYHw/PjJdn9nPsXLg74VROQOWjT Sender: linux-kbuild-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kbuild@vger.kernel.org From: Rob Landley 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 --- scripts/Makefile.headersinst | 4 +- scripts/headers_install.pl | 63 --------------------------------- scripts/headers_install.sh | 43 ++++++++++++++++++++++ 3 files changed, 45 insertions(+), 65 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html 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 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 @@' \ + -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 diff -ruN linux-3.1/scripts/Makefile.headersinst --- linux-3.1/scripts/Makefile.headersinst +++ linux/scripts/Makefile.headersinst @@ -71,7 +71,7 @@ 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 " > $(installdir)/$$F; \ done; \ @@ -97,7 +97,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,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 //; - $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;