~ubuntu-branches/debian/experimental/cups-filters/experimental

« back to all changes in this revision

Viewing changes to compile

Tags: upstream-1.0.20
ImportĀ upstreamĀ versionĀ 1.0.20

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#! /bin/sh
 
2
# Wrapper for compilers which do not understand '-c -o'.
 
3
 
 
4
scriptversion=2012-01-04.17; # UTC
 
5
 
 
6
# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009, 2010, 2012 Free
 
7
# Software Foundation, Inc.
 
8
# Written by Tom Tromey <tromey@cygnus.com>.
 
9
#
 
10
# This program is free software; you can redistribute it and/or modify
 
11
# it under the terms of the GNU General Public License as published by
 
12
# the Free Software Foundation; either version 2, or (at your option)
 
13
# any later version.
 
14
#
 
15
# This program is distributed in the hope that it will be useful,
 
16
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
17
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
18
# GNU General Public License for more details.
 
19
#
 
20
# You should have received a copy of the GNU General Public License
 
21
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
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@gnu.org> or send patches to
 
30
# <automake-patches@gnu.org>.
 
31
 
 
32
nl='
 
33
'
 
34
 
 
35
# We need space, tab and new line, in precisely that order.  Quoting is
 
36
# there to prevent tools from complaining about whitespace usage.
 
37
IFS=" ""        $nl"
 
38
 
 
39
file_conv=
 
40
 
 
41
# func_file_conv build_file lazy
 
42
# Convert a $build file to $host form and store it in $file
 
43
# Currently only supports Windows hosts. If the determined conversion
 
44
# type is listed in (the comma separated) LAZY, no conversion will
 
45
# take place.
 
46
func_file_conv ()
 
47
{
 
48
  file=$1
 
49
  case $file in
 
50
    / | /[!/]*) # absolute file, and not a UNC file
 
51
      if test -z "$file_conv"; then
 
52
        # lazily determine how to convert abs files
 
53
        case `uname -s` in
 
54
          MINGW*)
 
55
            file_conv=mingw
 
56
            ;;
 
57
          CYGWIN*)
 
58
            file_conv=cygwin
 
59
            ;;
 
60
          *)
 
61
            file_conv=wine
 
62
            ;;
 
63
        esac
 
64
      fi
 
65
      case $file_conv/,$2, in
 
66
        *,$file_conv,*)
 
67
          ;;
 
68
        mingw/*)
 
69
          file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
 
70
          ;;
 
71
        cygwin/*)
 
72
          file=`cygpath -m "$file" || echo "$file"`
 
73
          ;;
 
74
        wine/*)
 
75
          file=`winepath -w "$file" || echo "$file"`
 
76
          ;;
 
77
      esac
 
78
      ;;
 
79
  esac
 
80
}
 
81
 
 
82
# func_cl_wrapper cl arg...
 
83
# Adjust compile command to suit cl
 
84
func_cl_wrapper ()
 
85
{
 
86
  # Assume a capable shell
 
87
  lib_path=
 
88
  shared=:
 
89
  linker_opts=
 
90
  for arg
 
91
  do
 
92
    if test -n "$eat"; then
 
93
      eat=
 
94
    else
 
95
      case $1 in
 
96
        -o)
 
97
          # configure might choose to run compile as 'compile cc -o foo foo.c'.
 
98
          eat=1
 
99
          case $2 in
 
100
            *.o | *.[oO][bB][jJ])
 
101
              func_file_conv "$2"
 
102
              set x "$@" -Fo"$file"
 
103
              shift
 
104
              ;;
 
105
            *)
 
106
              func_file_conv "$2"
 
107
              set x "$@" -Fe"$file"
 
108
              shift
 
109
              ;;
 
110
          esac
 
111
          ;;
 
112
        -I*)
 
113
          func_file_conv "${1#-I}" mingw
 
114
          set x "$@" -I"$file"
 
115
          shift
 
116
          ;;
 
117
        -l*)
 
118
          lib=${1#-l}
 
119
          found=no
 
120
          save_IFS=$IFS
 
121
          IFS=';'
 
122
          for dir in $lib_path $LIB
 
123
          do
 
124
            IFS=$save_IFS
 
125
            if $shared && test -f "$dir/$lib.dll.lib"; then
 
126
              found=yes
 
127
              set x "$@" "$dir/$lib.dll.lib"
 
128
              break
 
129
            fi
 
130
            if test -f "$dir/$lib.lib"; then
 
131
              found=yes
 
132
              set x "$@" "$dir/$lib.lib"
 
133
              break
 
134
            fi
 
135
          done
 
136
          IFS=$save_IFS
 
137
 
 
138
          test "$found" != yes && set x "$@" "$lib.lib"
 
139
          shift
 
140
          ;;
 
141
        -L*)
 
142
          func_file_conv "${1#-L}"
 
143
          if test -z "$lib_path"; then
 
144
            lib_path=$file
 
145
          else
 
146
            lib_path="$lib_path;$file"
 
147
          fi
 
148
          linker_opts="$linker_opts -LIBPATH:$file"
 
149
          ;;
 
150
        -static)
 
151
          shared=false
 
152
          ;;
 
153
        -Wl,*)
 
154
          arg=${1#-Wl,}
 
155
          save_ifs="$IFS"; IFS=','
 
156
          for flag in $arg; do
 
157
            IFS="$save_ifs"
 
158
            linker_opts="$linker_opts $flag"
 
159
          done
 
160
          IFS="$save_ifs"
 
161
          ;;
 
162
        -Xlinker)
 
163
          eat=1
 
164
          linker_opts="$linker_opts $2"
 
165
          ;;
 
166
        -*)
 
167
          set x "$@" "$1"
 
168
          shift
 
169
          ;;
 
170
        *.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
 
171
          func_file_conv "$1"
 
172
          set x "$@" -Tp"$file"
 
173
          shift
 
174
          ;;
 
175
        *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
 
176
          func_file_conv "$1" mingw
 
177
          set x "$@" "$file"
 
178
          shift
 
179
          ;;
 
180
        *)
 
181
          set x "$@" "$1"
 
182
          shift
 
183
          ;;
 
184
      esac
 
185
    fi
 
186
    shift
 
187
  done
 
188
  if test -n "$linker_opts"; then
 
189
    linker_opts="-link$linker_opts"
 
190
  fi
 
191
  exec "$@" $linker_opts
 
192
  exit 1
 
193
}
 
194
 
 
195
eat=
 
196
 
 
197
case $1 in
 
198
  '')
 
199
     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
 
200
     exit 1;
 
201
     ;;
 
202
  -h | --h*)
 
203
    cat <<\EOF
 
204
Usage: compile [--help] [--version] PROGRAM [ARGS]
 
205
 
 
206
Wrapper for compilers which do not understand '-c -o'.
 
207
Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
 
208
arguments, and rename the output as expected.
 
209
 
 
210
If you are trying to build a whole package this is not the
 
211
right script to run: please start by reading the file 'INSTALL'.
 
212
 
 
213
Report bugs to <bug-automake@gnu.org>.
 
214
EOF
 
215
    exit $?
 
216
    ;;
 
217
  -v | --v*)
 
218
    echo "compile $scriptversion"
 
219
    exit $?
 
220
    ;;
 
221
  cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
 
222
    func_cl_wrapper "$@"      # Doesn't return...
 
223
    ;;
 
224
esac
 
225
 
 
226
ofile=
 
227
cfile=
 
228
 
 
229
for arg
 
230
do
 
231
  if test -n "$eat"; then
 
232
    eat=
 
233
  else
 
234
    case $1 in
 
235
      -o)
 
236
        # configure might choose to run compile as 'compile cc -o foo foo.c'.
 
237
        # So we strip '-o arg' only if arg is an object.
 
238
        eat=1
 
239
        case $2 in
 
240
          *.o | *.obj)
 
241
            ofile=$2
 
242
            ;;
 
243
          *)
 
244
            set x "$@" -o "$2"
 
245
            shift
 
246
            ;;
 
247
        esac
 
248
        ;;
 
249
      *.c)
 
250
        cfile=$1
 
251
        set x "$@" "$1"
 
252
        shift
 
253
        ;;
 
254
      *)
 
255
        set x "$@" "$1"
 
256
        shift
 
257
        ;;
 
258
    esac
 
259
  fi
 
260
  shift
 
261
done
 
262
 
 
263
if test -z "$ofile" || test -z "$cfile"; then
 
264
  # If no '-o' option was seen then we might have been invoked from a
 
265
  # pattern rule where we don't need one.  That is ok -- this is a
 
266
  # normal compilation that the losing compiler can handle.  If no
 
267
  # '.c' file was seen then we are probably linking.  That is also
 
268
  # ok.
 
269
  exec "$@"
 
270
fi
 
271
 
 
272
# Name of file we expect compiler to create.
 
273
cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
 
274
 
 
275
# Create the lock directory.
 
276
# Note: use '[/\\:.-]' here to ensure that we don't use the same name
 
277
# that we are using for the .o file.  Also, base the name on the expected
 
278
# object file name, since that is what matters with a parallel build.
 
279
lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
 
280
while true; do
 
281
  if mkdir "$lockdir" >/dev/null 2>&1; then
 
282
    break
 
283
  fi
 
284
  sleep 1
 
285
done
 
286
# FIXME: race condition here if user kills between mkdir and trap.
 
287
trap "rmdir '$lockdir'; exit 1" 1 2 15
 
288
 
 
289
# Run the compile.
 
290
"$@"
 
291
ret=$?
 
292
 
 
293
if test -f "$cofile"; then
 
294
  test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
 
295
elif test -f "${cofile}bj"; then
 
296
  test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
 
297
fi
 
298
 
 
299
rmdir "$lockdir"
 
300
exit $ret
 
301
 
 
302
# Local Variables:
 
303
# mode: shell-script
 
304
# sh-indentation: 2
 
305
# eval: (add-hook 'write-file-hooks 'time-stamp)
 
306
# time-stamp-start: "scriptversion="
 
307
# time-stamp-format: "%:y-%02m-%02d.%02H"
 
308
# time-stamp-time-zone: "UTC"
 
309
# time-stamp-end: "; # UTC"
 
310
# End: