Ticket #31310: wrapper-template.diff

File wrapper-template.diff, 4.8 KB (added by ccorn@…, 13 years ago)

Robustness patches to files/wrapper-template

  • files/wrapper-template

     
    11#!/bin/sh
     2
     3# Outside assignments, unquoted $vars shall just be split into words.
     4# So turn off filename globbing:
     5set -f
     6
    27COMPILER='@@@'
    38SUFFIX='---'
    49PREFIX='&&&'
     
    712NAMED_OUTPUT=''
    813LASTFILE=''
    914INTEL='NO'
     15POWERPC='NO'
    1016SIZE32='NO'
    1117SIZE64='NO'
    1218NEWARGS=''
    1319
    1420SKIP='NO'
    1521
    16 for arg in $@
     22for arg in "$@"
    1723do
    1824        if [ $SKIP = 'ARCH' ]; then
    1925                # intercept -arch option and set SIZEXX
    2026                SKIP='NO'
    21                 if [ $arg = 'x86_64' ] || [ $arg = 'ppc64' ]; then
    22                         SIZE64='YES'
    23                 else
    24                         SIZE32='YES'
    25                 fi
     27                case $arg in
     28                        i386    ) SIZE32='YES'; INTEL='YES' ;;
     29                        ppc     ) SIZE32='YES'; POWERPC='YES' ;;
     30                        ppc64   ) SIZE64='YES'; POWERPC='YES' ;;
     31                        x86_64  ) SIZE64='YES'; INTEL='YES' ;;
     32                        *       ) echo >&2 "$0: Unknown -arch $arg"; exit 2 ;;
     33                esac
    2634               
    27                 # which architecture are we compiling for?
    28                 if [ $arg = 'x86_64' ] || [ $arg = 'i386' ]; then
    29                         INTEL='YES'
    30                 fi
    31                
    32         elif [ $arg = '-arch' ]; then
     35        elif [ "$arg" = '-arch' ]; then
    3336                SKIP='ARCH'
    3437               
    35         elif [ $arg = '--version' ]; then
     38        elif [ "$arg" = '--version' ]; then
    3639                ${COMPILER} --version
    37                 exit 0
     40                exit $?
    3841               
    3942        else
    40                 NEWARGS+="$arg "
     43                NEWARGS="$NEWARGS$arg "
    4144               
    4245                # if the -c option is given, the output is .o
    43                 if [ $arg = '-c' ]; then
     46                if [ "$arg" = '-c' ]; then
    4447                        OUTPUT_O='YES'
    4548                fi
    4649
     
    5053                        NAMED_OUTPUT=$arg
    5154                fi
    5255               
    53                 if [ $arg = '-o' ]; then
     56                if [ "$arg" = '-o' ]; then
    5457                        SKIP='O'
    5558                fi
    5659               
    5760                # Note each file ending by ${SUFFIX} and remember the last one
    5861                # Transform them in .o
    59                 if `echo $arg | grep -q "${SUFFIX}$"`; then
     62                if echo "$arg" | grep -E -q "${SUFFIX}\$"; then
    6063                        LASTFILE=$arg
    61                         OUTPUT+=`echo $arg | sed "s/${SUFFIX}/\.o/"`
    62                         OUTPUT+=' '
     64                        OUTPUT=$OUTPUT`echo "$arg" | \
     65                                sed -E "s:.*/::;s/${SUFFIX}\$/.o/"`" "
    6366                fi
    6467        fi
    6568done
    6669
     70if [ $INTEL = 'YES' ] && [ $POWERPC = 'YES' ]; then
     71        echo >&2 "$0: Not a cross-compiler"
     72        exit 2
     73fi
     74
    6775# What is the output?
    6876
    6977if [ ${NAMED_OUTPUT}"X" != "X" ]; then
     
    7179
    7280elif [ $OUTPUT_O = 'NO' ]; then
    7381        # It is an executable whose is name is the LASTFILE without suffix
    74         OUTPUT=`echo ${LASTFILE} | sed "s/${SUFFIX}//"`
     82        #OUTPUT=`echo "${LASTFILE}" | sed -E "s/${SUFFIX}\$//"`
     83        # No, it is a.out, assuming we are indeed linking (no -E, -S)
     84        OUTPUT='a.out'
    7585fi
    7686
    77 # Othewise, the output is just the ${OUTPUT} variable as computed before
     87# Otherwise, the output is just the ${OUTPUT} variable as computed before
    7888
    7989# For some reason, -dynamiclib and -lpython2.6 are missing when linking
    8090# .so files. Add them, except if -bundle is set (incompatible switches)
    81 if [ `echo $OUTPUT | sed -E 's|.*\.||'` = "so" ] && \
    82         ! `echo $NEWARGS | grep -q bundle`; then
    83         NEWARGS="${NEWARGS} ${PREFIX}/lib/libpython2.6.dylib -dynamiclib"
    84 fi
     91case " $NEWARGS " in
     92        *" -bundle "*) ;;
     93        *) case $OUTPUT in *.so)
     94                NEWARGS="${NEWARGS} ${PREFIX}/lib/libpython2.6.dylib -dynamiclib" ;;
     95        esac ;;
     96esac
    8597
    8698# Now, compile
    8799
    88100if [ $SIZE32 = 'NO' ] && [ $SIZE64 = 'NO' ]; then
    89101        # No size indication given, just proceed with default
    90         if `${COMPILER} $NEWARGS`; then
    91                 exit 0
    92         else
    93                 exit 1
    94         fi
     102        ${COMPILER} $NEWARGS
     103        exit $?
    95104
    96105elif [ $SIZE32 = 'YES' ] && [ $SIZE64 = 'NO' ]; then
    97106        # 32-bit
    98         if `${COMPILER} -m32 $NEWARGS`; then
    99                 exit 0
    100         else
    101                 exit 1
    102         fi
     107        ${COMPILER} -m32 $NEWARGS
     108        exit $?
    103109       
    104110elif [ $SIZE32 = 'NO' ] && [ $SIZE64 = 'YES' ]; then
    105111        # 64-bit
    106         if `${COMPILER} -m64 $NEWARGS`; then
    107                 exit 0
    108         else
    109                 exit 1
    110         fi
     112        ${COMPILER} -m64 $NEWARGS
     113        exit $?
    111114
    112115else
    113116        # Universal case
    114         if `${COMPILER} -m32 $NEWARGS`; then
    115                 for filename in ${OUTPUT}
    116                 do
    117                         mv ${filename} ${filename}.32
    118                 done
    119        
    120                 if `${COMPILER} -m64 $NEWARGS`; then
    121                         for filename in ${OUTPUT}
    122                         do
    123                                 mv ${filename} ${filename}.64
    124                                 if [ $INTEL = 'YES' ]; then
    125                                         lipo -create -arch x86_64 ${filename}.64 \
    126                                                  -arch i386 ${filename}.32 \
    127                                                  -output ${filename}
    128                                 else
    129                                         lipo -create -arch ppc64 ${filename}.64 \
    130                                                  -arch ppc ${filename}.32 \
    131                                                  -output ${filename}
    132                                 fi
    133                        
    134                                 rm -f ${filename}.32 ${filename}.64
    135                         done
     117        ${COMPILER} -m32 $NEWARGS || exit $?
     118        for filename in ${OUTPUT}
     119        do
     120                mv "${filename}" "${filename}.32"
     121        done
     122
     123        ${COMPILER} -m64 $NEWARGS || exit $?
     124        for filename in ${OUTPUT}
     125        do
     126                mv "${filename}" "${filename}.64"
     127        done
     128
     129        for filename in ${OUTPUT}
     130        do
     131                if [ $INTEL = 'YES' ]; then
     132                        lipo -create -arch x86_64 "${filename}.64" \
     133                                 -arch i386 "${filename}.32" \
     134                                 -output "${filename}" || exit $?
    136135                else
    137                         exit 1
     136                        lipo -create -arch ppc64 "${filename}.64" \
     137                                 -arch ppc "${filename}.32" \
     138                                 -output "${filename}" || exit $?
    138139                fi
    139         else
    140                 exit 1
    141         fi
     140       
     141                rm -f "${filename}.32" "${filename}.64"
     142        done
    142143fi
    143144exit 0