X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fforeign.test.sh;h=c9989bc6faefc7e38ea8708ea52657c75a1dbf42;hb=1f03c7f326823245708a84af86b31ac72bdb1742;hp=40ed2aea64e5c5e5b823f9ceb52316172a38fd59;hpb=a8781d6c5b68a6b08315e98f70a407d992e07363;p=sbcl.git diff --git a/tests/foreign.test.sh b/tests/foreign.test.sh index 40ed2ae..c9989bc 100644 --- a/tests/foreign.test.sh +++ b/tests/foreign.test.sh @@ -14,61 +14,131 @@ # absolutely no warranty. See the COPYING and CREDITS files for # more information. +. ./expect.sh +. ./subr.sh + +use_test_subdirectory + echo //entering foreign.test.sh # simple way to make sure we're not punting by accident: # setting PUNT to anything other than 104 will make non-dlopen # and non-linkage-table platforms fail this -PUNT=104 +PUNT=$EXIT_TEST_WIN -testfilestem=${TMPDIR:-/tmp}/sbcl-foreign-test-$$ +## Make some shared object files to test with. -## Make a little shared object files to test with. - -build_so() { +build_so() ( echo building $1.so - if [ "$(uname -m)" = x86_64 ]; then - CFLAGS="$CFLAGS -fPIC" - fi - if [ "$(uname)" = Darwin ]; then + set +u + case "`uname -m`" in + x86_64|amd64|mips|mips64) + CFLAGS="$CFLAGS -fPIC" + ;; + esac + if [ "`uname`" = Darwin ]; then SO_FLAGS="-bundle" + if run_sbcl --eval '(sb-ext:quit :unix-status #+x86-64 0 #-x86-64 1)'; then + CFLAGS="$CFLAGS -arch x86_64" + fi else SO_FLAGS="-shared" fi cc -c $1.c -o $1.o $CFLAGS - ld $SO_FLAGS -o $1.so $1.o + ld $SO_FLAGS -o $1.so $1.o +) + +# We want to bail out in case any of these Unix programs fails. +set -e + +cat > $TEST_FILESTEM.c < $testfilestem.c -echo 'int numberish = 42;' >> $testfilestem.c -echo 'int nummish(int x) { return numberish + x; }' >> $testfilestem.c -echo 'short negative_short() { return -1; }' >> $testfilestem.c -echo 'int negative_int() { return -2; }' >> $testfilestem.c -echo 'long negative_long() { return -3; }' >> $testfilestem.c -build_so $testfilestem +int long_sap_test1(int *p1, long long l1) { + return (l1 == (3 + powish(2,*p1))); +} + +int long_sap_test2(int *p1, int i1, long long l1) { + return (l1 == (3 + powish(2,*p1))); +} + +long long return_long_long() { + return powish(2,33); +} +EOF + +build_so $TEST_FILESTEM -echo 'int foo = 13;' > $testfilestem-b.c -echo 'int bar() { return 42; }' >> $testfilestem-b.c -build_so $testfilestem-b +echo 'int foo = 13;' > $TEST_FILESTEM-b.c +echo 'int bar() { return 42; }' >> $TEST_FILESTEM-b.c +build_so $TEST_FILESTEM-b -echo 'int foo = 42;' > $testfilestem-b2.c -echo 'int bar() { return 13; }' >> $testfilestem-b2.c -build_so $testfilestem-b2 +echo 'int foo = 42;' > $TEST_FILESTEM-b2.c +echo 'int bar() { return 13; }' >> $TEST_FILESTEM-b2.c +build_so $TEST_FILESTEM-b2 -echo 'int late_foo = 43;' > $testfilestem-c.c -echo 'int late_bar() { return 14; }' >> $testfilestem-c.c -build_so $testfilestem-c +echo 'int late_foo = 43;' > $TEST_FILESTEM-c.c +echo 'int late_bar() { return 14; }' >> $TEST_FILESTEM-c.c +build_so $TEST_FILESTEM-c ## Foreign definitions & load -cat > $testfilestem.def.lisp < $TEST_FILESTEM.base.lisp < $testfilestem.def.lisp < $testfilestem.def.lisp < $testfilestem.def.lisp < $TEST_FILESTEM.fast.lisp +cat $TEST_FILESTEM.base.lisp >> $TEST_FILESTEM.fast.lisp + +echo "(declaim (optimize space))" > $TEST_FILESTEM.small.lisp +cat $TEST_FILESTEM.base.lisp >> $TEST_FILESTEM.small.lisp + # Test code -cat > $testfilestem.test.lisp < $TEST_FILESTEM.test.lisp < $testfilestem.test.lisp < $testfilestem.test.lisp < $TEST_FILESTEM.addr.heap.c < $TEST_FILESTEM.alien.enum.lisp <