summaryrefslogtreecommitdiffstats
path: root/src/Makefile
diff options
context:
space:
mode:
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