199ca880aSopenharmony_ci#! /bin/sh 299ca880aSopenharmony_ci# Wrapper for compilers which do not understand '-c -o'. 399ca880aSopenharmony_ci 499ca880aSopenharmony_ciscriptversion=2018-03-07.03; # UTC 599ca880aSopenharmony_ci 699ca880aSopenharmony_ci# Copyright (C) 1999-2018 Free Software Foundation, Inc. 799ca880aSopenharmony_ci# Written by Tom Tromey <tromey@cygnus.com>. 899ca880aSopenharmony_ci# 999ca880aSopenharmony_ci# This program is free software; you can redistribute it and/or modify 1099ca880aSopenharmony_ci# it under the terms of the GNU General Public License as published by 1199ca880aSopenharmony_ci# the Free Software Foundation; either version 2, or (at your option) 1299ca880aSopenharmony_ci# any later version. 1399ca880aSopenharmony_ci# 1499ca880aSopenharmony_ci# This program is distributed in the hope that it will be useful, 1599ca880aSopenharmony_ci# but WITHOUT ANY WARRANTY; without even the implied warranty of 1699ca880aSopenharmony_ci# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1799ca880aSopenharmony_ci# GNU General Public License for more details. 1899ca880aSopenharmony_ci# 1999ca880aSopenharmony_ci# You should have received a copy of the GNU General Public License 2099ca880aSopenharmony_ci# along with this program. If not, see <https://www.gnu.org/licenses/>. 2199ca880aSopenharmony_ci 2299ca880aSopenharmony_ci# As a special exception to the GNU General Public License, if you 2399ca880aSopenharmony_ci# distribute this file as part of a program that contains a 2499ca880aSopenharmony_ci# configuration script generated by Autoconf, you may include it under 2599ca880aSopenharmony_ci# the same distribution terms that you use for the rest of that program. 2699ca880aSopenharmony_ci 2799ca880aSopenharmony_ci# This file is maintained in Automake, please report 2899ca880aSopenharmony_ci# bugs to <bug-automake@gnu.org> or send patches to 2999ca880aSopenharmony_ci# <automake-patches@gnu.org>. 3099ca880aSopenharmony_ci 3199ca880aSopenharmony_cinl=' 3299ca880aSopenharmony_ci' 3399ca880aSopenharmony_ci 3499ca880aSopenharmony_ci# We need space, tab and new line, in precisely that order. Quoting is 3599ca880aSopenharmony_ci# there to prevent tools from complaining about whitespace usage. 3699ca880aSopenharmony_ciIFS=" "" $nl" 3799ca880aSopenharmony_ci 3899ca880aSopenharmony_cifile_conv= 3999ca880aSopenharmony_ci 4099ca880aSopenharmony_ci# func_file_conv build_file lazy 4199ca880aSopenharmony_ci# Convert a $build file to $host form and store it in $file 4299ca880aSopenharmony_ci# Currently only supports Windows hosts. If the determined conversion 4399ca880aSopenharmony_ci# type is listed in (the comma separated) LAZY, no conversion will 4499ca880aSopenharmony_ci# take place. 4599ca880aSopenharmony_cifunc_file_conv () 4699ca880aSopenharmony_ci{ 4799ca880aSopenharmony_ci file=$1 4899ca880aSopenharmony_ci case $file in 4999ca880aSopenharmony_ci / | /[!/]*) # absolute file, and not a UNC file 5099ca880aSopenharmony_ci if test -z "$file_conv"; then 5199ca880aSopenharmony_ci # lazily determine how to convert abs files 5299ca880aSopenharmony_ci case `uname -s` in 5399ca880aSopenharmony_ci MINGW*) 5499ca880aSopenharmony_ci file_conv=mingw 5599ca880aSopenharmony_ci ;; 5699ca880aSopenharmony_ci CYGWIN*) 5799ca880aSopenharmony_ci file_conv=cygwin 5899ca880aSopenharmony_ci ;; 5999ca880aSopenharmony_ci *) 6099ca880aSopenharmony_ci file_conv=wine 6199ca880aSopenharmony_ci ;; 6299ca880aSopenharmony_ci esac 6399ca880aSopenharmony_ci fi 6499ca880aSopenharmony_ci case $file_conv/,$2, in 6599ca880aSopenharmony_ci *,$file_conv,*) 6699ca880aSopenharmony_ci ;; 6799ca880aSopenharmony_ci mingw/*) 6899ca880aSopenharmony_ci file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` 6999ca880aSopenharmony_ci ;; 7099ca880aSopenharmony_ci cygwin/*) 7199ca880aSopenharmony_ci file=`cygpath -m "$file" || echo "$file"` 7299ca880aSopenharmony_ci ;; 7399ca880aSopenharmony_ci wine/*) 7499ca880aSopenharmony_ci file=`winepath -w "$file" || echo "$file"` 7599ca880aSopenharmony_ci ;; 7699ca880aSopenharmony_ci esac 7799ca880aSopenharmony_ci ;; 7899ca880aSopenharmony_ci esac 7999ca880aSopenharmony_ci} 8099ca880aSopenharmony_ci 8199ca880aSopenharmony_ci# func_cl_dashL linkdir 8299ca880aSopenharmony_ci# Make cl look for libraries in LINKDIR 8399ca880aSopenharmony_cifunc_cl_dashL () 8499ca880aSopenharmony_ci{ 8599ca880aSopenharmony_ci func_file_conv "$1" 8699ca880aSopenharmony_ci if test -z "$lib_path"; then 8799ca880aSopenharmony_ci lib_path=$file 8899ca880aSopenharmony_ci else 8999ca880aSopenharmony_ci lib_path="$lib_path;$file" 9099ca880aSopenharmony_ci fi 9199ca880aSopenharmony_ci linker_opts="$linker_opts -LIBPATH:$file" 9299ca880aSopenharmony_ci} 9399ca880aSopenharmony_ci 9499ca880aSopenharmony_ci# func_cl_dashl library 9599ca880aSopenharmony_ci# Do a library search-path lookup for cl 9699ca880aSopenharmony_cifunc_cl_dashl () 9799ca880aSopenharmony_ci{ 9899ca880aSopenharmony_ci lib=$1 9999ca880aSopenharmony_ci found=no 10099ca880aSopenharmony_ci save_IFS=$IFS 10199ca880aSopenharmony_ci IFS=';' 10299ca880aSopenharmony_ci for dir in $lib_path $LIB 10399ca880aSopenharmony_ci do 10499ca880aSopenharmony_ci IFS=$save_IFS 10599ca880aSopenharmony_ci if $shared && test -f "$dir/$lib.dll.lib"; then 10699ca880aSopenharmony_ci found=yes 10799ca880aSopenharmony_ci lib=$dir/$lib.dll.lib 10899ca880aSopenharmony_ci break 10999ca880aSopenharmony_ci fi 11099ca880aSopenharmony_ci if test -f "$dir/$lib.lib"; then 11199ca880aSopenharmony_ci found=yes 11299ca880aSopenharmony_ci lib=$dir/$lib.lib 11399ca880aSopenharmony_ci break 11499ca880aSopenharmony_ci fi 11599ca880aSopenharmony_ci if test -f "$dir/lib$lib.a"; then 11699ca880aSopenharmony_ci found=yes 11799ca880aSopenharmony_ci lib=$dir/lib$lib.a 11899ca880aSopenharmony_ci break 11999ca880aSopenharmony_ci fi 12099ca880aSopenharmony_ci done 12199ca880aSopenharmony_ci IFS=$save_IFS 12299ca880aSopenharmony_ci 12399ca880aSopenharmony_ci if test "$found" != yes; then 12499ca880aSopenharmony_ci lib=$lib.lib 12599ca880aSopenharmony_ci fi 12699ca880aSopenharmony_ci} 12799ca880aSopenharmony_ci 12899ca880aSopenharmony_ci# func_cl_wrapper cl arg... 12999ca880aSopenharmony_ci# Adjust compile command to suit cl 13099ca880aSopenharmony_cifunc_cl_wrapper () 13199ca880aSopenharmony_ci{ 13299ca880aSopenharmony_ci # Assume a capable shell 13399ca880aSopenharmony_ci lib_path= 13499ca880aSopenharmony_ci shared=: 13599ca880aSopenharmony_ci linker_opts= 13699ca880aSopenharmony_ci for arg 13799ca880aSopenharmony_ci do 13899ca880aSopenharmony_ci if test -n "$eat"; then 13999ca880aSopenharmony_ci eat= 14099ca880aSopenharmony_ci else 14199ca880aSopenharmony_ci case $1 in 14299ca880aSopenharmony_ci -o) 14399ca880aSopenharmony_ci # configure might choose to run compile as 'compile cc -o foo foo.c'. 14499ca880aSopenharmony_ci eat=1 14599ca880aSopenharmony_ci case $2 in 14699ca880aSopenharmony_ci *.o | *.[oO][bB][jJ]) 14799ca880aSopenharmony_ci func_file_conv "$2" 14899ca880aSopenharmony_ci set x "$@" -Fo"$file" 14999ca880aSopenharmony_ci shift 15099ca880aSopenharmony_ci ;; 15199ca880aSopenharmony_ci *) 15299ca880aSopenharmony_ci func_file_conv "$2" 15399ca880aSopenharmony_ci set x "$@" -Fe"$file" 15499ca880aSopenharmony_ci shift 15599ca880aSopenharmony_ci ;; 15699ca880aSopenharmony_ci esac 15799ca880aSopenharmony_ci ;; 15899ca880aSopenharmony_ci -I) 15999ca880aSopenharmony_ci eat=1 16099ca880aSopenharmony_ci func_file_conv "$2" mingw 16199ca880aSopenharmony_ci set x "$@" -I"$file" 16299ca880aSopenharmony_ci shift 16399ca880aSopenharmony_ci ;; 16499ca880aSopenharmony_ci -I*) 16599ca880aSopenharmony_ci func_file_conv "${1#-I}" mingw 16699ca880aSopenharmony_ci set x "$@" -I"$file" 16799ca880aSopenharmony_ci shift 16899ca880aSopenharmony_ci ;; 16999ca880aSopenharmony_ci -l) 17099ca880aSopenharmony_ci eat=1 17199ca880aSopenharmony_ci func_cl_dashl "$2" 17299ca880aSopenharmony_ci set x "$@" "$lib" 17399ca880aSopenharmony_ci shift 17499ca880aSopenharmony_ci ;; 17599ca880aSopenharmony_ci -l*) 17699ca880aSopenharmony_ci func_cl_dashl "${1#-l}" 17799ca880aSopenharmony_ci set x "$@" "$lib" 17899ca880aSopenharmony_ci shift 17999ca880aSopenharmony_ci ;; 18099ca880aSopenharmony_ci -L) 18199ca880aSopenharmony_ci eat=1 18299ca880aSopenharmony_ci func_cl_dashL "$2" 18399ca880aSopenharmony_ci ;; 18499ca880aSopenharmony_ci -L*) 18599ca880aSopenharmony_ci func_cl_dashL "${1#-L}" 18699ca880aSopenharmony_ci ;; 18799ca880aSopenharmony_ci -static) 18899ca880aSopenharmony_ci shared=false 18999ca880aSopenharmony_ci ;; 19099ca880aSopenharmony_ci -Wl,*) 19199ca880aSopenharmony_ci arg=${1#-Wl,} 19299ca880aSopenharmony_ci save_ifs="$IFS"; IFS=',' 19399ca880aSopenharmony_ci for flag in $arg; do 19499ca880aSopenharmony_ci IFS="$save_ifs" 19599ca880aSopenharmony_ci linker_opts="$linker_opts $flag" 19699ca880aSopenharmony_ci done 19799ca880aSopenharmony_ci IFS="$save_ifs" 19899ca880aSopenharmony_ci ;; 19999ca880aSopenharmony_ci -Xlinker) 20099ca880aSopenharmony_ci eat=1 20199ca880aSopenharmony_ci linker_opts="$linker_opts $2" 20299ca880aSopenharmony_ci ;; 20399ca880aSopenharmony_ci -*) 20499ca880aSopenharmony_ci set x "$@" "$1" 20599ca880aSopenharmony_ci shift 20699ca880aSopenharmony_ci ;; 20799ca880aSopenharmony_ci *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) 20899ca880aSopenharmony_ci func_file_conv "$1" 20999ca880aSopenharmony_ci set x "$@" -Tp"$file" 21099ca880aSopenharmony_ci shift 21199ca880aSopenharmony_ci ;; 21299ca880aSopenharmony_ci *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) 21399ca880aSopenharmony_ci func_file_conv "$1" mingw 21499ca880aSopenharmony_ci set x "$@" "$file" 21599ca880aSopenharmony_ci shift 21699ca880aSopenharmony_ci ;; 21799ca880aSopenharmony_ci *) 21899ca880aSopenharmony_ci set x "$@" "$1" 21999ca880aSopenharmony_ci shift 22099ca880aSopenharmony_ci ;; 22199ca880aSopenharmony_ci esac 22299ca880aSopenharmony_ci fi 22399ca880aSopenharmony_ci shift 22499ca880aSopenharmony_ci done 22599ca880aSopenharmony_ci if test -n "$linker_opts"; then 22699ca880aSopenharmony_ci linker_opts="-link$linker_opts" 22799ca880aSopenharmony_ci fi 22899ca880aSopenharmony_ci exec "$@" $linker_opts 22999ca880aSopenharmony_ci exit 1 23099ca880aSopenharmony_ci} 23199ca880aSopenharmony_ci 23299ca880aSopenharmony_cieat= 23399ca880aSopenharmony_ci 23499ca880aSopenharmony_cicase $1 in 23599ca880aSopenharmony_ci '') 23699ca880aSopenharmony_ci echo "$0: No command. Try '$0 --help' for more information." 1>&2 23799ca880aSopenharmony_ci exit 1; 23899ca880aSopenharmony_ci ;; 23999ca880aSopenharmony_ci -h | --h*) 24099ca880aSopenharmony_ci cat <<\EOF 24199ca880aSopenharmony_ciUsage: compile [--help] [--version] PROGRAM [ARGS] 24299ca880aSopenharmony_ci 24399ca880aSopenharmony_ciWrapper for compilers which do not understand '-c -o'. 24499ca880aSopenharmony_ciRemove '-o dest.o' from ARGS, run PROGRAM with the remaining 24599ca880aSopenharmony_ciarguments, and rename the output as expected. 24699ca880aSopenharmony_ci 24799ca880aSopenharmony_ciIf you are trying to build a whole package this is not the 24899ca880aSopenharmony_ciright script to run: please start by reading the file 'INSTALL'. 24999ca880aSopenharmony_ci 25099ca880aSopenharmony_ciReport bugs to <bug-automake@gnu.org>. 25199ca880aSopenharmony_ciEOF 25299ca880aSopenharmony_ci exit $? 25399ca880aSopenharmony_ci ;; 25499ca880aSopenharmony_ci -v | --v*) 25599ca880aSopenharmony_ci echo "compile $scriptversion" 25699ca880aSopenharmony_ci exit $? 25799ca880aSopenharmony_ci ;; 25899ca880aSopenharmony_ci cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ 25999ca880aSopenharmony_ci icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) 26099ca880aSopenharmony_ci func_cl_wrapper "$@" # Doesn't return... 26199ca880aSopenharmony_ci ;; 26299ca880aSopenharmony_ciesac 26399ca880aSopenharmony_ci 26499ca880aSopenharmony_ciofile= 26599ca880aSopenharmony_cicfile= 26699ca880aSopenharmony_ci 26799ca880aSopenharmony_cifor arg 26899ca880aSopenharmony_cido 26999ca880aSopenharmony_ci if test -n "$eat"; then 27099ca880aSopenharmony_ci eat= 27199ca880aSopenharmony_ci else 27299ca880aSopenharmony_ci case $1 in 27399ca880aSopenharmony_ci -o) 27499ca880aSopenharmony_ci # configure might choose to run compile as 'compile cc -o foo foo.c'. 27599ca880aSopenharmony_ci # So we strip '-o arg' only if arg is an object. 27699ca880aSopenharmony_ci eat=1 27799ca880aSopenharmony_ci case $2 in 27899ca880aSopenharmony_ci *.o | *.obj) 27999ca880aSopenharmony_ci ofile=$2 28099ca880aSopenharmony_ci ;; 28199ca880aSopenharmony_ci *) 28299ca880aSopenharmony_ci set x "$@" -o "$2" 28399ca880aSopenharmony_ci shift 28499ca880aSopenharmony_ci ;; 28599ca880aSopenharmony_ci esac 28699ca880aSopenharmony_ci ;; 28799ca880aSopenharmony_ci *.c) 28899ca880aSopenharmony_ci cfile=$1 28999ca880aSopenharmony_ci set x "$@" "$1" 29099ca880aSopenharmony_ci shift 29199ca880aSopenharmony_ci ;; 29299ca880aSopenharmony_ci *) 29399ca880aSopenharmony_ci set x "$@" "$1" 29499ca880aSopenharmony_ci shift 29599ca880aSopenharmony_ci ;; 29699ca880aSopenharmony_ci esac 29799ca880aSopenharmony_ci fi 29899ca880aSopenharmony_ci shift 29999ca880aSopenharmony_cidone 30099ca880aSopenharmony_ci 30199ca880aSopenharmony_ciif test -z "$ofile" || test -z "$cfile"; then 30299ca880aSopenharmony_ci # If no '-o' option was seen then we might have been invoked from a 30399ca880aSopenharmony_ci # pattern rule where we don't need one. That is ok -- this is a 30499ca880aSopenharmony_ci # normal compilation that the losing compiler can handle. If no 30599ca880aSopenharmony_ci # '.c' file was seen then we are probably linking. That is also 30699ca880aSopenharmony_ci # ok. 30799ca880aSopenharmony_ci exec "$@" 30899ca880aSopenharmony_cifi 30999ca880aSopenharmony_ci 31099ca880aSopenharmony_ci# Name of file we expect compiler to create. 31199ca880aSopenharmony_cicofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` 31299ca880aSopenharmony_ci 31399ca880aSopenharmony_ci# Create the lock directory. 31499ca880aSopenharmony_ci# Note: use '[/\\:.-]' here to ensure that we don't use the same name 31599ca880aSopenharmony_ci# that we are using for the .o file. Also, base the name on the expected 31699ca880aSopenharmony_ci# object file name, since that is what matters with a parallel build. 31799ca880aSopenharmony_cilockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d 31899ca880aSopenharmony_ciwhile true; do 31999ca880aSopenharmony_ci if mkdir "$lockdir" >/dev/null 2>&1; then 32099ca880aSopenharmony_ci break 32199ca880aSopenharmony_ci fi 32299ca880aSopenharmony_ci sleep 1 32399ca880aSopenharmony_cidone 32499ca880aSopenharmony_ci# FIXME: race condition here if user kills between mkdir and trap. 32599ca880aSopenharmony_citrap "rmdir '$lockdir'; exit 1" 1 2 15 32699ca880aSopenharmony_ci 32799ca880aSopenharmony_ci# Run the compile. 32899ca880aSopenharmony_ci"$@" 32999ca880aSopenharmony_ciret=$? 33099ca880aSopenharmony_ci 33199ca880aSopenharmony_ciif test -f "$cofile"; then 33299ca880aSopenharmony_ci test "$cofile" = "$ofile" || mv "$cofile" "$ofile" 33399ca880aSopenharmony_cielif test -f "${cofile}bj"; then 33499ca880aSopenharmony_ci test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" 33599ca880aSopenharmony_cifi 33699ca880aSopenharmony_ci 33799ca880aSopenharmony_cirmdir "$lockdir" 33899ca880aSopenharmony_ciexit $ret 33999ca880aSopenharmony_ci 34099ca880aSopenharmony_ci# Local Variables: 34199ca880aSopenharmony_ci# mode: shell-script 34299ca880aSopenharmony_ci# sh-indentation: 2 34399ca880aSopenharmony_ci# eval: (add-hook 'before-save-hook 'time-stamp) 34499ca880aSopenharmony_ci# time-stamp-start: "scriptversion=" 34599ca880aSopenharmony_ci# time-stamp-format: "%:y-%02m-%02d.%02H" 34699ca880aSopenharmony_ci# time-stamp-time-zone: "UTC0" 34799ca880aSopenharmony_ci# time-stamp-end: "; # UTC" 34899ca880aSopenharmony_ci# End: 349