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