From: Nick Bowler Date: Mon, 15 Feb 2021 04:44:48 +0000 (-0500) Subject: Fix redundant MOFILES entries computed by DX_LINGUAS. X-Git-Url: https://git.draconx.ca/gitweb/dxcommon.git/commitdiff_plain/c6f9cd97c0399d9bd827ac823c9f59aefa6e456c Fix redundant MOFILES entries computed by DX_LINGUAS. The DX_LINGUAS macro transforms a LINGUAS setting of, for example, "en_CA" to also include "en". However, if LINGUAS also includes "en", this addition results in "en" being output twice. Add a test case that exposes this issue, and correct the problem. --- diff --git a/m4/linguas.m4 b/m4/linguas.m4 index 2ae8a9d..61613b6 100644 --- a/m4/linguas.m4 +++ b/m4/linguas.m4 @@ -1,4 +1,4 @@ -dnl Copyright © 2011 Nick Bowler +dnl Copyright © 2011, 2021 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, @@ -10,42 +10,53 @@ dnl License WTFPL2: Do What The Fuck You Want To Public License, version 2. dnl This is free software: you are free to do what the fuck you want to. dnl There is NO WARRANTY, to the extent permitted by law. -AC_DEFUN([DX_LINGUAS], [dnl -AC_REQUIRE([AM_GNU_GETTEXT]) +AC_DEFUN([DX_LINGUAS], +[AC_REQUIRE([AM_GNU_GETTEXT])dnl POFILES= MOFILES= if test -f "$srcdir/po/LINGUAS"; then - ALL_LINGUAS=`sed 's/#.*$//' "$srcdir/po/LINGUAS"` - - : ${LINGUAS=all} - if test x"$LINGUAS" != x"all"; then - # Replicate la_CC-style codes as la. - LINGUAS=`printf '%s\n' "$LINGUAS" \ - | [sed 's/\([^_[:space:]]*\)_[^[:space:]]*/& \1/g']` - - printf '%s\n' $ALL_LINGUAS | sort > conftest.LINGUAS - LINGUAS=`printf '%s\n' $LINGUAS | sort \ - | join - conftest.LINGUAS` - else - LINGUAS=$ALL_LINGUAS - fi - - # 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 - - if test x"$USE_NLS" = x"yes"; then - set x $LINGUAS; shift - case ${#} in - 0) ;; - *) MOFILES=`printf "po/%s.mo\n" "${@}"` ;; - esac - fi + awk '{ sub(/#.*$/, "") + for (i = 1; i <= NF; i++) { + print $(i) + } + }' "$srcdir/po/LINGUAS" | sort -u >conftest.all + + : "${LINGUAS=all}" + if test x"$LINGUAS" = x"all"; then + cp conftest.all conftest.ena + else + :; { + for arg in $LINGUAS; do + # 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%%_*}" ;; + esac + done + } | 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 + + if test x"$USE_NLS" = x"yes"; then + set x $LINGUAS; shift + case ${#} in + 0) ;; + *) MOFILES=`printf "po/%s.mo\n" "${@}"` ;; + esac + fi + + rm -f conftest.all conftest.ena fi AC_SUBST([POFILES]) diff --git a/tests/macros.at b/tests/macros.at index 3b851fc..9a49e35 100644 --- a/tests/macros.at +++ b/tests/macros.at @@ -109,3 +109,33 @@ AT_CHECK([cat test.out], [0], [[FOOFOOFOO ]]) AT_CLEANUP + +AT_SETUP([DX_LINGUAS unused country variants]) +AT_KEYWORDS([DX_LINGUAS macro]) + +echo : >config.rpath +chmod +x config.rpath + +mkdir po +AT_DATA([po/LINGUAS], [[en +]]) + +AT_DATA([test.in], [[POFILES = @POFILES@ +MOFILES = @MOFILES@ +]]) + +TEST_CONFIGURE_AC( +[[m4@&t@_traceoff([AM_GNU_GETTEXT]) +AM_GNU_GETTEXT([external]) +DX_LINGUAS +AC_CONFIG_FILES([test]) +]]) + +TEST_AUTORECONF +export LINGUAS='en_CA en'; TEST_CONFIGURE + +AT_CHECK([cat test], [0], [[POFILES = po/en.po +MOFILES = po/en.mo +]]) + +AT_CLEANUP