compile 3.62 KB
Newer Older
kcook's avatar
 
kcook committed
1 2 3
#! /bin/sh
# Wrapper for compilers which do not understand `-c -o'.

4
scriptversion=2005-05-14.22
kcook's avatar
 
kcook committed
5

6
# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
kcook's avatar
 
kcook committed
7 8 9 10 11 12 13 14 15 16 17 18 19 20
# 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
21
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
kcook's avatar
 
kcook committed
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49

# 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 <bug-automake@gnu.org> or send patches to
# <automake-patches@gnu.org>.

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 <bug-automake@gnu.org>.
EOF
50
    exit $?
kcook's avatar
 
kcook committed
51 52 53
    ;;
  -v | --v*)
    echo "compile $scriptversion"
54
    exit $?
kcook's avatar
 
kcook committed
55 56 57 58 59
    ;;
esac

ofile=
cfile=
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
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
kcook's avatar
 
kcook committed
93 94 95 96 97 98 99 100 101
  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.
102
  exec "$@"
kcook's avatar
 
kcook committed
103 104 105
fi

# Name of file we expect compiler to create.
106
cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
kcook's avatar
 
kcook committed
107 108 109 110 111

# 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.
112
lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d
kcook's avatar
 
kcook committed
113
while true; do
114
  if mkdir "$lockdir" >/dev/null 2>&1; then
kcook's avatar
 
kcook committed
115 116 117 118 119
    break
  fi
  sleep 1
done
# FIXME: race condition here if user kills between mkdir and trap.
120
trap "rmdir '$lockdir'; exit 1" 1 2 15
kcook's avatar
 
kcook committed
121 122

# Run the compile.
123 124
"$@"
ret=$?
kcook's avatar
 
kcook committed
125 126 127

if test -f "$cofile"; then
  mv "$cofile" "$ofile"
128 129
elif test -f "${cofile}bj"; then
  mv "${cofile}bj" "$ofile"
kcook's avatar
 
kcook committed
130 131
fi

132 133
rmdir "$lockdir"
exit $ret
kcook's avatar
 
kcook committed
134 135 136 137 138 139 140 141 142

# 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: