TESTROOT = ../..
include ${TESTROOT}/include/common.makefile
SHELL = bash
LD_R = ${LD} -arch ${ARCH} -r
FAIL_IF_OLD = grep -v has-category-class-properties | ${FAIL_IF_STDIN}
FAIL_IF_NEW = grep has-category-class-properties | ${FAIL_IF_STDIN}
REALLY_FAIL_IF_NEW = grep has-category-class-properties | ${FAIL_IF_STDIN}
FAIL_IF_DIAGNOSTICS = ${FAIL_IF_STDIN}
FAIL_IF_NO_DIAGNOSTICS = egrep 'warning.*category metadata' | ${FAIL_IF_EMPTY}
ifeq (${ARCH},i386)
FAIL_IF_NEW = ${FAIL_IF_OLD}
FAIL_IF_NO_DIAGNOSTICS = ${FAIL_IF_DIAGNOSTICS}
endif
all:
${CC} ${CCFLAGS} -c class.m -o class.o
${CC} ${CCFLAGS} -c -DCATEGORY=1 -DCLASS_PROPERTY=1 cat.m -o cat-with-class-prop.o
${CC} ${CCFLAGS} -c -DCATEGORY=1 -DCLASS_PROPERTY=0 cat.m -o cat-without-class-prop.o
${CC} ${CCFLAGS} -c -DCATEGORY=0 -DCLASS_PROPERTY=0 cat.m -o nocat.o
${CC} ${CCFLAGS} -c -DCATEGORY=0 -DCLASS_PROPERTY=0 -x c cat.m -o noobjc.o
${OBJCIMAGEINFO} class.o cat-with-class-prop.o cat-without-class-prop.o nocat.o | ${FAIL_IF_OLD}
size -m -l nocat.o | egrep '(__image_info|__objc_imageinfo)' | ${FAIL_IF_EMPTY}
size -m -l noobjc.o | egrep '(__image_info|__objc_imageinfo)' | ${FAIL_IF_STDIN}
cp -f cat-without-class-prop.o old-cat.o
cp -f nocat.o old-nocat.o
cp -f class.o old-class.o
${OBJCIMAGEINFO} -has-category-class-properties old-cat.o old-class.o old-nocat.o | ${REALLY_FAIL_IF_NEW}
${LD_R} class.o cat-with-class-prop.o -o class__cat-with-class-prop.o 2>&1 | ${FAIL_IF_DIAGNOSTICS}
${LD_R} class.o cat-without-class-prop.o -o class__cat-without-class-prop.o 2>&1 | ${FAIL_IF_DIAGNOSTICS}
${LD_R} class.o nocat.o -o class__nocat.o 2>&1 | ${FAIL_IF_DIAGNOSTICS}
${LD_R} class.o noobjc.o -o class__noobjc.o 2>&1 | ${FAIL_IF_DIAGNOSTICS}
${LD_R} class.o old-nocat.o -o class__old-nocat.o 2>&1 | ${FAIL_IF_DIAGNOSTICS}
${OBJCIMAGEINFO} class__cat-with-class-prop.o | ${FAIL_IF_OLD}
${OBJCIMAGEINFO} class__cat-without-class-prop.o | ${FAIL_IF_OLD}
${OBJCIMAGEINFO} class__nocat.o | ${FAIL_IF_OLD}
${OBJCIMAGEINFO} class__noobjc.o | ${FAIL_IF_OLD}
${OBJCIMAGEINFO} class__old-nocat.o | ${FAIL_IF_OLD}
${LD_R} class.o old-cat.o -o class__old-cat.o 2>&1 | ${FAIL_IF_DIAGNOSTICS}
${OBJCIMAGEINFO} class__old-cat.o | ${FAIL_IF_NEW}
${LD_R} class.o old-cat.o cat-with-class-prop.o -o class__old-cat__cat-with-class-prop.o 2>&1 | ${FAIL_IF_NO_DIAGNOSTICS}
${OBJCIMAGEINFO} class__old-cat__cat-with-class-prop.o | ${FAIL_IF_NEW}
${LD_R} class.o old-cat.o cat-without-class-prop.o -o class__old-cat__cat-without-class-prop.o 2>&1 | ${FAIL_IF_DIAGNOSTICS}
${OBJCIMAGEINFO} class__old-cat__cat-without-class-prop.o | ${FAIL_IF_NEW}
${LD_R} old-class.o old-cat.o -o old-class__old-cat.o 2>&1 | ${FAIL_IF_DIAGNOSTICS}
${OBJCIMAGEINFO} old-class__old-cat.o | ${FAIL_IF_NEW}
${LD_R} old-class.o nocat.o -o old-class__nocat.o 2>&1 | ${FAIL_IF_DIAGNOSTICS}
${LD_R} old-class.o noobjc.o -o old-class__noobjc.o 2>&1 | ${FAIL_IF_DIAGNOSTICS}
${LD_R} old-class.o old-nocat.o -o old-class__old-nocat.o 2>&1 | ${FAIL_IF_DIAGNOSTICS}
${OBJCIMAGEINFO} old-class__nocat.o | ${FAIL_IF_OLD}
${OBJCIMAGEINFO} old-class__noobjc.o | ${FAIL_IF_OLD}
${OBJCIMAGEINFO} old-class__old-nocat.o | ${FAIL_IF_OLD}
${LD_R} old-class.o cat-without-class-prop.o -o old-class__cat-without-class-prop.o 2>&1 | ${FAIL_IF_DIAGNOSTICS}
${LD_R} old-class.o cat-with-class-prop.o -o old-class__cat-with-class-prop.o 2>&1 | ${FAIL_IF_DIAGNOSTICS}
${OBJCIMAGEINFO} old-class__cat-without-class-prop.o | ${FAIL_IF_OLD}
${OBJCIMAGEINFO} old-class__cat-with-class-prop.o | ${FAIL_IF_OLD}
${LD_R} old-class.o old-cat.o cat-with-class-prop.o -o old-class__old-cat__cat-with-class-prop.o 2>&1 | ${FAIL_IF_NO_DIAGNOSTICS}
${OBJCIMAGEINFO} old-class__old-cat__cat-with-class-prop.o | ${FAIL_IF_NEW}
${LD_R} old-class.o old-cat.o cat-without-class-prop.o -o old-class__old-cat__cat-without-class-prop.o 2>&1 | ${FAIL_IF_DIAGNOSTICS}
${OBJCIMAGEINFO} old-class__old-cat__cat-without-class-prop.o | ${FAIL_IF_NEW}
${PASS_IFF} true
clean:
rm -rf *.o