]> git.draconx.ca Git - dxcommon.git/blobdiff - m4/linguas.m4
gen-options.awk: Work around busybox regex bug.
[dxcommon.git] / m4 / linguas.m4
index 61613b6dc2f2c42c610ca2ca662971a2cf746ab7..fce4e0c07c919569360b3ca7ebdfd5cbef2c0d7a 100644 (file)
@@ -1,4 +1,4 @@
-dnl Copyright © 2011, 2021 Nick Bowler
+dnl Copyright © 2011, 2021-2022 Nick Bowler
 dnl
 dnl Computes the set of .po and .mo files based on the LINGUAS environment
 dnl variable.  The variable POFILES is set to the complete list of .po files,
@@ -12,6 +12,7 @@ dnl There is NO WARRANTY, to the extent permitted by law.
 
 AC_DEFUN([DX_LINGUAS],
 [AC_REQUIRE([AM_GNU_GETTEXT])dnl
+AC_REQUIRE([DX_PROG_JOIN])dnl
 
 POFILES=
 MOFILES=
@@ -21,7 +22,7 @@ if test -f "$srcdir/po/LINGUAS"; then
     for (i = 1; i <= NF; i++) {
       print $(i)
     }
-  }' "$srcdir/po/LINGUAS" | sort -u >conftest.all
+  }' "$srcdir/po/LINGUAS" | LC_ALL=C sort -u >conftest.all
 
   : "${LINGUAS=all}"
   if test x"$LINGUAS" = x"all"; then
@@ -32,31 +33,32 @@ if test -f "$srcdir/po/LINGUAS"; then
         # Ensure that if "la_CC"-style code is requested then so is plain "la".
         printf '%s\n' "$arg"
         case $arg in
-        *_*) printf '%s\n' "${arg%%_*}" ;;
+        *_*)
+          save_IFS=$IFS; IFS=_
+          set x $arg
+          IFS=$save_IFS
+          AS_ECHO(["${2}"])
+          ;;
         esac
       done
-    } | sort -u >conftest.ena
+    } | LC_ALL=C sort -u >conftest.ena
   fi
 
-  ALL_LINGUAS=`cat conftest.all`
-  LINGUAS=`join conftest.ena conftest.all`
-
-  # Note: $srcdir is not used here because these variables are for make.
-  set x $ALL_LINGUAS; shift
-  case ${#} in
-  0) ;;
-  *) POFILES=`printf "po/%s.po\n" "${@}"` ;;
-  esac
+  exec 3<conftest.all
+  while read x <&3; do
+    AS_VAR_APPEND([POFILES], ["${POFILES:+ }po/$x.po"])
+  done
 
   if test x"$USE_NLS" = x"yes"; then
-    set x $LINGUAS; shift
-    case ${#} in
-    0) ;;
-    *) MOFILES=`printf "po/%s.mo\n" "${@}"` ;;
-    esac
+    LC_ALL=C $JOIN conftest.ena conftest.all >conftest.out
+    exec 3<conftest.out
+    while read x <&3; do
+      AS_VAR_APPEND([MOFILES], ["${MOFILES:+ }po/$x.mo"])
+    done
   fi
 
-  rm -f conftest.all conftest.ena
+  exec 3<&-
+  rm -f conftest.all conftest.ena conftest.out
 fi
 
 AC_SUBST([POFILES])