mkcapflags.pl: convert to mkcapflags.sh
authorRob Landley <rob@landley.net>
Mon, 29 Apr 2013 22:05:53 +0000 (15:05 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 29 Apr 2013 22:54:27 +0000 (15:54 -0700)
Generate asm-x86/cpufeature.h with posix-2008 commands instead of perl.

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>
Cc: Michal Marek <mmarek@suse.cz>
Cc: Sam Ravnborg <sam@ravnborg.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
arch/x86/kernel/cpu/Makefile
arch/x86/kernel/cpu/mkcapflags.pl [deleted file]
arch/x86/kernel/cpu/mkcapflags.sh [new file with mode: 0644]

index a0e067d..c949631 100644 (file)
@@ -43,10 +43,10 @@ obj-$(CONFIG_MTRR)                  += mtrr/
 obj-$(CONFIG_X86_LOCAL_APIC)           += perfctr-watchdog.o perf_event_amd_ibs.o
 
 quiet_cmd_mkcapflags = MKCAP   $@
-      cmd_mkcapflags = $(PERL) $(srctree)/$(src)/mkcapflags.pl $< $@
+      cmd_mkcapflags = $(CONFIG_SHELL) $(srctree)/$(src)/mkcapflags.sh $< $@
 
 cpufeature = $(src)/../../include/asm/cpufeature.h
 
 targets += capflags.c
-$(obj)/capflags.c: $(cpufeature) $(src)/mkcapflags.pl FORCE
+$(obj)/capflags.c: $(cpufeature) $(src)/mkcapflags.sh FORCE
        $(call if_changed,mkcapflags)
diff --git a/arch/x86/kernel/cpu/mkcapflags.pl b/arch/x86/kernel/cpu/mkcapflags.pl
deleted file mode 100644 (file)
index 091972e..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/perl -w
-#
-# Generate the x86_cap_flags[] array from include/asm-x86/cpufeature.h
-#
-
-($in, $out) = @ARGV;
-
-open(IN, "< $in\0")   or die "$0: cannot open: $in: $!\n";
-open(OUT, "> $out\0") or die "$0: cannot create: $out: $!\n";
-
-print OUT "#ifndef _ASM_X86_CPUFEATURE_H\n";
-print OUT "#include <asm/cpufeature.h>\n";
-print OUT "#endif\n";
-print OUT "\n";
-print OUT "const char * const x86_cap_flags[NCAPINTS*32] = {\n";
-
-%features = ();
-$err = 0;
-
-while (defined($line = <IN>)) {
-       if ($line =~ /^\s*\#\s*define\s+(X86_FEATURE_(\S+))\s+(.*)$/) {
-               $macro = $1;
-               $feature = "\L$2";
-               $tail = $3;
-               if ($tail =~ /\/\*\s*\"([^"]*)\".*\*\//) {
-                       $feature = "\L$1";
-               }
-
-               next if ($feature eq '');
-
-               if ($features{$feature}++) {
-                       print STDERR "$in: duplicate feature name: $feature\n";
-                       $err++;
-               }
-               printf OUT "\t%-32s = \"%s\",\n", "[$macro]", $feature;
-       }
-}
-print OUT "};\n";
-
-close(IN);
-close(OUT);
-
-if ($err) {
-       unlink($out);
-       exit(1);
-}
-
-exit(0);
diff --git a/arch/x86/kernel/cpu/mkcapflags.sh b/arch/x86/kernel/cpu/mkcapflags.sh
new file mode 100644 (file)
index 0000000..2bf6165
--- /dev/null
@@ -0,0 +1,41 @@
+#!/bin/sh
+#
+# Generate the x86_cap_flags[] array from include/asm/cpufeature.h
+#
+
+IN=$1
+OUT=$2
+
+TABS="$(printf '\t\t\t\t\t')"
+trap 'rm "$OUT"' EXIT
+
+(
+       echo "#ifndef _ASM_X86_CPUFEATURE_H"
+       echo "#include <asm/cpufeature.h>"
+       echo "#endif"
+       echo ""
+       echo "const char * const x86_cap_flags[NCAPINTS*32] = {"
+
+       # Iterate through any input lines starting with #define X86_FEATURE_
+       sed -n -e 's/\t/ /g' -e 's/^ *# *define *X86_FEATURE_//p' $IN |
+       while read i
+       do
+               # Name is everything up to the first whitespace
+               NAME="$(echo "$i" | sed 's/ .*//')"
+
+               # If the /* comment */ starts with a quote string, grab that.
+               VALUE="$(echo "$i" | sed -n 's@.*/\* *\("[^"]*"\).*\*/@\1@p')"
+               [ -z "$VALUE" ] && VALUE="\"$NAME\""
+               [ "$VALUE" == '""' ] && continue
+
+               # Name is uppercase, VALUE is all lowercase
+               VALUE="$(echo "$VALUE" | tr A-Z a-z)"
+
+               TABCOUNT=$(( ( 5*8 - 14 - $(echo "$NAME" | wc -c) ) / 8 ))
+               printf "\t[%s]%.*s = %s,\n" \
+                       "X86_FEATURE_$NAME" "$TABCOUNT" "$TABS" "$VALUE"
+       done
+       echo "};"
+) > $OUT
+
+trap - EXIT