Home | History | Annotate | Download | only in vendor
      1 #! /bin/sh
      2 # Wrapper for compilers which do not understand `-c -o'.
      3 
      4 scriptversion=2005-05-14.22
      5 
      6 # Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
      7 # Written by Tom Tromey <tromey (at] cygnus.com>.
      8 #
      9 # This program is free software; you can redistribute it and/or modify
     10 # it under the terms of the GNU General Public License as published by
     11 # the Free Software Foundation; either version 2, or (at your option)
     12 # any later version.
     13 #
     14 # This program is distributed in the hope that it will be useful,
     15 # but WITHOUT ANY WARRANTY; without even the implied warranty of
     16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     17 # GNU General Public License for more details.
     18 #
     19 # You should have received a copy of the GNU General Public License
     20 # along with this program; if not, write to the Free Software
     21 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
     22 
     23 # As a special exception to the GNU General Public License, if you
     24 # distribute this file as part of a program that contains a
     25 # configuration script generated by Autoconf, you may include it under
     26 # the same distribution terms that you use for the rest of that program.
     27 
     28 # This file is maintained in Automake, please report
     29 # bugs to <bug-automake (at] gnu.org> or send patches to
     30 # <automake-patches (at] gnu.org>.
     31 
     32 case $1 in
     33   '')
     34      echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
     35      exit 1;
     36      ;;
     37   -h | --h*)
     38     cat <<\EOF
     39 Usage: compile [--help] [--version] PROGRAM [ARGS]
     40 
     41 Wrapper for compilers which do not understand `-c -o'.
     42 Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
     43 arguments, and rename the output as expected.
     44 
     45 If you are trying to build a whole package this is not the
     46 right script to run: please start by reading the file `INSTALL'.
     47 
     48 Report bugs to <bug-automake (at] gnu.org>.
     49 EOF
     50     exit $?
     51     ;;
     52   -v | --v*)
     53     echo "compile $scriptversion"
     54     exit $?
     55     ;;
     56 esac
     57 
     58 ofile=
     59 cfile=
     60 eat=
     61 
     62 for arg
     63 do
     64   if test -n "$eat"; then
     65     eat=
     66   else
     67     case $1 in
     68       -o)
     69 	# configure might choose to run compile as `compile cc -o foo foo.c'.
     70 	# So we strip `-o arg' only if arg is an object.
     71 	eat=1
     72 	case $2 in
     73 	  *.o | *.obj)
     74 	    ofile=$2
     75 	    ;;
     76 	  *)
     77 	    set x "$@" -o "$2"
     78 	    shift
     79 	    ;;
     80 	esac
     81 	;;
     82       *.c)
     83 	cfile=$1
     84 	set x "$@" "$1"
     85 	shift
     86 	;;
     87       *)
     88 	set x "$@" "$1"
     89 	shift
     90 	;;
     91     esac
     92   fi
     93   shift
     94 done
     95 
     96 if test -z "$ofile" || test -z "$cfile"; then
     97   # If no `-o' option was seen then we might have been invoked from a
     98   # pattern rule where we don't need one.  That is ok -- this is a
     99   # normal compilation that the losing compiler can handle.  If no
    100   # `.c' file was seen then we are probably linking.  That is also
    101   # ok.
    102   exec "$@"
    103 fi
    104 
    105 # Name of file we expect compiler to create.
    106 cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
    107 
    108 # Create the lock directory.
    109 # Note: use `[/.-]' here to ensure that we don't use the same name
    110 # that we are using for the .o file.  Also, base the name on the expected
    111 # object file name, since that is what matters with a parallel build.
    112 lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d
    113 while true; do
    114   if mkdir "$lockdir" >/dev/null 2>&1; then
    115     break
    116   fi
    117   sleep 1
    118 done
    119 # FIXME: race condition here if user kills between mkdir and trap.
    120 trap "rmdir '$lockdir'; exit 1" 1 2 15
    121 
    122 # Run the compile.
    123 "$@"
    124 ret=$?
    125 
    126 if test -f "$cofile"; then
    127   mv "$cofile" "$ofile"
    128 elif test -f "${cofile}bj"; then
    129   mv "${cofile}bj" "$ofile"
    130 fi
    131 
    132 rmdir "$lockdir"
    133 exit $ret
    134 
    135 # Local Variables:
    136 # mode: shell-script
    137 # sh-indentation: 2
    138 # eval: (add-hook 'write-file-hooks 'time-stamp)
    139 # time-stamp-start: "scriptversion="
    140 # time-stamp-format: "%:y-%02m-%02d.%02H"
    141 # time-stamp-end: "$"
    142 # End:
    143