source: trunk/third/libgsf/compile @ 22006

Revision 22006, 3.0 KB checked in by ghudson, 19 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r22005, which included commits to RCS files with non-trunk default branches.
  • Property svn:executable set to *
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
31# Usage statement added by Billy Biggs <vektor@dumbterm.net>.
32if [ -z $1 ]; then
33    echo "Wrapper for compilers which do not understand '-c -o'."
34    echo "usage: compile PROGRAM [ARGS]..."
35    echo "'-o FOO.o' is removed from the args passed to the actual compile."
36    exit 1
37fi
38
39prog=$1
40shift
41
42ofile=
43cfile=
44args=
45while test $# -gt 0; do
46   case "$1" in
47    -o)
48       # configure might choose to run compile as `compile cc -o foo foo.c'.
49       # So we do something ugly here.
50       ofile=$2
51       shift
52       case "$ofile" in
53        *.o | *.obj)
54           ;;
55        *)
56           args="$args -o $ofile"
57           ofile=
58           ;;
59       esac
60       ;;
61    *.c)
62       cfile=$1
63       args="$args $1"
64       ;;
65    *)
66       args="$args $1"
67       ;;
68   esac
69   shift
70done
71
72if test -z "$ofile" || test -z "$cfile"; then
73   # If no `-o' option was seen then we might have been invoked from a
74   # pattern rule where we don't need one.  That is ok -- this is a
75   # normal compilation that the losing compiler can handle.  If no
76   # `.c' file was seen then we are probably linking.  That is also
77   # ok.
78   exec "$prog" $args
79fi
80
81# Name of file we expect compiler to create.
82cofile=`echo $cfile | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
83
84# Create the lock directory.
85# Note: use `[/.-]' here to ensure that we don't use the same name
86# that we are using for the .o file.  Also, base the name on the expected
87# object file name, since that is what matters with a parallel build.
88lockdir=`echo $cofile | sed -e 's|[/.-]|_|g'`.d
89while true; do
90   if mkdir $lockdir > /dev/null 2>&1; then
91      break
92   fi
93   sleep 1
94done
95# FIXME: race condition here if user kills between mkdir and trap.
96trap "rmdir $lockdir; exit 1" 1 2 15
97
98# Run the compile.
99"$prog" $args
100status=$?
101
102if test -f "$cofile"; then
103   mv "$cofile" "$ofile"
104fi
105
106rmdir $lockdir
107exit $status
Note: See TracBrowser for help on using the repository browser.