source: branches/3.0/mondo/compile @ 3080

Last change on this file since 3080 was 541, checked in by bcornec, 13 years ago

Stable is reverted to r436 (2.0.7) to put it in line with 2.0.8 and start from there over

  • Property svn:executable set to *
  • Property svn:keywords set to Id
File size: 2.7 KB
Line 
1#! /bin/sh
2
3# Wrapper for compilers which do not understand `-c -o'.
4
5# Copyright 1999, 2000 Free Software Foundation, Inc.
6# Written by Tom Tromey <tromey@cygnus.com>.
7#
8# This program is free software; you can redistribute it and/or modify
9# it under the terms of the GNU General Public License as published by
10# the Free Software Foundation; either version 2, or (at your option)
11# any later version.
12#
13# This program is distributed in the hope that it will be useful,
14# but WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16# GNU General Public License for more details.
17#
18# You should have received a copy of the GNU General Public License
19# along with this program; if not, write to the Free Software
20# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21
22# As a special exception to the GNU General Public License, if you
23# distribute this file as part of a program that contains a
24# configuration script generated by Autoconf, you may include it under
25# the same distribution terms that you use for the rest of that program.
26
27# Usage:
28# compile PROGRAM [ARGS]...
29# `-o FOO.o' is removed from the args passed to the actual compile.
30
31prog=$1
32shift
33
34ofile=
35cfile=
36args=
37while test $# -gt 0; do
38   case "$1" in
39    -o)
40       # configure might choose to run compile as `compile cc -o foo foo.c'.
41       # So we do something ugly here.
42       ofile=$2
43       shift
44       case "$ofile" in
45    *.o | *.obj)
46       ;;
47    *)
48       args="$args -o $ofile"
49       ofile=
50       ;;
51       esac
52       ;;
53    *.c)
54       cfile=$1
55       args="$args $1"
56       ;;
57    *)
58       args="$args $1"
59       ;;
60   esac
61   shift
62done
63
64if test -z "$ofile" || test -z "$cfile"; then
65   # If no `-o' option was seen then we might have been invoked from a
66   # pattern rule where we don't need one.  That is ok -- this is a
67   # normal compilation that the losing compiler can handle.  If no
68   # `.c' file was seen then we are probably linking.  That is also
69   # ok.
70   exec "$prog" $args
71fi
72
73# Name of file we expect compiler to create.
74cofile=`echo $cfile | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
75
76# Create the lock directory.
77# Note: use `[/.-]' here to ensure that we don't use the same name
78# that we are using for the .o file.  Also, base the name on the expected
79# object file name, since that is what matters with a parallel build.
80lockdir=`echo $cofile | sed -e 's|[/.-]|_|g'`.d
81while true; do
82   if mkdir $lockdir > /dev/null 2>&1; then
83      break
84   fi
85   sleep 1
86done
87# FIXME: race condition here if user kills between mkdir and trap.
88trap "rmdir $lockdir; exit 1" 1 2 15
89
90# Run the compile.
91"$prog" $args
92status=$?
93
94if test -f "$cofile"; then
95   mv "$cofile" "$ofile"
96fi
97
98rmdir $lockdir
99exit $status
Note: See TracBrowser for help on using the repository browser.