This is the mail archive of the
libc-hacker@sourceware.cygnus.com
mailing list for the glibc project.
iconvdata perl-ectomy
- To: libc-hacker@cygnus.com, drepper@cygnus.com
- Subject: iconvdata perl-ectomy
- From: Zack Weinberg <zack@rabi.phys.columbia.edu>
- Date: Sat, 13 Jun 1998 20:29:53 -0400
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)