Annotation of rpl/compile, revision 1.1

1.1     ! bertrand    1: #! /bin/sh
        !             2: # Wrapper for compilers which do not understand `-c -o'.
        !             3: 
        !             4: scriptversion=2009-04-28.21; # UTC
        !             5: 
        !             6: # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009  Free Software
        !             7: # Foundation, Inc.
        !             8: # Written by Tom Tromey <tromey@cygnus.com>.
        !             9: #
        !            10: # This program is free software; you can redistribute it and/or modify
        !            11: # it under the terms of the GNU General Public License as published by
        !            12: # the Free Software Foundation; either version 2, or (at your option)
        !            13: # any later version.
        !            14: #
        !            15: # This program is distributed in the hope that it will be useful,
        !            16: # but WITHOUT ANY WARRANTY; without even the implied warranty of
        !            17: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        !            18: # GNU General Public License for more details.
        !            19: #
        !            20: # You should have received a copy of the GNU General Public License
        !            21: # along with this program.  If not, see <http://www.gnu.org/licenses/>.
        !            22: 
        !            23: # As a special exception to the GNU General Public License, if you
        !            24: # distribute this file as part of a program that contains a
        !            25: # configuration script generated by Autoconf, you may include it under
        !            26: # the same distribution terms that you use for the rest of that program.
        !            27: 
        !            28: # This file is maintained in Automake, please report
        !            29: # bugs to <bug-automake@gnu.org> or send patches to
        !            30: # <automake-patches@gnu.org>.
        !            31: 
        !            32: case $1 in
        !            33:   '')
        !            34:      echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
        !            35:      exit 1;
        !            36:      ;;
        !            37:   -h | --h*)
        !            38:     cat <<\EOF
        !            39: Usage: compile [--help] [--version] PROGRAM [ARGS]
        !            40: 
        !            41: Wrapper for compilers which do not understand `-c -o'.
        !            42: Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
        !            43: arguments, and rename the output as expected.
        !            44: 
        !            45: If you are trying to build a whole package this is not the
        !            46: right script to run: please start by reading the file `INSTALL'.
        !            47: 
        !            48: Report bugs to <bug-automake@gnu.org>.
        !            49: EOF
        !            50:     exit $?
        !            51:     ;;
        !            52:   -v | --v*)
        !            53:     echo "compile $scriptversion"
        !            54:     exit $?
        !            55:     ;;
        !            56: esac
        !            57: 
        !            58: ofile=
        !            59: cfile=
        !            60: eat=
        !            61: 
        !            62: for arg
        !            63: do
        !            64:   if test -n "$eat"; then
        !            65:     eat=
        !            66:   else
        !            67:     case $1 in
        !            68:       -o)
        !            69:    # configure might choose to run compile as `compile cc -o foo foo.c'.
        !            70:    # So we strip `-o arg' only if arg is an object.
        !            71:    eat=1
        !            72:    case $2 in
        !            73:      *.o | *.obj)
        !            74:        ofile=$2
        !            75:        ;;
        !            76:      *)
        !            77:        set x "$@" -o "$2"
        !            78:        shift
        !            79:        ;;
        !            80:    esac
        !            81:    ;;
        !            82:       *.c)
        !            83:    cfile=$1
        !            84:    set x "$@" "$1"
        !            85:    shift
        !            86:    ;;
        !            87:       *)
        !            88:    set x "$@" "$1"
        !            89:    shift
        !            90:    ;;
        !            91:     esac
        !            92:   fi
        !            93:   shift
        !            94: done
        !            95: 
        !            96: if test -z "$ofile" || test -z "$cfile"; then
        !            97:   # If no `-o' option was seen then we might have been invoked from a
        !            98:   # pattern rule where we don't need one.  That is ok -- this is a
        !            99:   # normal compilation that the losing compiler can handle.  If no
        !           100:   # `.c' file was seen then we are probably linking.  That is also
        !           101:   # ok.
        !           102:   exec "$@"
        !           103: fi
        !           104: 
        !           105: # Name of file we expect compiler to create.
        !           106: cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
        !           107: 
        !           108: # Create the lock directory.
        !           109: # Note: use `[/\\:.-]' here to ensure that we don't use the same name
        !           110: # that we are using for the .o file.  Also, base the name on the expected
        !           111: # object file name, since that is what matters with a parallel build.
        !           112: lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
        !           113: while true; do
        !           114:   if mkdir "$lockdir" >/dev/null 2>&1; then
        !           115:     break
        !           116:   fi
        !           117:   sleep 1
        !           118: done
        !           119: # FIXME: race condition here if user kills between mkdir and trap.
        !           120: trap "rmdir '$lockdir'; exit 1" 1 2 15
        !           121: 
        !           122: # Run the compile.
        !           123: "$@"
        !           124: ret=$?
        !           125: 
        !           126: if test -f "$cofile"; then
        !           127:   mv "$cofile" "$ofile"
        !           128: elif test -f "${cofile}bj"; then
        !           129:   mv "${cofile}bj" "$ofile"
        !           130: fi
        !           131: 
        !           132: rmdir "$lockdir"
        !           133: exit $ret
        !           134: 
        !           135: # Local Variables:
        !           136: # mode: shell-script
        !           137: # sh-indentation: 2
        !           138: # eval: (add-hook 'write-file-hooks 'time-stamp)
        !           139: # time-stamp-start: "scriptversion="
        !           140: # time-stamp-format: "%:y-%02m-%02d.%02H"
        !           141: # time-stamp-time-zone: "UTC"
        !           142: # time-stamp-end: "; # UTC"
        !           143: # End:

CVSweb interface <joel.bertrand@systella.fr>