10ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson#! /bin/sh 20ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# Wrapper for compilers which do not understand '-c -o'. 30ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 40ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonscriptversion=2012-10-14.11; # UTC 50ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 60ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# Copyright (C) 1999-2013 Free Software Foundation, Inc. 70ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# Written by Tom Tromey <tromey@cygnus.com>. 80ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# 90ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# This program is free software; you can redistribute it and/or modify 100ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# it under the terms of the GNU General Public License as published by 110ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# the Free Software Foundation; either version 2, or (at your option) 120ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# any later version. 130ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# 140ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# This program is distributed in the hope that it will be useful, 150ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# but WITHOUT ANY WARRANTY; without even the implied warranty of 160ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 170ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# GNU General Public License for more details. 180ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# 190ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# You should have received a copy of the GNU General Public License 200ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# along with this program. If not, see <http://www.gnu.org/licenses/>. 210ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 220ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# As a special exception to the GNU General Public License, if you 230ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# distribute this file as part of a program that contains a 240ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# configuration script generated by Autoconf, you may include it under 250ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# the same distribution terms that you use for the rest of that program. 260ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 270ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# This file is maintained in Automake, please report 280ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# bugs to <bug-automake@gnu.org> or send patches to 290ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# <automake-patches@gnu.org>. 300ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 310ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonnl=' 320ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson' 330ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 340ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# We need space, tab and new line, in precisely that order. Quoting is 350ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# there to prevent tools from complaining about whitespace usage. 360ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff DavidsonIFS=" "" $nl" 370ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 380ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonfile_conv= 390ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 400ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# func_file_conv build_file lazy 410ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# Convert a $build file to $host form and store it in $file 420ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# Currently only supports Windows hosts. If the determined conversion 430ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# type is listed in (the comma separated) LAZY, no conversion will 440ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# take place. 450ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonfunc_file_conv () 460ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson{ 470ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson file=$1 480ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson case $file in 490ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson / | /[!/]*) # absolute file, and not a UNC file 500ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson if test -z "$file_conv"; then 510ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # lazily determine how to convert abs files 520ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson case `uname -s` in 530ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson MINGW*) 540ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson file_conv=mingw 550ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ;; 560ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson CYGWIN*) 570ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson file_conv=cygwin 580ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ;; 590ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson *) 600ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson file_conv=wine 610ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ;; 620ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson esac 630ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson fi 640ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson case $file_conv/,$2, in 650ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson *,$file_conv,*) 660ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ;; 670ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson mingw/*) 680ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` 690ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ;; 700ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson cygwin/*) 710ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson file=`cygpath -m "$file" || echo "$file"` 720ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ;; 730ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson wine/*) 740ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson file=`winepath -w "$file" || echo "$file"` 750ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ;; 760ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson esac 770ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ;; 780ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson esac 790ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson} 800ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 810ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# func_cl_dashL linkdir 820ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# Make cl look for libraries in LINKDIR 830ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonfunc_cl_dashL () 840ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson{ 850ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson func_file_conv "$1" 860ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson if test -z "$lib_path"; then 870ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson lib_path=$file 880ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson else 890ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson lib_path="$lib_path;$file" 900ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson fi 910ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson linker_opts="$linker_opts -LIBPATH:$file" 920ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson} 930ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 940ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# func_cl_dashl library 950ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# Do a library search-path lookup for cl 960ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonfunc_cl_dashl () 970ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson{ 980ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson lib=$1 990ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson found=no 1000ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson save_IFS=$IFS 1010ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson IFS=';' 1020ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson for dir in $lib_path $LIB 1030ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson do 1040ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson IFS=$save_IFS 1050ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson if $shared && test -f "$dir/$lib.dll.lib"; then 1060ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson found=yes 1070ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson lib=$dir/$lib.dll.lib 1080ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson break 1090ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson fi 1100ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson if test -f "$dir/$lib.lib"; then 1110ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson found=yes 1120ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson lib=$dir/$lib.lib 1130ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson break 1140ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson fi 1150ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson if test -f "$dir/lib$lib.a"; then 1160ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson found=yes 1170ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson lib=$dir/lib$lib.a 1180ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson break 1190ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson fi 1200ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson done 1210ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson IFS=$save_IFS 1220ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 1230ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson if test "$found" != yes; then 1240ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson lib=$lib.lib 1250ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson fi 1260ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson} 1270ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 1280ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# func_cl_wrapper cl arg... 1290ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# Adjust compile command to suit cl 1300ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonfunc_cl_wrapper () 1310ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson{ 1320ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # Assume a capable shell 1330ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson lib_path= 1340ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson shared=: 1350ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson linker_opts= 1360ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson for arg 1370ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson do 1380ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson if test -n "$eat"; then 1390ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson eat= 1400ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson else 1410ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson case $1 in 1420ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson -o) 1430ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # configure might choose to run compile as 'compile cc -o foo foo.c'. 1440ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson eat=1 1450ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson case $2 in 1460ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson *.o | *.[oO][bB][jJ]) 1470ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson func_file_conv "$2" 1480ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson set x "$@" -Fo"$file" 1490ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson shift 1500ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ;; 1510ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson *) 1520ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson func_file_conv "$2" 1530ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson set x "$@" -Fe"$file" 1540ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson shift 1550ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ;; 1560ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson esac 1570ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ;; 1580ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson -I) 1590ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson eat=1 1600ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson func_file_conv "$2" mingw 1610ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson set x "$@" -I"$file" 1620ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson shift 1630ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ;; 1640ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson -I*) 1650ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson func_file_conv "${1#-I}" mingw 1660ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson set x "$@" -I"$file" 1670ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson shift 1680ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ;; 1690ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson -l) 1700ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson eat=1 1710ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson func_cl_dashl "$2" 1720ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson set x "$@" "$lib" 1730ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson shift 1740ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ;; 1750ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson -l*) 1760ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson func_cl_dashl "${1#-l}" 1770ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson set x "$@" "$lib" 1780ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson shift 1790ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ;; 1800ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson -L) 1810ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson eat=1 1820ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson func_cl_dashL "$2" 1830ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ;; 1840ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson -L*) 1850ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson func_cl_dashL "${1#-L}" 1860ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ;; 1870ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson -static) 1880ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson shared=false 1890ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ;; 1900ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson -Wl,*) 1910ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson arg=${1#-Wl,} 1920ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson save_ifs="$IFS"; IFS=',' 1930ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson for flag in $arg; do 1940ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson IFS="$save_ifs" 1950ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson linker_opts="$linker_opts $flag" 1960ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson done 1970ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson IFS="$save_ifs" 1980ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ;; 1990ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson -Xlinker) 2000ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson eat=1 2010ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson linker_opts="$linker_opts $2" 2020ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ;; 2030ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson -*) 2040ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson set x "$@" "$1" 2050ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson shift 2060ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ;; 2070ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) 2080ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson func_file_conv "$1" 2090ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson set x "$@" -Tp"$file" 2100ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson shift 2110ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ;; 2120ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) 2130ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson func_file_conv "$1" mingw 2140ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson set x "$@" "$file" 2150ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson shift 2160ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ;; 2170ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson *) 2180ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson set x "$@" "$1" 2190ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson shift 2200ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ;; 2210ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson esac 2220ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson fi 2230ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson shift 2240ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson done 2250ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson if test -n "$linker_opts"; then 2260ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson linker_opts="-link$linker_opts" 2270ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson fi 2280ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson exec "$@" $linker_opts 2290ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson exit 1 2300ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson} 2310ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 2320ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsoneat= 2330ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 2340ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsoncase $1 in 2350ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson '') 2360ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson echo "$0: No command. Try '$0 --help' for more information." 1>&2 2370ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson exit 1; 2380ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ;; 2390ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson -h | --h*) 2400ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson cat <<\EOF 2410ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff DavidsonUsage: compile [--help] [--version] PROGRAM [ARGS] 2420ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 2430ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff DavidsonWrapper for compilers which do not understand '-c -o'. 2440ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff DavidsonRemove '-o dest.o' from ARGS, run PROGRAM with the remaining 2450ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonarguments, and rename the output as expected. 2460ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 2470ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff DavidsonIf you are trying to build a whole package this is not the 2480ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonright script to run: please start by reading the file 'INSTALL'. 2490ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 2500ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff DavidsonReport bugs to <bug-automake@gnu.org>. 2510ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff DavidsonEOF 2520ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson exit $? 2530ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ;; 2540ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson -v | --v*) 2550ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson echo "compile $scriptversion" 2560ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson exit $? 2570ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ;; 2580ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) 2590ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson func_cl_wrapper "$@" # Doesn't return... 2600ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ;; 2610ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonesac 2620ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 2630ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonofile= 2640ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsoncfile= 2650ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 2660ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonfor arg 2670ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsondo 2680ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson if test -n "$eat"; then 2690ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson eat= 2700ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson else 2710ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson case $1 in 2720ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson -o) 2730ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # configure might choose to run compile as 'compile cc -o foo foo.c'. 2740ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # So we strip '-o arg' only if arg is an object. 2750ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson eat=1 2760ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson case $2 in 2770ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson *.o | *.obj) 2780ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ofile=$2 2790ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ;; 2800ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson *) 2810ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson set x "$@" -o "$2" 2820ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson shift 2830ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ;; 2840ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson esac 2850ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ;; 2860ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson *.c) 2870ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson cfile=$1 2880ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson set x "$@" "$1" 2890ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson shift 2900ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ;; 2910ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson *) 2920ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson set x "$@" "$1" 2930ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson shift 2940ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ;; 2950ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson esac 2960ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson fi 2970ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson shift 2980ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsondone 2990ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 3000ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonif test -z "$ofile" || test -z "$cfile"; then 3010ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # If no '-o' option was seen then we might have been invoked from a 3020ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # pattern rule where we don't need one. That is ok -- this is a 3030ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # normal compilation that the losing compiler can handle. If no 3040ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # '.c' file was seen then we are probably linking. That is also 3050ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # ok. 3060ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson exec "$@" 3070ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonfi 3080ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 3090ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# Name of file we expect compiler to create. 3100ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsoncofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` 3110ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 3120ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# Create the lock directory. 3130ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# Note: use '[/\\:.-]' here to ensure that we don't use the same name 3140ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# that we are using for the .o file. Also, base the name on the expected 3150ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# object file name, since that is what matters with a parallel build. 3160ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonlockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d 3170ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonwhile true; do 3180ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson if mkdir "$lockdir" >/dev/null 2>&1; then 3190ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson break 3200ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson fi 3210ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson sleep 1 3220ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsondone 3230ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# FIXME: race condition here if user kills between mkdir and trap. 3240ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsontrap "rmdir '$lockdir'; exit 1" 1 2 15 3250ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 3260ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# Run the compile. 3270ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson"$@" 3280ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonret=$? 3290ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 3300ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonif test -f "$cofile"; then 3310ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson test "$cofile" = "$ofile" || mv "$cofile" "$ofile" 3320ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonelif test -f "${cofile}bj"; then 3330ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" 3340ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonfi 3350ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 3360ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonrmdir "$lockdir" 3370ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonexit $ret 3380ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 3390ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# Local Variables: 3400ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# mode: shell-script 3410ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# sh-indentation: 2 3420ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# eval: (add-hook 'write-file-hooks 'time-stamp) 3430ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# time-stamp-start: "scriptversion=" 3440ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# time-stamp-format: "%:y-%02m-%02d.%02H" 3450ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# time-stamp-time-zone: "UTC" 3460ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# time-stamp-end: "; # UTC" 3470ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# End: 348