Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Read jspahrsummers/objc-build-scripts into script/

  • Loading branch information...
commit d12c9f38c369f69d87a8a3653d5fdfe8c85da7f4 1 parent ac186e4
@jspahrsummers jspahrsummers authored
View
0  script/README.md
No changes.
View
9 script/bootstrap
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+SCRIPT_DIR=$(dirname "$0")
+cd "$SCRIPT_DIR/.."
+
+echo "*** Updating submodules..."
+git submodule sync --quiet || exit $?
+git submodule update --init || exit $?
+git submodule foreach --recursive --quiet "git submodule sync --quiet && git submodule update --init" || exit $?
View
114 script/cibuild
@@ -0,0 +1,114 @@
+#!/bin/bash
+
+SCRIPT_DIR=$(dirname "$0")
+cd "$SCRIPT_DIR/.."
+
+##
+## Configuration Variables
+##
+
+# The build configuration to use.
+if [ -z "$XCCONFIGURATION" ]
+then
+ XCCONFIGURATION="Release"
+fi
+
+# The workspace to build.
+#
+# If not set and no workspace is found, the -workspace flag will not be passed
+# to xcodebuild.
+if [ -z "$XCWORKSPACE" ]
+then
+ XCWORKSPACE=$(ls -d *.xcworkspace 2>/dev/null | head -n 1)
+fi
+
+# A bootstrap script to run before building.
+#
+# If this file does not exist, it is not considered an error.
+BOOTSTRAP="$SCRIPT_DIR/bootstrap"
+
+# A whitespace-separated list of default targets or schemes to build, if none
+# are specified on the command line.
+#
+# Individual names can be quoted to avoid word splitting.
+DEFAULT_TARGETS=
+
+# Extra build settings to pass to xcodebuild.
+XCODEBUILD_SETTINGS="TEST_AFTER_BUILD=YES"
+
+##
+## Build Process
+##
+
+if [ -z "$*" ]
+then
+ # lol recursive shell script
+ if [ -n "$DEFAULT_TARGETS" ]
+ then
+ echo "$DEFAULT_TARGETS" | xargs "$SCRIPT_DIR/cibuild"
+ else
+ xcodebuild -list | awk -f "$SCRIPT_DIR/targets.awk" | xargs "$SCRIPT_DIR/cibuild"
+ fi
+
+ exit $?
+fi
+
+if [ -f "$BOOTSTRAP" ]
+then
+ echo "*** Bootstrapping..."
+ bash "$BOOTSTRAP"
+fi
+
+echo "*** The following targets will be built:"
+
+for target in "$@"
+do
+ echo "$target"
+done
+
+echo "*** Cleaning all targets..."
+xcodebuild -alltargets clean OBJROOT="$PWD/build" SYMROOT="$PWD/build" $XCODEBUILD_SETTINGS
+
+run_xcodebuild ()
+{
+ local scheme=$1
+
+ if [ -n "$XCWORKSPACE" ]
+ then
+ xcodebuild -workspace "$XCWORKSPACE" -scheme "$scheme" -configuration "$XCCONFIGURATION" build OBJROOT="$PWD/build" SYMROOT="$PWD/build" $XCODEBUILD_SETTINGS
+ else
+ xcodebuild -scheme "$scheme" -configuration "$XCCONFIGURATION" build OBJROOT="$PWD/build" SYMROOT="$PWD/build" $XCODEBUILD_SETTINGS
+ fi
+
+ local status=$?
+
+ return $status
+}
+
+build_scheme ()
+{
+ local scheme=$1
+
+ run_xcodebuild "$scheme" 2>&1 | awk -f "$SCRIPT_DIR/xcodebuild.awk"
+
+ local awkstatus=$?
+ local xcstatus=${PIPESTATUS[0]}
+
+ if [ "$xcstatus" -eq "65" ]
+ then
+ # This probably means that there's no scheme by that name. Give up.
+ echo "*** Error building scheme $scheme -- perhaps it doesn't exist"
+ elif [ "$awkstatus" -eq "1" ]
+ then
+ return $awkstatus
+ fi
+
+ return $xcstatus
+}
+
+echo "*** Building..."
+
+for scheme in "$@"
+do
+ build_scheme "$scheme" || exit $?
+done
View
12 script/targets.awk
@@ -0,0 +1,12 @@
+BEGIN {
+ FS = "\n";
+}
+
+/Targets:/ {
+ while (getline && $0 != "") {
+ if ($0 ~ /Tests/) continue;
+
+ sub(/^ +/, "");
+ print "'" $0 "'";
+ }
+}
View
35 script/xcodebuild.awk
@@ -0,0 +1,35 @@
+# Exit statuses:
+#
+# 0 - No errors found.
+# 1 - Build or test failure. Errors will be logged automatically.
+# 2 - Untestable target. Retry with the "build" action.
+
+BEGIN {
+ status = 0;
+}
+
+{
+ print;
+ fflush(stdout);
+}
+
+/is not valid for Testing/ {
+ exit 2;
+}
+
+/[0-9]+: (error|warning):/ {
+ errors = errors $0 "\n";
+}
+
+/(TEST|BUILD) FAILED/ {
+ status = 1;
+}
+
+END {
+ if (length(errors) > 0) {
+ print "\n*** All errors:\n" errors;
+ }
+
+ fflush(stdout);
+ exit status;
+}
Please sign in to comment.
Something went wrong with that request. Please try again.