From f6b8e76789e428ac264a393fbd60d77499b9abfd Mon Sep 17 00:00:00 2001 From: SoniEx2 Date: Fri, 25 Oct 2019 18:37:26 -0300 Subject: Add doc/test framework. --- src/Makefile | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 src/Makefile (limited to 'src/Makefile') diff --git a/src/Makefile b/src/Makefile new file mode 100644 index 0000000..de6a9e7 --- /dev/null +++ b/src/Makefile @@ -0,0 +1,50 @@ +.POSIX: + +# by default we use system nm but make does not provide nm +NM= nm +MKDIR= mkdir -p + +ALL_DOCTEST_O= chatprotocol.doctest +ALL_CODE_O= chatprotocol.code + +.SUFFIXES: + +default: all + +all: chatprotocol doc doctest + +chatprotocol: $(ALL_CODE_O) + $(CC) $(CFLAGS) $(LDFLAGS) -o chatprotocol $(ALL_CODE_O) + +doc: doc.o doctest.a + $(CC) $(CFLAGS) $(LDFLAGS) -o doc doc.o doctest.a + +doctest: doctest.o doctest.a + $(CC) $(CFLAGS) $(LDFLAGS) -o doctest doctest.o doctest.a + +doc.o: doc.c doctest.h doctest.declare doctest.include + $(CC) $(CFLAGS) -DDOCS -UDOCTEST -c doc.c + +doctest.o: doctest.c doc.c doctest.h doctest.declare doctest.include + $(CC) $(CFLAGS) -DDOCTEST -c doctest.c + +doctest.declare: doctest.a + $(NM) -P -g $? | sed -n -e 's/^\([^[:blank:]]*_mkdocs\)[[:blank:]]..*/extern void \1(struct docs *doc);/p' > $@ + +doctest.include: doctest.a + $(NM) -P -g $? | sed -n -e 's/^\([^[:blank:]]*_mkdocs\)[[:blank:]]..*/\1(\&doc);/p' > $@ + +doctest.a: $(ALL_DOCTEST_O) + $(MKDIR) $(@D)/doctestobj + for file in $(?:.doctest=); do cp -p $$file.doctest $(@D)/doctestobj/$$(basename $$file).o; done + cd $(@D)/doctestobj && $(AR) $(ARFLAGS) -u ../$(@F) $(ALL_DOCTEST_O:.doctest=.o) + +.SUFFIXES: .c .doctest .code + +.c.doctest: + $(CC) $(CFLAGS) -DDOCTEST -c $< + mv $*.o $*.doctest + +.c.code: + $(CC) $(CFLAGS) -UDOCS -UDOCTEST -c $< + mv $*.o $*.code -- cgit 1.4.1