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