blob: 5e2a545c7ae004654963f6ec282d0332c7655f57 [file] [log] [blame]
#!/bin/sh -x
# Smoke tests a Swift installation package.
# Set these to the paths of the OS X SDK and toolchain.
SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk
TOOLCHAIN=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain
# FIXME: OSX 10.9 bug <rdar://problem/13228632>: TMPDIR doesn't get set sometimes.
if [ ! "$TMPDIR" ]; then
TMPDIR=/tmp
fi
# Wipe out stale module caches.
find "$TMPDIR" -name "*.pcm" -exec rm '{}' ';'
find /var/tmp -name "*.pcm" -exec rm '{}' ';'
find /tmp -name "*.pcm" -exec rm '{}' ';'
find "$(getconf DARWIN_USER_CACHE_DIR)" -name "*.pcm" -exec rm '{}' ';'
# The package name should be given as the first argument.
PACKAGE_NAME="$1"
if [ \! "$PACKAGE_NAME" ]; then
echo "No package name given! Usage: $0 package.tar.gz"
exit 1
elif [ \! -f "$PACKAGE_NAME" ]; then
echo "Package $PACKAGE_NAME does not exist!"
exit 1
fi
# We use a sudoable script to darwinup install and uninstall the
# package.
INSTALL_PACKAGE_HELPER="$(dirname "$0")/install-package-helper.sh"
if [ \! -x "$INSTALL_PACKAGE_HELPER" ]; then
echo "Unable to find package installer helper $INSTALL_PACKAGE_HELPER!"
exit 1
fi
# Install the package.
if ! sudo -n "$INSTALL_PACKAGE_HELPER" install "$PACKAGE_NAME"; then
echo "Failed to install package!"
exit 1
fi
#
# Do tests.
#
# Ensure that basic REPL stuff works.
# FIXME: REPL bug--when stdout is redirected but stderr is a terminal, no
# output appears on stdout.
RESULT=0
if ! /usr/bin/swift -repl 2>"$TMPDIR/test_repl_1_err_$$" >"$TMPDIR/test_repl_1_$$" <<REPL
println("Hello world")
REPL
then
echo "swift failed in REPL!"
RESULT=1
elif [ "$(cat "$TMPDIR/test_repl_1_$$")" != "Hello world" ]; then
echo "REPL did not output expected result!"
RESULT=1
fi
if ! /usr/bin/swift -repl -sdk "$SYSROOT" 2>"$TMPDIR/test_repl_2_err_$$" >"$TMPDIR/test_repl_2_$$" <<REPL
import Foundation
{(s : NSString) in println(s)}("Hello world")
REPL
then
echo "swift failed in REPL with SDK!"
RESULT=1
elif [ "$(cat "$TMPDIR/test_repl_2_$$")" != "Hello world" ]; then
echo "REPL with SDK did not output expected result!"
RESULT=1
fi
# Ensure that we can compile and link a Swift program and that the Swift
# libs are all findable by -l flags.
cat >"$TMPDIR/test_compile_$$.swift" <<TEST_COMPILE
import Foundation
var s : NSString = "world"
print("Hello ")
println(s)
TEST_COMPILE
if ! /usr/bin/swift -sdk "$SYSROOT" -c "$TMPDIR/test_compile_$$.swift" \
-o "$TMPDIR/test_compile_$$.o"
then
echo "Failed to compile Swift program!"
RESULT=1
elif ! "$TOOLCHAIN/usr/bin/clang" "$TMPDIR/test_compile_$$.o" \
-o "$TMPDIR/test_compile_$$" \
-L/usr/lib/swift/macosx -Wl,-rpath -Wl,/usr/lib/swift/macosx \
-framework Cocoa -lswiftCore -lswiftFoundation -lswiftObjectiveC \
-lswiftAppKit
then
echo "Failed to link Swift program!"
RESULT=1
elif [ "$($TMPDIR/test_compile_$$)" != "Hello world" ]; then
echo "Running Swift program did not give expected result!"
RESULT=1
# Ensure that we can link a Swift program even if -isysroot points to an SDK.
elif ! "$TOOLCHAIN/usr/bin/clang" "$TMPDIR/test_compile_$$.o" \
-isysroot "$SYSROOT" \
-o "$TMPDIR/test_compile_2_$$" \
-L/usr/lib/swift/macosx -Wl,-rpath -Wl,/usr/lib/swift/macosx \
-framework Cocoa -lswiftCore -lswiftFoundation -lswiftObjectiveC \
-lswiftAppKit
then
echo "Failed to link Swift program with -isysroot!"
RESULT=1
elif [ "$($TMPDIR/test_compile_2_$$)" != "Hello world" ]; then
echo "Running Swift program linked with -isysroot did not give expected result!"
RESULT=1
fi
#
# Done with tests.
#
# Uninstall the package.
if ! sudo -n "$INSTALL_PACKAGE_HELPER" uninstall "$PACKAGE_NAME"; then
echo "Failed to uninstall package!"
exit 1
fi
exit "$RESULT"