diff options
author | P. J. McDermott <pjm@nac.net> | 2013-06-21 18:53:31 (EDT) |
---|---|---|
committer | P. J. McDermott <pjm@nac.net> | 2013-06-21 18:53:31 (EDT) |
commit | 39868630e1ea4af9fde5e1397b173f2cadaecb3e (patch) | |
tree | e86c857986f318780096daba62fad3f34bbddedf | |
parent | d2502bdcbb0c697c0c70fed92eb2f0972c12a7c1 (diff) |
Add patch to replace a Perl script.
-rw-r--r-- | patches/07_noperl-gen-translit.patch | 218 |
1 files changed, 218 insertions, 0 deletions
diff --git a/patches/07_noperl-gen-translit.patch b/patches/07_noperl-gen-translit.patch new file mode 100644 index 0000000..cffc8cd --- /dev/null +++ b/patches/07_noperl-gen-translit.patch @@ -0,0 +1,218 @@ +From: "P. J. McDermott" <pjm@nac.net> +Description: Replace locale/gen-translit.pl with a shell script + If a Perl interpreter isn't found, run the shell script instead. + +diff -Naur src.orig/libc/locale/gen-translit.sh src/libc/locale/gen-translit.sh +--- src.orig/libc/locale/gen-translit.sh 1969-12-31 19:00:00.000000000 -0500 ++++ src/libc/locale/gen-translit.sh 2013-06-21 18:04:13.414351956 -0400 +@@ -0,0 +1,195 @@ ++#!/bin/sh ++# A POSIX.1 shell command language translation of gen-translit.pl. ++ ++set -e ++ ++LF=' ++' ++ ++die() { ++ printf '%s\n' "${*}" ++ exit 1 ++} ++ ++substr() { ++ str="${1}" ++ off=${2} ++ len=${3} ++ ++ while [ ${off} -gt 0 ]; do ++ str="${str#?}" ++ off=$(($off - 1)) ++ done ++ while [ ${#str} -gt ${len} ]; do ++ str="${str%?}" ++ done ++ ++ printf '%s\n' "${str}" ++} ++ ++cstrlen() { ++ str="${*}" ++ len=${#str} ++ cnt=0 ++ res=0 ++ ++ while [ ${cnt} -lt $len ]; do ++ if [ "x$(substr "${str}" ${cnt} 1)" = 'x\' ]; then ++ # Recognize the escape sequence. ++ if [ "x$(substr "${str}" $(($cnt + 1)) 1)" = 'xx' ]; then ++ inner=$(($cnt + 2)) ++ while [ ${inner} -lt ${len} \ ++ -a ${inner} -lt $(($cnt + 10)) ]; do ++ ch="$(substr "${str}" ${inner} 1)" ++ if [ "x${ch}" != "x${ch#[0-9a-fA-F]}" ]; then ++ inner=$(($inner + 1)) ++ continue ++ fi ++ break ++ inner=$(($inner + 1)) ++ done ++ cnt=${inner} ++ res=$(($res + 1)) ++ else ++ if [ $(($cnt + 1)) -ge ${len} ]; then ++ die 'Invalid input' ++ fi ++ res=$(($res + 1)) ++ cnt=$(($cnt + 1)) ++ fi ++ else ++ res=$(($res + 1)) ++ fi ++ cnt=$(($cnt + 1)) ++ done ++ ++ printf '%d\n' ${res} ++} ++ ++ntranslit=0 ++while read -r line; do ++ [ "x${line}" != "x${line#\#}" ] && continue ++ [ -z "${line}" ] && continue ++ ++ line="${line#\"}" ++ line="${line%\"}" ++ from="${line%%\"[ ]*}" ++ to="${line##*[ ]\"}" ++ fromlen="$(cstrlen "${from}")" ++ tolen="$(cstrlen "${to}")" ++ ++ froms="${froms}${from}${LF}" ++ fromlens="${fromlens}${fromlen}${LF}" ++ tos="${tos}${to}${LF}" ++ tolens="${tolens}${tolen}${LF}" ++ ++ ntranslit=$(($ntranslit + 1)) ++done <<EOF ++$(cat C-translit.h.in | gcc -E - || die 'Cannot preprocess input file') ++EOF ++ ++printf '#define NTRANSLIT %d\n' ${ntranslit} ++ ++printf 'static const uint32_t translit_from_idx[] =\n{\n ' ++col=2 ++total=0 ++cnt=0 ++while [ ${cnt} -lt ${ntranslit} ]; do ++ fromlen="${fromlens%%${LF}*}" ++ fromlens="${fromlens#*${LF}}" ++ if [ ${cnt} -ne 0 ]; then ++ if [ $(($col + 7)) -ge 79 ]; then ++ printf ',\n ' ++ col=2 ++ else ++ printf ', ' ++ col=$(($col + 2)) ++ fi ++ fi ++ printf '%4d' ${total} ++ total=$(($total + $fromlen + 1)) ++ col=$(($col + 4)) ++ cnt=$(($cnt + 1)) ++done ++printf '\n};\n' ++ ++printf 'static const wchar_t translit_from_tbl[] =\n ' ++col=1 ++cnt=0 ++while [ ${cnt} -lt ${ntranslit} ]; do ++ from="${froms%%${LF}*}" ++ froms="${froms#*${LF}}" ++ fromlen=${#from} ++ if [ ${cnt} -ne 0 ]; then ++ if [ $(($col + 6)) -ge 79 ]; then ++ printf '\n ' ++ col=1 ++ fi ++ printf ' L"\\0"' ++ col=$(($col + 6)) ++ fi ++ if [ ${col} -gt 2 -a $(($col + $fromlen + 4)) -ge 79 ]; then ++ printf '\n ' ++ col=2 ++ else ++ printf ' ' ++ col=$(($col + 1)) ++ fi ++ printf 'L"%s"' "${from}" ++ col=$(($col + $fromlen + 3)) ++ cnt=$(($cnt + 1)) ++done ++printf ';\n' ++ ++printf 'static const uint32_t translit_to_idx[] =\n{\n ' ++col=2 ++total=0 ++cnt=0 ++while [ ${cnt} -lt ${ntranslit} ]; do ++ tolen="${tolens%%${LF}*}" ++ tolens="${tolens#*${LF}}" ++ if [ ${cnt} -ne 0 ]; then ++ if [ $(($col + 7)) -ge 79 ]; then ++ printf ',\n ' ++ col=2 ++ else ++ printf ', ' ++ col=$(($col + 2)) ++ fi ++ fi ++ printf '%4d' ${total} ++ total=$(($total + $tolen + 2)) ++ col=$(($col + 4)) ++ cnt=$(($cnt + 1)) ++done ++printf '\n};\n' ++ ++printf 'static const wchar_t translit_to_tbl[] =\n ' ++col=1 ++cnt=0 ++while [ ${cnt} -lt ${ntranslit} ]; do ++ to="${tos%%${LF}*}" ++ tos="${tos#*${LF}}" ++ tolen=${#to} ++ if [ ${cnt} -ne 0 ]; then ++ if [ $(($col + 6)) -ge 79 ]; then ++ printf '\n ' ++ col=1 ++ fi ++ printf ' L"\\0"' ++ col=$(($col + 6)) ++ fi ++ if [ ${col} -gt 2 -a $(($col + $tolen + 6)) -ge 79 ]; then ++ printf '\n ' ++ col=2 ++ else ++ printf ' ' ++ col=$(($col + 1)) ++ fi ++ printf 'L"%s\\0"' "${to}" ++ col=$(($col + $tolen + 5)) ++ cnt=$(($cnt + 1)) ++done ++printf ';\n' ++ ++exit 0 +diff -Naur src.orig/libc/locale/Makefile src/libc/locale/Makefile +--- src.orig/libc/locale/Makefile 2012-11-17 12:50:14.000000000 -0500 ++++ src/libc/locale/Makefile 2013-06-21 18:10:15.525446048 -0400 +@@ -88,7 +88,11 @@ + $(objpfx)localedef $(objpfx)locale: $(lib-modules:%=$(objpfx)%.o) + + C-translit.h: C-translit.h.in gen-translit.pl ++ifneq ($(PERL),no) + $(PERL) gen-translit.pl < $< > $@.tmp ++else ++ /bin/sh gen-translit.sh < $< > $@.tmp ++endif + mv -f $@.tmp $@ + + localepath = "$(localedir):$(i18ndir)" |