#!/bin/sh COMPILER='@@@' SUFFIX='---' PREFIX='&&&' OUTPUT_O='NO' OUTPUT='' NAMED_OUTPUT='' LASTFILE='' INTEL='NO' SIZE32='NO' SIZE64='NO' NEWARGS='' SKIP='NO' for arg in $@ do if [ $SKIP = 'ARCH' ]; then # intercept -arch option and set SIZEXX SKIP='NO' if [ $arg = 'x86_64' ] || [ $arg = 'ppc64' ]; then SIZE64='YES' else SIZE32='YES' fi # which architecture are we compiling for? if [ $arg = 'x86_64' ] || [ $arg = 'i386' ]; then INTEL='YES' fi elif [ $arg = '-arch' ]; then SKIP='ARCH' elif [ $arg = '--version' ]; then ${COMPILER} --version exit 0 elif [ $arg = '-dumpversion' ]; then ${COMPILER} -dumpversion exit 0 else NEWARGS+="$arg " # if the -c option is given, the output is .o if [ $arg = '-c' ]; then OUTPUT_O='YES' fi # if the output file is given by a -o option, record it if [ $SKIP = 'O' ]; then SKIP='NO' NAMED_OUTPUT=$arg fi if [ $arg = '-o' ]; then SKIP='O' fi # Note each file ending by ${SUFFIX} and remember the last one # Transform them in .o if `echo $arg | grep -q "${SUFFIX}$"`; then LASTFILE=$arg OUTPUT+=`echo $arg | sed "s/${SUFFIX}/\.o/"` OUTPUT+=' ' fi fi done # What is the output? if [ ${NAMED_OUTPUT}"X" != "X" ]; then OUTPUT=$NAMED_OUTPUT elif [ $OUTPUT_O = 'NO' ]; then # It is an executable whose is name is the LASTFILE without suffix OUTPUT=`echo ${LASTFILE} | sed "s/${SUFFIX}//"` fi # Othewise, the output is just the ${OUTPUT} variable as computed before # For some reason, -dynamiclib and -lpython2.6 are missing when linking # .so files. Add them, except if -bundle is set (incompatible switches) if [ `echo $OUTPUT | sed -E 's|.*\.||'` = "so" ] && \ ! `echo $NEWARGS | grep -q bundle`; then NEWARGS="${NEWARGS} ${PREFIX}/lib/libpython2.6.dylib -dynamiclib" fi # Now, compile if [ $SIZE32 = 'NO' ] && [ $SIZE64 = 'NO' ]; then # No size indication given, just proceed with default if `${COMPILER} $NEWARGS`; then exit 0 else exit 1 fi elif [ $SIZE32 = 'YES' ] && [ $SIZE64 = 'NO' ]; then # 32-bit if `${COMPILER} -m32 $NEWARGS`; then exit 0 else exit 1 fi elif [ $SIZE32 = 'NO' ] && [ $SIZE64 = 'YES' ]; then # 64-bit if `${COMPILER} -m64 $NEWARGS`; then exit 0 else exit 1 fi else # Universal case if `${COMPILER} -m32 $NEWARGS`; then for filename in ${OUTPUT} do mv ${filename} ${filename}.32 if [ -d "${filename}.dSYM" ]; then mv ${filename}.dSYM ${filename}.dSYM.32 fi done if `${COMPILER} -m64 $NEWARGS`; then for filename in ${OUTPUT} do mv ${filename} ${filename}.64 if [ -d "${filename}.dSYM" ]; then mv ${filename}.dSYM ${filename}.dSYM.64 fi if [ $INTEL = 'YES' ]; then lipo -create -arch x86_64 ${filename}.64 \ -arch i386 ${filename}.32 \ -output ${filename} if [ -d "${filename}.dSYM.32" ] && [ -d "${filename}.dSYM.64" ]; then mkdir -p ${filename}.dSYM/Contents/Resources/DWARF/ cp ${filename}.dSYM.64/Contents/Info.plist ${filename}.dSYM/Contents/ lipo -create -arch x86_64 ${filename}.dSYM.64/Contents/Resources/DWARF/${filename} \ -arch i386 ${filename}.dSYM.32/Contents/Resources/DWARF/${filename} \ -output ${filename}.dSYM/Contents/Resources/DWARF/${filename} rm -f ${filename}.dSYM.32/Contents/Resources/DWARF/${filename} rm -f ${filename}.dSYM.64/Contents/Resources/DWARF/${filename} rm -f ${filename}.dSYM.32/Contents/Info.plist rm -f ${filename}.dSYM.64/Contents/Info.plist rmdir -p ${filename}.dSYM.32/Contents/Resources/DWARF/ rmdir -p ${filename}.dSYM.64/Contents/Resources/DWARF/ fi else lipo -create -arch ppc64 ${filename}.64 \ -arch ppc ${filename}.32 \ -output ${filename} if [ -d "${filename}.dSYM.32" ] && [ -d "${filename}.dSYM.64" ]; then mkdir -p ${filename}.dSYM/Contents/Resources/DWARF/ cp ${filename}.dSYM.64/Contents/Info.plist ${filename}.dSYM/Contents/ lipo -create -arch ppc64 ${filename}.dSYM.64/Contents/Resources/DWARF/${filename} \ -arch ppc ${filename}.dSYM.32/Contents/Resources/DWARF/${filename} \ -output ${filename}.dSYM/Contents/Resources/DWARF/${filename} rm -f ${filename}.dSYM.32/Contents/Resources/DWARF/${filename} rm -f ${filename}.dSYM.64/Contents/Resources/DWARF/${filename} rm -f ${filename}.dSYM.32/Contents/Info.plist rm -f ${filename}.dSYM.64/Contents/Info.plist rmdir -p ${filename}.dSYM.32/Contents/Resources/DWARF/ rmdir -p ${filename}.dSYM.64/Contents/Resources/DWARF/ fi fi rm -f ${filename}.32 ${filename}.64 done else exit 1 fi else exit 1 fi fi exit 0