File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / libiconv / build-aux / compile
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Mar 17 13:38:46 2021 UTC (3 years, 9 months ago) by misho
Branches: libiconv, MAIN
CVS tags: v1_16p0, HEAD
libiconv 1.16

    1: #! /bin/sh
    2: # Wrapper for compilers which do not understand '-c -o'.
    3: 
    4: scriptversion=2018-03-07.03; # UTC
    5: 
    6: # Copyright (C) 1999-2018 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 <https://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: 
   31: nl='
   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.
   36: IFS=" ""	$nl"
   37: 
   38: file_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.
   45: func_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
   83: func_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
   96: func_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
  130: func_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: 
  232: eat=
  233: 
  234: case $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
  241: Usage: compile [--help] [--version] PROGRAM [ARGS]
  242: 
  243: Wrapper for compilers which do not understand '-c -o'.
  244: Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
  245: arguments, and rename the output as expected.
  246: 
  247: If you are trying to build a whole package this is not the
  248: right script to run: please start by reading the file 'INSTALL'.
  249: 
  250: Report bugs to <bug-automake@gnu.org>.
  251: EOF
  252:     exit $?
  253:     ;;
  254:   -v | --v*)
  255:     echo "compile $scriptversion"
  256:     exit $?
  257:     ;;
  258:   cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \
  259:   icl | *[/\\]icl | icl.exe | *[/\\]icl.exe )
  260:     func_cl_wrapper "$@"      # Doesn't return...
  261:     ;;
  262: esac
  263: 
  264: ofile=
  265: cfile=
  266: 
  267: for arg
  268: do
  269:   if test -n "$eat"; then
  270:     eat=
  271:   else
  272:     case $1 in
  273:       -o)
  274: 	# configure might choose to run compile as 'compile cc -o foo foo.c'.
  275: 	# So we strip '-o arg' only if arg is an object.
  276: 	eat=1
  277: 	case $2 in
  278: 	  *.o | *.obj)
  279: 	    ofile=$2
  280: 	    ;;
  281: 	  *)
  282: 	    set x "$@" -o "$2"
  283: 	    shift
  284: 	    ;;
  285: 	esac
  286: 	;;
  287:       *.c)
  288: 	cfile=$1
  289: 	set x "$@" "$1"
  290: 	shift
  291: 	;;
  292:       *)
  293: 	set x "$@" "$1"
  294: 	shift
  295: 	;;
  296:     esac
  297:   fi
  298:   shift
  299: done
  300: 
  301: if test -z "$ofile" || test -z "$cfile"; then
  302:   # If no '-o' option was seen then we might have been invoked from a
  303:   # pattern rule where we don't need one.  That is ok -- this is a
  304:   # normal compilation that the losing compiler can handle.  If no
  305:   # '.c' file was seen then we are probably linking.  That is also
  306:   # ok.
  307:   exec "$@"
  308: fi
  309: 
  310: # Name of file we expect compiler to create.
  311: cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
  312: 
  313: # Create the lock directory.
  314: # Note: use '[/\\:.-]' here to ensure that we don't use the same name
  315: # that we are using for the .o file.  Also, base the name on the expected
  316: # object file name, since that is what matters with a parallel build.
  317: lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
  318: while true; do
  319:   if mkdir "$lockdir" >/dev/null 2>&1; then
  320:     break
  321:   fi
  322:   sleep 1
  323: done
  324: # FIXME: race condition here if user kills between mkdir and trap.
  325: trap "rmdir '$lockdir'; exit 1" 1 2 15
  326: 
  327: # Run the compile.
  328: "$@"
  329: ret=$?
  330: 
  331: if test -f "$cofile"; then
  332:   test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
  333: elif test -f "${cofile}bj"; then
  334:   test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
  335: fi
  336: 
  337: rmdir "$lockdir"
  338: exit $ret
  339: 
  340: # Local Variables:
  341: # mode: shell-script
  342: # sh-indentation: 2
  343: # eval: (add-hook 'before-save-hook 'time-stamp)
  344: # time-stamp-start: "scriptversion="
  345: # time-stamp-format: "%:y-%02m-%02d.%02H"
  346: # time-stamp-time-zone: "UTC0"
  347: # time-stamp-end: "; # UTC"
  348: # End:

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>