]> git.tdb.fi Git - gldbg.git/blobdiff - Makefile
Rewrite the Makefile to have proper dependencies and stuff
[gldbg.git] / Makefile
index c4dedb2484142439f6f193c85223c73e6e651bc8..294618646c0f3f46133aab054430a25955758cf8 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,46 +1,99 @@
 # $Id$
 
-CFLAGS = -Igensrc -ggdb -Wall -Wextra
-CXXFLAGS = -Igensrc -ggdb -Wall -Wextra
+CPPFLAGS := -I.
+CFLAGS := -ggdb -Wall -Wextra
+CXXFLAGS := $(CFLAGS)
 
-PACKAGES_gldbg = mspcore mspstrings mspio mspfs
-CXXFLAGS_gldbg = $(shell pkg-config --cflags $(PACKAGES_gldbg))
-LIBS_gldbg = $(shell pkg-config --libs $(PACKAGES_gldbg)) -lreadline
+PACKAGES_gldbg := mspcore mspstrings mspio mspfs
+
+SOURCES_libgldbg := source/gldecoder.c \
+       source/glprint.c \
+       source/enums.c \
+       source/arraysize.c \
+       source/tmpalloc.c
+SOURCES_glwrap := source/glwrap.c \
+       source/glwrap_funcs.c \
+       source/arraysize.c
+SOURCES_gldump := source/gldump.c
+SOURCES_gldbg := source/gldbg.cpp \
+       source/commandinterpreter.cpp \
+       source/tracer.cpp \
+       source/process.cpp \
+       source/glstate.cpp \
+       source/texturestate.cpp \
+       source/bufferstate.cpp \
+       source/profiler.cpp \
+       source/arraystate.cpp
+TEMPLATES := source/functions.enum.t \
+       source/gldecoder.funcs.t \
+       source/gldecoder.struct.t \
+       source/glprint.funcs.t \
+       source/glwrap.funcs.t
+
+objs = $(patsubst source/%.cpp,temp/%.o,$(patsubst source/%.c,temp/%.o,$(1)))
+deps = $(patsubst source/%.cpp,temp/%.d,$(patsubst source/%.c,temp/%.d,$(1)))
+gen = $(patsubst source/%.t,gensrc/%,$(1))
+
+GENSOURCES := $(call gen,$(TEMPLATES))
+SOURCES_all := $(sort $(SOURCES_libgldbg) $(SOURCES_glwrap) $(SOURCES_gldump) $(SOURCES_gldbg))
+
+OBJECTS_libgldbg := $(call objs,$(SOURCES_libgldbg))
+OBJECTS_glwrap := $(call objs,$(SOURCES_glwrap))
+OBJECTS_gldump := $(call objs,$(SOURCES_gldump))
+OBJECTS_gldbg := $(call objs,$(SOURCES_gldbg))
+
+OBJECTS_all := $(call objs,$(SOURCES_all))
+DEPS_all := $(call deps,$(SOURCES_all))
+
+$(OBJECTS_gldbg): CXXFLAGS += $(shell pkg-config --cflags $(PACKAGES_gldbg))
+gldbg: LIBS += $(shell pkg-config --libs $(PACKAGES_gldbg)) -lreadline
+gldump gldbg: LIBS += ./libgldbg.a
 
 all: glwrap.so gldump gldbg
 
-glwrap.so: source/glwrap.o source/arraysize.o
+glwrap.so: $(OBJECTS_glwrap)
        $(CC) -shared -o $@ $^ $(LIBS) $(LDFLAGS)
 
-gldump: source/gldecoder.o source/gldump.o source/glprint.o source/enums.o source/arraysize.o source/tmpalloc.o
+gldump: $(OBJECTS_gldump) libgldbg.a
        $(CC) -o $@ $^ $(LIBS) $(LDFLAGS)
 
-gldbg: source/gldbg.o source/gldecoder.o source/glprint.o source/commandinterpreter.o source/tracer.o source/process.o source/enums.o source/arraysize.o source/tmpalloc.o source/glstate.o source/texturestate.o source/bufferstate.o source/profiler.o source/arraystate.o
-       $(CXX) -o $@ $^ $(LIBS_gldbg) $(LIBS) $(LDFLAGS)
-
-source/glwrap.o: source/functions.h gensrc/functions.enum gensrc/glwrap.funcs
-source/gldecoder.o: source/functions.h gensrc/gldecoder.struct gensrc/gldecoder.funcs gensrc/gldecoder.funcs
-source/gldump.o: source/gldecoder.h gensrc/gldecoder.struct source/glprint.h
-source/glprint.o: source/arraysize.h gensrc/glprint.funcs gensrc/gldecoder.struct
-source/enums.o: gensrc/enums.table
-source/gldbg.o: source/gldbg.h source/gldecoder.h source/tracer.h source/commandinterpreter.h source/glstate.h source/profiler.h
-source/tracer.o: source/gldecoder.h source/glprint.h
-source/commandinterpreter.o: source/gldbg.h source/glstate.h
-source/process.o: source/process.h
-source/glstate.o: source/glstate.h source/gldecoder.h source/texturestate.h source/bufferstate.h
-source/texturestate.o: source/texturestate.h
-source/bufferstate.o: source/arraystate.h source/bufferstate.h source/enums.h
-source/arraystate.o: source/arraystate.h source/bufferstate.h
-
-%.o: %.cpp
-       $(CXX) -c $(CXXFLAGS) $(CXXFLAGS_gldbg) -o $@ $<
+gldbg: $(OBJECTS_gldbg) libgldbg.a
+       $(CXX) -o $@ $^ $(LIBS) $(LDFLAGS)
+
+libgldbg.a: $(OBJECTS_libgldbg)
+       $(AR) rc $@ $^
+
+temp/%.o: source/%.c temp/.created
+       $(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ $<
+
+temp/%.o: source/%.cpp temp/.created
+       $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) -o $@ $<
+
+temp/.created:
+       mkdir -p temp
+       touch $@
 
 gensrc/%: source/%.t gensrc/.created genwrap.py gl.files gl.tm gl.io gl.spec glx.files glx.tm glx.io glx.spec glxext.spec
        python ./genwrap.py $< gl.files glx.files >$@
 
-gensrc/enums.table: enum.spec genenum.py
+gensrc/enums.table: gensrc/.created enum.spec genenum.py
        python ./genenum.py enum.spec >$@
 
 gensrc/.created:
        mkdir -p gensrc
        touch $@
+
+-include $(DEPS_all)
+
+temp/%.d: source/%.c temp/.created
+       $(CC) $(CPPFLAGS) -MM -MF $@ -MT $(patsubst source/%.c,temp/%.o,$<) -MG $<
+
+temp/%.d: source/%.cpp temp/.created
+       $(CXX) $(CPPFLAGS) -MM -MF $@ -MT $(patsubst source/%.cpp,temp/%.o,$<) -MG $<
+
+.PHONY: clean
+clean:
+       $(RM) $(DEPS_all)
+       $(RM) $(OBJECTS_all)
+       $(RM) gensrc/enums.table $(GENSOURCES)
+       $(RM) glwrap.so libgldbg.a gldump gldbg