summaryrefslogtreecommitdiff
path: root/lib/compile
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>1999-04-11 13:02:43 +0000
committerTom Tromey <tromey@redhat.com>1999-04-11 13:02:43 +0000
commit88b595974744cad79fa4bc2492a796c6037eea49 (patch)
tree8e9ad1c5fa002f0293b9bea17139bb1be3bf5db3 /lib/compile
parent62fef9141ba3762d716da47b068733750d6a1fbc (diff)
downloadautomake-88b595974744cad79fa4bc2492a796c6037eea49.tar.gz
First cut at allowing objects in subdirectories:
* m4/Makefile.am (m4data_DATA): Added minuso.m4. * Makefile.am (dist_script_DATA): Added compile. * m4/minuso.m4: New file. * automake.in (initialize_global_constants): Added compile to common_files. (seen_cc_c_o): New global. (scan_one_configure_file): Set it when AM_PROG_CC_C_O seen. (handle_options): Recognize `subdir-objects' option. (lang_c_rewrite): Added directory argument. (lang_yacc_rewrite): Likewise. (lang_yaccxx_rewrite): Likewise. (lang_lex_rewrite): Likewise. (lang_lexxx_rewrite): Likewise. (handle_single_transform_list): Pass directory to _rewrite function. Generate dependencies for dirstamp files for each .o; it is just the rules we want to create once. (lang_c_rewrite): Handle `subdir-objects' option. (lang_c_rewrite): Require `compile' program. * compile: New file.
Diffstat (limited to 'lib/compile')
-rwxr-xr-xlib/compile82
1 files changed, 82 insertions, 0 deletions
diff --git a/lib/compile b/lib/compile
new file mode 100755
index 000000000..7da75ce41
--- /dev/null
+++ b/lib/compile
@@ -0,0 +1,82 @@
+#! /bin/sh
+
+# Wrapper for compilers which do not understand `-c -o'.
+
+# Copyright (C) 1999 Free Software Foundation, Inc.
+# Written by Tom Tromey <tromey@cygnus.com>.
+#
+# 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 2, 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, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# Usage:
+# compile PROGRAM [ARGS]...
+# `-o FOO.o' is removed from the args passed to the actual compile.
+
+prog="$1"
+shift
+
+ofile=
+cfile=
+args=
+while test $# -gt 0; do
+ case "$1" in
+ -o)
+ ofile="$2"
+ shift
+ ;;
+ *.c)
+ cfile="$1"
+ args="$args $1"
+ ;;
+ *)
+ args="$args $1"
+ ;;
+ esac
+ shift
+done
+
+test -z "$ofile" && {
+ echo "compile: no \`-o' option seen" 1>&2
+ exit 1
+}
+
+test -z "$cfile" && {
+ echo "compile: no \`.c' file seen" 1>&2
+ exit 1
+}
+
+# Name of file we expect compiler to create.
+cofile="`echo $cfile | sed -e 's|^.*/||' -e 's/\.c$/.o/'`"
+
+# Create the lock directory.
+lockdir="`echo $ofile | sed -e 's|/|_|g'`"
+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.
+"$prog" $args
+status=$?
+
+if test -f "$cofile"; then
+ mv "$cofile" "$ofile"
+fi
+
+rmdir $lockdir
+exit $status