Hi, I have my environment variables set to German (LANG=de_DE.UTF-8), and nevertheless the gcc compiler emits its warnings in English *if* invoked by libtool.
Example (when compiling CLN-1.2.0): $ /bin/sh ../libtool --mode=compile g++ -g -O2 -Wall -I../include -I../include -I./base -c ./base/cl_as_exception.cc g++ -g -O2 -Wall -I../include -I../include -I./base -c ./base/cl_as_exception.cc -fPIC -DPIC -o .libs/cl_as_exception.o In file included from ./base/cl_N.h:6, from ./base/cl_as_exception.cc:13: ../include/cln/number.h: In constructor 'cln::cl_number::cl_number(float)': ../include/cln/number.h:238: warning: type-punning to incomplete type might break strict-aliasing rules ../include/cln/number.h: In member function 'cln::cl_number& cln::cl_number::operator=(float)': ../include/cln/number.h:238: warning: type-punning to incomplete type might break strict-aliasing rules ../include/cln/number.h: In constructor 'cln::cl_number::cl_number(double)': ../include/cln/number.h:239: warning: type-punning to incomplete type might break strict-aliasing rules ../include/cln/number.h: In member function 'cln::cl_number& cln::cl_number::operator=(double)': ../include/cln/number.h:239: warning: type-punning to incomplete type might break strict-aliasing rules g++ -g -O2 -Wall -I../include -I../include -I./base -c ./base/cl_as_exception.cc -o cl_as_exception.o >/dev/null 2>&1 But just copying the shown command into a shell prompt yields the warnings in English: $ g++ -g -O2 -Wall -I../include -I../include -I./base -c ./base/cl_as_exception.cc -fPIC -DPIC -o .libs/cl_as_exception.o In file included from ./base/cl_N.h:6, from ./base/cl_as_exception.cc:13: ../include/cln/number.h: In constructor »cln::cl_number::cl_number(float)«: ../include/cln/number.h:238: Warnung: Type-Punning auf unvollständigen Typen kann strict-aliasing-Regeln verletzen ../include/cln/number.h: In member function »cln::cl_number& cln::cl_number::operator=(float)«: ../include/cln/number.h:238: Warnung: Type-Punning auf unvollständigen Typen kann strict-aliasing-Regeln verletzen ../include/cln/number.h: In constructor »cln::cl_number::cl_number(double)«: ../include/cln/number.h:239: Warnung: Type-Punning auf unvollständigen Typen kann strict-aliasing-Regeln verletzen ../include/cln/number.h: In member function »cln::cl_number& cln::cl_number::operator=(double)«: ../include/cln/number.h:239: Warnung: Type-Punning auf unvollständigen Typen kann strict-aliasing-Regeln verletzen Find attached a patch for it, relative to libtool-1.5.24 (tested), and a tentative patch relative to the libtool CVS (untested). Note that $ltenv can only be applied to commands that run a program, not to shell builtins like "eval ..." or "(cd ... && ...)". Bruno
2008-01-20 Bruno Haible <[EMAIL PROTECTED]> * ltmain.in (lt_env): New variable. Use it when running commands. *** ltmain.in.bak 2007-06-24 03:30:51.000000000 +0200 --- ltmain.in 2008-01-20 17:11:15.000000000 +0100 *************** *** 113,126 **** --- 113,131 ---- # These must not be set unconditionally because not all systems understand # e.g. LANG=C (notably SCO). # We save the old values to restore during execute mode. + lt_env= for lt_var in LANG LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var + lt_env=\"$lt_var=\$$lt_var \$lt_env\" $lt_var=C export $lt_var fi" done + if test -n "$lt_env"; then + lt_env="env $lt_env" + fi # Make sure IFS has a sensible default lt_nl=' *************** *** 956,962 **** $run $rm "$lobj" "$output_obj" $show "$command" ! if $run eval "$command"; then : else test -n "$output_obj" && $run $rm $removelist exit $EXIT_FAILURE --- 961,967 ---- $run $rm "$lobj" "$output_obj" $show "$command" ! if $run eval $lt_env "$command"; then : else test -n "$output_obj" && $run $rm $removelist exit $EXIT_FAILURE *************** *** 1028,1034 **** command="$command$suppress_output" $run $rm "$obj" "$output_obj" $show "$command" ! if $run eval "$command"; then : else $run $rm $removelist exit $EXIT_FAILURE --- 1033,1039 ---- command="$command$suppress_output" $run $rm "$obj" "$output_obj" $show "$command" ! if $run eval $lt_env "$command"; then : else $run $rm $removelist exit $EXIT_FAILURE
2008-01-20 Bruno Haible <[EMAIL PROTECTED]> * libltdl/config/ltmain.m4sh (lt_env): New variable. * libltdl/config/general.m4sh (func_show_eval): Use it. *** libltdl/config/ltmain.m4sh.bak 2008-01-20 17:08:53.000000000 +0100 --- libltdl/config/ltmain.m4sh 2008-01-20 17:13:06.000000000 +0100 *************** *** 96,109 **** --- 96,114 ---- # 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_env= 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_env=\"$lt_var=\$$lt_var \$lt_env\" $lt_var=C export $lt_var fi" done + if test -n "$lt_env"; then + lt_env="env $lt_env" + fi $lt_unset CDPATH *** libltdl/config/general.m4sh.bak 2007-05-27 23:21:23.000000000 +0200 --- libltdl/config/general.m4sh 2008-01-20 17:15:55.000000000 +0100 *************** *** 337,343 **** } if ${opt_dry_run-false}; then :; else ! eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" --- 337,343 ---- } if ${opt_dry_run-false}; then :; else ! eval $lt_env "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp"
_______________________________________________ Bug-libtool mailing list Bug-libtool@gnu.org http://lists.gnu.org/mailman/listinfo/bug-libtool