-kernel_dir:=kernel
-kernel_target:=$(binary)
-kernel_sources:=action.c client.c config.c dispatch.c engine.c event.c \
- extensions.c focus.c frame.c grab.c menu.c openbox.c \
- parse.c plugin.c prop.c screen.c stacking.c timer.c xerror.c \
- lex.yy.c parse.tab.c
-kernel_lex:=parse.l
-kernel_yacc:=parse.y
-kernel_CPPFLAGS:=$(CPPFLAGS) $(GLIB_CFLAGS) $(GMODULE_CFLAGS) $(XFT_CFLAGS) \
- -DG_LOG_DOMAIN=\"Openbox\"
-kernel_LIBS:=$(LIBS) $(GLIB_LIBS) $(GMODULE_LIBS) $(XFT_LIBS)
-kernel_LDFLAGS:=-export-dynamic
-
-kernel_srcdir:=$(srcdir)/$(kernel_dir)
-kernel_lex:=$(addprefix $(kernel_srcdir)/,$(kernel_lex))
-kernel_yacc:=$(addprefix $(kernel_srcdir)/,$(kernel_yacc))
-kernel_target:=$(addprefix $(kernel_dir)/,$(kernel_target))
-kernel_objects:=$(addprefix $(kernel_dir)/,$(kernel_sources:.c=.o))
-kernel_sources:=$(addprefix $(kernel_srcdir)/,$(kernel_sources))
-kernel_deps:=$(addprefix $(depdir)/,$(kernel_objects:.o=.d))
-kernel_depdir:=$(depdir)/$(kernel_dir)
-
-$(kernel_target): $(kernel_objects) $(render_target)
- $(LIBTOOL) --mode=link $(CC) -o $@ $^ $(kernel_LIBS) $(kernel_LDFLAGS)
-
-$(kernel_dir):
- @mkdir $@
-
-$(kernel_dir)/%.o: $(kernel_srcdir)/%.c $(kernel_depdir)/%.d
- $(CC) $(DEFS) $(kernel_CPPFLAGS) $(CFLAGS) -c -o $@ $<
-
-$(kernel_dir)/lex.yy.c: $(kernel_lex)
- cd kernel && \
- $(FLEX) $(notdir $<)
-
-%.tab.h: %.tab.c
-
-$(kernel_dir)/%.tab.c: $(kernel_srcdir)/%.y
- cd kernel && \
- $(BISON) -d $(notdir $<)
-
-$(kernel_depdir)/%.d: $(kernel_srcdir)/%.c $(depdir)
+include build/Makefile.incl
+
+dir = kernel
+
+CPPFLAGS += $(GLIB_CFLAGS) $(GMODULE_CFLAGS) $(XFT_CFLAGS) $(X_CFLAGS) \
+ -DG_LOG_DOMAIN=\"Openbox\"
+LIBS += $(GLIB_LIBS) $(GMODULE_LIBS) $(XFT_LIBS) $(X_LIBS) $(XINERAMA_LIBS)
+LDFLAGS += -export-dynamic
+
+target = openbox3
+sources = action.c client.c dispatch.c engine.c event.c group.c \
+ extensions.c focus.c frame.c grab.c menu.c openbox.c \
+ parse.c plugin.c prop.c screen.c stacking.c timer.c xerror.c \
+ parse.lex.c parse.tab.c
+
+srcdir := $(srcdir)/$(dir)
+target := $(addprefix $(dir)/,$(target))
+objects := $(addprefix $(dir)/,$(sources:.c=.o))
+sources := $(addprefix $(srcdir)/,$(sources))
+deps := $(addprefix $(depdir)/,$(objects:.o=.d))
+depdir := $(depdir)/$(dir)
+
+all: $(target)
+
+$(target): $(objects) render/librender.a
+ $(LINK) -o $@ $^ $(LIBS) $(LDFLAGS)
+
+# kill the implicit .c.y rule
+$(srcdir)/%.c: $(srcdir)/%.y
+ @
+
+$(dir)/%.o: $(srcdir)/%.c $(depdir)/%.d
+ $(COMPILE) -c -o $@ $<
+
+%.lex.c: %.l
+ $(FLEX) -o$@ $<
+
+%.tab.c: %.y
+ $(BISON) -d -o $@ $<
+
+$(depdir)/%.d: $(srcdir)/%.c