filename | compile |
changeset | 1032:b3a4f104a83c |
author | nkeynes |
date | Wed Nov 10 08:37:42 2010 +1000 (13 years ago) |
permissions | -rwxr-xr-x |
last change | Add chain pointer to the xlat cache, so that we can maintain multiple blocks for the same address. This prevents thrashing in cases where we would other keep retranslating the same blocks over and over again due to varying xlat_sh4_mode values |
view | annotate | diff | log | raw |
1 #! /bin/sh
2 # Wrapper for compilers which do not understand `-c -o'.
4 scriptversion=2005-05-14.22
6 # Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
7 # Written by Tom Tromey <tromey@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.
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.
28 # This file is maintained in Automake, please report
29 # bugs to <bug-automake@gnu.org> or send patches to
30 # <automake-patches@gnu.org>.
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]
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.
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'.
48 Report bugs to <bug-automake@gnu.org>.
49 EOF
50 exit $?
51 ;;
52 -v | --v*)
53 echo "compile $scriptversion"
54 exit $?
55 ;;
56 esac
58 ofile=
59 cfile=
60 eat=
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
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
105 # Name of file we expect compiler to create.
106 cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
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
122 # Run the compile.
123 "$@"
124 ret=$?
126 if test -f "$cofile"; then
127 mv "$cofile" "$ofile"
128 elif test -f "${cofile}bj"; then
129 mv "${cofile}bj" "$ofile"
130 fi
132 rmdir "$lockdir"
133 exit $ret
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:
.