Hello Gary, This has been so long ago it's a shame: http://lists.gnu.org/archive/html/libtool-patches/2005-12/msg00075.html
* Gary V. Vaughan wrote on Wed, Dec 14, 2005 at 01:39:55PM CET: > Ralf Wildenhues wrote: > >This patch is the last of the queue, and the most intertwined. Maybe I > >should make the effort to rip it apart -- please say so. > > Yes please. Unless it is a disproportionate amount of effort, in which > case I'd rather spend that effort on rolling 1.9h. The fact that I haven't found the time to rip it apart in 6 months is enough reason for me to just apply it in one go. > >Several open bugs: > > Open until these patches are applied I presume? Yes, sorry for not being precise. > > Note that in the symlink-case, this file *must* retain its old time > > stamp, hence `cp -p'. Maybe we'd need `tar' instead here? > > I'm not sure `cp -p' is portable enough. We've used `tar' previously > because of this (among other things). I've changed the patch to use tar. Although I really really doubt there to be any real advantage here of tar over cp -p. If there were such an issue, it should definitly be mentioned in the Autoconf portability section. > > (Luckily the subsecond problem is not *so* much of an issue here: > > `cd libltdl && aclocal' still takes a second on a fast machine -- > > maybe we should put a `sleep 1' into the manual rule even?) > > Yes, I think the sleep is a good idea for future proof against ultra > fast machines that decide not to upgrade to libtool-3.0 in 2025 ;-) Let's not do that yet. Maybe after the stuff has stabilized. > >- in case of `libtoolize --copy', it would actually be wise to have the > > copied files have *current* time stamps, so that its dependents will > > be rebuilt. Bob and I noted this some time ago. > > This patch does `cp -p' and a subsequent `touch', to preserve > > permission bits. > > Again, I'm dubious about the use of `cp -p'. See above, fixed. *much snippage* > >As a final bit, we default $tst_dist to `dist' now -- should work. :) > > I'd rather not have casual installers be even more likely to get bored > and abort the testsuite run. What do you think of my LT_TEST_EXHAUSTIVE > idea? The dist part isn't so much more expensive at all; you may have been thinking of distcheck, which would really be expensive. But dist uncovers the bugs fixed in this patch, and I definitely want to see those. > >OK to apply? > > Not yet... > > As a general rule, the ChangeLog entry itself should be sufficient > documentation for why the changeset is necessary. If you find yourself > wanting to add more description to the libtool-patches post, rather > add it to the ChangeLog entry instead for future readers. I've added some of the description to the ChangeLog entry now. > So far, we only use `cp -p' as a fallback for a failed `ln -s' or tar > copy... unless we can come up with good evidence that `cp -p' won't > fail on any of the host environments we care about, I don't want to > divert from that. See above, I've fixed that now. I've applied the patch as shown below. Cheers, Ralf Fix several libtoolize-related bugs: - Do not symlink aclocal.m4, to work around a bug in aclocal overwriting the linked-to file instead of removing the symlink. - Have `libtoolize --copy' cause current time stamps, so that dependents will be rebuilt; for this, install files in order. - Fix list of distribution files for (non)recursive libltdl. - Fix some failure cases. * libtoolize.m4sh (func_copy_cb): If `$opt_link', still copy `aclocal.m4', so a subsequent `aclocal' will not overwrite the symlink target. In `--copy' mode, do `cp -p' and `touch' for each file, so timestamps are updated but permissions preserved. (main): Reorder installing of files to match logical order and timestamp requirements. (func_fixup_Makefile_inc): Renamed to (func_fixup_Makefile): this. Add sed scriptlet to remove non-existent files from EXTRA_DIST, for either nonrecursive or recursive mode. (main): call it to mangle also in recursive mode. * tests/libtoolize.at (expout): Adjusted. * tests/testsuite.at (tst_dist): Default to `dist'. Index: libtoolize.m4sh =================================================================== RCS file: /cvsroot/libtool/libtool/libtoolize.m4sh,v retrieving revision 1.54 diff -u -r1.54 libtoolize.m4sh --- libtoolize.m4sh 18 May 2006 05:43:00 -0000 1.54 +++ libtoolize.m4sh 12 Jun 2006 04:08:03 -0000 @@ -262,17 +262,29 @@ func_mkdir_p `$ECHO "X$my_destdir/$my_file" | $Xsed -e "$dirname"` $RM "$my_destdir/$my_file" - if $opt_link && $LN_S "$my_srcdir/$my_file" "$my_destdir/$my_file"; then - $opt_quiet || func_echo "linking $my_copy_msg" - copy_return_status=0 - elif { ( cd "$my_srcdir" 2>/dev/null && $TAR chf - "$my_file" 2>/dev/null; ) \ - | ( umask 0 && cd "$my_destdir" 2>/dev/null && "$TAR" xf - >/dev/null 2>&1; ); } ; then - $opt_quiet || func_echo "copying $my_copy_msg" - copy_return_status=0 - elif $CP -p "$my_srcdir/$my_file" "$my_destdir/$my_file"; then - $opt_quiet || func_echo "copying $my_copy_msg" - copy_return_status=0 + if $opt_link; then + if test "$my_file" = "aclocal.m4"; then + if { ( cd "$my_srcdir" && $TAR chf - "$my_file" ) 2>/dev/null \ + | ( umask 0 && cd "$my_destdir" && $TAR xf - ) >/dev/null 2>&1 ; } + then + $opt_quiet || func_echo "copying $my_copy_msg" + copy_return_status=0 + fi + else + if $LN_S "$my_srcdir/$my_file" "$my_destdir/$my_file"; then + $opt_quiet || func_echo "linking $my_copy_msg" + copy_return_status=0 + fi + fi else + if { ( cd "$my_srcdir" && $TAR chf - "$my_file" ) 2>/dev/null \ + | ( umask 0 && cd "$my_destdir" && $TAR xf - ) >/dev/null 2>&1; } \ + && touch "$my_destdir/$my_file"; then + $opt_quiet || func_echo "copying $my_copy_msg" + copy_return_status=0 + fi + fi + if test "$copy_return_status" != 0; then func_error "can not copy \`$my_srcdir/$my_file' to \`$my_destdir/'" exit_status=$EXIT_FAILURE fi @@ -312,28 +324,45 @@ IFS="$my_save_IFS" } -# func_fixup_Makefile_inc srcfile srcdir destdir -func_fixup_Makefile_inc () +# func_fixup_Makefile srcfile srcdir destdir +func_fixup_Makefile () { my_filename="$1" my_srcdir="$2" my_destdir="$3" + my_fixup_non_subpackage_script="\ + s,libltdl/configure.ac,, + s,libltdl/configure,, + s,libltdl/aclocal.m4,, + s,libltdl/config-h.in,, + s,libltdl/Makefile.am,, + s,libltdl/Makefile.in,," + case $my_filename in + Makefile.am) + my_fixup_non_subpackage_script=`echo "$my_fixup_non_subpackage_script" | \ + sed 's,libltdl/,,'` + my_fixup_inc_paths_script= ;; + Makefile.inc) + repl=$ltdldir + repl_uscore=`$ECHO "X$repl" | $Xsed -e 's,[[/.+-]],_,g'` + my_fixup_inc_paths_script="\ + s,libltdl_,@[EMAIL PROTECTED], + s,libltdl/,@repl@/, + s,: libltdl/,: @repl@/, + s,\\\$(libltdl_,\$(@[EMAIL PROTECTED], + s,)/libltdl ,)/@repl@ , + s,@repl_uscore@,${repl_uscore},g + s,@repl@,${repl},g" + ;; + esac - repl=$ltdldir - repl_uscore=`$ECHO "X$repl" | $Xsed -e 's,[[/.+-]],_,g'` $RM "$my_destdir/$my_filename" 2>/dev/null $opt_quiet || func_echo "creating file \`$my_destdir/$my_filename'" if $opt_dry_run; then :; else - $SED "\ - s,libltdl_,@[EMAIL PROTECTED], - s,libltdl/,@repl@/, - s,: libltdl/,: @repl@/, - s,\\\$(libltdl_,\$(@[EMAIL PROTECTED], - s,)/libltdl ,)/@repl@ , - s,@repl_uscore@,${repl_uscore},g - s,@repl@,${repl},g - " < "$my_srcdir/$my_filename" > "$my_destdir/$my_filename" || + $SED "$my_fixup_non_subpackage_script + $my_fixup_inc_paths_script" \ + < "$my_srcdir/$my_filename" > "$my_destdir/$my_filename" || func_fatal_error "cannot create $my_destdir/$my_filename" fi } @@ -1057,48 +1086,6 @@ func_scan_files - # These files are handled specially, depending on ltdl_mode: - case $ltdl_mode in - *recursive) - glob_exclude_pkgltdl_files='Makefile.am|Makefile.in*|aclocal.m4|config*' - ;; - *) - glob_exclude_pkgltdl_files='Makefile.inc' - ;; - esac - - func_massage_pkgltdl_files "$glob_exclude_pkgltdl_files" - func_massage_pkgconfig_files - - # libtool.m4 and ltdl.m4 are handled specially below - func_massage_aclocal_DATA 'libtool.m4|ltdl.m4' - - # Copy all the files from installed libltdl to this project, if the - # user specified `--ltdl'. - if $opt_ltdl; then - - # For recursive ltdl modes, copy a suitable Makefile.{am,inc}: - case $ltdl_mode in - recursive) pkgltdl_files="Makefile.am:$pkgltdl_files" ;; - esac - - func_copy_some_files "$pkgltdl_files" "$pkgltdldir/libltdl" "$ltdldir" - - case $ltdl_mode in - nonrecursive) func_fixup_Makefile_inc "Makefile.inc" "$pkgltdldir/libltdl" "$ltdldir" ;; - esac - - # Unless we share CONFIG_MACRO_DIR with our parent project, - # copy macros here. - if test "$ltdldir/m4" != "$m4dir"; then - func_copy_some_files "$pkgmacro_files:libtool.m4:ltdl.m4" \ - "$aclocaldir" "$ltdldir/m4" - fi - - # Copy config aux files into libltdl. - func_copy_some_files "$pkgconfig_files" "$pkgdatadir" "$ltdldir" - fi - # Unless we share CONFIG_AUX_DIR with the libltdl subproject, then # if they are newer, copy all the installed utility files to the # auxiliary directory if `--install' was passed, or else copy just @@ -1119,6 +1106,9 @@ func_verbose "AC_CONFIG_AUX_DIR not defined, not copying libtool auxiliary files." fi + # libtool.m4 and ltdl.m4 were handled specially above + func_massage_aclocal_DATA 'libtool.m4|ltdl.m4' + # Copy libtool's m4 macros to the macro directory, if they are newer. if test -n "$m4dir"; then $opt_quiet || func_echo "putting macros in AC_CONFIG_MACRO_DIR, \`$m4dir'." @@ -1141,6 +1131,42 @@ IFS="$my_save_IFS" fi + # These files are handled specially, depending on ltdl_mode: + case $ltdl_mode in + *recursive) + glob_exclude_pkgltdl_files='Makefile.am|Makefile.in*|aclocal.m4|config*' + ;; + *) + glob_exclude_pkgltdl_files='Makefile.inc' + ;; + esac + + func_massage_pkgltdl_files "$glob_exclude_pkgltdl_files" + func_massage_pkgconfig_files + + # Copy all the files from installed libltdl to this project, if the + # user specified `--ltdl'. + if $opt_ltdl; then + + # Unless we share CONFIG_MACRO_DIR with our parent project, + # copy macros here. + if test "$ltdldir/m4" != "$m4dir"; then + func_copy_some_files "$pkgmacro_files:libtool.m4:ltdl.m4" \ + "$aclocaldir" "$ltdldir/m4" + fi + + func_copy_some_files "$pkgltdl_files" "$pkgltdldir/libltdl" "$ltdldir" + + # For recursive ltdl modes, copy a suitable Makefile.{am,inc}: + case $ltdl_mode in + recursive) func_fixup_Makefile "Makefile.am" "$pkgltdldir/libltdl" "$ltdldir" ;; + nonrecursive) func_fixup_Makefile "Makefile.inc" "$pkgltdldir/libltdl" "$ltdldir" ;; + esac + + # Copy config aux files into libltdl. + func_copy_some_files "$pkgconfig_files" "$pkgdatadir" "$ltdldir" + fi + $opt_quiet || func_check_macros } Index: tests/libtoolize.at =================================================================== RCS file: /cvsroot/libtool/libtool/tests/libtoolize.at,v retrieving revision 1.8 diff -u -r1.8 libtoolize.at --- tests/libtoolize.at 20 Nov 2005 10:33:27 -0000 1.8 +++ tests/libtoolize.at 12 Jun 2006 04:08:07 -0000 @@ -308,11 +308,19 @@ ]]) AT_DATA(expout, -[[libtoolize: linking file `ltdl/COPYING.LIB' +[[libtoolize: putting macros in AC_CONFIG_MACRO_DIR, `ltdl/m4'. +libtoolize: linking file `ltdl/m4/libtool.m4' +libtoolize: linking file `ltdl/m4/ltdl.m4' +libtoolize: linking file `ltdl/m4/argz.m4' +libtoolize: linking file `ltdl/m4/ltoptions.m4' +libtoolize: linking file `ltdl/m4/ltsugar.m4' +libtoolize: linking file `ltdl/m4/ltversion.m4' +libtoolize: linking file `ltdl/m4/lt~obsolete.m4' +libtoolize: linking file `ltdl/COPYING.LIB' libtoolize: linking file `ltdl/README' libtoolize: linking file `ltdl/Makefile.am' libtoolize: linking file `ltdl/configure.ac' -libtoolize: linking file `ltdl/aclocal.m4' +libtoolize: copying file `ltdl/aclocal.m4' libtoolize: linking file `ltdl/Makefile.in' libtoolize: linking file `ltdl/config-h.in' libtoolize: linking file `ltdl/configure' @@ -349,14 +357,6 @@ libtoolize: linking file `ltdl/config/install-sh' libtoolize: linking file `ltdl/config/missing' libtoolize: linking file `ltdl/config/ltmain.sh' -libtoolize: putting macros in AC_CONFIG_MACRO_DIR, `ltdl/m4'. -libtoolize: linking file `ltdl/m4/libtool.m4' -libtoolize: linking file `ltdl/m4/ltdl.m4' -libtoolize: linking file `ltdl/m4/argz.m4' -libtoolize: linking file `ltdl/m4/ltoptions.m4' -libtoolize: linking file `ltdl/m4/ltsugar.m4' -libtoolize: linking file `ltdl/m4/ltversion.m4' -libtoolize: linking file `ltdl/m4/lt~obsolete.m4' ]]) LT_AT_CHECK_LIBTOOLIZE([--ltdl], 0, expout) Index: tests/testsuite.at =================================================================== RCS file: /cvsroot/libtool/libtool/tests/testsuite.at,v retrieving revision 1.41 diff -u -r1.41 testsuite.at --- tests/testsuite.at 15 May 2006 16:14:24 -0000 1.41 +++ tests/testsuite.at 12 Jun 2006 04:08:07 -0000 @@ -19,7 +19,7 @@ # 02110-1301, USA. m4_divert_push([PREPARE_TESTS])dnl -: ${tst_dist=""} +: ${tst_dist=dist} : ${ACLOCAL=aclocal} : ${AUTOHEADER=autoheader} : ${AUTOCONF=autoconf}