On Sun, Jun 11, 2006 at 01:14:23AM -0500, Albert Chin wrote: > On Sat, Jun 10, 2006 at 07:12:34PM -0500, Albert Chin wrote: > > On Sun, Jun 11, 2006 at 01:04:17AM +0200, Ralf Wildenhues wrote: > > > * Albert Chin wrote on Sat, Jun 10, 2006 at 08:49:29PM CEST: > > > > On Sat, Jun 10, 2006 at 08:29:44PM +0200, Ralf Wildenhues wrote: > > > > > * Albert Chin wrote on Sat, Jun 10, 2006 at 08:08:15PM CEST: > > > > > > Any reason we don't use -bexpall to support -export-dynamic on AIX? > > > > > > > > > > Yes, as commented in libtool.m4: > > > > > > > I think this is still correct. How should I fix it? > > > > > > Well. In what way(s) do gaim and galculator fail, and why? > > > Is there a way to reproduce the failure without much hassle > > > such as lots of required packages, maybe even a stripped down > > > test case? Are those packages doing something we may want > > > to allow, or is it impossible to realize portably anyway? > > > I'm sorry but I cannot answer your question without more > > > information. (That is not to say that I could otherwise ;-) > > > > When I say "how should I fix it", I mean what's the best way to > > implement -export-dynamic on AIX. Maybe a new export_dynamic_cmds > > command that creates the symbols ala export_symbols_cmds and then > > export_dynamic_flag_spec to add the ld flag to export the symbols from > > export_symbols_cmds to the binary? > > I'm thinking of a patch along the lines of the one below. What do you > think?
Well, this has some problems. First, if only export_dynamic_flag_spec is set, the new export list code is wrong. Fixed in the patch below. The second problem is when libtool is passed multiple source files, rather than object files to create the executable. This method totally fails then. What to do in this case? -- albert chin ([EMAIL PROTECTED]) -- snip snip Index: libtool.m4 =================================================================== RCS file: /cvsroot/libtool/libtool/Attic/libtool.m4,v retrieving revision 1.314.2.158 diff -u -p -r1.314.2.158 libtool.m4 --- libtool.m4 12 Jun 2006 05:25:26 -0000 1.314.2.158 +++ libtool.m4 20 Jun 2006 17:09:14 -0000 @@ -2911,6 +2911,13 @@ case $host_os in exp_sym_flag='-bexport' no_entry_flag='-bnoentry' + + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + _LT_AC_TAGVAR(export_dynamic_symbols_cmds, $1)='$NM -Bpg $objs | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + else + _LT_AC_TAGVAR(export_dynamic_symbols_cmds, $1)='$NM -BCpg $objs | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + fi + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)="\${wl}$exp_sym_flag:\$export_symbols" fi # When large executables or shared objects are built, AIX ld can @@ -3950,6 +3957,7 @@ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)= _LT_AC_TAGVAR(allow_undefined_flag, $1)= _LT_AC_TAGVAR(always_export_symbols, $1)=no _LT_AC_TAGVAR(archive_expsym_cmds, $1)= +_LT_AC_TAGVAR(export_dynamic_symbols_cmds, $1)= _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= @@ -4178,6 +4186,7 @@ if test -f "$ltmain"; then _LT_AC_TAGVAR(lt_prog_compiler_pic, $1) \ _LT_AC_TAGVAR(lt_prog_compiler_static, $1) \ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) \ + _LT_AC_TAGVAR(export_dynamic_symbols_cmds, $1) \ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1) \ _LT_AC_TAGVAR(thread_safe_flag_spec, $1) \ _LT_AC_TAGVAR(whole_archive_flag_spec, $1) \ @@ -4212,6 +4221,7 @@ if test -f "$ltmain"; then _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) | \ _LT_AC_TAGVAR(archive_cmds, $1) | \ _LT_AC_TAGVAR(archive_expsym_cmds, $1) | \ + _LT_AC_TAGVAR(export_dynamic_symbols_cmds, $1) | \ _LT_AC_TAGVAR(module_cmds, $1) | \ _LT_AC_TAGVAR(module_expsym_cmds, $1) | \ _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) | \ @@ -4424,6 +4434,7 @@ link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_ no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) # Compiler flag to allow reflexive dlopens. +export_dynamic_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_dynamic_symbols_cmds, $1) export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1) # Compiler flag to generate shared objects directly from archives. @@ -5449,6 +5460,7 @@ ifelse([$1],[CXX],[ _LT_AC_TAGVAR(archive_expsym_cmds, $1)= _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)= _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_AC_TAGVAR(export_dynamic_symbols_cmds, $1)= _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= _LT_AC_TAGVAR(thread_safe_flag_spec, $1)= @@ -5757,8 +5769,11 @@ _LT_EOF # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + _LT_AC_TAGVAR(export_dynamic_symbols_cmds, $1)='$NM -Bpg $objs | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' else _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + _LT_AC_TAGVAR(export_dynamic_symbols_cmds, $1)='$NM -BCpg $objs | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)="\${wl}$exp_sym_flag:\$export_symbols" fi aix_use_runtimelinking=no Index: ltmain.in =================================================================== RCS file: /cvsroot/libtool/libtool/Attic/ltmain.in,v retrieving revision 1.334.2.132 diff -u -p -r1.334.2.132 ltmain.in --- ltmain.in 12 Jun 2006 05:25:26 -0000 1.334.2.132 +++ ltmain.in 20 Jun 2006 17:09:14 -0000 @@ -1993,7 +1993,32 @@ EOF exit $EXIT_FAILURE fi - if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + if test "$export_dynamic" = yes && + { test -n "$export_dynamic_symbols_cmds" || + test -n "$export_dynamic_flag_spec"; }; then + if test -n "$export_dynamic_symbols_cmds"; then + $show "generating symbol list for \`$output'" + export_symbols="$output.exp" + $run $rm $export_symbols + cmds=$export_dynamic_symbols_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + if len=`expr "X$cmd" : ".*"` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + $show "$cmd" + $run eval "$cmd" || exit $? + skipped_export=false + else + # The command line is too long to execute in one step. + $show "using reloadable object file for export list..." + skipped_export=: + fi + done + IFS="$save_ifs" + fi + eval arg=\"$export_dynamic_flag_spec\" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" @@ -4780,6 +4805,11 @@ static const void *lt_preloaded_setup() $run $rm "$output_objdir/${outputname}S.${objext}" fi + if test "$export_dynamic" = yes && + test -n "$export_dynamic_symbols_cmds"; then + $run $rm $export_symbols + fi + exit $exit_status fi _______________________________________________ http://lists.gnu.org/mailman/listinfo/libtool