bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [bug-gnulib] gnulib-tool plays nice with make


From: Derek Price
Subject: Re: [bug-gnulib] gnulib-tool plays nice with make
Date: Fri, 04 Mar 2005 12:23:12 -0500
User-agent: Mozilla Thunderbird 1.0 (Windows/20041206)

Bruno Haible wrote:

This looks better, thanks. Three nits:

- Could you please make the function names start with 'func_' ? Just to
 make it clear to the reader that this is a function call, not a program
 invocation.



Ok.

- Could you please document the functions with named arguments, like this?
     func_cp_if_changed src dest
 It is awful to have to peek inside a function in order to understand how
 to invoke it.



Ok.

- Why this change?
 -  echo "Creating $destdir/$sourcebase/Makefile.am..."
 +  echo "Creating $destdir/$sourcebase/Makefile.am.new..."
 The user who watches gnulib-tool is not interested in temporary filenames,
 but in the final result. Also you don't echo the 'mv' later. Therefore it
 doesn't harm to let the user think that Makefile.am was actually created/
 replaced.



Because I was thinking that the cp/mv commands *were* echoed, but I see
that this is only during the dry run.  Thanks.


Nits addressed in attached patch.


2005-03-04  Derek R. Price  <address@hidden>

  * gnulib-tool: Only replace files via --import when they have
   actually changed.


Regards,

Derek
Index: gnulib-tool
===================================================================
RCS file: /cvsroot/gnulib/gnulib/gnulib-tool,v
retrieving revision 1.38
diff -u -p -r1.38 gnulib-tool
--- gnulib-tool 5 Jan 2005 02:50:04 -0000       1.38
+++ gnulib-tool 4 Mar 2005 17:17:34 -0000
@@ -117,6 +117,37 @@ func_fatal_error ()
   exit 1
 }

+# func_cp_if_changed SRC DEST
+#
+# cp, but avoid munging timestamps if the file hasn't changed.
+func_cp_if_changed ()
+{
+  if test $# -ne 2; then
+    echo "usage: cp_if_changed SRC DEST" >&2
+  fi
+  test -n "$dry_run" && dry=echo
+  if cmp "$1" "$2" >/dev/null 2>&1; then :; else
+    $dry cp -p "$1" "$2"
+  fi
+}
+
+# func_mv_if_changed SRC DEST
+#
+# mv, but avoid munging timestamps if the file hasn't changed.
+# Remove the source file if it is not renamed.
+func_mv_if_changed ()
+{
+  if test $# -ne 2; then
+    echo "usage: mv_if_changed SRC DEST" >&2
+  fi
+  test -n "$dry_run" && dry=echo
+  if cmp "$1" "$2" >/dev/null 2>&1; then
+    $dry rm "$1"
+  else
+    $dry mv "$1" "$2"
+  fi
+}
+
 # Command-line option processing.
 # Removes the OPTIONS from the arguments. Sets the variables:
 # - mode            list or import or create-testdir or create-megatestdir
@@ -523,8 +554,7 @@ func_import ()
       m4/*) g=`echo "$f" | sed -e "s,^m4/,$m4base/,"` ;;
       *) g="$f" ;;
     esac
-    test -n "$dry_run" && dry=echo
-    $dry cp -p "$gnulib_dir/$f" "$destdir/$g"
+    func_cp_if_changed "$gnulib_dir/$f" "$destdir/$g"
     # Update license.
     if test -z "$dry_run" && test -n "$lgpl" && test -n "$source"; then
       perl -pi -e 's/GNU General/GNU Lesser General/g;' \
@@ -548,16 +578,18 @@ func_import ()
   # Create lib/Makefile.am.
   echo "Creating $destdir/$sourcebase/Makefile.am..."
   if test -z "$dry_run"; then
-    func_emit_lib_Makefile_am > $destdir/$sourcebase/Makefile.am
+    func_emit_lib_Makefile_am > $destdir/$sourcebase/Makefile.am.new
   else
     func_emit_lib_Makefile_am
   fi
+  func_mv_if_changed $destdir/$sourcebase/Makefile.am.new \
+                     $destdir/$sourcebase/Makefile.am

   # Create gnulib.m4.
   echo "Creating $destdir/$m4base/gnulib.m4..."
   (
     if test -z "$dry_run"; then
-      exec > $destdir/$m4base/gnulib.m4
+      exec > $destdir/$m4base/gnulib.m4.new
     else
       echo "# $destdir/$m4base/gnulib.m4"
     fi
@@ -616,6 +648,7 @@ func_import ()
     echo
     echo "# gnulib.m4 ends here"
   )
+  func_mv_if_changed $destdir/$m4base/gnulib.m4.new $destdir/$m4base/gnulib.m4
   echo "Finished."
   echo
   echo "You may need to add #include directives for the following .h files."

Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]