OSDN Git Service

build system: add capability to build Leopard target from Snow Leopard Host
[handbrake-jp/handbrake-jp-git.git] / make / xcodemake
index 2c6c1a8..93c927c 100755 (executable)
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
 #
 
 set -e
@@ -12,52 +12,50 @@ set -e
 MAKEFLAGS=
 MFLAGS=
 
-## re/configure if not configured by Xcode or if missing top-makefile
-if [ $EXTERNAL_METHOD != 'xcode' -o ! -f $EXTERNAL_BUILD/GNUmakefile ]; then
-    ## compute --arch value based on Xcode configuration naming convention
-    case "$CONFIGURATION" in
-    *.i386)
-        arch="--arch=i386"
-        ;;
-    *.x86_64)
-        arch="--arch=x86_64"
-        ;;
-    *.ppc)
-        arch="--arch=ppc"
-        ;;
-    *.ppc64)
-        arch="--arch=ppc64"
-        ;;
-    *)
-        arch=
-        ;;
-    esac
+## 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"
+        debug="--debug=max --optimize=none"
         ;;
-    *)
+    standard*|*)
         debug=
         ;;
     esac
 
     ## invoke configure with (hidden) option which indicates conf performed by xcode
-    $EXTERNAL_SRC/configure --force --build=$EXTERNAL_BUILD $arch $debug \
-        --conf-method=xcode PATH=$PATH $EXTERNAL_CONFARGS
-fi
-
-## safeguard against passing blank value which would result in unlimited jobs
-if [ -z "$EXTERNAL_JOBS" ]; then
-    jobs=
-else
-    jobs=--jobs=$EXTERNAL_JOBS
+    (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"
-
-## compute goals
 case "$spec" in
     contrib:clean)
         goals=contrib.xclean
@@ -87,6 +85,21 @@ case "$spec" in
         ;;
 esac
 
-## handoff
+## 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
-make -C $EXTERNAL_BUILD BUILD.method=xcode $jobs $goals $EXTERNAL_VARS
+exec make -C $EXTERNAL_BUILD BUILD.method=xcode $jobs $goals $EXTERNAL_VARS