CC=gcc -mno-cygwin
CPUOPTIMIZATIONS=-march=pentiumpro

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

DO_CC=$(CC) $(CFLAGS) -o $@ -c $<
DO_AS=$(CC) $(CFLAGS) -x assembler-with-cpp -DELF -o $@ -c $<
BASELDFLAGS=-lole32 -ldxguid -lwsock32 -lwinmm -lgdi32
GLXLDFLAGS=-L/usr/X11R6/lib -lGL -lX11 -lXext
GLSLDFLAGS=-L/usr/X11R6/lib -lMesaGL -lglide -lvga
XLDFLAGS=-L/usr/X11R6/lib -lX11 -lXext
SLDFLAGS=-lvga
W32LDFLAGS=
RELEASELDFLAGS=-s


BASE_CFLAGS=-Wall -I$(CLIENT_DIR) -I$(COMMON_DIR) -I$(SW_DIR) -I$(GL_DIR) -I$(SERVER_DIR) -I$(PROGS_DIR) -I$(DXSDK_DIR)/include -DWEBSVCL -D_WIN32
CLIENT_ONLY_CFLAGS=$(BASE_CFLAGS) -DCLIENTONLY
SERVER_ONLY_CFLAGS=$(BASE_CFLAGS) -DSERVERONLY
JOINT_CFLAGS=$(BASE_CFLAGS)
DEBUG_CFLAGS=-g -ggdb -DZQUAKETEAMPLAY
RELEASE_CFLAGS=-O6 -s -fno-strict-aliasing -ffast-math -funroll-loops -fexpensive-optimizations $(CPUOPTIMIZATIONS)
GLCFLAGS=

NQPROT_OBJS = \
	$(OUT_DIR)/net_main.o	\
	$(OUT_DIR)/net_wipx.o	\
	$(OUT_DIR)/net_loop.o	\
	$(OUT_DIR)/net_dgrm.o	\
	$(OUT_DIR)/net_nqwin.o	\
	$(OUT_DIR)/net_vcr.o
CLIENT_OBJS = \
	textedit.o	\
	teamplay.o	\
	zqtp.o		\
	cl_demo.o	\
	cl_ents.o	\
	clq2_ents.o	\
	cl_input.o	\
	cl_main.o	\
	cl_parse.o	\
	cl_pred.o	\
	cl_tent.o	\
	cl_cam.o	\
	cl_ui.o	\
	cl_screen.o  \
	clq2_cin.o	\
	qvm.o	\
	irc_cl.o	\
	ftp_cl.o	\
	http_cl.o	\
	console.o	\
	image.o	\
	in_win.o	\
	keys.o	\
	menu.o	\
	m_master.o	\
	m_multi.o	\
	m_items.o	\
	m_options.o	\
	m_single.o	\
	m_script.o	\
	m_mp3.o	\
	roq_read.o	\
	net_master.o	\
	nonintel.o	\
	r_bulleten.o	\
	r_part.o	\
	r_partset.o	\
	renderer.o	\
	renderque.o	\
	sbar.o	\
	skin.o	\
	snd_dma.o	\
	snd_mem.o	\
	snd_mix.o	\
	snd_mp3.o	\
	snd_ov.o	\
	valid.o		\
	view.o		\
	wad.o		\
	cd_win.o	\
	fragstats.o	\
	clsys_win.o	\
	snd_win.o	\
					\
	pop3noti.o	\
	imapnoti.o	\
					\
	m_x.o		\
	x_reqs.o	\
	x_res.o		\
					\
	snd_mixa.o	
#\
#	sys_dosa.o

SOFTWARE_OBJS = \
	sw_screen.o	\
	sw_draw.o	\
	sw_model.o	\
	r_aclip.o	\
	r_aclipa.o	\
	r_alias.o	\
	r_aliasa.o	\
	r_bsp.o	\
	r_draw.o	\
	r_drawa.o	\
	r_edge.o	\
	r_edgea.o	\
	r_light.o	\
	r_main.o	\
	r_misc.o	\
	r_sky.o	\
	r_sprite.o	\
	r_surf.o	\
	r_vars.o	\
	r_varsa.o	\
				\
	d_draw.o	\
	d_draw16.o	\
	d_edge.o	\
	d_fill.o	\
	d_init.o	\
	d_modech.o	\
	d_part.o	\
	d_parta.o	\
	d_polyse.o	\
	d_polysa.o	\
	d_scan.o	\
	d_scana.o	\
	d_sky.o	\
	d_spr8.o	\
	d_sprite.o	\
	d_surf.o	\
	d_trans.o	\
	d_vars.o	\
	d_varsa.o	\
	d_zpoint.o	\
				\
	r_efrag.o	\
	surf16.o	\
	surf8.o

#	d_copy.o	\


X11_OBJS = vid_x.o
W32_OBJS = vid_win2.o \
		vid_ddraw.o \
		vid_dib.o

GLQUAKE_OBJS = \
	gl_alias.o	\
	gl_ppl.o	\
	gl_draw.o	\
	gl_model.o	\
	gl_ngraph.o	\
	gl_rlight.o	\
	gl_rmain.o	\
	gl_rmisc.o	\
	glmod_doom.o	\
	ltface.o	\
	gl_rsurf.o	\
	gl_vidcommon.o	\
	gl_screen.o	\
	gl_backend.o	\
	gl_warp.o	\
	gl_hlmdl.o

#	gl_refrag.o	\

GLW32_OBJS = gl_vidnt.o
GLX_OBJS = gl_vidlinuxglx.o
GLS_OBJS = gl_vidlinux.o
MP3_OBJS = \
	fixed.o \
	bit.o \
	timer.o \
	stream.o \
	frame.o \
	synth.o \
	decoder.o \
	layer12.o \
	layer3.o \
	huffman.o \
	mymad.o

PROGS_OBJS = \
	comprout.o \
	hash.o \
	initlib.o \
	pr_edict.o \
	pr_exec.o \
	pr_multi.o \
	qcc_cmdlib.o \
	QccMain.o \
	qcc_pr_comp.o \
	qcc_pr_lex.o \
	qcdecomp.o \
	qcd_main.o

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

SERVERONLY_OBJS = \
	svmodel.o \
	svsys_win.o

COMMON_OBJS = \
	common.o 	\
	cvar.o 	\
	cmd.o 	\
	crc.o 	\
	mathlib.o 	\
	math.o	\
	md4.o 	\
	md5.o 	\
	huff.o	\
	q2pmove.o	\
	net_chan.o 	\
	net_win.o 	\
	zone.o 	\
	gl_q2bsp.o	\
	q1bsp.o 	\
	pmove.o	\
	pmovetst.o	\
	iwebiface.o	\
	translate.o

VPATH=$(CLIENT_DIR):$(COMMON_DIR)

all: all-rel all-dbg

.o : $(subst /, ,$(VPATH)) $@
	$(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 : $(CLIENT_DIR)/vid_x.c
	$(DO_CC)
$(OUT_DIR)/vid_win2.o : $(SW_DIR)/vid_win2.c
	$(DO_CC)

$(OUT_DIR)/vid_ddraw.o : $(SW_DIR)/vid_ddraw.c
	$(DO_CC)
$(OUT_DIR)/vid_dib.o : $(SW_DIR)/vid_dib.c
	$(DO_CC)

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

$(OUT_DIR)/qvm.o : $(COMMON_DIR)/qvm.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)/q1bsp.o :		$(COMMON_DIR)/q1bsp.c
	$(DO_CC)

$(OUT_DIR)/common.o :         $(COMMON_DIR)/common.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)/huff.o :         $(COMMON_DIR)/huff.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_win.o :		$(COMMON_DIR)/net_wins.c
	$(DO_CC)

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

$(OUT_DIR)/q2pmove.o :		$(COMMON_DIR)/q2pmove.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_wipx.o :		$(NQPROT_DIR)/net_wipx.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_nqwin.o :	$(NQPROT_DIR)/net_win.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)/ftp_cl.o :	$(HTTP_DIR)/ftpclient.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)/http_cl.o :	$(HTTP_DIR)/httpclient.c
	$(DO_CC)
$(OUT_DIR)/ftpclient.o	:	$(HTTP_DIR)/ftpclient.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)/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)/model.c
	$(DO_CC)

$(OUT_DIR)/svsys_win.o :         $(SERVER_DIR)/sys_win.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)/clq2_cin.o :         $(CLIENT_DIR)/clq2_cin.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_x.o :			$(QUX_DIR)/m_x.c
	$(DO_CC)
$(OUT_DIR)/x_reqs.o :			$(QUX_DIR)/x_reqs.c
	$(DO_CC)
$(OUT_DIR)/x_res.o :			$(QUX_DIR)/x_res.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)/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_win.o :         $(CLIENT_DIR)/cd_win.c
	$(DO_CC)

$(OUT_DIR)/clsys_win.o :         $(CLIENT_DIR)/sys_win.c
	$(DO_CC)

$(OUT_DIR)/snd_win.o :         $(CLIENT_DIR)/snd_win.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)/fragstats.o :         $(CLIENT_DIR)/fragstats.c
	$(DO_CC)

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

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

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

$(OUT_DIR)/gl_ppl.o :         $(GL_DIR)/gl_ppl.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)/glmod_doom.o :         $(GL_DIR)/glmod_doom.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)/ltface.o :         $(GL_DIR)/ltface.c
	$(DO_CC)

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


$(OUT_DIR)/gl_vidnt.o :         $(GL_DIR)/gl_vidnt.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)/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.c
	$(DO_CC)


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

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

_out-dbg:
	$(MAKE) -f Makefile.mingw $(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.mingw _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.mingw _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.mingw _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.mingw _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.mingw dirs
	$(MAKE) -f Makefile.mingw $(TYPE) OUT_DIR="$(OUT_DIR)" EXE_NAME="$(SV_EXE_NAME)" CFLAGS="$(SV_CFLAGS)" LDFLAGS="$(SV_LDFLAGS)" OBJS="$(SV_OBJS)"
sv-rel:
	$(MAKE) -f Makefile.mingw sv-tmp TYPE=_out-rel OUT_DIR="$(RELEASE_DIR)/$(SV_DIR)"
sv-dbg:
	$(MAKE) -f Makefile.mingw 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.mingw dirs
	$(MAKE) -f Makefile.mingw $(TYPE)   OUT_DIR="$(OUT_DIR)" EXE_NAME="$(GLXCL_EXE_NAME)" CFLAGS="$(GLX_CFLAGS)" LDFLAGS="$(GLX_LDFLAGS)" OBJS="$(GLXCL_OBJS)"
glx-tmp:
	$(MAKE) -f Makefile.mingw dirs
	$(MAKE) -f Makefile.mingw $(TYPE)   OUT_DIR="$(OUT_DIR)" EXE_NAME="$(GLX_EXE_NAME)" CFLAGS="$(GLX_CFLAGS)" LDFLAGS="$(GLX_LDFLAGS)" OBJS="$(GLXCL_OBJS)"

glxcl-rel:
	$(MAKE) -f Makefile.mingw glxcl-tmp TYPE=_cl-rel OUT_DIR="$(RELEASE_DIR)/$(GLXCL_DIR)"
glxcl-dbg:
	$(MAKE) -f Makefile.mingw glxcl-tmp TYPE=_cl-dbg OUT_DIR="$(DEBUG_DIR)/$(GLXCL_DIR)"
glx-rel:
	$(MAKE) -f Makefile.mingw glx-tmp TYPE=_clsv-rel OUT_DIR="$(RELEASE_DIR)/$(GLX_DIR)"
glx-dbg:
	$(MAKE) -f Makefile.mingw 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=-DSWQUAKE
X11_DIR=x11
X11CL_DIR=x11cl

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

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

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

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

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



W32MCL_OBJS=$(SOFTWARE_OBJS) $(W32_OBJS) $(GLW32_OBJS) $(GLQUAKE_OBJS)
# $(MP3_OBJS)
W32M_EXE_NAME=../fteqw.exe
W32MCL_EXE_NAME=../fteqwcl.exe
W32M_LDFLAGS=$(W32LDFLAGS) $(GLW32LDFLAGS) -mwindows
W32M_CFLAGS=-DNOASM -DSWQUAKE -DGLQUAKE $(GLCFLAGS)
W32M_DIR=w32m
W32MCL_DIR=w32mcl

_w32mcl-tmp:
	$(MAKE) -f Makefile.mingw dirs
	$(MAKE) -f Makefile.mingw $(TYPE)   OUT_DIR="$(OUT_DIR)" EXE_NAME="$(W32MCL_EXE_NAME)" CFLAGS="$(W32M_CFLAGS)" LDFLAGS="$(W32M_LDFLAGS)" OBJS="$(W32MCL_OBJS)"
_w32m-tmp:
	$(MAKE) -f Makefile.mingw dirs
	$(MAKE) -f Makefile.mingw $(TYPE)   OUT_DIR="$(OUT_DIR)" EXE_NAME="$(W32M_EXE_NAME)" CFLAGS="$(W32M_CFLAGS)" LDFLAGS="$(W32M_LDFLAGS)" OBJS="$(W32MCL_OBJS)"

w32mcl-rel:
	$(MAKE) -f Makefile.mingw _w32mcl-tmp TYPE=_cl-rel OUT_DIR="$(RELEASE_DIR)/$(W32MCL_DIR)"
w32mcl-dbg:
	$(MAKE) -f Makefile.mingw _w32mcl-tmp TYPE=_cl-dbg OUT_DIR="$(DEBUG_DIR)/$(W32MCL_DIR)"
w32m-rel:
	$(MAKE) -f Makefile.mingw _w32m-tmp TYPE=_clsv-rel OUT_DIR="$(RELEASE_DIR)/$(W32M_DIR)"
w32m-dbg:
	$(MAKE) -f Makefile.mingw _w32m-tmp TYPE=_clsv-dbg OUT_DIR="$(DEBUG_DIR)/$(W32M_DIR)"

w32m:
	$(MAKE) -f Makefile.mingw w32m-rel


all-rel: sv-rel xm-rel glxcl-rel glx-rel x11cl-rel x11-rel
all-dbg: sv-dbg xm-dbg glxcl-dbg glx-dbg x11cl-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
	@-mkdir $(OUT_DIR)/w32m
	@-mkdir $(OUT_DIR)/w32mcl

dirs:
	$(MAKE) -f Makefile.mingw dirs2 OUT_DIR="$(RELEASE_DIR)"
	$(MAKE) -f Makefile.mingw 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)