Skip to content
This repository has been archived by the owner on Jun 8, 2023. It is now read-only.

Commit

Permalink
Read jspahrsummers/objc-build-scripts into script/
Browse files Browse the repository at this point in the history
  • Loading branch information
jspahrsummers committed Feb 26, 2013
1 parent ac186e4 commit d12c9f3
Show file tree
Hide file tree
Showing 5 changed files with 170 additions and 0 deletions.
Empty file added script/README.md
Empty file.
9 changes: 9 additions & 0 deletions script/bootstrap
Original file line number Original file line Diff line number Diff line change
@@ -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 $?
114 changes: 114 additions & 0 deletions script/cibuild
Original file line number Original file line Diff line number Diff line change
@@ -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
12 changes: 12 additions & 0 deletions script/targets.awk
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,12 @@
BEGIN {
FS = "\n";
}

/Targets:/ {
while (getline && $0 != "") {
if ($0 ~ /Tests/) continue;

sub(/^ +/, "");
print "'" $0 "'";
}
}
35 changes: 35 additions & 0 deletions script/xcodebuild.awk
Original file line number Original file line Diff line number Diff line change
@@ -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 d12c9f3

Please sign in to comment.