summary refs log tree commit diff stats
path: root/src/Makefile
diff options
context:
space:
mode:
authorSoniEx2 <endermoneymod@gmail.com>2019-10-25 18:37:26 -0300
committerSoniEx2 <endermoneymod@gmail.com>2019-10-25 18:37:26 -0300
commitf6b8e76789e428ac264a393fbd60d77499b9abfd (patch)
tree00071db51e3ceb86e2fbce81c55ee136b5ae7ff8 /src/Makefile
parent9d4e28d4265a6a293b18a68ec4d51a4b086b20fa (diff)
Add doc/test framework. HEAD default
Diffstat (limited to 'src/Makefile')
-rw-r--r--src/Makefile50
1 files changed, 50 insertions, 0 deletions
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