Permalink
Browse files

Update objc-build-scripts

  • Loading branch information...
jspahrsummers committed Nov 10, 2013
1 parent 82680af commit c03669ee17802f33a5d871cbab212d20d18466c7
Showing with 218 additions and 30 deletions.
  1. +69 −7 script/bootstrap
  2. +117 −23 script/cibuild
  3. +12 −0 script/schemes.awk
  4. +20 −0 script/xctool.awk
View
@@ -1,11 +1,73 @@
#!/bin/bash
-SCRIPT_DIR=$(dirname "$0")
-cd "$SCRIPT_DIR/.."
+export SCRIPT_DIR=$(dirname "$0")
-set -o errexit
+##
+## Configuration Variables
+##
-echo "*** Updating submodules..."
-git submodule sync --quiet
-git submodule update --init
-git submodule foreach --recursive --quiet "git submodule sync --quiet && git submodule update --init"
+config ()
+{
+ # A whitespace-separated list of executables that must be present and locatable.
+ : ${REQUIRED_TOOLS="xctool"}
+
+ export REQUIRED_TOOLS
+}
+
+##
+## Bootstrap Process
+##
+
+main ()
+{
+ config
+
+ if [ -n "$REQUIRED_TOOLS" ]
+ then
+ echo "*** Checking dependencies..."
+ check_deps
+ fi
+
+ local submodules=$(git submodule status 2>/dev/null)
+ if [ -n "$submodules" ]
+ then
+ echo "*** Updating submodules..."
+ update_submodules
+ fi
+}
+
+check_deps ()
+{
+ for tool in $REQUIRED_TOOLS
+ do
+ which -s "$tool"
+ if [ "$?" -ne "0" ]
+ then
+ echo "*** Error: $tool not found. Please install it and bootstrap again."
+ exit 1
+ fi
+ done
+}
+
+bootstrap_submodule ()
+{
+ local bootstrap="script/bootstrap"
+
+ if [ -e "$bootstrap" ]
+ then
+ echo "*** Bootstrapping $name..."
+ "$bootstrap" >/dev/null
+ else
+ update_submodules
+ fi
+}
+
+update_submodules ()
+{
+ git submodule sync --quiet && git submodule update --init && git submodule foreach --quiet bootstrap_submodule
+}
+
+export -f bootstrap_submodule
+export -f update_submodules
+
+main
View
@@ -1,40 +1,134 @@
#!/bin/bash
cd "$(dirname "$0")/../ReactiveCocoaFramework"
-SCRIPT_DIR=../script
+export SCRIPT_DIR=../script
##
## Configuration Variables
##
-# The build configuration to use.
-if [ -z "$XCCONFIGURATION" ]
-then
- XCCONFIGURATION="Release"
-fi
+SCHEMES="$@"
-# A bootstrap script to run before building.
-#
-# If this file does not exist, it is not considered an error.
-BOOTSTRAP="$SCRIPT_DIR/bootstrap"
+config ()
+{
+ # The workspace to build.
+ #
+ # If not set and no workspace is found, the -workspace flag will not be passed
+ # to `xctool`.
+ #
+ # Only one of `XCWORKSPACE` and `XCODEPROJ` needs to be set. The former will
+ # take precedence.
+ : ${XCWORKSPACE=$(find_pattern "*.xcworkspace")}
-# Extra build settings to pass to xcodebuild.
-XCODEBUILD_SETTINGS="TEST_AFTER_BUILD=YES"
+ # The project to build.
+ #
+ # If not set and no project is found, the -project flag will not be passed
+ # to `xctool`.
+ #
+ # Only one of `XCWORKSPACE` and `XCODEPROJ` needs to be set. The former will
+ # take precedence.
+ : ${XCODEPROJ=$(find_pattern "*.xcodeproj")}
+
+ # A bootstrap script to run before building.
+ #
+ # If this file does not exist, it is not considered an error.
+ : ${BOOTSTRAP="$SCRIPT_DIR/bootstrap"}
+
+ # Extra options to pass to xctool.
+ : ${XCTOOL_OPTIONS="RUN_CLANG_STATIC_ANALYZER=NO"}
+
+ # A whitespace-separated list of default schemes to build.
+ #
+ # Individual names can be quoted to avoid word splitting.
+ : ${SCHEMES:=$(xcodebuild -list 2>/dev/null | awk -f "$SCRIPT_DIR/schemes.awk")}
+
+ export XCWORKSPACE
+ export XCODEPROJ
+ export BOOTSTRAP
+ export XCTOOL_OPTIONS
+ export SCHEMES
+}
##
## Build Process
##
-if [ -f "$BOOTSTRAP" ]
-then
- echo "*** Bootstrapping..."
- bash "$BOOTSTRAP" || exit $?
-fi
+main ()
+{
+ config
+
+ if [ -f "$BOOTSTRAP" ]
+ then
+ echo "*** Bootstrapping..."
+ "$BOOTSTRAP" || exit $?
+ fi
+
+ echo "*** The following schemes will be built:"
+ echo "$SCHEMES" | xargs -n 1 echo " "
+ echo
+
+ echo "$SCHEMES" | xargs -n 1 | (
+ local status=0
+
+ while read scheme
+ do
+ build_scheme "$scheme" || status=1
+ done
+
+ exit $status
+ )
+}
+
+find_pattern ()
+{
+ ls -d $1 2>/dev/null | head -n 1
+}
+
+run_xctool ()
+{
+ if [ -n "$XCWORKSPACE" ]
+ then
+ xctool -workspace "$XCWORKSPACE" $XCTOOL_OPTIONS "$@" 2>&1
+ elif [ -n "$XCODEPROJ" ]
+ then
+ xctool -project "$XCODEPROJ" $XCTOOL_OPTIONS "$@" 2>&1
+ else
+ echo "*** No workspace or project file found."
+ exit 1
+ fi
+}
+
+parse_build ()
+{
+ awk -f "$SCRIPT_DIR/xctool.awk" 2>&1 >/dev/null
+}
+
+build_scheme ()
+{
+ local scheme=$1
+
+ echo "*** Cleaning $scheme..."
+ run_xctool -scheme "$scheme" clean >/dev/null || exit $?
+
+ echo "*** Building and testing $scheme..."
+ echo
+
+ # Determine whether this target needs to be built using the iOS simulator SDK.
+ local sdkflag=
+ local action=test
+ run_xctool -scheme "$scheme" run-tests | parse_build
+
+ if [ "$?" -eq "1" ]
+ then
+ sdkflag="-sdk iphonesimulator"
+ action=build
+ fi
+
+ run_xctool $sdkflag -scheme "$scheme" $action
+}
-echo "*** Cleaning all targets..."
-xcodebuild -alltargets clean OBJROOT="$PWD/build" SYMROOT="$PWD/build" $XCODEBUILD_SETTINGS
+export -f build_scheme
+export -f run_xctool
+export -f parse_build
-echo "*** Building..."
-xcodebuild -configuration "$XCCONFIGURATION" -scheme ReactiveCocoa build OBJROOT="$PWD/build" SYMROOT="$PWD/build" $XCODEBUILD_SETTINGS || exit $?
-xcodebuild -configuration "$XCCONFIGURATION" -scheme ReactiveCocoa-Mac build OBJROOT="$PWD/build" SYMROOT="$PWD/build" $XCODEBUILD_SETTINGS || exit $?
-xcodebuild -configuration "$XCCONFIGURATION" -sdk iphonesimulator -scheme ReactiveCocoa-iOS build OBJROOT="$PWD/build" SYMROOT="$PWD/build" $XCODEBUILD_SETTINGS || exit $?
+main
View
@@ -0,0 +1,12 @@
+BEGIN {
+ FS = "\n";
+}
+
+/Targets:/ {
+ while (getline && $0 != "") {
+ if ($0 ~ /Test/) continue;
+
+ sub(/^ +/, "");
+ print "'" $0 "'";
+ }
+}
View
@@ -0,0 +1,20 @@
+# Exit statuses:
+#
+# 0 - No errors found.
+# 1 - Wrong SDK. Retry with SDK `iphonesimulator`.
+
+BEGIN {
+ status = 0;
+}
+
+{
+ print;
+}
+
+/Testing with the '(.+)' SDK is not yet supported/ {
+ status = 1;
+}
+
+END {
+ exit status;
+}

0 comments on commit c03669e

Please sign in to comment.