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