bug-gnulib
[Top][All Lists]
Advanced

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

syncing build-aux/compile


From: Eric Blake
Subject: syncing build-aux/compile
Date: Wed, 18 Mar 2009 17:10:53 +0000 (UTC)
User-agent: Loom/3.14 (http://gmane.org/)

Any objection to adding automake's compile program to the list of programs 
autoupdated into gnulib's build-aux directory?  I'd like to pick up the latest 
version of this file (modified this year) while still using a stable automake 
release (which has a version from 2005), when I cut my release of m4.

Also, since doc/install.texi was recently autoupdated, we should force a rerun 
of 'make -C doc INSTALL INSTALL.ISO INSTALL.UTF-8'.


From: Eric Blake <address@hidden>
Date: Wed, 18 Mar 2009 10:33:18 -0600
Subject: [PATCH] build-aux/compile: sync from automake

* build-aux/compile: New file, from automake.
* config/srclist.txt: Mention build-aux/compile.

Signed-off-by: Eric Blake <address@hidden>
---
 ChangeLog          |    6 ++
 build-aux/compile  |  142 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 config/srclist.txt |    1 +
 3 files changed, 149 insertions(+), 0 deletions(-)
 create mode 100755 build-aux/compile

diff --git a/ChangeLog b/ChangeLog
index 0af9a84..86757f4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-03-18  Eric Blake  <address@hidden>
+
+       build-aux/compile: sync from automake
+       * build-aux/compile: New file, from automake.
+       * config/srclist.txt: Mention build-aux/compile.
+
 2009-03-17  Bruno Haible  <address@hidden>

        * lib/git-merge-changelog.c: Fix typo in comment.
diff --git a/build-aux/compile b/build-aux/compile
new file mode 100755
index 0000000..af472ac
--- /dev/null
+++ b/build-aux/compile
@@ -0,0 +1,142 @@
+#! /bin/sh
+# Wrapper for compilers which do not understand `-c -o'.
+
+scriptversion=2009-03-03.21
+
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009  Free Software
+# Foundation, Inc.
+# Written by Tom Tromey <address@hidden>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <address@hidden> or send patches to
+# <address@hidden>.
+
+case $1 in
+  '')
+     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
+     exit 1;
+     ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: compile [--help] [--version] PROGRAM [ARGS]
+
+Wrapper for compilers which do not understand `-c -o'.
+Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
+arguments, and rename the output as expected.
+
+If you are trying to build a whole package this is not the
+right script to run: please start by reading the file `INSTALL'.
+
+Report bugs to <address@hidden>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "compile $scriptversion"
+    exit $?
+    ;;
+esac
+
+ofile=
+cfile=
+eat=
+
+for arg
+do
+  if test -n "$eat"; then
+    eat=
+  else
+    case $1 in
+      -o)
+       # configure might choose to run compile as `compile cc -o foo foo.c'.
+       # So we strip `-o arg' only if arg is an object.
+       eat=1
+       case $2 in
+         *.o | *.obj)
+           ofile=$2
+           ;;
+         *)
+           set x "$@" -o "$2"
+           shift
+           ;;
+       esac
+       ;;
+      *.c)
+       cfile=$1
+       set x "$@" "$1"
+       shift
+       ;;
+      *)
+       set x "$@" "$1"
+       shift
+       ;;
+    esac
+  fi
+  shift
+done
+
+if test -z "$ofile" || test -z "$cfile"; then
+  # If no `-o' option was seen then we might have been invoked from a
+  # pattern rule where we don't need one.  That is ok -- this is a
+  # normal compilation that the losing compiler can handle.  If no
+  # `.c' file was seen then we are probably linking.  That is also
+  # ok.
+  exec "$@"
+fi
+
+# Name of file we expect compiler to create.
+cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
+
+# Create the lock directory.
+# Note: use `[/\\:.-]' here to ensure that we don't use the same name
+# that we are using for the .o file.  Also, base the name on the expected
+# object file name, since that is what matters with a parallel build.
+lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
+while true; do
+  if mkdir "$lockdir" >/dev/null 2>&1; then
+    break
+  fi
+  sleep 1
+done
+# FIXME: race condition here if user kills between mkdir and trap.
+trap "rmdir '$lockdir'; exit 1" 1 2 15
+
+# Run the compile.
+"$@"
+ret=$?
+
+if test -f "$cofile"; then
+  mv "$cofile" "$ofile"
+elif test -f "${cofile}bj"; then
+  mv "${cofile}bj" "$ofile"
+fi
+
+rmdir "$lockdir"
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/config/srclist.txt b/config/srclist.txt
index 9a3b92e..70f20ac 100644
--- a/config/srclist.txt
+++ b/config/srclist.txt
@@ -5,6 +5,7 @@
 $GNUCONFIG/config.guess                build-aux
 $GNUCONFIG/config.sub          build-aux
 #
+$AUTOMAKE/lib/compile          build-aux
 $AUTOMAKE/lib/depcomp          build-aux
 $AUTOMAKE/lib/elisp-comp       build-aux
 $AUTOMAKE/lib/gnupload         build-aux
-- 
1.6.1.2







reply via email to

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