CC=gcc
CPUOPTIMIZATIONS=

BASE_DIR=.
CLIENT_DIR=$(BASE_DIR)/client
GL_DIR=$(BASE_DIR)/gl
SW_DIR=$(BASE_DIR)/sw
SERVER_DIR=$(BASE_DIR)/server
COMMON_DIR=$(BASE_DIR)/common
NQPROT_DIR=$(BASE_DIR)/nqnet
HTTP_DIR=$(BASE_DIR)/http
LIBS_DIR=$(BASE_DIR)/libs
PROGS_DIR=$(BASE_DIR)/qclib
SNDCODEC_DIR=$(BASE_DIR)/sndcodec
DEBUG_DIR=$(BASE_DIR)/debug
MP3_DIR=$(BASE_DIR)/../mp3/libmad
RELEASE_DIR=$(BASE_DIR)/release
QUX_DIR=$(BASE_DIR)/qux

DO_CC=$(CC) $(CFLAGS) -o $@ -c $<
DO_AS=$(CC) $(CFLAGS) -x assembler-with-cpp -DELF -o $@ -c $<
BASELDFLAGS=-lm -lz
GLXLDFLAGS=-L/usr/X11R6/lib -lX11 -lXext -lpng -ljpeg -lXxf86vm
GLSLDFLAGS=-L/usr/X11R6/lib -lMesaGL -lglide -lvga
XLDFLAGS=-L/usr/X11R6/lib -lX11 -lXext -lpng -ljpeg
SLDFLAGS=-lvga


BASE_CFLAGS=-DWITH_VMODE -Wall -Dstrnicmp=strncasecmp -Dstricmp=strcasecmp -I$(CLIENT_DIR) -I$(SERVER_DIR) -I$(COMMON_DIR) -I$(SW_DIR) -I$(GL_DIR) -I$(PROGS_DIR) -I$(LIBS_DIR) -I$(QUX_DIR) -I/usr/X11R6/include -D_vsnprintf=vsnprintf -D_snprintf=snprintf
CLIENT_ONLY_CFLAGS=$(BASE_CFLAGS) -DCLIENTONLY
SERVER_ONLY_CFLAGS=$(BASE_CFLAGS) -DSERVERONLY
JOINT_CFLAGS=$(BASE_CFLAGS)
DEBUG_CFLAGS=-ggdb -g
RELEASE_CFLAGS=-O6 -s -fno-strict-aliasing -ffast-math -funroll-loops -fexpensive-optimizations $(CPUOPTIMIZATIONS)
GLCFLAGS=-DGLQUAKE
SWCFLAGS=-DSWQUAKE

NQPROT_OBJS = \
	$(OUT_DIR)/net_main.o	\
	$(OUT_DIR)/net_loop.o	\
	$(OUT_DIR)/net_dgrm.o	\
	$(OUT_DIR)/net_nqudp.o	\
	$(OUT_DIR)/net_vcr.o
CLIENT_OBJS = \
	$(OUT_DIR)/textedit.o	\
	$(OUT_DIR)/fragstats.o	\
	$(OUT_DIR)/teamplay.o	\
	$(OUT_DIR)/zqtp.o	\
	$(OUT_DIR)/cl_demo.o	\
	$(OUT_DIR)/cl_ents.o	\
	$(OUT_DIR)/clq2_ents.o	\
	$(OUT_DIR)/cl_input.o	\
	$(OUT_DIR)/cl_main.o	\
	$(OUT_DIR)/cl_parse.o	\
	$(OUT_DIR)/cl_pred.o	\
	$(OUT_DIR)/cl_tent.o	\
	$(OUT_DIR)/cl_cam.o	\
	$(OUT_DIR)/cl_screen.o	\
	$(OUT_DIR)/cl_ui.o	\
	$(OUT_DIR)/qvm.o	\
	$(OUT_DIR)/irc_cl.o	\
	$(OUT_DIR)/console.o	\
	$(OUT_DIR)/image.o	\
	$(OUT_DIR)/keys.o	\
	$(OUT_DIR)/menu.o	\
	$(OUT_DIR)/m_master.o	\
	$(OUT_DIR)/m_multi.o	\
	$(OUT_DIR)/m_items.o	\
	$(OUT_DIR)/m_options.o	\
	$(OUT_DIR)/m_single.o	\
	$(OUT_DIR)/m_script.o	\
	$(OUT_DIR)/m_mp3.o	\
	$(OUT_DIR)/roq_read.o	\
	$(OUT_DIR)/clq2_cin.o	\
	$(OUT_DIR)/net_master.o	\
	$(OUT_DIR)/r_bulleten.o	\
	$(OUT_DIR)/r_part.o	\
	$(OUT_DIR)/r_partset.o	\
	$(OUT_DIR)/r_efrag.o	\
	$(OUT_DIR)/renderer.o	\
	$(OUT_DIR)/renderque.o	\
	$(OUT_DIR)/sbar.o	\
	$(OUT_DIR)/skin.o	\
	$(OUT_DIR)/snd_dma.o	\
	$(OUT_DIR)/snd_mem.o	\
	$(OUT_DIR)/snd_mix.o	\
	$(OUT_DIR)/snd_mp3.o	\
	$(OUT_DIR)/snd_ov.o	\
	$(OUT_DIR)/valid.o	\
	$(OUT_DIR)/view.o	\
	$(OUT_DIR)/wad.o	\
	$(OUT_DIR)/cd_linux.o	\
	$(OUT_DIR)/sys_linux.o	\
	$(OUT_DIR)/sys_dosa.o	\
	$(OUT_DIR)/snd_linux.o	\
				\
	$(OUT_DIR)/pop3noti.o	\
	$(OUT_DIR)/imapnoti.o	\
				\
	$(OUT_DIR)/ftpclient.o	\
	$(OUT_DIR)/httpclient.o \
				\
				\
	$(OUT_DIR)/snd_mixa.o	\
				\
	$(OUT_DIR)/m_x.o	\
	$(OUT_DIR)/x_reqs.o	\
	$(OUT_DIR)/x_res.o	\
	$(OUT_DIR)/pr_menu.o	\
#\
#	$(OUT_DIR)/sys_dosa.o
SOFTWARE_OBJS = \
	$(OUT_DIR)/sw_screen.o	\
	$(OUT_DIR)/sw_draw.o	\
	$(OUT_DIR)/sw_model.o	\
	$(OUT_DIR)/r_aclip.o	\
	$(OUT_DIR)/r_aclipa.o	\
	$(OUT_DIR)/r_alias.o	\
	$(OUT_DIR)/r_aliasa.o	\
	$(OUT_DIR)/r_bsp.o	\
	$(OUT_DIR)/r_draw.o	\
	$(OUT_DIR)/r_drawa.o	\
	$(OUT_DIR)/r_edge.o	\
	$(OUT_DIR)/r_edgea.o	\
	$(OUT_DIR)/r_light.o	\
	$(OUT_DIR)/r_main.o	\
	$(OUT_DIR)/r_misc.o	\
	$(OUT_DIR)/r_sky.o	\
	$(OUT_DIR)/r_sprite.o	\
	$(OUT_DIR)/r_surf.o	\
	$(OUT_DIR)/r_vars.o	\
	$(OUT_DIR)/r_varsa.o	\
				\
	$(OUT_DIR)/d_draw.o	\
	$(OUT_DIR)/d_draw16.o	\
	$(OUT_DIR)/d_edge.o	\
	$(OUT_DIR)/d_fill.o	\
	$(OUT_DIR)/d_init.o	\
	$(OUT_DIR)/d_modech.o	\
	$(OUT_DIR)/d_part.o	\
	$(OUT_DIR)/d_parta.o	\
	$(OUT_DIR)/d_polyse.o	\
	$(OUT_DIR)/d_polysa.o	\
	$(OUT_DIR)/d_scan.o	\
	$(OUT_DIR)/d_scana.o	\
	$(OUT_DIR)/d_sky.o	\
	$(OUT_DIR)/d_spr8.o	\
	$(OUT_DIR)/d_sprite.o	\
	$(OUT_DIR)/d_surf.o	\
	$(OUT_DIR)/d_trans.o	\
	$(OUT_DIR)/d_vars.o	\
	$(OUT_DIR)/d_varsa.o	\
	$(OUT_DIR)/d_zpoint.o	\
				\
	$(OUT_DIR)/nonintel.o	\
	$(OUT_DIR)/surf16.o	\
	$(OUT_DIR)/surf8.o


X11_OBJS = $(OUT_DIR)/vid_x.o

GLQUAKE_OBJS = \
	$(OUT_DIR)/gl_alias.o	\
	$(OUT_DIR)/gl_draw.o	\
	$(OUT_DIR)/gl_model.o	\
	$(OUT_DIR)/gl_backend.o	\
	$(OUT_DIR)/gl_shader.o	\
	$(OUT_DIR)/gl_ngraph.o	\
	$(OUT_DIR)/gl_rlight.o	\
	$(OUT_DIR)/gl_rmain.o	\
	$(OUT_DIR)/gl_rmisc.o	\
	$(OUT_DIR)/gl_rsurf.o	\
	$(OUT_DIR)/ltface.o	\
	$(OUT_DIR)/gl_screen.o	\
	$(OUT_DIR)/gl_warp.o	\
	$(OUT_DIR)/gl_ppl.o	\
	$(OUT_DIR)/gl_vidcommon.o \
	$(OUT_DIR)/gl_hlmdl.o

#	$(OUT_DIR)/gl_refrag.o	\

GLX_OBJS = $(OUT_DIR)/gl_vidlinuxglx.o
GLS_OBJS = $(OUT_DIR)/gl_vidlinux.o
MP3_OBJS = \
	$(OUT_DIR)/fixed.o \
	$(OUT_DIR)/bit.o \
	$(OUT_DIR)/timer.o \
	$(OUT_DIR)/stream.o \
	$(OUT_DIR)/frame.o \
	$(OUT_DIR)/synth.o \
	$(OUT_DIR)/decoder.o \
	$(OUT_DIR)/layer12.o \
	$(OUT_DIR)/layer3.o \
	$(OUT_DIR)/huffman.o \
	$(OUT_DIR)/mymad.o

PROGS_OBJS = \
	$(OUT_DIR)/comprout.o \
	$(OUT_DIR)/hash.o \
	$(OUT_DIR)/initlib.o \
	$(OUT_DIR)/pr_edict.o \
	$(OUT_DIR)/pr_exec.o \
	$(OUT_DIR)/pr_multi.o \
	$(OUT_DIR)/qcc_cmdlib.o \
	$(OUT_DIR)/qccmain.o \
	$(OUT_DIR)/qcc_pr_comp.o \
	$(OUT_DIR)/qcc_pr_lex.o \
	$(OUT_DIR)/qcdecomp.o \
	$(OUT_DIR)/qcd_main.o

SERVER_OBJS = \
	$(OUT_DIR)/pr_cmds.o 	\
	$(OUT_DIR)/sv_master.o 	\
	$(OUT_DIR)/sv_init.o 	\
	$(OUT_DIR)/sv_main.o 	\
	$(OUT_DIR)/sv_nchan.o 	\
	$(OUT_DIR)/sv_ents.o 	\
	$(OUT_DIR)/sv_send.o 	\
	$(OUT_DIR)/sv_move.o 	\
	$(OUT_DIR)/sv_phys.o 	\
	$(OUT_DIR)/sv_user.o	\
	$(OUT_DIR)/sv_mvd.o	\
	$(OUT_DIR)/sv_ccmds.o 	\
	$(OUT_DIR)/sv_rankin.o 	\
	$(OUT_DIR)/sv_chat.o 	\
	$(OUT_DIR)/sv_demo.o	\
	$(OUT_DIR)/world.o 	\
	$(OUT_DIR)/worlda.o 	\
	$(OUT_DIR)/net_preparse.o \
	$(OUT_DIR)/savegame.o	\
	$(OUT_DIR)/svq2_ents.o \
	$(OUT_DIR)/svq2_game.o \
	$(OUT_DIR)/snd_vc.o	\
	$(OUT_DIR)/snd_voicecodecs.o	\
	$(OUT_DIR)/g711.o	\
	$(OUT_DIR)/g721.o	\
	$(OUT_DIR)/g723_24.o	\
	$(OUT_DIR)/g723_40.o	\
	$(OUT_DIR)/g72x.o	\
	$(OUT_DIR)/webgen.o	\
	$(OUT_DIR)/ftpserver.o	\
	$(OUT_DIR)/httpserver.o \
	$(OUT_DIR)/sv_pop3.o \
	$(OUT_DIR)/sv_smtp.o

SERVERONLY_OBJS = \
	$(OUT_DIR)/svmodel.o \
	$(OUT_DIR)/sv_sys_unix.o

COMMON_OBJS = \
	$(OUT_DIR)/common.o 	\
	$(OUT_DIR)/cvar.o 	\
	$(OUT_DIR)/cmd.o 	\
	$(OUT_DIR)/crc.o 	\
	$(OUT_DIR)/mathlib.o 	\
	$(OUT_DIR)/math.o	\
	$(OUT_DIR)/huff.o	\
	$(OUT_DIR)/md4.o 	\
	$(OUT_DIR)/md5.o 	\
	$(OUT_DIR)/net_chan.o 	\
	$(OUT_DIR)/net_udp.o 	\
	$(OUT_DIR)/zone.o 	\
	$(OUT_DIR)/gl_q2bsp.o	\
	$(OUT_DIR)/glmod_doom.o \
	$(OUT_DIR)/pmove.o	\
	$(OUT_DIR)/pmovetst.o	\
	$(OUT_DIR)/iwebiface.o	\
	$(OUT_DIR)/translate.o	\
	$(OUT_DIR)/plugin.o	\
	$(OUT_DIR)/q1bsp.o	\
	$(OUT_DIR)/q2pmove.o

all: all-rel all-dbg

$(OUT_DIR)/q2pmove.o : $(COMMON_DIR)/q2pmove.c
	$(DO_CC)

$(OUT_DIR)/glmod_doom.o : $(GL_DIR)/glmod_doom.c
	$(DO_CC)

$(OUT_DIR)/q1bsp.o : $(COMMON_DIR)/q1bsp.c
	$(DO_CC)
$(OUT_DIR)/m_x.o : $(CLIENT_DIR)/../qux/m_x.c
	$(DO_CC)
$(OUT_DIR)/x_reqs.o : $(CLIENT_DIR)/../qux/x_reqs.c
	$(DO_CC)
$(OUT_DIR)/x_res.o : $(CLIENT_DIR)/../qux/x_res.c
	$(DO_CC)

$(OUT_DIR)/image.o : $(CLIENT_DIR)/image.c
	$(DO_CC)

$(OUT_DIR)/sw_screen.o : $(SW_DIR)/sw_screen.c
	$(DO_CC)
$(OUT_DIR)/sw_draw.o : $(SW_DIR)/sw_draw.c
	$(DO_CC)
$(OUT_DIR)/sw_model.o : $(SW_DIR)/sw_model.c
	$(DO_CC)

$(OUT_DIR)/r_main.o : $(SW_DIR)/r_main.c
	$(DO_CC)
$(OUT_DIR)/r_misc.o : $(SW_DIR)/r_misc.c
	$(DO_CC)
$(OUT_DIR)/r_draw.o : $(SW_DIR)/r_draw.c
	$(DO_CC)
$(OUT_DIR)/r_surf.o : $(SW_DIR)/r_surf.c
	$(DO_CC)
$(OUT_DIR)/r_bsp.o : $(SW_DIR)/r_bsp.c
	$(DO_CC)
$(OUT_DIR)/r_edge.o : $(SW_DIR)/r_edge.c
	$(DO_CC)
$(OUT_DIR)/r_drawa.o : $(SW_DIR)/r_drawa.s
	$(DO_AS)
$(OUT_DIR)/r_edgea.o : $(SW_DIR)/r_edgea.s
	$(DO_AS)
$(OUT_DIR)/r_efrag.o : $(CLIENT_DIR)/r_efrag.c
	$(DO_CC)
$(OUT_DIR)/r_vars.o : $(SW_DIR)/r_vars.c
	$(DO_CC)
$(OUT_DIR)/r_varsa.o : $(SW_DIR)/r_varsa.s
	$(DO_AS)
$(OUT_DIR)/r_light.o : $(SW_DIR)/r_light.c
	$(DO_CC)
$(OUT_DIR)/r_sky.o : $(SW_DIR)/r_sky.c
	$(DO_CC)
$(OUT_DIR)/r_sprite.o : $(SW_DIR)/r_sprite.c
	$(DO_CC)
$(OUT_DIR)/r_aclip.o : $(SW_DIR)/r_aclip.c
	$(DO_CC)
$(OUT_DIR)/r_aclipa.o : $(SW_DIR)/r_aclipa.s
	$(DO_AS)
$(OUT_DIR)/r_alias.o : $(SW_DIR)/r_alias.c
	$(DO_CC)
$(OUT_DIR)/r_aliasa.o : $(SW_DIR)/r_aliasa.s
	$(DO_AS)


$(OUT_DIR)/d_polyse.o : $(SW_DIR)/d_polyse.c
	$(DO_CC)
$(OUT_DIR)/d_polysa.o : $(SW_DIR)/d_polysa.s
	$(DO_AS)
$(OUT_DIR)/d_scan.o : $(SW_DIR)/d_scan.c
	$(DO_CC)
$(OUT_DIR)/d_scana.o : $(SW_DIR)/d_scana.s
	$(DO_AS)
$(OUT_DIR)/d_init.o : $(SW_DIR)/d_init.c
	$(DO_CC)
$(OUT_DIR)/d_modech.o : $(SW_DIR)/d_modech.c
	$(DO_CC)
$(OUT_DIR)/d_sky.o : $(SW_DIR)/d_sky.c
	$(DO_CC)
$(OUT_DIR)/d_spr8.o : $(SW_DIR)/d_spr8.s
	$(DO_AS)
$(OUT_DIR)/d_sprite.o : $(SW_DIR)/d_sprite.c
	$(DO_CC)
$(OUT_DIR)/d_fill.o : $(SW_DIR)/d_fill.c
	$(DO_CC)
$(OUT_DIR)/d_edge.o : $(SW_DIR)/d_edge.c
	$(DO_CC)
$(OUT_DIR)/d_surf.o : $(SW_DIR)/d_surf.c
	$(DO_CC)
$(OUT_DIR)/d_part.o : $(SW_DIR)/d_part.c
	$(DO_CC)
$(OUT_DIR)/d_parta.o : $(SW_DIR)/d_parta.s
	$(DO_AS)
$(OUT_DIR)/d_trans.o : $(SW_DIR)/d_trans.c
	$(DO_CC)
$(OUT_DIR)/d_vars.o : $(SW_DIR)/d_vars.c
	$(DO_CC)
$(OUT_DIR)/d_varsa.o : $(SW_DIR)/d_varsa.s
	$(DO_AS)
$(OUT_DIR)/d_copy.o : $(SW_DIR)/d_copy.s
	$(DO_AS)
$(OUT_DIR)/d_draw.o : $(SW_DIR)/d_draw.s
	$(DO_AS)
$(OUT_DIR)/d_draw16.o : $(SW_DIR)/d_draw16.s
	$(DO_AS)
$(OUT_DIR)/d_zpoint.o : $(SW_DIR)/d_zpoint.c
	$(DO_CC)

$(OUT_DIR)/surf16.o : $(SW_DIR)/surf16.s
	$(DO_AS)
$(OUT_DIR)/surf8.o : $(SW_DIR)/surf8.s
	$(DO_AS)

$(OUT_DIR)/vid_x.o : $(SW_DIR)/vid_x.c
	$(DO_CC)

$(OUT_DIR)/qvm.o : $(COMMON_DIR)/qvm.c
	$(DO_CC)
$(OUT_DIR)/plugin.o : $(COMMON_DIR)/plugin.c
	$(DO_CC)


$(OUT_DIR)/comprout.o : $(PROGS_DIR)/comprout.c
	$(DO_CC)

$(OUT_DIR)/hash.o :	$(PROGS_DIR)/hash.c
	$(DO_CC)

$(OUT_DIR)/initlib.o : $(PROGS_DIR)/initlib.c
	$(DO_CC)

$(OUT_DIR)/pr_edict.o : $(PROGS_DIR)/pr_edict.c
	$(DO_CC)

$(OUT_DIR)/pr_exec.o : $(PROGS_DIR)/pr_exec.c
	$(DO_CC)

$(OUT_DIR)/pr_multi.o : $(PROGS_DIR)/pr_multi.c
	$(DO_CC)

$(OUT_DIR)/qcc_cmdlib.o : $(PROGS_DIR)/qcc_cmdlib.c
	$(DO_CC)

$(OUT_DIR)/qccmain.o : $(PROGS_DIR)/qccmain.c
	$(DO_CC)

$(OUT_DIR)/qcc_pr_comp.o : $(PROGS_DIR)/qcc_pr_comp.c
	$(DO_CC)

$(OUT_DIR)/qcc_pr_lex.o : $(PROGS_DIR)/qcc_pr_lex.c
	$(DO_CC)

$(OUT_DIR)/qcdecomp.o : $(PROGS_DIR)/qcdecomp.c
	$(DO_CC)

$(OUT_DIR)/qcd_main.o : $(PROGS_DIR)/qcd_main.c
	$(DO_CC)

$(OUT_DIR)/q2bsp.o :		$(CLIENT_DIR)/gl_q2bsp.c
	$(DO_CC)

$(OUT_DIR)/common.o :         $(COMMON_DIR)/common.c
	$(DO_CC)

$(OUT_DIR)/fragstats.o :	$(CLIENT_DIR)/fragstats.c
	$(DO_CC)

$(OUT_DIR)/cvar.o :         $(COMMON_DIR)/cvar.c
	$(DO_CC)

$(OUT_DIR)/cmd.o :         $(COMMON_DIR)/cmd.c
	$(DO_CC)

$(OUT_DIR)/crc.o :		$(COMMON_DIR)/crc.c
	$(DO_CC)

$(OUT_DIR)/mathlib.o :		$(COMMON_DIR)/mathlib.c
	$(DO_CC)

$(OUT_DIR)/net_chan.o :		$(COMMON_DIR)/net_chan.c
	$(DO_CC)

$(OUT_DIR)/net_udp.o :		$(COMMON_DIR)/net_wins.c
	$(DO_CC)

$(OUT_DIR)/zone.o :         $(COMMON_DIR)/zone.c
	$(DO_CC)

$(OUT_DIR)/pmove.o :		$(COMMON_DIR)/pmove.c
	$(DO_CC)

$(OUT_DIR)/pmovetst.o :         $(COMMON_DIR)/pmovetst.c
	$(DO_CC)

$(OUT_DIR)/net_main.o :         $(NQPROT_DIR)/net_main.c
	$(DO_CC)

$(OUT_DIR)/net_bsd.o :		$(NQPROT_DIR)/net_bsd.c
	$(DO_CC)

$(OUT_DIR)/net_loop.o :		$(NQPROT_DIR)/net_loop.c
	$(DO_CC)

$(OUT_DIR)/net_dgrm.o :		$(NQPROT_DIR)/net_dgrm.c
	$(DO_CC)

$(OUT_DIR)/net_nqudp.o :	$(NQPROT_DIR)/net_udp.c
	$(DO_CC)

$(OUT_DIR)/net_vcr.o :		$(NQPROT_DIR)/net_vcr.c
	$(DO_CC)

$(OUT_DIR)/pr_cmds.o :         $(SERVER_DIR)/pr_cmds.c
	$(DO_CC)

$(OUT_DIR)/textedit.o :	$(CLIENT_DIR)/textedit.c
	$(DO_CC)

$(OUT_DIR)/iwebiface.o :	$(HTTP_DIR)/iwebiface.c
	$(DO_CC)
$(OUT_DIR)/webgen.o :	$(HTTP_DIR)/webgen.c
	$(DO_CC)

$(OUT_DIR)/irc_cl.o :	$(HTTP_DIR)/../irc/ircclient.c
	$(DO_CC)
$(OUT_DIR)/ftpserver.o :	$(HTTP_DIR)/ftpserver.c
	$(DO_CC)
$(OUT_DIR)/httpserver.o :	$(HTTP_DIR)/httpserver.c
	$(DO_CC)
$(OUT_DIR)/ftpclient.o	:	$(HTTP_DIR)/ftpclient.c
	$(DO_CC)
$(OUT_DIR)/httpclient.o	:	$(HTTP_DIR)/httpclient.c
	$(DO_CC)

$(OUT_DIR)/sv_pop3.o	:	$(HTTP_DIR)/../email/sv_pop3.c
	$(DO_CC)
$(OUT_DIR)/sv_smtp.o	:	$(HTTP_DIR)/../email/sv_smtp.c
	$(DO_CC)

$(OUT_DIR)/pop3noti.o	:	$(HTTP_DIR)/../email/pop3noti.c
	$(DO_CC)
$(OUT_DIR)/imapnoti.o	:	$(HTTP_DIR)/../email/imapnoti.c
	$(DO_CC)


$(OUT_DIR)/sv_master.o	:	$(SERVER_DIR)/sv_master.c
	$(DO_CC)

$(OUT_DIR)/sv_init.o :         $(SERVER_DIR)/sv_init.c
	$(DO_CC)

$(OUT_DIR)/sv_main.o :         $(SERVER_DIR)/sv_main.c
	$(DO_CC)

$(OUT_DIR)/sv_nchan.o :         $(SERVER_DIR)/sv_nchan.c
	$(DO_CC)

$(OUT_DIR)/sv_ents.o :         $(SERVER_DIR)/sv_ents.c
	$(DO_CC)

$(OUT_DIR)/sv_mvd.o :         $(SERVER_DIR)/sv_mvd.c
	$(DO_CC)

$(OUT_DIR)/sv_send.o :         $(SERVER_DIR)/sv_send.c
	$(DO_CC)

$(OUT_DIR)/sv_move.o :         $(SERVER_DIR)/sv_move.c
	$(DO_CC)
$(OUT_DIR)/sv_phys.o :         $(SERVER_DIR)/sv_phys.c
	$(DO_CC)

$(OUT_DIR)/sv_user.o :         $(SERVER_DIR)/sv_user.c
	$(DO_CC)

$(OUT_DIR)/sv_ccmds.o :         $(SERVER_DIR)/sv_ccmds.c
	$(DO_CC)

$(OUT_DIR)/huff.o :         $(COMMON_DIR)/huff.c
	$(DO_CC)

$(OUT_DIR)/sv_rankin.o :         $(SERVER_DIR)/sv_rankin.c
	$(DO_CC)

$(OUT_DIR)/sv_chat.o :         $(SERVER_DIR)/sv_chat.c
	$(DO_CC)

$(OUT_DIR)/svq2_game.o :         $(SERVER_DIR)/svq2_game.c
	$(DO_CC)

$(OUT_DIR)/svq2_ents.o :         $(SERVER_DIR)/svq2_ents.c
	$(DO_CC)

$(OUT_DIR)/world.o :         $(SERVER_DIR)/world.c
	$(DO_CC)

$(OUT_DIR)/worlda.o :         $(SERVER_DIR)/worlda.s
	$(DO_AS)

$(OUT_DIR)/md4.o :         $(COMMON_DIR)/md4.c
	$(DO_CC)

$(OUT_DIR)/md5.o :         $(COMMON_DIR)/md5.c
	$(DO_CC)

$(OUT_DIR)/net_preparse.o :         $(SERVER_DIR)/net_preparse.c
	$(DO_CC)

$(OUT_DIR)/savegame.o :         $(SERVER_DIR)/savegame.c
	$(DO_CC)

$(OUT_DIR)/sv_demo.o :         $(SERVER_DIR)/sv_demo.c
	$(DO_CC)

$(OUT_DIR)/svmodel.o :         $(SERVER_DIR)/svmodel.c
	$(DO_CC)

$(OUT_DIR)/sv_sys_unix.o :         $(SERVER_DIR)/sv_sys_unix.c
	$(DO_CC)

$(OUT_DIR)/translate.o :         $(COMMON_DIR)/translate.c
	$(DO_CC)

$(OUT_DIR)/teamplay.o : $(CLIENT_DIR)/teamplay.c
	$(DO_CC)

$(OUT_DIR)/zqtp.o : $(CLIENT_DIR)/zqtp.c
	$(DO_CC)

$(OUT_DIR)/cl_main.o :         $(CLIENT_DIR)/cl_main.c
	$(DO_CC)

$(OUT_DIR)/cl_cam.o :         $(CLIENT_DIR)/cl_cam.c
	$(DO_CC)

$(OUT_DIR)/cl_demo.o :         $(CLIENT_DIR)/cl_demo.c
	$(DO_CC)

$(OUT_DIR)/cl_ents.o :         $(CLIENT_DIR)/cl_ents.c
	$(DO_CC)

$(OUT_DIR)/clq2_ents.o :         $(CLIENT_DIR)/clq2_ents.c
	$(DO_CC)

$(OUT_DIR)/cl_input.o :         $(CLIENT_DIR)/cl_input.c
	$(DO_CC)

$(OUT_DIR)/cl_parse.o :         $(CLIENT_DIR)/cl_parse.c
	$(DO_CC)

$(OUT_DIR)/cl_pred.o :         $(CLIENT_DIR)/cl_pred.c
	$(DO_CC)

$(OUT_DIR)/cl_ui.o :         $(CLIENT_DIR)/cl_ui.c
	$(DO_CC)

$(OUT_DIR)/cl_screen.o :         $(CLIENT_DIR)/cl_screen.c
	$(DO_CC)



$(OUT_DIR)/cl_tent.o :         $(CLIENT_DIR)/cl_tent.c
	$(DO_CC)

$(OUT_DIR)/console.o :         $(CLIENT_DIR)/console.c
	$(DO_CC)

$(OUT_DIR)/keys.o :         $(CLIENT_DIR)/keys.c
	$(DO_CC)

$(OUT_DIR)/menu.o :         $(CLIENT_DIR)/menu.c
	$(DO_CC)

$(OUT_DIR)/m_multi.o :         $(CLIENT_DIR)/m_multi.c
	$(DO_CC)

$(OUT_DIR)/m_items.o :         $(CLIENT_DIR)/m_items.c
	$(DO_CC)

$(OUT_DIR)/m_script.o :         $(CLIENT_DIR)/m_script.c
	$(DO_CC)

$(OUT_DIR)/m_mp3.o :         $(CLIENT_DIR)/m_mp3.c
	$(DO_CC)

$(OUT_DIR)/roq_read.o :         $(CLIENT_DIR)/roq_read.c
	$(DO_CC)

$(OUT_DIR)/clq2_cin.o :		$(CLIENT_DIR)/clq2_cin.c
	$(DO_CC)

$(OUT_DIR)/pr_menu.o :		$(CLIENT_DIR)/pr_menu.c
	$(DO_CC)

$(OUT_DIR)/m_options.o :         $(CLIENT_DIR)/m_options.c
	$(DO_CC)

$(OUT_DIR)/m_single.o :         $(CLIENT_DIR)/m_single.c
	$(DO_CC)

$(OUT_DIR)/net_master.o :         $(CLIENT_DIR)/net_master.c
	$(DO_CC)

$(OUT_DIR)/m_master.o	:	$(CLIENT_DIR)/m_master.c
	$(DO_CC)

$(OUT_DIR)/nonintel.o :         $(SW_DIR)/nonintel.c
	$(DO_CC)

$(OUT_DIR)/r_bulleten.o :         $(CLIENT_DIR)/r_bulleten.c
	$(DO_CC)

$(OUT_DIR)/r_part.o :         $(CLIENT_DIR)/r_part.c
	$(DO_CC)
$(OUT_DIR)/r_partset.o :         $(CLIENT_DIR)/r_partset.c
	$(DO_CC)

$(OUT_DIR)/renderer.o :	$(CLIENT_DIR)/renderer.c
	$(DO_CC)

$(OUT_DIR)/renderque.o :	$(CLIENT_DIR)/renderque.c
	$(DO_CC)

$(OUT_DIR)/sbar.o :         $(CLIENT_DIR)/sbar.c
	$(DO_CC)

$(OUT_DIR)/skin.o :         $(CLIENT_DIR)/skin.c
	$(DO_CC)

$(OUT_DIR)/snd_dma.o :         $(CLIENT_DIR)/snd_dma.c
	$(DO_CC)

$(OUT_DIR)/snd_mem.o :         $(CLIENT_DIR)/snd_mem.c
	$(DO_CC)

$(OUT_DIR)/snd_mix.o :         $(CLIENT_DIR)/snd_mix.c
	$(DO_CC)

$(OUT_DIR)/snd_mp3.o :         $(CLIENT_DIR)/snd_mp3.c
	$(DO_CC)

$(OUT_DIR)/snd_ov.o :         $(CLIENT_DIR)/snd_ov.c
	$(DO_CC)

$(OUT_DIR)/view.o :         $(CLIENT_DIR)/view.c
	$(DO_CC)

$(OUT_DIR)/valid.o :         $(CLIENT_DIR)/valid.c
	$(DO_CC)

$(OUT_DIR)/wad.o :         $(CLIENT_DIR)/wad.c
	$(DO_CC)

$(OUT_DIR)/cd_linux.o :         $(CLIENT_DIR)/cd_linux.c
	$(DO_CC)

$(OUT_DIR)/sys_linux.o :         $(CLIENT_DIR)/sys_linux.c
	$(DO_CC)

$(OUT_DIR)/snd_linux.o :         $(CLIENT_DIR)/snd_linux.c
	$(DO_CC)

$(OUT_DIR)/math.o :         $(COMMON_DIR)/math.s
	$(DO_AS)

$(OUT_DIR)/snd_mixa.o :         $(CLIENT_DIR)/snd_mixa.s
	$(DO_AS)

$(OUT_DIR)/sys_dosa.o :         $(CLIENT_DIR)/sys_dosa.s
	$(DO_AS)

$(OUT_DIR)/gl_alias.o :		$(GL_DIR)/gl_alias.c
	$(DO_CC)

$(OUT_DIR)/gl_draw.o :         $(GL_DIR)/gl_draw.c
	$(DO_CC)

$(OUT_DIR)/gl_model.o :         $(GL_DIR)/gl_model.c
	$(DO_CC)

$(OUT_DIR)/gl_ngraph.o :         $(GL_DIR)/gl_ngraph.c
	$(DO_CC)

$(OUT_DIR)/gl_refrag.o :         $(GL_DIR)/gl_refrag.c
	$(DO_CC)

$(OUT_DIR)/gl_rlight.o :         $(GL_DIR)/gl_rlight.c
	$(DO_CC)

$(OUT_DIR)/gl_rmain.o :         $(GL_DIR)/gl_rmain.c
	$(DO_CC)

$(OUT_DIR)/gl_rmisc.o :         $(GL_DIR)/gl_rmisc.c
	$(DO_CC)

$(OUT_DIR)/gl_rsurf.o :         $(GL_DIR)/gl_rsurf.c
	$(DO_CC)

$(OUT_DIR)/gl_vidcommon.o :	$(GL_DIR)/gl_vidcommon.c
	$(DO_CC)

$(OUT_DIR)/gl_backend.o :         $(GL_DIR)/gl_backend.c
	$(DO_CC)

$(OUT_DIR)/gl_screen.o :         $(GL_DIR)/gl_screen.c
	$(DO_CC)

$(OUT_DIR)/gl_warp.o :         $(GL_DIR)/gl_warp.c
	$(DO_CC)

$(OUT_DIR)/gl_q2bsp.o :         $(COMMON_DIR)/gl_q2bsp.c
	$(DO_CC)

$(OUT_DIR)/gl_hlmdl.o :         $(GL_DIR)/gl_hlmdl.c
	$(DO_CC)

$(OUT_DIR)/gl_ppl.o :		$(GL_DIR)/gl_ppl.c
	$(DO_CC)

$(OUT_DIR)/gl_shader.o :	$(GL_DIR)/gl_shader.c
	$(DO_CC)

$(OUT_DIR)/gl_backend.o :	$(GL_DIR)/gl_backend.c
	$(DO_CC)


$(OUT_DIR)/gl_vidlinuxglx.o :         $(GL_DIR)/gl_vidlinuxglx.c
	$(DO_CC)

$(OUT_DIR)/gl_vidlinux.o :         $(GL_DIR)/gl_vidlinux.c
	$(DO_CC)

$(OUT_DIR)/ltface.o :			$(GL_DIR)/ltface.c
	$(DO_CC)
$(OUT_DIR)/snd_vc.o : $(SNDCODEC_DIR)/snd_vc.c
	$(DO_CC)

$(OUT_DIR)/snd_voicecodecs.o : $(SNDCODEC_DIR)/snd_voicecodecs.c
	$(DO_CC)
$(OUT_DIR)/g711.o : $(SNDCODEC_DIR)/g711.c
	$(DO_CC)
$(OUT_DIR)/g721.o : $(SNDCODEC_DIR)/g721.c
	$(DO_CC)
$(OUT_DIR)/g723_24.o : $(SNDCODEC_DIR)/g723_24.c
	$(DO_CC)
$(OUT_DIR)/g723_40.o : $(SNDCODEC_DIR)/g723_40.c
	$(DO_CC)
$(OUT_DIR)/g72x.o : $(SNDCODEC_DIR)/g72x.c
	$(DO_CC)

$(OUT_DIR)/mymad.o : $(CLIENT_DIR)/mymad.c
	$(DO_CC)
$(OUT_DIR)/fixed.o : $(MP3_DIR)/fixed.c
	$(DO_CC)
$(OUT_DIR)/bit.o : $(MP3_DIR)/bit.c
	$(DO_CC)
$(OUT_DIR)/timer.o : $(MP3_DIR)/timer.c
	$(DO_CC)
$(OUT_DIR)/stream.o : $(MP3_DIR)/stream.c
	$(DO_CC)
$(OUT_DIR)/frame.o : $(MP3_DIR)/frame.c
	$(DO_CC)
$(OUT_DIR)/synth.o : $(MP3_DIR)/synth.c
	$(DO_CC)
$(OUT_DIR)/decoder.o : $(MP3_DIR)/decoder.c
	$(DO_CC)
$(OUT_DIR)/layer12.o : $(MP3_DIR)/layer12.c
	$(DO_CC)
$(OUT_DIR)/layer3.o : $(MP3_DIR)/layer3.c
	$(DO_CC)
$(OUT_DIR)/huffman.o : $(MP3_DIR)/huffman.c3
	$(DO_CC)


$(OUT_DIR)/$(EXE_NAME): $(OBJS)
	$(CC) $(CFLAGS) -o $@ $(OBJS) $(LDFLAGS)

_out-rel:
	@-echo $(OUT_DIR)
	$(MAKE) -f Makefile.Linux $(OUT_DIR)/$(EXE_NAME) EXE_NAME="$(EXE_NAME)" OUT_DIR="$(OUT_DIR)" CFLAGS="$(CFLAGS) $(RELEASE_CFLAGS)" LDFLAGS="$(BASELDFLAGS) $(LDFLAGS)" OBJS="$(OBJS)"

_out-dbg:
	$(MAKE) -f Makefile.Linux $(OUT_DIR)/$(EXE_NAME) EXE_NAME="$(EXE_NAME)" OUT_DIR="$(OUT_DIR)" CFLAGS="$(CFLAGS) $(DEBUG_CFLAGS)" LDFLAGS="$(BASELDFLAGS) $(LDFLAGS)" OBJS="$(OBJS)"


_cl-rel:
	$(MAKE) -f Makefile.Linux _out-rel EXE_NAME="$(EXE_NAME)" OUT_DIR="$(OUT_DIR)" CFLAGS="$(CLIENT_ONLY_CFLAGS) $(CFLAGS)" LDFLAGS="$(LDFLAGS)" OBJS="$(OBJS) $(COMMON_OBJS) $(NQPROT_OBJS) $(CLIENT_OBJS) $(PROGS_OBJS)"

_cl-dbg:
	$(MAKE) -f Makefile.Linux _out-dbg EXE_NAME="$(EXE_NAME)" OUT_DIR="$(OUT_DIR)" CFLAGS="$(CLIENT_ONLY_CFLAGS) $(CFLAGS)" LDFLAGS="$(LDFLAGS)" OBJS="$(OBJS) $(COMMON_OBJS) $(NQPROT_OBJS) $(CLIENT_OBJS) $(PROGS_OBJS)"

_clsv-rel:
	$(MAKE) -f Makefile.Linux _out-rel EXE_NAME="$(EXE_NAME)" OUT_DIR="$(OUT_DIR)" CFLAGS="$(JOINT_CFLAGS) $(CFLAGS)" LDFLAGS="$(LDFLAGS)" OBJS="$(OBJS) $(COMMON_OBJS) $(NQPROT_OBJS) $(CLIENT_OBJS) $(PROGS_OBJS) $(SERVER_OBJS)"

_clsv-dbg:
	$(MAKE) -f Makefile.Linux _out-dbg EXE_NAME="$(EXE_NAME)" OUT_DIR="$(OUT_DIR)" CFLAGS="$(JOINT_CFLAGS) $(CFLAGS)" LDFLAGS="$(LDFLAGS)" OBJS="$(OBJS) $(COMMON_OBJS) $(NQPROT_OBJS) $(CLIENT_OBJS) $(PROGS_OBJS) $(SERVER_OBJS)"



SV_OBJS=$(COMMON_OBJS) $(NQPROT_OBJS) $(SERVER_OBJS) $(PROGS_OBJS) $(SERVERONLY_OBJS)
SV_EXE_NAME=../fteqwsv
SV_LDFLAGS=
SV_CFLAGS=$(SERVER_ONLY_CFLAGS)
SV_DIR=server
sv-tmp:
	$(MAKE) -f Makefile.Linux dirs
	$(MAKE) -f Makefile.Linux $(TYPE) OUT_DIR="$(OUT_DIR)" EXE_NAME="$(SV_EXE_NAME)" CFLAGS="$(SV_CFLAGS)" LDFLAGS="$(SV_LDFLAGS)" OBJS="$(SV_OBJS)"
sv-rel:
	$(MAKE) -f Makefile.Linux sv-tmp TYPE=_out-rel OUT_DIR="$(RELEASE_DIR)/$(SV_DIR)"
sv-dbg:
	$(MAKE) -f Makefile.Linux sv-tmp TYPE=_out-dbg OUT_DIR="$(DEBUG_DIR)/$(SV_DIR)"


GLXCL_OBJS=$(GLX_OBJS) $(GLQUAKE_OBJS)
GLX_EXE_NAME=../fteqw.glx
GLXCL_EXE_NAME=../fteqwcl.glx
GLX_LDFLAGS=$(GLXLDFLAGS)
GLX_CFLAGS=$(GLCFLAGS)
GLX_DIR=glx
GLXCL_DIR=glxcl
 
glxcl-tmp:
	$(MAKE) -f Makefile.Linux dirs
	$(MAKE) -f Makefile.Linux $(TYPE)   OUT_DIR="$(OUT_DIR)" EXE_NAME="$(GLXCL_EXE_NAME)" CFLAGS="$(GLX_CFLAGS)" LDFLAGS="$(GLX_LDFLAGS)" OBJS="$(GLXCL_OBJS)"
glx-tmp:
	$(MAKE) -f Makefile.Linux dirs
	$(MAKE) -f Makefile.Linux $(TYPE)   OUT_DIR="$(OUT_DIR)" EXE_NAME="$(GLX_EXE_NAME)" CFLAGS="$(GLX_CFLAGS)" LDFLAGS="$(GLX_LDFLAGS)" OBJS="$(GLXCL_OBJS)"

glxcl-rel:
	$(MAKE) -f Makefile.Linux glxcl-tmp TYPE=_cl-rel OUT_DIR="$(RELEASE_DIR)/$(GLXCL_DIR)"
glxcl-dbg:
	$(MAKE) -f Makefile.Linux glxcl-tmp TYPE=_cl-dbg OUT_DIR="$(DEBUG_DIR)/$(GLXCL_DIR)"
glx-rel:
	$(MAKE) -f Makefile.Linux glx-tmp TYPE=_clsv-rel OUT_DIR="$(RELEASE_DIR)/$(GLX_DIR)"
glx-dbg:
	$(MAKE) -f Makefile.Linux glx-tmp TYPE=_clsv-dbg OUT_DIR="$(DEBUG_DIR)/$(GLX_DIR)"

X11CL_OBJS=$(X11_OBJS) $(SOFTWARE_OBJS)
X11_EXE_NAME=../fteqw.x11
X11CL_EXE_NAME=../fteqwcl.x11
X11_LDFLAGS=$(XLDFLAGS)
X11_CFLAGS=$(SWCFLAGS)
X11_DIR=x11
X11CL_DIR=x11cl

x11cl-tmp:
	$(MAKE) -f Makefile.Linux dirs
	$(MAKE) -f Makefile.Linux $(TYPE)   OUT_DIR="$(OUT_DIR)" EXE_NAME="$(X11CL_EXE_NAME)" CFLAGS="$(X11_CFLAGS)" LDFLAGS="$(X11_LDFLAGS)" OBJS="$(X11CL_OBJS)"
x11-tmp:
	$(MAKE) -f Makefile.Linux dirs
	$(MAKE) -f Makefile.Linux $(TYPE)   OUT_DIR="$(OUT_DIR)" EXE_NAME="$(X11_EXE_NAME)" CFLAGS="$(X11_CFLAGS)" LDFLAGS="$(X11_LDFLAGS)" OBJS="$(X11CL_OBJS)"

x11cl-rel:
	$(MAKE) -f Makefile.Linux x11cl-tmp TYPE=_cl-rel OUT_DIR="$(RELEASE_DIR)/$(X11CL_DIR)"
x11cl-dbg:
	$(MAKE) -f Makefile.Linux x11cl-tmp TYPE=_cl-dbg OUT_DIR="$(DEBUG_DIR)/$(X11CL_DIR)"
x11-rel:
	$(MAKE) -f Makefile.Linux x11-tmp TYPE=_clsv-rel OUT_DIR="$(RELEASE_DIR)/$(X11_DIR)"
x11-dbg:
	$(MAKE) -f Makefile.Linux x11-tmp TYPE=_clsv-dbg OUT_DIR="$(DEBUG_DIR)/$(X11_DIR)"

XMCL_OBJS=$(SOFTWARE_OBJS) $(X11_OBJS) $(GLX_OBJS) $(GLQUAKE_OBJS) /usr/X11R6/lib/libXxf86vm.a
XM_EXE_NAME=../fteqw.x
XMCL_EXE_NAME=../fteqwcl.x
XM_LDFLAGS=$(XLDFLAGS) $(GLXLDFLAGS)
XM_CFLAGS=$(SWCFLAGS) $(GLCFLAGS)
XM_DIR=xm
XMCL_DIR=xmcl

xmcl-tmp:
	$(MAKE) -f Makefile.Linux dirs
	$(MAKE) -f Makefile.Linux $(TYPE)   OUT_DIR="$(OUT_DIR)" EXE_NAME="$(XMCL_EXE_NAME)" CFLAGS="$(XM_CFLAGS)" LDFLAGS="$(XM_LDFLAGS)" OBJS="$(XMCL_OBJS)"
xm-tmp:
	$(MAKE) -f Makefile.Linux dirs
	$(MAKE) -f Makefile.Linux $(TYPE)   OUT_DIR="$(OUT_DIR)" EXE_NAME="$(XM_EXE_NAME)" CFLAGS="$(XM_CFLAGS)" LDFLAGS="$(XM_LDFLAGS)" OBJS="$(XMCL_OBJS)"

xmcl-rel:
	$(MAKE) -f Makefile.Linux xmcl-tmp TYPE=_cl-rel OUT_DIR="$(RELEASE_DIR)/$(XMCL_DIR)"
xmcl-dbg:
	$(MAKE) -f Makefile.Linux xmcl-tmp TYPE=_cl-dbg OUT_DIR="$(DEBUG_DIR)/$(XMCL_DIR)"
xm-rel:
	$(MAKE) -f Makefile.Linux xm-tmp TYPE=_clsv-rel OUT_DIR="$(RELEASE_DIR)/$(XM_DIR)"
xm-dbg:
	$(MAKE) -f Makefile.Linux xm-tmp TYPE=_clsv-dbg OUT_DIR="$(DEBUG_DIR)/$(XM_DIR)"


all-rel: sv-rel xm-rel glx-rel x11-rel
all-dbg: sv-dbg xm-dbg glx-dbg x11-dbg

dirs2:
	@-mkdir $(OUT_DIR)
	@-mkdir $(OUT_DIR)/server
	@-mkdir $(OUT_DIR)/glx
	@-mkdir $(OUT_DIR)/glxcl
	@-mkdir $(OUT_DIR)/x11
	@-mkdir $(OUT_DIR)/x11cl
	@-mkdir $(OUT_DIR)/xm
	@-mkdir $(OUT_DIR)/xmcl

dirs:
	$(MAKE) -f Makefile.Linux dirs2 OUT_DIR="$(RELEASE_DIR)"
	$(MAKE) -f Makefile.Linux dirs2 OUT_DIR="$(DEBUG_DIR)"

help:
	@-echo "Specfic targets:"
	@-echo "dirs - use before anything else)"
	@-echo "clean - removes all output (use make dirs afterwards)"
	@-echo "all - make all the targets possible"
	@-echo ""
	@-echo "Normal targets:"
	@-echo "(each of these targets must have the postfix -rel or -dbg)"
	@-echo "sv"
	@-echo "xm"
	@-echo "x11"
	@-echo "x11cl"
	@-echo "glx"
	@-echo "glxcl"
	@-echo "all"

clean:
	-rm -f -r $(RELEASE_DIR)
	-rm -f -r $(DEBUG_DIR)

