Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • automake/compile

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