* Ralf Wildenhues wrote on Mon, Jan 21, 2008 at 08:18:26AM CET: > * Bruno Haible wrote on Mon, Jan 21, 2008 at 12:46:12AM CET: > [...] > > if ${opt_dry_run-false}; then :; else > > + eval "$lt_switch_to_user_locale" > > eval "$my_cmd" > > my_status=$? > > + eval "$lt_switch_to_safe_locale" > > if test "$my_status" -eq 0; then :; else > [...] > > > + lt_switch_to_user_locale=\"$lt_var=\$save_$lt_var; > > \$lt_switch_to_user_locale\" > > + lt_switch_to_safe_locale=\"$lt_var=C; \$lt_switch_to_safe_locale\" > > This approach has the advantage of not using an extra fork (as your > branch-1-5 patch does), but it lacks re-exporting of the changed > variables, which is needed by some older shells.
Playing on the rather safe side, I consider applying this patch for now. OK? I considered doing the same for link mode and some of the other stuff we pipe through func_show_eval, but that should only be done after an audit of the various *archive_cmds variables and settings in libtool.m4 to ensure there are no grep patterns or so that would be influenced. Thanks, Ralf 2008-03-06 Bruno Haible <[EMAIL PROTECTED]> and Ralf Wildenhues <[EMAIL PROTECTED]> Fix compiler output to be in the user locale. * libltdl/config/general.m4sh (func_show_eval_locale): New function, for running commands in the user locale. * libltdl/config/ltmain.m4sh (func_mode_compile): Use it for compiling. * tests/localization.at (localized compiler messages): New test. * Makefile.am: Adjust. Report by Bruno Haible. Index: Makefile.am =================================================================== RCS file: /cvsroot/libtool/libtool/Makefile.am,v retrieving revision 1.230 diff -u -r1.230 Makefile.am --- Makefile.am 4 Mar 2008 21:25:48 -0000 1.230 +++ Makefile.am 6 Mar 2008 19:36:08 -0000 @@ -448,6 +448,7 @@ tests/indirect_deps.at \ tests/archive-in-archive.at \ tests/execute-mode.at \ + tests/localization.at \ tests/destdir.at \ tests/old-m4-iface.at \ tests/am-subdir.at \ Index: libltdl/config/general.m4sh =================================================================== RCS file: /cvsroot/libtool/libtool/libltdl/config/general.m4sh,v retrieving revision 1.9 diff -u -r1.9 general.m4sh --- libltdl/config/general.m4sh 10 May 2007 17:26:45 -0000 1.9 +++ libltdl/config/general.m4sh 6 Mar 2008 19:36:08 -0000 @@ -1,6 +1,6 @@ m4_if([general.m4sh -- general shell script boiler plate -*- Autoconf -*- - Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc. + Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. Written by Gary V. Vaughan, 2004 This file is part of GNU Cvs-utils. @@ -344,5 +344,31 @@ fi fi } + + +# func_show_eval_locale cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$lt_user_locale + $my_cmd" + my_status=$? + eval "$lt_safe_locale" + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} ]]) Index: libltdl/config/ltmain.m4sh =================================================================== RCS file: /cvsroot/libtool/libtool/libltdl/config/ltmain.m4sh,v retrieving revision 1.99 diff -u -r1.99 ltmain.m4sh --- libltdl/config/ltmain.m4sh 5 Mar 2008 20:14:43 -0000 1.99 +++ libltdl/config/ltmain.m4sh 6 Mar 2008 19:36:10 -0000 @@ -96,12 +96,16 @@ # Only set LANG and LC_ALL to C if already set. # These must not be set unconditionally because not all systems understand # e.g. LANG=C (notably SCO). +lt_user_locale= +lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var + lt_user_locale=\"$lt_var=\$save_$lt_var; \$lt_user_locale\" + lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done @@ -1515,7 +1519,7 @@ $opt_dry_run || $RM "$lobj" "$output_obj" - func_show_eval "$command" \ + func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && @@ -1565,7 +1569,7 @@ # Suppress compiler output if we already did a PIC compilation. command="$command$suppress_output" $opt_dry_run || $RM "$obj" "$output_obj" - func_show_eval "$command" \ + func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && --- /dev/null 2008-03-02 10:33:19.200041011 +0100 +++ tests/localization.at 2008-03-06 20:39:05.000000000 +0100 @@ -0,0 +1,47 @@ +# localization.at -- libtool and locales -*- Autotest -*- +# +# Copyright (C) 2008 Free Software Foundation, Inc. +# Written by Ralf Wildenhues, 2008 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, +# or obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +#### + +AT_SETUP([localized compiler messages]) +AT_KEYWORDS([libtool]) + +# Let's try German locale. :-) +LANG=de_DE +LANGUAGE=de_DE +LC_ALL=de_DE +export LANG LANGUAGE LC_ALL + +AT_DATA([a.c], +[[int x[-1]; +]]) + +AT_CHECK([$CC $CPPFLAGS $CFLAGS -c a.c || exit 1], [1], [stdout], [stderr]) +mv -f stdout expected-stdout +mv -f stderr expected-stderr +AT_CHECK([$LIBTOOL --mode=compile --tag=CC $CC $CPPFLAGS $CFLAGS -c a.c || exit 1], + [1], [stdout], [stderr]) +AT_CHECK([diff expected-stderr stderr]) +LTBASE=`$ECHO "$LIBTOOL" | sed 's,^.*/,,'` +AT_CHECK([grep -v "^$LTBASE: compile" stdout | diff expected-stdout -]) + +AT_CLEANUP _______________________________________________ Bug-libtool mailing list Bug-libtool@gnu.org http://lists.gnu.org/mailman/listinfo/bug-libtool