TARGETS = quest-gtk
# quest-text

all: $(TARGETS)
.PHONY: all


include Config.mk


QUEST_SOURCES := \
	brush.c camera.c clip.c config.c csg.c edbrush.c edit.c edprim.c \
	edsel.c entclass.c entity.c error.c game.c geom.c group.c hook.c map.c \
	matrix.c memory.c plugin.c \
	ql.c qsymbol.c qatom.c qfunc.c qplist.c \
	quest.c sel.c status.c texalign.c \
	texcat.c texdef.c texlock.c token.c trace.c transform.c uid.c undo.c

CMD_SOURCES := \
	basic.c cam.c cbrush.c edit/misc.c edit/select.c edit/move.c \
	edit/clipboard.c rflags.c trans.c texset.c entity.c texmove.c \
	snap.c \
	\
	csg/intersect.c csg/join.c csg/rmhl.c csg/sub.c csg/weld.c \
	\
	games/qengine/q_tex.c games/qengine/qmap.c

QUEST_B := $(addprefix quest/,$(basename $(QUEST_SOURCES)))
QUEST_OBJECTS := $(addsuffix $(Q_O_SUFFIX), $(QUEST_B))
QUEST_DEPS := $(join $(dir $(QUEST_B)),$(addprefix .deps/, $(addsuffix .d, $(notdir $(QUEST_B)))))

CMD_B := $(addprefix cmd/,$(basename $(CMD_SOURCES)))
CMD_OBJECTS := $(addsuffix $(Q_O_SUFFIX), $(CMD_B))
CMD_DEPS := $(join $(dir $(CMD_B)),$(addprefix .deps/, $(addsuffix .d, $(notdir $(CMD_B)))))

OBJECTS := $(QUEST_OBJECTS) $(CMD_OBJECTS)
DEPS := $(QUEST_DEPS) $(CMD_DEPS)


$(QUEST_OBJECTS): %$(Q_O_SUFFIX) : %.c
	$(Q_COMPILE_1)
	$(Q_COMPILE_2:COMPILE_CFLAGS=$(CFLAGS))
	$(Q_COMPILE_3)

$(CMD_OBJECTS): %$(Q_O_SUFFIX) : %.c
	$(Q_COMPILE_1)
	$(Q_COMPILE_2:COMPILE_CFLAGS=-Iquest $(CFLAGS))
	$(Q_COMPILE_3)

QUEST_LIB := libquest$(Q_LIB_SUFFIX)
$(QUEST_LIB): $(QUEST_OBJECTS)
	$(Q_MAKELIB)

CMD_LIB := libquest-cmd$(Q_LIB_SUFFIX)
$(CMD_LIB): $(CMD_OBJECTS)
	$(Q_MAKELIB)


FE_COMMON_SOURCES = \
	signals.c sys.c dir.c input.c unixext.c

FE_COMMON_B := $(addprefix fe/,$(basename $(FE_COMMON_SOURCES)))
FE_COMMON_OBJECTS := $(addsuffix .o, $(FE_COMMON_B))
FE_COMMON_DEPS := $(join $(dir $(FE_COMMON_B)),$(addprefix .deps/, $(addsuffix .d, $(notdir $(FE_COMMON_B)))))

DEPS += $(FE_COMMON_DEPS)

$(FE_COMMON_OBJECTS): %.o : %.c
	$(COMPILE_1)
	$(COMPILE_2:COMPILE_CFLAGS=-Iquest $(CFLAGS))
	$(COMPILE_3)


FE_TEXT_SOURCES := \
	text/error.c text/main.c text/tex.c

FE_TEXT_B := $(addprefix fe/,$(basename $(FE_TEXT_SOURCES)))
FE_TEXT_OBJECTS := $(addsuffix .o, $(FE_TEXT_B))
FE_TEXT_DEPS := $(join $(dir $(FE_TEXT_B)),$(addprefix .deps/, $(addsuffix .d, $(notdir $(FE_TEXT_B)))))

DEPS += $(FE_TEXT_DEPS)

$(FE_TEXT_OBJECTS): %.o : %.c
	$(COMPILE_1)
	$(COMPILE_2:COMPILE_CFLAGS=-I. $(CFLAGS))
	$(COMPILE_3)

quest-text: $(QUEST_LIB) $(CMD_LIB) $(FE_TEXT_OBJECTS) $(FE_COMMON_OBJECTS)
	$(CC) -o $@ $^ -lm


FE_GTK_SOURCES := \
	gl/render.c gl/texture.c \
	$(addprefix gtk/, \
	glade_interface.c glade_support.c ee.c ep.c ge.c cm.c cm_cvar.c \
	input.c error.c gui.c int.c main.c message.c \
	popup.c toolbar.c \
	gl/g_int.c gl/texpick.c gl/g_3d.c \
	)

FE_GTK_B := $(addprefix fe/,$(basename $(FE_GTK_SOURCES)))
FE_GTK_OBJECTS := $(addsuffix .o, $(FE_GTK_B))
FE_GTK_DEPS := $(join $(dir $(FE_GTK_B)),$(addprefix .deps/, $(addsuffix .d, $(notdir $(FE_GTK_B)))))

DEPS += $(FE_GTK_DEPS)

FE_GTK_FLAGS := $(shell gtk-config --cflags)

$(FE_GTK_OBJECTS): %.o : %.c
	$(COMPILE_1)
	$(COMPILE_2:COMPILE_CFLAGS=-I. $(FE_GTK_FLAGS) $(CFLAGS))
	$(COMPILE_3)

quest-gtk: $(QUEST_LIB) $(CMD_LIB) $(FE_GTK_OBJECTS) $(FE_COMMON_OBJECTS)
	$(CC) -o $@ $^ -lgtkgl -lGL -lGLU `gtk-config --libs` -lm


DEP_DIRS := $(sort $(dir $(DEPS)))

$(DEP_DIRS):
	mkdir $@

$(DEPS): $(DEP_DIRS)

ifneq ($(MAKECMDGOALS),clean)
ifneq ($(MAKECMDGOALS),dist-clean)
-include $(DEPS)
endif
endif

clean:
	rm -f $(OBJECTS) $(FE_TEXT_OBJECTS) $(FE_COMMON_OBJECTS) $(FE_GTK_OBJECTS) $(TARGETS) $(QUEST_LIB) $(CMD_LIB) core

dist-clean: clean
	rm -rf $(DEP_DIRS)

.PHONY: clean dist-clean

