Permalink
Browse files

Added jspahrsummers/objc-build-scripts

  • Loading branch information...
1 parent f8e2d26 commit f4a4f3bc70ab7f6216853be85fc521e0b1d4d838 @jspahrsummers jspahrsummers committed May 5, 2013
Showing with 210 additions and 0 deletions.
  1. +18 −0 script/LICENSE.md
  2. +20 −0 script/README.md
  3. +11 −0 script/bootstrap
  4. +114 −0 script/cibuild
  5. +12 −0 script/targets.awk
  6. +35 −0 script/xcodebuild.awk
View
@@ -0,0 +1,18 @@
+**Copyright (c) 2013 Justin Spahr-Summers**
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
View
@@ -0,0 +1,20 @@
+These scripts are primarily meant to support the use of
+[Janky](https://github.com/github/janky). To use them, read the contents of this
+repository into a `script` folder:
+
+```
+$ git remote add objc-build-scripts https://github.com/jspahrsummers/objc-build-scripts.git
+$ git fetch objc-build-scripts
+$ git read-tree --prefix=script/ -u objc-build-scripts/master
+```
+
+Then commit the changes to incorporate the scripts into your own repository's
+history. You can also freely tweak the scripts for your specific project's
+needs.
+
+To bring in upstream changes later:
+
+```
+$ git fetch -p objc-build-scripts
+$ git merge -Xsubtree=script objc-build-scripts/master
+```
View
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+SCRIPT_DIR=$(dirname "$0")
+cd "$SCRIPT_DIR/.."
+
+set -o errexit
+
+echo "*** Updating submodules..."
+git submodule sync --quiet
+git submodule update --init
+git submodule foreach --recursive --quiet "git submodule sync --quiet && git submodule update --init"
View
@@ -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" || exit $?
+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
@@ -0,0 +1,12 @@
+BEGIN {
+ FS = "\n";
+}
+
+/Targets:/ {
+ while (getline && $0 != "") {
+ if ($0 ~ /Tests/) continue;
+
+ sub(/^ +/, "");
+ print "'" $0 "'";
+ }
+}
View
@@ -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;
+}

0 comments on commit f4a4f3b

Please sign in to comment.