]> git.ipfire.org Git - thirdparty/libtool.git/commitdiff
Using `libtoolize --copy --ltdl' was not preserving timestamps, so
authorGary V. Vaughan <gary@gnu.org>
Tue, 22 Feb 2005 15:27:07 +0000 (15:27 +0000)
committerGary V. Vaughan <gary@gnu.org>
Tue, 22 Feb 2005 15:27:07 +0000 (15:27 +0000)
parts of the autoconf bootstrap would be rerun spuriously after
the files had been copied into the source tree:

* libtoolize.m4sh (TAR): New default tar command.
(func_copy_cb): Move the core copying internals to here, using
$TAR to transfer files if possible when --copy was specified.
(func_copy): Adjust to call func_copy_cb.
* TODO: Remember to refactor this fix in due course.
Reported by Jeff Squyres <jsquyres@lam-mpi.org>

ChangeLog
TODO
libtoolize.m4sh

index 4ae39298a7b37bf7769f3edc9f7d6f547f84b179..f75e95cdee983552f071e3540e3b78a40bb5603a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2005-02-21  Gary V. Vaughan  <gary@gnu.org>
+
+       Using `libtoolize --copy --ltdl' was not preserving timestamps, so
+       parts of the autoconf bootstrap would be rerun spuriously after
+       the files had been copied into the source tree:
+
+       * libtoolize.m4sh (TAR): New default tar command.
+       (func_copy_cb): Move the core copying internals to here, using
+       $TAR to transfer files if possible when --copy was specified.
+       (func_copy): Adjust to call func_copy_cb.
+       * TODO: Remember to refactor this fix in due course.
+       Reported by Jeff Squyres <jsquyres@lam-mpi.org>
+
 2005-02-21  Peter O'Gorman  <peter@pogma.com>
 
        * config/ltmain.m4sh (func_extract_archives) [darwin]: This didn't
@@ -14,7 +27,7 @@
 2005-02-04  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
 
        * config/ltmain.m4sh (func_mode_link): Allow five digits in
-       version-info. 
+       version-info.
 
        * NEWS: s/Linux/GNU &/.
 
@@ -40,7 +53,7 @@
 
 2005-02-03  Peter O'Gorman  <peter@pogma.com>
 
-       * config/ltmain.m4sh [darwin]: Don't add installed libs to 
+       * config/ltmain.m4sh [darwin]: Don't add installed libs to
        temp_rpath when building executables on darwin, or other systems
        which use hardcode_automatic. It may break our wrapper scripts.
 
 
 2005-01-16  Peter O'Gorman  <peter@pogma.com>
 
-       * config/ltmain.m4sh (func_mode_link): Don't pass through 
+       * config/ltmain.m4sh (func_mode_link): Don't pass through
        compiler-like thread flags when using $LD to do the linking.
        Use compiler_flags instead.
        Reported by Mark_Andrews@isc.org.
 
        * m4/libtool.m4 (LT_CMD_MAX_LEN) [osf]: On Tru64 there could
        be a kernel panic when testing the maximum command line length
-       if exec_disable_arg_limit=1. Don't do the tests to figure it 
+       if exec_disable_arg_limit=1. Don't do the tests to figure it
        out on *-osf*.
-       Reported by Dr. Hans Ekkehard Plesser 
+       Reported by Dr. Hans Ekkehard Plesser
        <hans.ekkehard.plesser@umb.no>
 
 2005-01-14  Guido Draheim  <guidod-2003-@gmx.de>  (tiny change)
        * config/ltmain.m4sh (func_mode_link): Fix
        inherited_linker_flags so it puts it on the link line when
        linking shared libraries as well as when linking executables.
-       * tests/inherited_flags.at: test inherited_linker_flags.  
-       * tests/Makefile.am: Add test.  
+       * tests/inherited_flags.at: test inherited_linker_flags.
+       * tests/Makefile.am: Add test.
        * tests/testsuite.at: Add test.
        Reported by: Albert Chin-A-Young <china@thewrittenword.com>
 
diff --git a/TODO b/TODO
index 9e74a4636cd0d53755b3eb017838381521ece88b..c0317718669acf3ea8ad17b8bc2cd4cdb9445d2a 100644 (file)
--- a/TODO
+++ b/TODO
@@ -71,6 +71,13 @@ GNU Libtool
    Also report dlerror() for dlclose and dlsym if available
  - Make sure that the dependency_libs of a dlpreopened module won't be loaded.
 
+1.3. libtoolize
+---------------
+
+* Rewrite the func_copy_* functions so that instead of forking 2 tar
+  processes per copied file, a list of files to copy is built and all
+  files copied with a single pair of tar processes.
+
 
 2. In the future
 ================
@@ -237,7 +244,7 @@ GNU Libtool
   it easier to add new platforms.
 
 -- 
-Copyright (C) 2004 Free Software Foundation, Inc.
+Copyright (C) 2004, 2005 Free Software Foundation, Inc.
 
 The canonical source of this file is maintained with the
 GNU Libtool package.  Report bugs to bug-libtool@gnu.org.
index aefee473f6cac9c826711b246d80034b1c75e944..9f4386b111c80d5d793b27ca7bec566a30954856 100644 (file)
@@ -5,7 +5,7 @@ m4_divert_push([SCRIPT])#! /bin/sh
 # libtoolize (GNU @PACKAGE@@TIMESTAMP@) @VERSION@
 # Written by Gary V. Vaughan <gary@gnu.org>, 2003
 
-# Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+# Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
 # This is free software; see the source for copying conditions.  There is NO
 # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
@@ -66,6 +66,8 @@ $as_unset CDPATH
 
 m4_include([getopt.m4sh])
 
+TAR=tar
+
 # Command line options:
 opt_force=false
 opt_install=false
@@ -117,6 +119,7 @@ configure_ac=configure.in
                          test -n "$LN_S" && LN_S="$ECHO $LN_S"
                          CP="$ECHO $CP"
                          MKDIR="$ECHO $MKDIR"
+                         TAR="$ECHO $TAR"
                        fi
                        libtoolize_flags="${libtoolize_flags} --dry-run"
                        ;;
@@ -185,40 +188,70 @@ configure_ac=configure.in
 
 
 # func_copy srcfile destfile
-# If option `--copy' was specified, or soft-linking SRCFILE to DESTFILE fails,
-# then try to copy SRCFILE to DESTFILE.
+# A wrapper for func_copy_cb that accepts arguments in the same order
+# as the cp(1) shell command.
 func_copy ()
 {
     $opt_debug
-    my_srcfile="$1"
-    my_destfile="$2"
-    my_return_status=1
 
-    func_mkdir_p `$ECHO "X$my_destfile" | $Xsed -e "$dirname"`
+    test -f "$1" || \
+      { func_error "\`$1' not copied:  not a regular file"; return 1; }
+
+    my_f1=`$ECHO "X$1" | $Xsed -e "$basename"`
+
+    if test -d "$2"; then
+
+      func_copy_cb "$my_f1" `$ECHO "X$1" | $Xsed -e "$dirname"` "$2"
 
-    $RM "$my_destfile"
-    if $opt_link && $LN_S "$my_srcfile" "$my_destfile"; then
-      $opt_quiet || func_echo "copying file \`$my_destfile'"
-      my_return_status=0
-    elif $CP "$my_srcfile" "$my_destfile"; then
-      $opt_quiet || func_echo "copying file \`$my_destfile'"
-      my_return_status=0
     else
-      func_error "can not copy \`$my_srcfile' to \`$my_destfile'"
-      exit_status=$EXIT_FAILURE
+
+      # Supporting this would mean changing the timestamp:
+      test "X$my_f1" = X`$ECHO "X$2" | $Xsed -e "$basename"` \
+        || func_fatal_error "func_copy() cannot change filename on copy"
+
+      func_copy_cb "$my_f1" \
+        `$ECHO "X$1" | $Xsed -e "$dirname"` \
+        `$ECHO "X$2" | $Xsed -e "$dirname"`
+
     fi
 
-    return $my_return_status
+    return $copy_return_status # set in func_copy_cb
 }
 
 
 # func_copy_cb filename srcdir destdir
-# A wrapper for func_copy that accepts arguments in the order
-# used by func_copy_all_files callbacks.
+# If option `--copy' was specified, or soft-linking SRCFILE to DESTFILE fails,
+# then try to copy SRCFILE to DESTFILE (without changing the timestamp if
+# possible).
 func_copy_cb ()
 {
     $opt_debug
-    func_copy "$2/$1" "$3/$1"
+    my_file="$1"
+    my_srcdir="$2"
+    my_destdir="$3"
+    copy_return_status=1
+
+    # Libtool is probably misinstalled if this happens:
+    test -f "$my_srcdir/$my_file" || \
+      { func_error "\`$my_file' not found in \`$my_srcdir'"; return; }
+
+    func_mkdir_p "$my_destdir"
+
+    $RM "$my_destdir/$my_file"
+    if $opt_link && $LN_S "$my_srcdir/$my_file" "$my_destdir/$my_file"; then
+      $opt_quiet || func_echo "copying file \`$my_destdir/$my_file'"
+      copy_return_status=0
+    elif { ( cd "$my_srcdir" && $TAR cf - "$my_file" > /dev/null 2>&1; ) \
+        | ( cd "$my_destdir" && "$TAR" xf - > /dev/null 2>&1; ) } ; then
+      $opt_quiet || func_echo "copying file \`$my_destdir/$my_file'"
+      copy_return_status=0
+    elif $CP -p "$my_srcdir/$my_file" "$my_destdir/$my_file"; then
+      $opt_quiet || func_echo "copying file \`$my_destdir/$my_file'"
+      copy_return_status=0
+    else
+      func_error "can not copy \`$my_srcdir/$my_file' to \`$my_destdir/'"
+      exit_status=$EXIT_FAILURE
+    fi
 }