- echo "CC $<"
- $(CC) $(CFLAGS) -c -o $@ $<
-
-all: src/cfgparse.y.o src/cfgparse.yy.o ${FILES}
- echo "LINK i3"
- $(CC) -o i3 ${FILES} src/cfgparse.y.o src/cfgparse.yy.o $(LDFLAGS)
- echo ""
- echo "SUBDIR i3-msg"
- $(MAKE) TOPDIR=$(TOPDIR) -C i3-msg
- echo "SUBDIR i3-input"
- $(MAKE) TOPDIR=$(TOPDIR) -C i3-input
-
-src/cfgparse.yy.o: src/cfgparse.l
- echo "LEX $<"
- flex -i -o$(@:.o=.c) $<
- $(CC) $(CFLAGS) -c -o $@ $(@:.o=.c)
-
-src/cfgparse.y.o: src/cfgparse.y
- echo "YACC $<"
- bison --debug --verbose -b $(basename $< .y) -d $<
- $(CC) $(CFLAGS) -c -o $@ $(<:.y=.tab.c)
+ echo "[i3] CC $<"
+ $(CC) $(CPPFLAGS) $(CFLAGS) -DLOGLEVEL="((uint64_t)1 << $(shell awk '/$(shell basename $< .c)/ { print NR; exit 0; }' loglevels.tmp))" -c -o $@ $<
+
+all: i3 subdirs
+
+i3: libi3/libi3.a src/cfgparse.y.o src/cfgparse.yy.o src/cmdparse.y.o src/cmdparse.yy.o ${FILES}
+ echo "[i3] LINK i3"
+ $(CC) $(LDFLAGS) -o $@ $(filter-out libi3/libi3.a,$^) $(LIBS)
+
+libi3/%.a: libi3/*.c
+ $(MAKE) -C libi3
+
+subdirs:
+ for dir in $(SUBDIRS); do \
+ echo ""; \
+ echo "MAKE $$dir"; \
+ $(MAKE) -C $$dir; \
+ done
+
+loglevels.h:
+ echo "[i3] LOGLEVELS"
+ for file in $$(ls src/*.c src/*.y src/*.l | grep -v 'cfgparse.\(tab\|yy\).c'); \
+ do \
+ echo $$(basename $$file .c); \
+ done > loglevels.tmp
+ (echo "char *loglevels[] = {"; for file in $$(cat loglevels.tmp); \
+ do \
+ echo "\"$$file\", "; \
+ done; \
+ echo "};") > include/loglevels.h;
+
+src/cfgparse.yy.o: src/cfgparse.l src/cfgparse.y.o ${HEADERS}
+ echo "[i3] LEX $<"
+ $(FLEX) -i -o$(@:.o=.c) $<
+ $(CC) $(CPPFLAGS) $(CFLAGS) -DLOGLEVEL="(1 << $(shell awk '/cfgparse.l/ { print NR }' loglevels.tmp))" -c -o $@ $(@:.o=.c)
+
+src/cmdparse.yy.o: src/cmdparse.l src/cmdparse.y.o ${HEADERS}
+ echo "[i3] LEX $<"
+ $(FLEX) -Pcmdyy -i -o$(@:.o=.c) $<
+ $(CC) $(CPPFLAGS) $(CFLAGS) -DLOGLEVEL="(1 << $(shell awk '/cmdparse.l/ { print NR }' loglevels.tmp))" -c -o $@ $(@:.o=.c)
+
+
+src/cfgparse.y.o: src/cfgparse.y ${HEADERS}
+ echo "[i3] YACC $<"
+ $(BISON) --debug --verbose -b $(basename $< .y) -d $<
+ $(CC) $(CPPFLAGS) $(CFLAGS) -DLOGLEVEL="(1 << $(shell awk '/cfgparse.y/ { print NR }' loglevels.tmp))" -c -o $@ $(<:.y=.tab.c)
+
+src/cmdparse.y.o: src/cmdparse.y ${HEADERS}
+ echo "[i3] YACC $<"
+ $(BISON) -p cmdyy --debug --verbose -b $(basename $< .y) -d $<
+ $(CC) $(CPPFLAGS) $(CFLAGS) -DLOGLEVEL="(1 << $(shell awk '/cmdparse.y/ { print NR }' loglevels.tmp))" -c -o $@ $(<:.y=.tab.c)
+