#!/bin/bash # set -e ## This script is invoked by Xcode external targets. ## ## We must guarantee no jobserver is passed through since the file-descriptors ## have been clobbered by Xcode. If this is not done then make behaves as if ## it is allowed to run an infinite number of jobs. ## MAKEFLAGS= MFLAGS= ## sanity check - the build system only supports 1 arch at a time archcount=`echo $ARCHS | awk '{ print NF }'` if [ "$archcount" -ne 1 ]; then echo "*********************************************************************" echo "***" echo "*** ERROR: invalid number of architectures: $ARCHS" echo "*** This build system builds one (1) archtecture at a time." echo "***" echo "*********************************************************************" exit 1 fi ## compute if re/configure necessary if [ $EXTERNAL_METHOD != 'xcode' ]; then reconfigure="terminal -> Xcode" elif [ ! -f $EXTERNAL_BUILD/GNUmakefile ]; then reconfigure="no configuration present" elif [ $EXTERNAL_SRC/make/configure.py -nt $EXTERNAL_BUILD/GNUmakefile ]; then reconfigure="configure script was updated" else reconfigure= fi ## perform re/configure if [ -n "$reconfigure" ]; then echo "reconfiguring ($reconfigure)" case "$CONFIGURATION" in debug*) debug="--debug=max --optimize=none" ;; standard*|*) debug= ;; esac ## invoke configure with (hidden) option which indicates conf performed by xcode (set -x; $EXTERNAL_SRC/configure --force $EXTERNAL_CONFARGS \ --build=$EXTERNAL_BUILD --arch=$ARCHS $debug --conf-method=xcode PATH=$PATH ) fi ## compute goals; these correlate with TARGET_NAME and ACTION from Xcode spec="$TARGET_NAME:$ACTION" echo "env specification: $spec" case "$spec" in contrib:clean) goals=contrib.xclean ;; contrib:*) goals=contrib.install ;; external:clean) goals=clean ;; external:*) if [ -z "$EXTERNAL_GOALS" ]; then goals=build else goals="$EXTERNAL_GOALS" fi ;; libhb:clean) goals=libhb.clean ;; libhb:*) goals=libhb.build ;; *) echo "ERROR: invalid env specification: $spec" exit 1 ;; esac ## safeguard against passing blank value which would result in unlimited jobs if [ -z "$EXTERNAL_JOBS" ]; then jobs= else jobs=--jobs=$EXTERNAL_JOBS fi ## log environment as provided by Xcode logdir=$EXTERNAL_BUILD/log if [ ! -d $logdir ]; then mkdir -p $logdir fi env | sort > $logdir/xcodemake.env.txt ## pull the trigger ## must set BUILD.method != terminal to prevent inifinite recursion set -x exec make -C $EXTERNAL_BUILD BUILD.method=xcode $jobs $goals $EXTERNAL_VARS