TESTROOT = ../..
include ${TESTROOT}/include/common.makefile
SHELL = bash
IMAGE_INFO = "__image_info"
ifeq ($(ARCH),x86_64)
IMAGE_INFO = "__objc_imageinfo"
endif
test: test-${FILEARCH}
test-i386: test-macosx
test-x86_64: test-macosx
test-arm: test-good
test-macosx:
${CC} ${CCFLAGS} foo.m -c -o foo.o
${FAIL_IF_BAD_OBJ} foo.o
${CC} ${CCFLAGS} foo.m -c -o foo-gc.o -fobjc-gc
${FAIL_IF_BAD_OBJ} foo-gc.o
${CC} ${CCFLAGS} foo.m -c -o foo-gc-only.o -fobjc-gc-only
${FAIL_IF_BAD_OBJ} foo-gc-only.o
${CC} ${CCFLAGS} bar.m -c -o bar.o
${FAIL_IF_BAD_OBJ} bar.o
${CC} ${CCFLAGS} bar.m -c -o bar-gc.o -fobjc-gc
${FAIL_IF_BAD_OBJ} bar-gc.o
${CC} ${CCFLAGS} bar.m -c -o bar-gc-only.o -fobjc-gc-only
${FAIL_IF_BAD_OBJ} bar-gc-only.o
${CC} ${CCFLAGS} foo.o bar.o runtime.c -dynamiclib -o libfoobar.dylib
${FAIL_IF_BAD_MACHO} libfoobar.dylib
${CC} ${CCFLAGS} foo-gc.o bar-gc.o runtime.c -dynamiclib -o libfoobar.dylib
${FAIL_IF_BAD_MACHO} libfoobar.dylib
otool -o libfoobar.dylib | grep -A4 _image | grep flags | grep 0x2 | ${FAIL_IF_EMPTY}
${CC} ${CCFLAGS} foo-gc-only.o bar-gc-only.o runtime.c -dynamiclib -o libfoobar.dylib
${FAIL_IF_BAD_MACHO} libfoobar.dylib
otool -o libfoobar.dylib | grep -A4 _image | grep flags | grep 0x6 | ${FAIL_IF_EMPTY}
${CC} ${CCFLAGS} foo.o bar-gc.o runtime.c -dynamiclib -o libfoobar.dylib
${FAIL_IF_BAD_MACHO} libfoobar.dylib
otool -o libfoobar.dylib | grep -A4 _image | grep flags | grep 0x[26] | ${FAIL_IF_STDIN}
${CC} ${CCFLAGS} bar-gc.o foo.o runtime.c -dynamiclib -o libfoobar.dylib
${FAIL_IF_BAD_MACHO} libfoobar.dylib
otool -o libfoobar.dylib | grep -A4 _image | grep flags | grep 0x[26] | ${FAIL_IF_STDIN}
${CC} ${CCFLAGS} foo-gc-only.o bar-gc.o runtime.c -dynamiclib -o libfoobar.dylib
${FAIL_IF_BAD_MACHO} libfoobar.dylib
otool -o libfoobar.dylib | grep -A4 _image | grep flags | grep 0x6 | ${FAIL_IF_EMPTY}
${FAIL_IF_SUCCESS} ${CC} ${CCFLAGS} foo.o bar-gc-only.o runtime.c -dynamiclib -o libfoobar.dylib 2> fail.log
${FAIL_IF_SUCCESS} ${CC} ${CCFLAGS} foo-gc.o foo.o runtime.c -dynamiclib -o libfoobar.dylib -Wl,-objc_gc 2> fail.log
${CC} ${CCFLAGS} foo-gc.o bar-gc.o runtime.c -dynamiclib -Wl,-objc_gc_compaction -o libfoobar.dylib
otool -o libfoobar.dylib | grep -A4 _image | grep flags | grep 0x12 | ${FAIL_IF_EMPTY}
${CC} ${CCFLAGS} foo-gc-only.o bar-gc-only.o runtime.c -dynamiclib -Wl,-objc_gc_compaction -o libfoobar.dylib
otool -o libfoobar.dylib | grep -A4 _image | grep flags | grep 0x16 | ${FAIL_IF_EMPTY}
${CC} ${CCFLAGS} foo-gc.o runtime.c -dynamiclib -o libfoo.dylib
${CC} ${CCFLAGS} none.c libfoo.dylib -dynamiclib -o libnone.dylib
size -l libnone.dylib | grep ${IMAGE_INFO} | ${FAIL_IF_STDIN}
${CC} ${CCFLAGS} foo-gc-only.o runtime.c -dynamiclib -o libfoo.dylib
${CC} ${CCFLAGS} none.c libfoo.dylib -dynamiclib -o libnone.dylib
size -l libnone.dylib | grep ${IMAGE_INFO} | ${FAIL_IF_STDIN}
${CC} ${CCFLAGS} foo.o runtime.c -dynamiclib -o libfoo.dylib
${CC} ${CCFLAGS} none.c libfoo.dylib -dynamiclib -o libnone.dylib
size -l libnone.dylib | grep ${IMAGE_INFO} | ${FAIL_IF_STDIN}
${CC} ${CCFLAGS} foo-gc-only.o runtime.c -dynamiclib -o libfoo.dylib
${FAIL_IF_SUCCESS} ${CC} ${CCFLAGS} bar.o runtime.c -dynamiclib libfoo.dylib -o libbar.dylib 2> fail.log
${CC} ${CCFLAGS} foo.o runtime.c -dynamiclib -o libfoo.dylib
${FAIL_IF_SUCCESS} ${CC} ${CCFLAGS} bar-gc-only.o runtime.c -dynamiclib libfoo.dylib -o libbar.dylib 2> fail.log
${PASS_IFF} true
test-good:
${PASS_IFF} true
clean:
rm -rf foo*.o bar*.o libfoobar.dylib fail.log libfoo.dylib libnone.dylib