All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 3/3] convert headers_install.pl->headers_install.sh
@ 2012-12-18  1:12 rob
  2013-02-15  9:29 ` Sam Ravnborg
  2013-02-24 20:42 ` Michal Marek
  0 siblings, 2 replies; 4+ messages in thread
From: rob @ 2012-12-18  1:12 UTC (permalink / raw)
  To: Michal Marek; +Cc: linux-kernel, linux-kbuild

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.

Signed-off-by: Rob Landley <rob@landley.net>
---

 scripts/Makefile.headersinst |    4 +-
 scripts/headers_install.pl   |   63 ---------------------------------
 scripts/headers_install.sh   |   43 ++++++++++++++++++++++
 3 files changed, 45 insertions(+), 65 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 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 /[*]) _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
@@ -55,7 +55,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 <asm-generic/$$F>" > $(installdir)/$$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,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 _UAPI/#ifndef /;
-		$line =~ s/#define _UAPI/#define /;
-		$line =~ s!#endif /[*] _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;

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 3/3] convert headers_install.pl->headers_install.sh
  2012-12-18  1:12 [PATCH 3/3] convert headers_install.pl->headers_install.sh rob
@ 2013-02-15  9:29 ` Sam Ravnborg
  2013-02-24 20:42 ` Michal Marek
  1 sibling, 0 replies; 4+ messages in thread
From: Sam Ravnborg @ 2013-02-15  9:29 UTC (permalink / raw)
  To: rob; +Cc: Michal Marek, linux-kernel, linux-kbuild

On Mon, Dec 17, 2012 at 05:12:51PM -0800, rob@landley.net wrote:
> 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.
> 
> Signed-off-by: Rob Landley <rob@landley.net>

The shell based variant is smaller and faster which is good.
As 99.999% of people buildign the kernel has perl installed that is not
a reason to apply this patch.
But as it bring benefits on their own then it has my:

Acked-by: Sam Ravnborg <sam@ravnborg.org>

	Sam

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 3/3] convert headers_install.pl->headers_install.sh
  2012-12-18  1:12 [PATCH 3/3] convert headers_install.pl->headers_install.sh rob
  2013-02-15  9:29 ` Sam Ravnborg
@ 2013-02-24 20:42 ` Michal Marek
  2013-02-26 15:25   ` Rob Landley
  1 sibling, 1 reply; 4+ messages in thread
From: Michal Marek @ 2013-02-24 20:42 UTC (permalink / raw)
  To: rob; +Cc: linux-kernel, linux-kbuild

On Mon, Dec 17, 2012 at 05:12:51PM -0800, rob@landley.net wrote:
> 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.
> 
> Signed-off-by: Rob Landley <rob@landley.net>
> ---
> 
>  scripts/Makefile.headersinst |    4 +-
>  scripts/headers_install.pl   |   63 ---------------------------------
>  scripts/headers_install.sh   |   43 ++++++++++++++++++++++
>  3 files changed, 45 insertions(+), 65 deletions(-)

Hi Rob,

sorry for the long delay. In general, the patch looks OK, I only have
two remarks:


> +		-e 's/(^|[ \t])(inline|asm|volatile)([ \t(]|$)/\1__\2__\3/g' \

This regexp does not match the 'volatile' in

#define XVMCLOCKPTR(saPriv,lockNo)					\
	((volatile struct drm_hw_lock *)(((((unsigned long) (saPriv)->XvMCLockArea) + \
				      (VIA_MAX_CACHELINE_SIZE - 1)) &	\
				     ~(VIA_MAX_CACHELINE_SIZE - 1)) +	\
				    VIA_MAX_CACHELINE_SIZE*(lockNo)))

in include/uapi/drm/via_drm.h.


> --- 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.

You are not passing $(SRCARCH) to the shell script. This seems OK, as
the list of files changes if needed, but the change should be mentioned
in the changelog.

Thanks,
Michal

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 3/3] convert headers_install.pl->headers_install.sh
  2013-02-24 20:42 ` Michal Marek
@ 2013-02-26 15:25   ` Rob Landley
  0 siblings, 0 replies; 4+ messages in thread
From: Rob Landley @ 2013-02-26 15:25 UTC (permalink / raw)
  To: Michal Marek; +Cc: linux-kernel, linux-kbuild

On 02/24/2013 02:42:56 PM, Michal Marek wrote:
> On Mon, Dec 17, 2012 at 05:12:51PM -0800, rob@landley.net wrote:
> > 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.
> >
> > Signed-off-by: Rob Landley <rob@landley.net>
> > ---
> >
> >  scripts/Makefile.headersinst |    4 +-
> >  scripts/headers_install.pl   |   63  
> ---------------------------------
> >  scripts/headers_install.sh   |   43 ++++++++++++++++++++++
> >  3 files changed, 45 insertions(+), 65 deletions(-)
> 
> Hi Rob,
> 
> sorry for the long delay. In general, the patch looks OK, I only have
> two remarks:

Thanks for the review.

> > +		-e 's/(^|[ \t])(inline|asm|volatile)([  
> \t(]|$)/\1__\2__\3/g' \
> 
> This regexp does not match the 'volatile' in
> 
> #define XVMCLOCKPTR(saPriv,lockNo)					 
> \
> 	((volatile struct drm_hw_lock *)(((((unsigned long)  
> (saPriv)->XvMCLockArea) + \
> 				      (VIA_MAX_CACHELINE_SIZE - 1)) &	 
> \
> 				     ~(VIA_MAX_CACHELINE_SIZE - 1)) +	 
> \
> 				    VIA_MAX_CACHELINE_SIZE*(lockNo)))
> 
> in include/uapi/drm/via_drm.h.

Looks like the first range needs to be [ \t(], same as the second one.  
I'll redo the patches with that. (And rediff for offset noise.)

> > --- 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.
> 
> You are not passing $(SRCARCH) to the shell script. This seems OK, as
> the list of files changes if needed, but the change should be  
> mentioned
> in the changelog.

Yup. The script wasn't using it, and to invoke it to do different  
things the remaining command line arguments already had to change.

I'll be sure to mention it in the respin, which should be sometime  
after lunch.

> Thanks,
> Michal
> 

Thanks,

Rob

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2013-02-26 15:25 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-12-18  1:12 [PATCH 3/3] convert headers_install.pl->headers_install.sh rob
2013-02-15  9:29 ` Sam Ravnborg
2013-02-24 20:42 ` Michal Marek
2013-02-26 15:25   ` Rob Landley

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.