-$(BINS) $(LIBS): src/common/libtest.a
-$(OBJS): src/common/test.h
-
-src/common/mtest.o: src/common/mtest.h
-$(MBINS:%=%.o): src/common/mtest.h
-
-IOBJS:=$(filter src/api/%,$(OBJS))
-src/api/main: $(IOBJS)
-src/api/main.OBJS:=$(IOBJS)
-$(IOBJS):CFLAGS+=-pedantic-errors -Werror -Wno-unused -D_XOPEN_SOURCE=700
-$(IOBJS):CFLAGS+=-DX_PS -DX_TPS -DX_SS
-
-%.o: %.c
- $(CC) $(CFLAGS) $($*.CFLAGS) -c -o $@ $< 2>$@.err || echo BUILDERROR $@
-%.s: %.c
- $(CC) $(CFLAGS) $($*.CFLAGS) -S -o $@ $< || echo BUILDERROR $@
-%.lo: %.c
- $(CC) $(CFLAGS) $($*.CFLAGS) -fPIC -DSHARED -c -o $@ $< 2>$@.err || echo BUILDERROR $@
-%.so: %.lo
- $(CC) -shared $(LDFLAGS) $($@.LDFLAGS) -o $@ $< $($*.LOBJS) $(LDLIBS) $($@.LDLIBS) 2>$@.err || echo BUILDERROR $@
-%-static: %.o
- $(CC) -static $(LDFLAGS) $($@.LDFLAGS) -o $@ $< $($*.OBJS) $(LDLIBS) $($@.LDLIBS) 2>$@.err || echo BUILDERROR $@
-%: %.o
- $(CC) $(LDFLAGS) $($@.LDFLAGS) -o $@ $< $($@.OBJS) $(LDLIBS) $($@.LDLIBS) 2>$@.err || echo BUILDERROR $@
+$(B)/common/all: $(B)/common/runtest.exe
+
+$(ERRS): $(B)/common/runtest.exe | $(BDIRS)
+$(BINS) $(LIBS): $(B)/common/libtest.a
+$(OBJS): src/common/test.h | $(BDIRS)
+$(BDIRS):
+ mkdir -p $@
+
+$(B)/common/options.h: src/common/options.h.in
+ $(CC) -E - <$< | sed -e '1,/optiongroups_unistd_end/d' -e '/^#/d' -e '/^[[:space:]]*$$/d' -e 's/^/#define /' >$@
+
+$(B)/common/mtest.o: src/common/mtest.h
+$(math.OBJS): src/common/mtest.h
+
+$(B)/api/main.exe: $(api.OBJS)
+api/main.OBJS:=$(api.OBJS)
+$(api.OBJS):$(B)/common/options.h
+$(api.OBJS):CFLAGS+=-pedantic-errors -Werror -Wno-unused -D_XOPEN_SOURCE=700
+
+all:$(B)/REPORT
+run:$(B)/REPORT
+clean:
+ rm -f $(OBJS) $(BINS) $(LIBS) $(B)/common/libtest.a $(B)/common/runtest.exe $(B)/common/options.h $(B)/*/*.err
+cleanall: clean
+ rm -f $(B)/REPORT $(B)/*/REPORT
+$(B)/REPORT:
+ cat $^ |tee $@
+
+$(B)/%.o:: src/%.c
+ $(CC) $(CFLAGS) $($*.CFLAGS) -c -o $@ $< 2>$@.err || echo BUILDERROR $@; cat $@.err
+$(B)/%.s:: src/%.c
+ $(CC) $(CFLAGS) $($*.CFLAGS) -S -o $@ $< || echo BUILDERROR $@; cat $@.err
+$(B)/%.lo:: src/%.c
+ $(CC) $(CFLAGS) $($*.CFLAGS) -fPIC -DSHARED -c -o $@ $< 2>$@.err || echo BUILDERROR $@; cat $@.err
+$(B)/%.so: $(B)/%.lo
+ $(CC) -shared $(LDFLAGS) $($*.so.LDFLAGS) -o $@ $< $($*.so.LOBJS) $(LDLIBS) $($*.so.LDLIBS) 2>$@.err || echo BUILDERROR $@; cat $@.err
+$(B)/%-static.exe: $(B)/%.o
+ $(CC) -static $(LDFLAGS) $($*-static.LDFLAGS) -o $@ $< $($*-static.OBJS) $(LDLIBS) $($*-static.LDLIBS) 2>$@.ld.err || echo BUILDERROR $@; cat $@.ld.err
+$(B)/%.exe: $(B)/%.o
+ $(CC) $(LDFLAGS) $($*.LDFLAGS) -o $@ $< $($*.OBJS) $(LDLIBS) $($*.LDLIBS) 2>$@.ld.err || echo BUILDERROR $@; cat $@.ld.err