#
# Quake2 Makefile - 
#
# Nov '97 by Zoid <zoid@idsoftware.com>
# Dec '01 by Steven Fuller <relnev@icculus.org>
# Jan '02 by Jamie Wilkinson <jaq@spacepants.org>
# Mar '04 by Ashwin Bharambe <ashu@cs.cmu.edu>
# Apr '04 by Jeff Pang <jeffpang@cs.cmu.edu>

# start of configurable options
#
# Ashwin: disabled many of the options in this Makefile because we 
#         don't really have the SDL source code here.
# 
# Here are your build options, no more will be added!
# (Note: not all options are available for all platforms).
# quake2 (uses OSS for sound, cdrom ioctls for cd audio) is automatically built.
# RELEASE = {debug|release}
RELEASE = release

# game$(ARCH).so is automatically built.
BUILD_SDLQUAKE2=NO	# sdlquake2 executable (uses SDL for cdrom and sound)
BUILD_SVGA=NO		# SVGAlib driver. Seems to work fine.
BUILD_X11=YES		# X11 software driver. Works somewhat ok.
BUILD_GLX=YES		# X11 GLX driver. Works somewhat ok.
BUILD_FXGL=NO		# FXMesa driver. Not tested. (used only for V1 and V2).
BUILD_SDL=NO		# SDL software driver. Works fine for some people.
BUILD_SDLGL=NO		# SDL OpenGL driver. Works fine for some people.
BUILD_CTFDLL=NO		# gamei386.so for ctf
# i can add support for building xatrix and rogue libs if needed

# this nice line comes from the linux kernel makefile
ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc/ -e s/sparc64/sparc/ -e s/arm.*/arm/ -e s/sa110/arm/ -e s/alpha/axp/)

PWD := $(shell pwd)
INCLUDES :=-I$(PWD)/client -I$(PWD)/server -I$(PWD)/dg -I$(PWD)/acesrc -I$(PWD)/game -I$(PWD)/qcommon -I$(PWD)/linux -I$(PWD)/ref_gl -I$(PWD)/ref_soft

CC=gcc
CPP=g++

# (hopefully) end of configurable options
VERSION=3.21

# Jeff: I don't think this will work anymore from any directory except .
MOUNT_DIR=.

BUILD_DEBUG_DIR=debug$(ARCH)

######## ASHWIN's HACK -- changed BUILD_RELEASE_DIR from release/ to edebug/ 
BUILD_RELEASE_DIR=debug$(ARCH)
######## DANGEROUS

CLIENT_DIR=$(MOUNT_DIR)/client
SERVER_DIR=$(MOUNT_DIR)/server
REF_SOFT_DIR=$(MOUNT_DIR)/ref_soft
REF_GL_DIR=$(MOUNT_DIR)/ref_gl
COMMON_DIR=$(MOUNT_DIR)/qcommon
LINUX_DIR=$(MOUNT_DIR)/linux
GAME_DIR=$(MOUNT_DIR)/game
CTF_DIR=$(MOUNT_DIR)/ctf
XATRIX_DIR=$(MOUNT_DIR)/xatrix

MERC_DIR=../Merc
COL_DIR=../Colyseus

BASE_CFLAGS=-Dstricmp=strcasecmp -I$(MERC_DIR) -I$(COL_DIR) -I/usr/local/include -w  -Wno-unused -pipe #-pedantic
BASE_CFLAGS+=-I. -DGAME_HARD_LINKED

ifneq ($(ARCH),i386)
  BASE_CFLAGS+=-DC_ONLY
endif

DEBUG_CFLAGS=$(BASE_CFLAGS) -g -DDEBUG

RELEASE_CFLAGS=$(BASE_CFLAGS) -ffast-math -funroll-loops \
	-fomit-frame-pointer -fexpensive-optimizations -DNDEBUG \
	-DBENCHMARK_REQUIRED -DREQUIRE_ASSERTIONS

ifeq ($(ARCH),i386)
RELEASE_CFLAGS+=-O2 -malign-loops=2 -malign-jumps=2 -malign-functions=2
# compiler bugs with gcc 2.96 and 3.0.1 can cause bad builds with heavy opts.
#RELEASE_CFLAGS=$(BASE_CFLAGS) -O6 -m486 -ffast-math -funroll-loops \
#	-fomit-frame-pointer -fexpensive-optimizations -malign-loops=2 \
#	-malign-jumps=2 -malign-functions=2
endif

LDFLAGS=-lm -ldl -lpthread -L$(MERC_DIR) -L$(COL_DIR) -lcolyseus-wan -lz -lgmp

SVGALDFLAGS=-lvga

XCFLAGS=
XLDFLAGS=-L/usr/X11R6/lib -lX11 -lXext -lXxf86dga -lXxf86vm

SDLCFLAGS=$(shell sdl-config --cflags)
SDLLDFLAGS=$(shell sdl-config --libs)

FXGLCFLAGS=
FXGLLDFLAGS=-L/usr/local/glide/lib -L/usr/X11/lib -L/usr/local/lib \
	-L/usr/X11R6/lib -lX11 -lXext -lGL -lvga

GLXCFLAGS=
GLXLDFLAGS=-L/usr/X11R6/lib -lX11 -lXext -lXxf86dga -lXxf86vm

SDLGLCFLAGS=$(SDLCFLAGS) -DOPENGL
SDLGLLDFLAGS=$(shell sdl-config --libs)

SHLIBEXT=so

SHLIBCFLAGS=-fPIC
SHLIBLDFLAGS=-shared

# added $(ARCH) here as make would munge the quoting in BASE_CFLAGS above
DO_CC=$(CPP) -DARCH=\""$(ARCH)"\" $(CFLAGS) -o $@ -c $<
# changed because we need a static library
DO_SHLIB_CC=rm -f $(BUILDDIR)/$<.cpp; ln -s $(shell pwd)/$< $(BUILDDIR)/$<.cpp; $(CPP) $(INCLUDES) -include magic.h -DARCH=\""$(ARCH)"\" $(CFLAGS) -o $@ -c $(BUILDDIR)/$<.cpp
DO_RENDER_CC=$(CC) -DARCH=\""$(ARCH)"\" $(CFLAGS) $(SHLIBCFLAGS) -o $@ -c $<
DO_GL_SHLIB_CC=$(CC) -DARCH=\""$(ARCH)"\" $(CFLAGS) $(SHLIBCFLAGS) $(GLCFLAGS) -o $@ -c $<
DO_AS=$(CC) -DARCH=\""$(ARCH)"\" $(CFLAGS) -DELF -x assembler-with-cpp -o $@ -c $<
DO_SHLIB_AS=$(CC) -DARCH=\""$(ARCH)"\" $(CFLAGS) $(SHLIBCFLAGS) -DELF -x assembler-with-cpp -o $@ -c $<

#############################################################################
# SETUP AND BUILD
#############################################################################

.PHONY : targets build_debug build_release clean clean-debug clean-release clean2

TARGETS=$(MOUNT_DIR)/quake2 
#$(MOUNT_DIR)/baseq2/game$(ARCH).$(SHLIBEXT)

ifeq ($(strip $(BUILD_CTFDLL)),YES)
 TARGETS += $(BUILDDIR)/ctf/game$(ARCH).$(SHLIBEXT)
endif

 ifeq ($(strip $(BUILD_SDLQUAKE2)),YES)
  TARGETS += $(BUILDDIR)/sdlquake2
 endif

# svgalib just doesn't work with non-i386 at the moment, so don't bother
ifeq ($(ARCH),i386)
 ifeq ($(strip $(BUILD_SVGA)),YES)
  TARGETS += $(BUILDDIR)/ref_soft.$(SHLIBEXT)
 endif
endif

 ifeq ($(strip $(BUILD_X11)),YES)
  TARGETS += $(BUILDDIR)/ref_softx.$(SHLIBEXT)
 endif

 ifeq ($(strip $(BUILD_GLX)),YES)
  TARGETS += $(BUILDDIR)/ref_glx.$(SHLIBEXT)
 endif

 ifeq ($(strip $(BUILD_FXGL)),YES)
  TARGETS += $(BUILDDIR)/ref_gl.$(SHLIBEXT)
 endif

 ifeq ($(strip $(BUILD_SDL)),YES)
  TARGETS += $(BUILDDIR)/ref_softsdl.$(SHLIBEXT)
 endif

 ifeq ($(strip $(BUILD_SDLGL)),YES)
  TARGETS += $(BUILDDIR)/ref_sdlgl.$(SHLIBEXT)
 endif

#############################################################################
# MAIN
#############################################################################

ifeq ($(strip $(RELEASE)),debug)
 BUILDDIR = $(BUILD_DEBUG_DIR)
 CFLAGS = $(DEBUG_CFLAGS)
else
 BUILDDIR = $(BUILD_RELEASE_DIR)
 CFLAGS = $(RELEASE_CFLAGS)
endif

all: precompile make_dirs targets

precompile:
	@-rm -f $(BUILDDIR)/version.o

make_dirs:
	@-mkdir -p $(BUILDDIR) \
		$(BUILDDIR)/qcommon \
		$(BUILDDIR)/client \
		$(BUILDDIR)/server \
		$(BUILDDIR)/linux \
		$(BUILDDIR)/ref_soft \
		$(BUILDDIR)/ref_gl \
		$(BUILDDIR)/game \
		$(BUILDDIR)/acesrc \
		$(BUILDDIR)/dg \
		$(BUILDDIR)/ctf

list_dirs := $(BUILDDIR)/qcommon \
		$(BUILDDIR)/client \
		$(BUILDDIR)/server \
		$(BUILDDIR)/linux \
		$(BUILDDIR)/ref_soft \
		$(BUILDDIR)/ref_gl \
		$(BUILDDIR)/game \
		$(BUILDDIR)/acesrc \
		$(BUILDDIR)/dg \
		$(BUILDDIR)/ctf

targets: $(TARGETS)

#############################################################################
# DEPENDENCIES
#############################################################################

# make dependency files:
$(BUILDDIR)/%.d: %.cpp
	@echo "+ Generating deps for $<"
	@$(CPP) -x c++ -include magic.h -DARCH=\""$(ARCH)"\" $(CFLAGS) \
		-MM $< -MT "$(BUILDDIR)/$(<:.cpp=.o)" > $@

$(BUILDDIR)/%.d: %.c
	@echo "+ Generating deps for $<"
	@$(CPP) -x c++ -include magic.h -DARCH=\""$(ARCH)"\" $(CFLAGS) \
		-MM $< -MT "$(BUILDDIR)/$(<:.c=.o)" > $@

$(BUILDDIR)/%.o: %.cpp $(BUILDDIR)/%.d
	@echo "* Compiling $<"; 
	@$(CPP) $(INCLUDES) -include magic.h -DARCH=\""$(ARCH)"\" $(CFLAGS) -o $@ -c $<

$(BUILDDIR)/%.o: %.c $(BUILDDIR)/%.d
	@echo "* Compiling $<"
	@rm -f $(BUILDDIR)/$<.cpp
	@ln -s $(shell pwd)/$< $(BUILDDIR)/$<.cpp
	@$(CPP) $(INCLUDES) -include magic.h -DARCH=\""$(ARCH)"\" $(CFLAGS) -o $@ -c $(BUILDDIR)/$<.cpp

#############################################################################
# GAME
#############################################################################

ORIG_SRC = \
	$(GAME_DIR)/g_ai.c \
	$(GAME_DIR)/g_chase.c \
	$(GAME_DIR)/p_client.c \
	$(GAME_DIR)/g_cmds.c \
	$(GAME_DIR)/g_svcmds.c \
	$(GAME_DIR)/g_combat.c \
	$(GAME_DIR)/g_func.c \
	$(GAME_DIR)/g_items.c \
	$(GAME_DIR)/g_main.c \
	$(GAME_DIR)/g_misc.c \
	$(GAME_DIR)/g_monster.c \
	$(GAME_DIR)/g_phys.c \
	$(GAME_DIR)/g_save.c \
	$(GAME_DIR)/g_spawn.c \
	$(GAME_DIR)/g_target.c \
	$(GAME_DIR)/g_trigger.c \
	$(GAME_DIR)/g_turret.c \
	$(GAME_DIR)/g_utils.c \
	$(GAME_DIR)/g_weapon.c \
	$(GAME_DIR)/m_actor.c \
	$(GAME_DIR)/m_berserk.c \
	$(GAME_DIR)/m_boss2.c \
	$(GAME_DIR)/m_boss3.c \
	$(GAME_DIR)/m_boss31.c \
	$(GAME_DIR)/m_boss32.c \
	$(GAME_DIR)/m_brain.c \
	$(GAME_DIR)/m_chick.c \
	$(GAME_DIR)/m_flipper.c \
	$(GAME_DIR)/m_float.c \
	$(GAME_DIR)/m_flyer.c \
	$(GAME_DIR)/m_gladiator.c \
	$(GAME_DIR)/m_gunner.c \
	$(GAME_DIR)/m_hover.c \
	$(GAME_DIR)/m_infantry.c \
	$(GAME_DIR)/m_insane.c \
	$(GAME_DIR)/m_medic.c \
	$(GAME_DIR)/m_move.c \
	$(GAME_DIR)/m_mutant.c \
	$(GAME_DIR)/m_parasite.c \
	$(GAME_DIR)/m_soldier.c \
	$(GAME_DIR)/m_supertank.c \
	$(GAME_DIR)/m_tank.c \
	$(GAME_DIR)/p_hud.c \
	$(GAME_DIR)/p_trail.c \
	$(GAME_DIR)/p_view.c \
	$(GAME_DIR)/p_weapon.c \
	$(GAME_DIR)/q_shared.c \
	$(GAME_DIR)/m_flash.c

ACEDIR = $(MOUNT_DIR)/acesrc

ACEBOT_SRC = \
	$(ACEDIR)/acebot_ai.c \
	$(ACEDIR)/acebot_cmds.c \
	$(ACEDIR)/acebot_compress.c \
	$(ACEDIR)/acebot_items.c \
	$(ACEDIR)/acebot_movement.c \
	$(ACEDIR)/acebot_nodes.c \
	$(ACEDIR)/acebot_spawn.c \

DG_SRC = \
	version.c \
	$(GAME_DIR)/../dg/dg_main.c \
	$(GAME_DIR)/../dg/dg_metadata.c \
	$(GAME_DIR)/../dg/dg_types.c \
	$(GAME_DIR)/../dg/dg_delta_tables.c \
	$(GAME_DIR)/../dg/dg_delta_encoding.c \
	$(GAME_DIR)/../dg/DG_Edict.cpp \
	$(GAME_DIR)/../dg/DG_ObjStore.cpp \
	$(GAME_DIR)/../dg/QuakeAdaptor.cpp \
	$(GAME_DIR)/../dg/dg_logs.cpp \
	$(GAME_DIR)/../dg/dg_bbox.cpp \
	$(GAME_DIR)/../dg/dg_pubsubsim.cpp \
	$(GAME_DIR)/../dg/dg_playablemaparea.cpp \
	$(GAME_DIR)/../dg/dg_viz.cpp \
	$(GAME_DIR)/../dg/dg_demo.cpp \
	$(GAME_DIR)/../dg/dg_test.cpp 

# HACK: eliminate the ./ in-front of (some) of the source files...
GAME_SRC_PREF = $(ORIG_SRC) $(ACEBOT_SRC) $(DG_SRC)
GAME_SRC = $(patsubst ./%,%,$(GAME_SRC_PREF))

# HACK: there must be a better way to do patsubst for {c,cpp} here...
GAME_OBJS_C = $(patsubst %.c,$(BUILDDIR)/%.o,$(GAME_SRC))
GAME_OBJS   = $(patsubst %.cpp,$(BUILDDIR)/%.o,$(GAME_OBJS_C))
GAME_DEPS_C = $(patsubst %.c,$(BUILDDIR)/%.d,$(GAME_SRC))
GAME_DEPS   = $(patsubst %.cpp,$(BUILDDIR)/%.d,$(GAME_DEPS_C))

ifneq ($(MAKECMDGOALS),clean)
$(shell mkdir -p $(list_dirs))
-include $(GAME_DEPS)
endif

#$(MOUNT_DIR)/baseq2/game$(ARCH).$(SHLIBEXT) : $(GAME_OBJS)
#	$(CPP) $(CFLAGS) $(SHLIBLDFLAGS) -o $@ $(GAME_OBJS)

#############################################################################
# CLIENT/SERVER
#############################################################################

CLIENT_SRCS := $(wildcard client/*.c)
CLIENT_OBJS_1 := $(patsubst client,$(BUILDDIR),$(CLIENT_SRCS))
CLIENT_OBJS := $(patsubst %.c,%.o,$(CLIENT_OBJS_1))

SERVER_SRCS := $(wildcard server/*.c)
SERVER_OBJS_1 := $(patsubst server,$(BUILDDIR),$(SERVER_SRCS))
SERVER_OBJS := $(patsubst %.c,%.o,$(SERVER_OBJS_1))

QUAKE2_SRC_PREF = \
	$(CLIENT_DIR)/cl_cin.c \
	$(CLIENT_DIR)/cl_ents.c \
	$(CLIENT_DIR)/cl_fx.c \
	$(CLIENT_DIR)/cl_input.c \
	$(CLIENT_DIR)/cl_inv.c \
	$(CLIENT_DIR)/cl_main.c \
	$(CLIENT_DIR)/cl_parse.c \
	$(CLIENT_DIR)/cl_pred.c \
	$(CLIENT_DIR)/cl_tent.c \
	$(CLIENT_DIR)/cl_scrn.c \
	$(CLIENT_DIR)/cl_view.c \
	$(CLIENT_DIR)/cl_newfx.c \
	$(CLIENT_DIR)/console.c \
	$(CLIENT_DIR)/keys.c \
	$(CLIENT_DIR)/menu.c \
	$(CLIENT_DIR)/snd_dma.c \
	$(CLIENT_DIR)/snd_mem.c \
	$(CLIENT_DIR)/snd_mix.c \
	$(CLIENT_DIR)/qmenu.c \
	\
	$(COMMON_DIR)/cmd.c \
	$(COMMON_DIR)/cmodel.c \
	$(COMMON_DIR)/common.c \
	$(COMMON_DIR)/crc.c \
	$(COMMON_DIR)/cvar.c \
	$(COMMON_DIR)/files.c \
	$(COMMON_DIR)/md4.c \
	$(COMMON_DIR)/net_chan.c \
	$(COMMON_DIR)/pmove.c \
	\
	$(SERVER_DIR)/sv_ccmds.c \
	$(SERVER_DIR)/sv_ents.c \
	$(SERVER_DIR)/sv_game.c \
	$(SERVER_DIR)/sv_init.c \
	$(SERVER_DIR)/sv_main.c \
	$(SERVER_DIR)/sv_send.c \
	$(SERVER_DIR)/sv_user.c \
	$(SERVER_DIR)/sv_world.c \
	\
	$(LINUX_DIR)/q_shlinux.c \
	$(LINUX_DIR)/vid_menu.c \
	$(LINUX_DIR)/vid_so.c \
	$(LINUX_DIR)/sys_linux.c \
	$(LINUX_DIR)/glob.c \
	$(LINUX_DIR)/net_udp.c \
	$(LINUX_DIR)/cd_linux.c \
	$(LINUX_DIR)/snd_linux.c \

QUAKE2_SRC = $(patsubst ./%,%,$(QUAKE2_SRC_PREF))

QUAKE2_OBJS_C = $(patsubst %.c,$(BUILDDIR)/%.o,$(QUAKE2_SRC))
QUAKE2_OBJS   = $(patsubst %.cpp,$(BUILDDIR)/%.o,$(QUAKE2_OBJS_C))
QUAKE2_DEPS_C = $(patsubst %.c,$(BUILDDIR)/%.d,$(QUAKE2_SRC))
QUAKE2_DEPS   = $(patsubst %.cpp,$(BUILDDIR)/%.d,$(QUAKE2_DEPS_C))

ifneq ($(MAKECMDGOALS),clean)
-include $(QUAKE2_DEPS)
endif

# more i386 asm
ifeq ($(ARCH),i386)
QUAKE2_AS_OBJS = $(BUILDDIR)/client/snd_mixa.o
else
QUAKE2_AS_OBJS =  #blank
endif

mercury: #$(MERC_DIR)/libcolyseus.so

$(MOUNT_DIR)/quake2 : $(QUAKE2_OBJS) $(QUAKE2_AS_OBJS) $(GAME_OBJS) mercury
	@echo "+ Linking $@"
	@$(CPP) $(CFLAGS) -o $@ $(QUAKE2_OBJS) $(QUAKE2_AS_OBJS) $(GAME_OBJS) $(LDFLAGS)

$(BUILDDIR)/sdlquake2 : $(QUAKE2_OBJS) $(QUAKE2_SDL_OBJS) $(QUAKE2_AS_OBJS)
	$(CC) $(CFLAGS) -o $@ $(QUAKE2_OBJS) $(QUAKE2_SDL_OBJS) $(QUAKE2_AS_OBJS) $(LDFLAGS) $(SDLLDFLAGS)

$(BUILDDIR)/client/snd_mixa.o :   $(LINUX_DIR)/snd_mixa.s
	$(DO_AS)

#############################################################################
# CTF
#############################################################################

CTF_OBJS = \
	$(BUILDDIR)/ctf/g_ai.o \
	$(BUILDDIR)/ctf/g_chase.o \
	$(BUILDDIR)/ctf/g_cmds.o \
	$(BUILDDIR)/ctf/g_combat.o \
	$(BUILDDIR)/ctf/g_ctf.o \
	$(BUILDDIR)/ctf/g_func.o \
	$(BUILDDIR)/ctf/g_items.o \
	$(BUILDDIR)/ctf/g_main.o \
	$(BUILDDIR)/ctf/g_misc.o \
	$(BUILDDIR)/ctf/g_monster.o \
	$(BUILDDIR)/ctf/g_phys.o \
	$(BUILDDIR)/ctf/g_save.o \
	$(BUILDDIR)/ctf/g_spawn.o \
	$(BUILDDIR)/ctf/g_svcmds.o \
	$(BUILDDIR)/ctf/g_target.o \
	$(BUILDDIR)/ctf/g_trigger.o \
	$(BUILDDIR)/ctf/g_utils.o \
	$(BUILDDIR)/ctf/g_weapon.o \
	$(BUILDDIR)/ctf/m_move.o \
	$(BUILDDIR)/ctf/p_client.o \
	$(BUILDDIR)/ctf/p_hud.o \
	$(BUILDDIR)/ctf/p_menu.o \
	$(BUILDDIR)/ctf/p_trail.o \
	$(BUILDDIR)/ctf/p_view.o \
	$(BUILDDIR)/ctf/p_weapon.o \
	$(BUILDDIR)/ctf/q_shared.o

$(BUILDDIR)/ctf/game$(ARCH).$(SHLIBEXT) : $(CTF_OBJS)
	$(CC) $(CFLAGS) $(SHLIBLDFLAGS) -o $@ $(CTF_OBJS)

$(BUILDDIR)/ctf/g_ai.o :       $(CTF_DIR)/g_ai.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/ctf/g_chase.o :    $(CTF_DIR)/g_chase.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/ctf/g_cmds.o :     $(CTF_DIR)/g_cmds.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/ctf/g_combat.o :   $(CTF_DIR)/g_combat.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/ctf/g_ctf.o :      $(CTF_DIR)/g_ctf.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/ctf/g_func.o :     $(CTF_DIR)/g_func.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/ctf/g_items.o :    $(CTF_DIR)/g_items.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/ctf/g_main.o :     $(CTF_DIR)/g_main.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/ctf/g_misc.o :     $(CTF_DIR)/g_misc.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/ctf/g_monster.o :  $(CTF_DIR)/g_monster.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/ctf/g_phys.o :     $(CTF_DIR)/g_phys.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/ctf/g_save.o :     $(CTF_DIR)/g_save.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/ctf/g_spawn.o :    $(CTF_DIR)/g_spawn.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/ctf/g_svcmds.o :   $(CTF_DIR)/g_svcmds.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/ctf/g_target.o :   $(CTF_DIR)/g_target.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/ctf/g_trigger.o :  $(CTF_DIR)/g_trigger.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/ctf/g_utils.o :    $(CTF_DIR)/g_utils.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/ctf/g_weapon.o :   $(CTF_DIR)/g_weapon.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/ctf/m_move.o :     $(CTF_DIR)/m_move.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/ctf/p_client.o :   $(CTF_DIR)/p_client.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/ctf/p_hud.o :      $(CTF_DIR)/p_hud.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/ctf/p_menu.o :     $(CTF_DIR)/p_menu.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/ctf/p_trail.o :    $(CTF_DIR)/p_trail.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/ctf/p_view.o :     $(CTF_DIR)/p_view.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/ctf/p_weapon.o :   $(CTF_DIR)/p_weapon.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/ctf/q_shared.o :   $(CTF_DIR)/q_shared.c
	$(DO_SHLIB_CC)

#############################################################################
# XATRIX
#############################################################################

XATRIX_OBJS = \
	$(BUILDDIR)/xatrix/g_ai.o \
	$(BUILDDIR)/xatrix/g_cmds.o \
	$(BUILDDIR)/xatrix/g_combat.o \
	$(BUILDDIR)/xatrix/g_func.o \
	$(BUILDDIR)/xatrix/g_items.o \
	$(BUILDDIR)/xatrix/g_main.o \
	$(BUILDDIR)/xatrix/g_misc.o \
	$(BUILDDIR)/xatrix/g_monster.o \
	$(BUILDDIR)/xatrix/g_phys.o \
	$(BUILDDIR)/xatrix/g_save.o \
	$(BUILDDIR)/xatrix/g_spawn.o \
	$(BUILDDIR)/xatrix/g_svcmds.o \
	$(BUILDDIR)/xatrix/g_target.o \
	$(BUILDDIR)/xatrix/g_trigger.o \
	$(BUILDDIR)/xatrix/g_turret.o \
	$(BUILDDIR)/xatrix/g_utils.o \
	$(BUILDDIR)/xatrix/g_weapon.o \
	$(BUILDDIR)/xatrix/m_actor.o \
	$(BUILDDIR)/xatrix/m_berserk.o \
	$(BUILDDIR)/xatrix/m_boss2.o \
	$(BUILDDIR)/xatrix/m_boss3.o \
	$(BUILDDIR)/xatrix/m_boss31.o \
	$(BUILDDIR)/xatrix/m_boss32.o \
	$(BUILDDIR)/xatrix/m_boss5.o \
	$(BUILDDIR)/xatrix/m_brain.o \
	$(BUILDDIR)/xatrix/m_chick.o \
	$(BUILDDIR)/xatrix/m_fixbot.o \
	$(BUILDDIR)/xatrix/m_flash.o \
	$(BUILDDIR)/xatrix/m_flipper.o \
	$(BUILDDIR)/xatrix/m_float.o \
	$(BUILDDIR)/xatrix/m_flyer.o \
	$(BUILDDIR)/xatrix/m_gekk.o \
	$(BUILDDIR)/xatrix/m_gladb.o \
	$(BUILDDIR)/xatrix/m_gladiator.o \
	$(BUILDDIR)/xatrix/m_gunner.o \
	$(BUILDDIR)/xatrix/m_hover.o \
	$(BUILDDIR)/xatrix/m_infantry.o \
	$(BUILDDIR)/xatrix/m_insane.o \
	$(BUILDDIR)/xatrix/m_medic.o \
	$(BUILDDIR)/xatrix/m_move.o \
	$(BUILDDIR)/xatrix/m_mutant.o \
	$(BUILDDIR)/xatrix/m_parasite.o \
	$(BUILDDIR)/xatrix/m_soldier.o \
	$(BUILDDIR)/xatrix/m_supertank.o \
	$(BUILDDIR)/xatrix/m_tank.o \
	$(BUILDDIR)/xatrix/p_client.o \
	$(BUILDDIR)/xatrix/p_hud.o \
	$(BUILDDIR)/xatrix/p_trail.o \
	$(BUILDDIR)/xatrix/p_view.o \
	$(BUILDDIR)/xatrix/p_weapon.o \
	$(BUILDDIR)/xatrix/q_shared.o

$(BUILDDIR)/xatrix/game$(ARCH).$(SHLIBEXT) : $(XATRIX_OBJS)
	$(CC) $(CFLAGS) $(SHLIBLDFLAGS) -o $@ $(XATRIX_OBJS)

$(BUILDDIR)/xatrix/g_ai.o :        $(XATRIX_DIR)/g_ai.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/g_cmds.o :      $(XATRIX_DIR)/g_cmds.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/g_combat.o :    $(XATRIX_DIR)/g_combat.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/g_func.o :      $(XATRIX_DIR)/g_func.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/g_items.o :     $(XATRIX_DIR)/g_items.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/g_main.o :      $(XATRIX_DIR)/g_main.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/g_misc.o :      $(XATRIX_DIR)/g_misc.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/g_monster.o :   $(XATRIX_DIR)/g_monster.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/g_phys.o :      $(XATRIX_DIR)/g_phys.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/g_save.o :      $(XATRIX_DIR)/g_save.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/g_spawn.o :     $(XATRIX_DIR)/g_spawn.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/g_svcmds.o :    $(XATRIX_DIR)/g_svcmds.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/g_target.o :    $(XATRIX_DIR)/g_target.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/g_trigger.o :   $(XATRIX_DIR)/g_trigger.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/g_turret.o :    $(XATRIX_DIR)/g_turret.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/g_utils.o :     $(XATRIX_DIR)/g_utils.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/g_weapon.o :    $(XATRIX_DIR)/g_weapon.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/m_actor.o :     $(XATRIX_DIR)/m_actor.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/m_berserk.o :   $(XATRIX_DIR)/m_berserk.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/m_boss2.o :     $(XATRIX_DIR)/m_boss2.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/m_boss3.o :     $(XATRIX_DIR)/m_boss3.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/m_boss31.o :    $(XATRIX_DIR)/m_boss31.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/m_boss32.o :    $(XATRIX_DIR)/m_boss32.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/m_boss5.o :     $(XATRIX_DIR)/m_boss5.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/m_brain.o :     $(XATRIX_DIR)/m_brain.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/m_chick.o :     $(XATRIX_DIR)/m_chick.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/m_fixbot.o :    $(XATRIX_DIR)/m_fixbot.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/m_flash.o :     $(XATRIX_DIR)/m_flash.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/m_flipper.o :   $(XATRIX_DIR)/m_flipper.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/m_float.o :     $(XATRIX_DIR)/m_float.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/m_flyer.o :     $(XATRIX_DIR)/m_flyer.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/m_gekk.o :      $(XATRIX_DIR)/m_gekk.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/m_gladb.o :     $(XATRIX_DIR)/m_gladb.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/m_gladiator.o : $(XATRIX_DIR)/m_gladiator.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/m_gunner.o :    $(XATRIX_DIR)/m_gunner.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/m_hover.o :     $(XATRIX_DIR)/m_hover.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/m_infantry.o :  $(XATRIX_DIR)/m_infantry.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/m_insane.o :    $(XATRIX_DIR)/m_insane.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/m_medic.o :     $(XATRIX_DIR)/m_medic.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/m_move.o :      $(XATRIX_DIR)/m_move.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/m_mutant.o :    $(XATRIX_DIR)/m_mutant.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/m_parasite.o :  $(XATRIX_DIR)/m_parasite.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/m_soldier.o :   $(XATRIX_DIR)/m_soldier.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/m_supertank.o : $(XATRIX_DIR)/m_supertank.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/m_tank.o :      $(XATRIX_DIR)/m_tank.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/p_client.o :    $(XATRIX_DIR)/p_client.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/p_hud.o :       $(XATRIX_DIR)/p_hud.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/p_trail.o :     $(XATRIX_DIR)/p_trail.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/p_view.o :      $(XATRIX_DIR)/p_view.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/p_weapon.o :    $(XATRIX_DIR)/p_weapon.c
	$(DO_SHLIB_CC)

$(BUILDDIR)/xatrix/q_shared.o :    $(XATRIX_DIR)/q_shared.c
	$(DO_SHLIB_CC)


#############################################################################
# REF_SOFT
#############################################################################

REF_SOFT_OBJS = \
	$(BUILDDIR)/ref_soft/r_aclip.o \
	$(BUILDDIR)/ref_soft/r_alias.o \
	$(BUILDDIR)/ref_soft/r_bsp.o \
	$(BUILDDIR)/ref_soft/r_draw.o \
	$(BUILDDIR)/ref_soft/r_edge.o \
	$(BUILDDIR)/ref_soft/r_image.o \
	$(BUILDDIR)/ref_soft/r_light.o \
	$(BUILDDIR)/ref_soft/r_main.o \
	$(BUILDDIR)/ref_soft/r_misc.o \
	$(BUILDDIR)/ref_soft/r_model.o \
	$(BUILDDIR)/ref_soft/r_part.o \
	$(BUILDDIR)/ref_soft/r_poly.o \
	$(BUILDDIR)/ref_soft/r_polyse.o \
	$(BUILDDIR)/ref_soft/r_rast.o \
	$(BUILDDIR)/ref_soft/r_scan.o \
	$(BUILDDIR)/ref_soft/r_sprite.o \
	$(BUILDDIR)/ref_soft/r_surf.o \
	$(BUILDDIR)/ref_soft/q_shared.o \
	$(BUILDDIR)/ref_soft/q_shlinux.o \
	$(BUILDDIR)/ref_soft/glob.o

ifeq ($(ARCH),i386)
REF_SOFT_OBJS += \
	$(BUILDDIR)/ref_soft/r_aclipa.o \
	$(BUILDDIR)/ref_soft/r_draw16.o \
	$(BUILDDIR)/ref_soft/r_drawa.o \
	$(BUILDDIR)/ref_soft/r_edgea.o \
	$(BUILDDIR)/ref_soft/r_scana.o \
	$(BUILDDIR)/ref_soft/r_spr8.o \
	$(BUILDDIR)/ref_soft/r_surf8.o \
	$(BUILDDIR)/ref_soft/math.o \
	$(BUILDDIR)/ref_soft/d_polysa.o \
	$(BUILDDIR)/ref_soft/r_varsa.o \
	$(BUILDDIR)/ref_soft/sys_dosa.o
endif

REF_SOFT_SVGA_OBJS = \
	$(BUILDDIR)/ref_soft/rw_svgalib.o \
	$(BUILDDIR)/ref_soft/d_copy.o \
	$(BUILDDIR)/ref_soft/rw_in_svgalib.o

REF_SOFT_X11_OBJS = \
	$(BUILDDIR)/ref_soft/rw_x11.o

REF_SOFT_SDL_OBJS = \
	$(BUILDDIR)/ref_soft/rw_sdl.o

$(BUILDDIR)/ref_soft.$(SHLIBEXT) : $(REF_SOFT_OBJS) $(REF_SOFT_SVGA_OBJS)
	$(CC) $(CFLAGS) $(SHLIBLDFLAGS) -o $@ $(REF_SOFT_OBJS) \
		$(REF_SOFT_SVGA_OBJS) $(SVGALDFLAGS)

$(BUILDDIR)/ref_softx.$(SHLIBEXT) : $(REF_SOFT_OBJS) $(REF_SOFT_X11_OBJS)
	$(CC) $(CFLAGS) $(SHLIBLDFLAGS) -o $@ $(REF_SOFT_OBJS) \
		$(REF_SOFT_X11_OBJS) $(XLDFLAGS)

$(BUILDDIR)/ref_softsdl.$(SHLIBEXT) : $(REF_SOFT_OBJS) $(REF_SOFT_SDL_OBJS)
	$(CC) $(CFLAGS) $(SHLIBLDFLAGS) -o $@ $(REF_SOFT_OBJS) \
		$(REF_SOFT_SDL_OBJS) $(SDLLDFLAGS)

$(BUILDDIR)/ref_soft/r_aclip.o :      $(REF_SOFT_DIR)/r_aclip.c
	$(DO_RENDER_CC)

$(BUILDDIR)/ref_soft/r_alias.o :      $(REF_SOFT_DIR)/r_alias.c
	$(DO_RENDER_CC)

$(BUILDDIR)/ref_soft/r_bsp.o :        $(REF_SOFT_DIR)/r_bsp.c
	$(DO_RENDER_CC)

$(BUILDDIR)/ref_soft/r_draw.o :       $(REF_SOFT_DIR)/r_draw.c
	$(DO_RENDER_CC)

$(BUILDDIR)/ref_soft/r_edge.o :       $(REF_SOFT_DIR)/r_edge.c
	$(DO_RENDER_CC)

$(BUILDDIR)/ref_soft/r_image.o :      $(REF_SOFT_DIR)/r_image.c
	$(DO_RENDER_CC)

$(BUILDDIR)/ref_soft/r_light.o :      $(REF_SOFT_DIR)/r_light.c
	$(DO_RENDER_CC)

$(BUILDDIR)/ref_soft/r_main.o :       $(REF_SOFT_DIR)/r_main.c
	$(DO_RENDER_CC)

$(BUILDDIR)/ref_soft/r_misc.o :       $(REF_SOFT_DIR)/r_misc.c
	$(DO_RENDER_CC)

$(BUILDDIR)/ref_soft/r_model.o :      $(REF_SOFT_DIR)/r_model.c
	$(DO_RENDER_CC)

$(BUILDDIR)/ref_soft/r_part.o :       $(REF_SOFT_DIR)/r_part.c
	$(DO_RENDER_CC)

$(BUILDDIR)/ref_soft/r_poly.o :       $(REF_SOFT_DIR)/r_poly.c
	$(DO_RENDER_CC)

$(BUILDDIR)/ref_soft/r_polyse.o :     $(REF_SOFT_DIR)/r_polyse.c
	$(DO_RENDER_CC)

$(BUILDDIR)/ref_soft/r_rast.o :       $(REF_SOFT_DIR)/r_rast.c
	$(DO_RENDER_CC)

$(BUILDDIR)/ref_soft/r_scan.o :       $(REF_SOFT_DIR)/r_scan.c
	$(DO_RENDER_CC)

$(BUILDDIR)/ref_soft/r_sprite.o :     $(REF_SOFT_DIR)/r_sprite.c
	$(DO_RENDER_CC)

$(BUILDDIR)/ref_soft/r_surf.o :       $(REF_SOFT_DIR)/r_surf.c
	$(DO_RENDER_CC)

$(BUILDDIR)/ref_soft/r_aclipa.o :     $(LINUX_DIR)/r_aclipa.s
	$(DO_SHLIB_AS)

$(BUILDDIR)/ref_soft/r_draw16.o :     $(LINUX_DIR)/r_draw16.s
	$(DO_SHLIB_AS)

$(BUILDDIR)/ref_soft/r_drawa.o :      $(LINUX_DIR)/r_drawa.s
	$(DO_SHLIB_AS)

$(BUILDDIR)/ref_soft/r_edgea.o :      $(LINUX_DIR)/r_edgea.s
	$(DO_SHLIB_AS)

$(BUILDDIR)/ref_soft/r_scana.o :      $(LINUX_DIR)/r_scana.s
	$(DO_SHLIB_AS)

$(BUILDDIR)/ref_soft/r_spr8.o :       $(LINUX_DIR)/r_spr8.s
	$(DO_SHLIB_AS)

$(BUILDDIR)/ref_soft/r_surf8.o :      $(LINUX_DIR)/r_surf8.s
	$(DO_SHLIB_AS)

$(BUILDDIR)/ref_soft/math.o :         $(LINUX_DIR)/math.s
	$(DO_SHLIB_AS)

$(BUILDDIR)/ref_soft/d_polysa.o :     $(LINUX_DIR)/d_polysa.s
	$(DO_SHLIB_AS)

$(BUILDDIR)/ref_soft/r_varsa.o :      $(LINUX_DIR)/r_varsa.s
	$(DO_SHLIB_AS)

$(BUILDDIR)/ref_soft/sys_dosa.o :     $(LINUX_DIR)/sys_dosa.s
	$(DO_SHLIB_AS)

$(BUILDDIR)/ref_soft/q_shared.o :     $(GAME_DIR)/q_shared.c
	$(DO_RENDER_CC)

$(BUILDDIR)/ref_soft/q_shlinux.o :    $(LINUX_DIR)/q_shlinux.c
	$(DO_RENDER_CC)

$(BUILDDIR)/ref_soft/glob.o :         $(LINUX_DIR)/glob.c
	$(DO_RENDER_CC)

$(BUILDDIR)/ref_soft/d_copy.o :       $(LINUX_DIR)/d_copy.S
	$(DO_SHLIB_AS)

$(BUILDDIR)/ref_soft/rw_svgalib.o :   $(LINUX_DIR)/rw_svgalib.c
	$(DO_RENDER_CC)

$(BUILDDIR)/ref_soft/rw_in_svgalib.o : $(LINUX_DIR)/rw_in_svgalib.c
	$(DO_RENDER_CC)

$(BUILDDIR)/ref_soft/rw_x11.o :       $(LINUX_DIR)/rw_x11.c
	$(DO_RENDER_CC)

$(BUILDDIR)/ref_soft/rw_sdl.o :       $(LINUX_DIR)/rw_sdl.c
	$(DO_RENDER_CC) $(SDLCFLAGS)

#############################################################################
# REF_GL
#############################################################################

REF_GL_OBJS = \
	$(BUILDDIR)/ref_gl/gl_draw.o \
	$(BUILDDIR)/ref_gl/gl_image.o \
	$(BUILDDIR)/ref_gl/gl_light.o \
	$(BUILDDIR)/ref_gl/gl_mesh.o \
	$(BUILDDIR)/ref_gl/gl_model.o \
	$(BUILDDIR)/ref_gl/gl_rmain.o \
	$(BUILDDIR)/ref_gl/gl_rmisc.o \
	$(BUILDDIR)/ref_gl/gl_rsurf.o \
	$(BUILDDIR)/ref_gl/gl_warp.o \
	\
	$(BUILDDIR)/ref_gl/qgl_linux.o \
	$(BUILDDIR)/ref_gl/q_shared.o \
	$(BUILDDIR)/ref_gl/q_shlinux.o \
	$(BUILDDIR)/ref_gl/glob.o

REF_GLX_OBJS = \
	$(BUILDDIR)/ref_gl/gl_glx.o

REF_FXGL_OBJS = \
	$(BUILDDIR)/ref_gl/rw_in_svgalib.o \
	$(BUILDDIR)/ref_gl/gl_fxmesa.o

REF_SDLGL_OBJS = \
	$(BUILDDIR)/ref_gl/rw_sdl.o

$(BUILDDIR)/ref_glx.$(SHLIBEXT) : $(REF_GL_OBJS) $(REF_GLX_OBJS)
	$(CC) $(CFLAGS) $(SHLIBLDFLAGS) -o $@ $(REF_GL_OBJS) $(REF_GLX_OBJS) $(GLXLDFLAGS)

$(BUILDDIR)/ref_gl.$(SHLIBEXT) : $(REF_GL_OBJS) $(REF_FXGL_OBJS)
	$(CC) $(CFLAGS) $(SHLIBLDFLAGS) -o $@ $(REF_GL_OBJS) $(REF_FXGL_OBJS) $(FXGLLDFLAGS)

$(BUILDDIR)/ref_sdlgl.$(SHLIBEXT) : $(REF_GL_OBJS) $(REF_SDLGL_OBJS)
	$(CC) $(CFLAGS) $(SHLIBLDFLAGS) -o $@ $(REF_GL_OBJS) $(REF_SDLGL_OBJS) $(SDLGLLDFLAGS)

$(BUILDDIR)/ref_gl/gl_draw.o :        $(REF_GL_DIR)/gl_draw.c
	$(DO_GL_SHLIB_CC)

$(BUILDDIR)/ref_gl/gl_image.o :       $(REF_GL_DIR)/gl_image.c
	$(DO_GL_SHLIB_CC)

$(BUILDDIR)/ref_gl/gl_light.o :       $(REF_GL_DIR)/gl_light.c
	$(DO_GL_SHLIB_CC)

$(BUILDDIR)/ref_gl/gl_mesh.o :        $(REF_GL_DIR)/gl_mesh.c
	$(DO_GL_SHLIB_CC)

$(BUILDDIR)/ref_gl/gl_model.o :       $(REF_GL_DIR)/gl_model.c
	$(DO_GL_SHLIB_CC)

$(BUILDDIR)/ref_gl/gl_rmain.o :       $(REF_GL_DIR)/gl_rmain.c
	$(DO_GL_SHLIB_CC)

$(BUILDDIR)/ref_gl/gl_rmisc.o :       $(REF_GL_DIR)/gl_rmisc.c
	$(DO_GL_SHLIB_CC)

$(BUILDDIR)/ref_gl/gl_rsurf.o :       $(REF_GL_DIR)/gl_rsurf.c
	$(DO_GL_SHLIB_CC)

$(BUILDDIR)/ref_gl/gl_warp.o :        $(REF_GL_DIR)/gl_warp.c
	$(DO_GL_SHLIB_CC)

$(BUILDDIR)/ref_gl/qgl_linux.o :      $(LINUX_DIR)/qgl_linux.c
	$(DO_GL_SHLIB_CC)

$(BUILDDIR)/ref_gl/q_shared.o :       $(GAME_DIR)/q_shared.c
	$(DO_GL_SHLIB_CC)

$(BUILDDIR)/ref_gl/q_shlinux.o :      $(LINUX_DIR)/q_shlinux.c
	$(DO_GL_SHLIB_CC)

$(BUILDDIR)/ref_gl/glob.o :           $(LINUX_DIR)/glob.c
	$(DO_GL_SHLIB_CC)

$(BUILDDIR)/ref_gl/gl_glx.o :         $(LINUX_DIR)/gl_glx.c
	$(DO_GL_SHLIB_CC) $(GLXCFLAGS)

$(BUILDDIR)/ref_gl/gl_fxmesa.o :      $(LINUX_DIR)/gl_fxmesa.c
	$(DO_GL_SHLIB_CC) $(FXGLCFLAGS)

$(BUILDDIR)/ref_gl/rw_in_svgalib.o :  $(LINUX_DIR)/rw_in_svgalib.c
	$(DO_GL_SHLIB_CC)

$(BUILDDIR)/ref_gl/rw_sdl.o :         $(LINUX_DIR)/rw_sdl.c
	$(DO_GL_SHLIB_CC) $(SDLGLCFLAGS)


#############################################################################
# MISC
#############################################################################

clean: depclean
	rm -f \
	$(QUAKE2_OBJS) \
	$(QUAKE2_AS_OBJS) \
	$(GAME_OBJS) \
#	$(CTF_OBJS) \
#	$(XATRIX_OBJS) \
#	$(REF_SOFT_OBJS) \
#	$(REF_SOFT_SVGA_OBJS) \
#	$(REF_SOFT_X11_OBJS) \
#	$(REF_GL_OBJS)

depclean:
	rm -f \
	$(QUAKE2_DEPS) \
	$(GAME_DEPS)

distclean:
	-rm -rf $(BUILD_DEBUG_DIR) $(BUILD_RELEASE_DIR)
	-rm -f `find . \( -not -type d \) -and \( -name '*~' \) -type f -print`

DIST_FILES = acesrc/*.[ch] bbox/base64.bbox.gz bbox/big_map.bbox.gz \
        client/*.[ch] ctf/*.[ch] ctf/*.d?? ctf/*.vcproj \
        dg/*.c dg/*.cpp dg/*.h \
	game/*.[ch] game/*.d?? game/*.vcproj game/*.pl \
	iris/* linux/* null/* qcommon/* \
	ref_soft/*.[chs] ref_soft/*.??? ref_soft/*.vcproj \
	ref_gl/*.[ch] ref_gl/*.d?? ref_gl/*.vcproj \
	rhapsody/* solaris/* server/*.[ch] win32/* \
	*.[ch] README* *.txt *.sh makefile.id params.conf \
	quake2.*

dist:
	perl DistributionMaker.pl
