Charles Wilson wrote: > This one, I think is OK for pre-2.2.8 -- what do you guys think? > OK to push?
In response to review comments over here: "Re: [PATCH] Enable runtime cwrapper debugging; add tests" http://lists.gnu.org/archive/html/libtool-patches/2009-12/msg00014.html I've created a followon patch to this one which allows the cwrapper tests to pass on platforms which don't use the cwrapper but instaed use the shell wrapper (e.g. linux). If this follow-on, and the original patch for this thread, are approved, then I'll squash these two patches into a single commit and update the log before pushing. Full test suite in progress on cygwin (but cwrapper test passes, as do a number of spot-checked tests in the old test suite). Linux results: Old: All 94 tests passed New: Only two unexpected results (in particular, the cwrapper test passed) 21: passing CXX flags through libtool FAILED (flags.at:24) 100: Run tests with low max_cmd_len FAILED (cmdline_wrap.at:43) Err.. 21 should have been skipped, because I haven't installed g++ on the linux box yet. And 100 is just a repeat of 21. -- Chuck
Update sh wrapper per review comments libltdl/config/ltmain.m4sh (func_emit_wrapper): Rename to (func_emit_wrapper_impl): this. Change debug messages to conform to GCS. In debug mode, print a banner with known content before any other output. (func_emit_wrapper): New function calls *_impl and adds line number information.
diff --git a/libltdl/config/ltmain.m4sh b/libltdl/config/ltmain.m4sh index 2ebf12e..bb89cef 100644 --- a/libltdl/config/ltmain.m4sh +++ b/libltdl/config/ltmain.m4sh @@ -2332,7 +2332,7 @@ func_extract_archives () } -# func_emit_wrapper [arg=no] +# func_emit_wrapper_impl [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to @@ -2346,9 +2346,9 @@ func_extract_archives () # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. -func_emit_wrapper () +func_emit_wrapper_impl () { - func_emit_wrapper_arg1=${1-no} + func_emit_wrapper_impl_arg1=${1-no} $ECHO "\ #! $SHELL @@ -2412,7 +2412,7 @@ _LTECHO_EOF' # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ which is used only on -# windows platforms, and (c) all exist in the "--lt-" namespace +# windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options which match # this pattern). # @@ -2443,6 +2443,11 @@ func_parse_lt_options () ;; esac done + + # Print the debug banner immediately: + if test -n \"\$lt_option_debug\"; then + echo \"${outputname}:${output}:@@LINENO@@: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 + fi } # Sets opts_contain_lt_result to \"yes\" if the @@ -2469,7 +2474,7 @@ func_lt_dump_args () lt_dump_args_N=1; for lt_arg do - \$ECHO \"(main) newargz[\$lt_dump_args_N] : \$lt_arg\" + \$ECHO \"${outputname}:${output}:@@LINENO@@: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } @@ -2483,7 +2488,7 @@ func_exec_program_core () *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then - \$ECHO \"(main) lt_argv_zero : \$progdir\\\\\$program\" 1>&2 + \$ECHO \"${outputname}:${output}:@@LINENO@@: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\...@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\...@\"} @@ -2493,7 +2498,7 @@ func_exec_program_core () *) $ECHO "\ if test -n \"\$lt_option_debug\"; then - \$ECHO \"(main) lt_argv_zero : \$progdir/\$program\" 1>&2 + \$ECHO \"${outputname}:${output}:@@LINENO@@: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\...@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\...@\"} @@ -2559,7 +2564,7 @@ func_exec_program () # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. - WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_impl_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then @@ -2659,7 +2664,32 @@ func_exec_program () fi\ " } - +# func_emit_wrapper [arg1=no] +# +# Emit a libtool wrapper script on stdout. See +# func_emit_wrapper_impl for a more throrough description. +# This function merely serves to process that function's +# result to insert line numbers, because we can't assume +# that \$LINENO works. +func_emit_wrapper () +{ + # sed script adapted from autoconf's AS_LINENO_PREPARE + func_emit_wrapper_impl ${1-no} |\ + sed -n ' + p + /@@LINENO@@/= + ' | sed ' + s/@@LINENO@@.*/&-/ + t lineno + b + :lineno + N + :loop + s/@@LINENO@@\([^A-Za-z0-9_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' +} # func_to_host_path arg #