This is the mail archive of the libc-hacker@sourceware.cygnus.com mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

iconvdata perl-ectomy



This patch replaces iconvdata's perl scripts with awk scripts, which
lets us build all the modules all the time.  It also appears to be a
tad faster (with mawk anyway).

A better way to read hex numbers in awk would be appreciated.

zw


1998-06-13 20:17 -0400  Zack Weinberg  <zack@rabi.phys.columbia.edu>

	* iconvdata/gen-8bit-gap.sh: Use awk not perl.  Clean up sed
	script.
	* iconvdata/gen-8bit-gap-1.sh: Likewise.
	* iconvdata/gen-8bit.sh: Clean up sed script.

	* iconvdata/Makefile: Remove all PERL conditionals; build all
	the modules all the time.  Export AWK.
	(gen-8bit-gap): Delete setting of PERL.
	(gen-8bit-gap-1): Likewise.
	(perl-generated-headers): Renamed awk-generated-headers.

	* iconvdata/gap.pl: Removed.
	* iconvdata/gaptab.pl: Removed.
	* iconvdata/gap.awk: New file.
	* iconvdata/gaptab.awk: New file.

============================================================
Index: iconvdata/gen-8bit.sh
--- iconvdata/gen-8bit.sh	1998/05/13 12:10:13	1.1
+++ iconvdata/gen-8bit.sh	1998/06/14 00:16:25
@@ -1,13 +1,11 @@
 #! /bin/sh
 echo "static const uint32_t to_ucs4[256] = {"
-sed -e '/^[^[:space:]]*[[:space:]]*.x00/d' \
+sed -ne '/^[^[:space:]]*[[:space:]]*.x00/d' \
     -e 's/^[^[:space:]]*[[:space:]]*.x\(..\)[[:space:]]*<U\(....\)>.*/  [0x\1] = 0x\2,/p' \
-    -e d "$@" | \
-sort -u
+    "$@" | sort -u
 echo "};"
 echo "static const char from_ucs4[] = {"
-sed -e '/^[^[:space:]]*[[:space:]]*.x00/d' \
+sed -ne '/^[^[:space:]]*[[:space:]]*.x00/d' \
     -e 's/^[^[:space:]]*[[:space:]]*.x\(..\)[[:space:]]*<U\(....\)>.*/  [0x\2] = 0x\1,/p' \
-    -e d "$@" | \
-sort -u
+    "$@" | sort -u
 echo "};"
============================================================
Index: iconvdata/gen-8bit-gap.sh
--- iconvdata/gen-8bit-gap.sh	1998/05/13 12:10:05	1.1
+++ iconvdata/gen-8bit-gap.sh	1998/06/14 00:16:25
@@ -1,18 +1,15 @@
 #! /bin/sh
 echo "static const uint32_t to_ucs4[256] = {"
-sed -e '/^[^[:space:]]*[[:space:]]*.x00/d' \
+sed -ne '/^[^[:space:]]*[[:space:]]*.x00/d' \
     -e 's/^[^[:space:]]*[[:space:]]*.x\(..\)[[:space:]]*<U\(....\)>.*/  [0x\1] = 0x\2,/p' \
-    -e d "$@" | \
-sort -u
+    "$@" | sort -u
 echo "};"
 echo "static const struct gap from_idx[] = {"
-sed -e 's/^[^[:space:]]*[[:space:]]*.x\(..\)[[:space:]]*<U\(....\)>.*/0x\2 0x\1/p' \
-    -e d "$@" | \
-sort -u | $PERL gap.pl
+sed -ne 's/^[^[:space:]]*[[:space:]]*.x\(..\)[[:space:]]*<U\(....\)>.*/\2/p' \
+    "$@" | sort -u | $AWK -f gap.awk
 echo "  { start: 0xffff, end: 0xffff, idx:     0 }"
 echo "};"
 echo "static const char from_ucs4[] = {"
-sed -e 's/^[^[:space:]]*[[:space:]]*.x\(..\)[[:space:]]*<U\(....\)>.*/0x\2 0x\1/p' \
-    -e d "$@" | \
-sort -u | $PERL gaptab.pl
+sed -ne 's/^[^[:space:]]*[[:space:]]*.x\(..\)[[:space:]]*<U\(....\)>.*/\2 \1/p' \
+    "$@" | sort -u | $AWK -f gaptab.awk
 echo "};"
============================================================
Index: iconvdata/gen-8bit-gap-1.sh
--- iconvdata/gen-8bit-gap-1.sh	1998/05/13 12:09:58	1.1
+++ iconvdata/gen-8bit-gap-1.sh	1998/06/14 00:16:25
@@ -1,18 +1,15 @@
 #! /bin/sh
 echo "static const uint32_t iso88597_to_ucs4[96] = {"
-sed -e '/^[^[:space:]]*[[:space:]]*.x00/d' \
+sed -ne '/^[^[:space:]]*[[:space:]]*.x00/d' \
     -e 's/^[^[:space:]]*[[:space:]]*.x\([A-F].\)[[:space:]]*<U\(....\)>.*/  [0x\1 - 0xA0] = 0x\2,/p' \
-    -e d "$@" | \
-sort -u
+    "$@" | sort -u
 echo "};"
 echo "static const struct gap from_idx[] = {"
-sed -e 's/^[^[:space:]]*[[:space:]]*.x\([A-F].\)[[:space:]]*<U\(....\)>.*/0x\2 0x\1/p' \
-    -e d "$@" | \
-sort -u | $PERL gap.pl
+sed -ne 's/^[^[:space:]]*[[:space:]]*.x\([A-F].\)[[:space:]]*<U\(....\)>.*/\2/p' \
+    "$@" | sort -u | $AWK -f gap.awk
 echo "  { start: 0xffff, end: 0xffff, idx:     0 }"
 echo "};"
 echo "static const char iso88597_from_ucs4[] = {"
-sed -e 's/^[^[:space:]]*[[:space:]]*.x\([A-F].\)[[:space:]]*<U\(....\)>.*/0x\2 0x\1/p' \
-    -e d "$@" | \
-sort -u | $PERL gaptab.pl
+sed -ne 's/^[^[:space:]]*[[:space:]]*.x\([A-F].\)[[:space:]]*<U\(....\)>.*/0x\2 0x\1/p' \
+    "$@" | sort -u | $AWK -f gaptab.awk
 echo "};"
============================================================
--- iconvdata/gap.pl	Thu May 14 23:37:56 1998
+++ /dev/null	Tue May 27 20:49:58 1997
@@ -1,16 +0,0 @@
-$first=$last=$idx=0;
-while (<>) {
-  local($ucs,$rest) = split;
-  local($u)=hex($ucs);
-  if ($u - $last > 6) {
-    if ($last != 0) {
-      printf ("  { start: 0x%04x, end: 0x%04x, idx: %5d },\n",
-	      $first, $last, $idx);
-      $idx -= $u - $last - 1;
-    }
-    $first=$u;
-  }
-  $last=$u;
-}
-printf ("  { start: 0x%04x, end: 0x%04x, idx: %5d },\n",
-	$first, $last, $idx);
============================================================
--- iconvdata/gaptab.pl	Thu May 14 23:37:56 1998
+++ /dev/null	Tue May 27 20:49:58 1997
@@ -1,25 +0,0 @@
-$first=$last=$idx=0;
-sub fmt {
-  printf ("\n ") if (($n % 8) == 0);
-  ++$n;
-  my($val) = pop(@_);
-  printf (" '\\x%02x',", $val);
-}
-while (<>) {
-  local($ucs,$char,$rest) = split;
-  local($u)=hex($ucs);
-  local($c)=hex($char);
-  if ($u - $last > 6) {
-    if ($last != 0) {
-      $idx += $last - $first + 1;
-    }
-    $first=$u;
-  } else {
-    for ($m = $last + 1; $m < $u; ++$m) {
-      fmt (0);
-    }
-  }
-  fmt ($c);
-  $last=$u;
-}
-printf ("\n");
============================================================
--- /dev/null	Tue May 27 20:49:58 1997
+++ iconvdata/gap.awk	Sat Jun 13 19:12:19 1998
@@ -0,0 +1,37 @@
+
+BEGIN { hv["0"] =  0; hv["1"] =  1; hv["2"] =  2; hv["3"] =  3;
+	hv["4"] =  4; hv["5"] =  5; hv["6"] =  6; hv["7"] =  7;
+	hv["8"] =  8; hv["9"] =  9; hv["A"] = 10; hv["B"] = 11;
+	hv["C"] = 12; hv["D"] = 13; hv["E"] = 14; hv["F"] = 15; 
+
+	first = 0; last = 0; idx = 0;
+}
+
+function hex(str)
+{
+  n = 0;
+  str = toupper(str);
+  gsub(/./, "-&", str);
+  split(substr(str, 2), arr, "-");
+
+  for(x in arr) { n *= 16; n += hv[arr[x]]; }
+  return n;
+}
+
+{
+  u = hex($1);
+  if (u - last > 6)
+    {
+      if (last)
+	{
+	  printf ("  { start: 0x%04x, end: 0x%04x, idx: %5d },\n",
+		  first, last, idx);
+	  idx -= u - last - 1;
+	}
+      first = u;
+    }
+  last = u;
+}
+
+END { printf ("  { start: 0x%04x, end: 0x%04x, idx: %5d },\n",
+	      first, last, idx); }
============================================================
--- /dev/null	Tue May 27 20:49:58 1997
+++ iconvdata/gaptab.awk	Sat Jun 13 19:27:44 1998
@@ -0,0 +1,46 @@
+
+BEGIN { hv["0"] =  0; hv["1"] =  1; hv["2"] =  2; hv["3"] =  3;
+	hv["4"] =  4; hv["5"] =  5; hv["6"] =  6; hv["7"] =  7;
+	hv["8"] =  8; hv["9"] =  9; hv["A"] = 10; hv["B"] = 11;
+	hv["C"] = 12; hv["D"] = 13; hv["E"] = 14; hv["F"] = 15; 
+
+	first = 0; last = 0; idx = 0; f = 0;
+}
+
+function hex(str)
+{
+  n = 0;
+  str = toupper(str);
+  gsub(/./, "-&", str);
+  split(substr(str, 2), arr, "-");
+
+  for(x in arr) { n *= 16; n += hv[arr[x]]; }
+  return n;
+}
+
+function fmt(val)
+{
+  if (f++ % 8 == 0) 
+    { printf ("\n  '\\x%02x',", val); }
+  else
+    { printf (" '\\x%02x',", val); }
+}
+
+{
+  u = hex($1); c = hex($2);
+
+  if (u - last > 6)
+    {
+      if (last) { idx += last - first + 1; }
+      first = u;
+    }
+  else
+    {
+      for (m = last+1; m < u; m++) { fmt(0); }
+    }
+
+  fmt(c);
+  last = u;
+}
+
+END { print "" }
============================================================
Index: iconvdata/Makefile
--- iconvdata/Makefile	1998/05/25 11:25:57	1.43
+++ iconvdata/Makefile	1998/06/14 00:25:08
@@ -31,17 +31,15 @@
 	   EBCDIC-FI-SE-A EBCDIC-FR EBCDIC-IS-FRISS EBCDIC-IT EBCDIC-PT	 \
 	   EBCDIC-UK EBCDIC-US IBM037 IBM038 IBM274 IBM275 IBM423	 \
 	   IBM500 IBM870 IBM871 IBM891 IBM903 IBM904 IBM905 IBM1047	 \
-	   CP874 CP737 CP775 ISO-2022-KR
-ifneq ($(PERL),no)
-modules += KOI8-R LATIN-GREEK LATIN-GREEK-1 IBM256 IBM273 IBM277 IBM278	 \
+	   CP874 CP737 CP775 ISO-2022-KR				 \
+	   KOI8-R LATIN-GREEK LATIN-GREEK-1 IBM256 IBM273 IBM277 IBM278	 \
 	   IBM280 IBM281 IBM284 IBM285 IBM290 IBM297 IBM420 IBM424	 \
 	   IBM437 IBM850 IBM851 IBM852 IBM855 IBM857 IBM860 IBM861	 \
 	   IBM862 IBM863 IBM864 IBM865 IBM868 IBM869 IBM875 IBM880	 \
 	   IBM918 IBM1004 IBM1026 CP1250 CP1251 CP1252 CP1253 CP1254	 \
 	   CP1255 CP1256 CP1257 ISO-2022-JP
-endif
-modules.so := $(addsuffix .so, $(modules))
 
+modules.so := $(addsuffix .so, $(modules))
 
 include ../Makeconfig
 
@@ -173,7 +171,7 @@
 LDFLAGS-libGB.so = -Wl,-soname,$(@F)
 LDFLAGS-libCNS.so = -Wl,-soname,$(@F)
 
-distribute := 8bit-generic.c 8bit-gap.c gap.pl gaptab.pl gconv-modules	    \
+distribute := 8bit-generic.c 8bit-gap.c gap.awk gaptab.awk gconv-modules    \
 	      iso8859-1.c iso8859-2.c iso8859-3.c iso8859-4.c iso8859-5.c   \
 	      iso8859-6.c iso8859-7.c iso8859-8.c iso8859-9.c iso8859-10.c  \
 	      t61.c iso6937.c sjis.c jis0201.h jis0208.h jis0212.h	    \
@@ -245,12 +243,14 @@
 
 define generate-8bit-gap-table
 $(make-target-directory)
-PERL="$(PERL)" $(SHELL) ./gen-8bit-gap.sh $< > $(@:stmp=T)
+$(SHELL) ./gen-8bit-gap.sh $< > $(@:stmp=T)
 $(move-if-change) $(@:stmp=T) $(@:stmp=h)
 touch $@
 endef
+
+export AWK
 
-perl-generated-headers := koi8-r.h latin-greek.h latin-greek-1.h	 \
+awk-generated-headers  := koi8-r.h latin-greek.h latin-greek-1.h	 \
 			  ibm256.h ibm273.h ibm277.h ibm278.h ibm280.h	 \
 			  ibm281.h ibm284.h ibm285.h ibm290.h ibm297.h	 \
 			  ibm420.h ibm424.h ibm437.h ibm850.h ibm851.h	 \
@@ -263,17 +263,15 @@
 			  iso8859-10.h iso8859-7jp.h
 
 generated = $(sed-generated-headers) $(sed-generated-headers:%.h=%.stmp) \
-	    $(perl-generated-headers) $(perl-generated-headers:%.h=%.stmp) \
+	    $(awk-generated-headers) $(awk-generated-headers:%.h=%.stmp) \
 	    iconv-test.out
 ifdef objpfx
 generated += $(objpfx)gconv-modules
 endif
 
 # The headers must be generated before the compilation.
-before-compile = $(addprefix $(objpfx),$(sed-generated-headers))
-ifneq ($(PERL),no)
-before-compile += $(addprefix $(objpfx),$(perl-generated-headers))
-endif
+before-compile = $(addprefix $(objpfx),\
+			$(sed-generated-headers) $(awk-generated-headers))
 
 # Rules to generate the headers.
 $(sed-generated-headers:%=$(objpfx)%): $(objpfx)%.h: $(objpfx)%.stmp
@@ -355,8 +353,7 @@
 $(objpfx)ibm1047.stmp: ../localedata/charmaps/IBM1047 gen-8bit.sh
 	$(generate-8bit-table)
 
-ifneq ($(PERL),no)
-$(perl-generated-headers:%=$(objpfx)%): $(objpfx)%.h: $(objpfx)%.stmp
+$(awk-generated-headers:%=$(objpfx)%): $(objpfx)%.h: $(objpfx)%.stmp
 	@:
 
 $(objpfx)iso8859-5.stmp: ../localedata/charmaps/ISO-8859-5 gen-8bit-gap.sh
@@ -365,7 +362,7 @@
 	$(generate-8bit-gap-table)
 $(objpfx)iso8859-7jp.stmp: ../localedata/charmaps/ISO-8859-7 gen-8bit-gap-1.sh
 	$(make-target-directory)
-	PERL="$(PERL)" $(SHELL) ./gen-8bit-gap-1.sh $< >$(@:stmp=T)
+	$(SHELL) ./gen-8bit-gap-1.sh $< >$(@:stmp=T)
 	$(move-if-change) $(@:stmp=T) $(@:stmp=h)
 	touch $@
 
@@ -460,13 +457,9 @@
 	$(generate-8bit-gap-table)
 $(objpfx)cp1257.stmp: ../localedata/charmaps/CP1257 gen-8bit-gap.sh
 	$(generate-8bit-gap-table)
-endif
-
-headers: $(addprefix $(objpfx),$(sed-generated-headers))
-ifneq ($(PERL),no)
-headers: $(addprefix $(objpfx),$(perl-generated-headers))
-endif
 
+headers: $(addprefix $(objpfx),\
+		$(sed-generated-headers) $(awk-generated-headers))
 
 $(addprefix $(inst_gconvdir)/, $(modules.so)): \
     $(inst_gconvdir)/%: $(objpfx)% $(+force)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]