#
# QuakeWorld/FuhQuake Makefile for FreeBSD
#
#	- now should build on non-x86
#	- no longer requires gmake(1)
#	- debug targets support axed out
#	- couple of useful knobs added
#
# Created on Wednesday, May 21 2003 by Alexey Dokuchaev <danfe@regency.nsu.ru>
#
# $FreeBSD: ports/games/fuhquake/files/Makefile,v 1.1 2003/06/02 18:29:57 fjoe Exp $
#

DO_CFLAGS =	${CFLAGS} -funsigned-char -I${LOCALBASE}/include -I${X11BASE}/include

.if make(svga)
DO_CFLAGS +=	-DNO_WINDOWED_MOUSE
.undef WITHOUT_X86_ASM
.endif

.if ${MACHINE_ARCH} == "i386" && !defined(WITHOUT_X86_ASM)
DO_CFLAGS +=	-Did386
.endif

.if make(glx)
DO_CFLAGS +=	-DWITH_PNG -DWITH_JPEG -DGLQUAKE -DWITH_DGA -DWITH_VMODE
.endif

.if defined(WITH_OPTIMIZED_CFLAGS)
DO_CFLAGS +=	-O9 -pipe -s -ffast-math -funroll-loops -fomit-frame-pointer -fexpensive-optimizations
.endif

.if defined(WITH_XMMS) && !make(svga)
DO_CFLAGS +=	-D__XMMS__ `xmms-config --cflags`
XMMS_LIBS = -L${X11BASE}/lib -lxmms
. if ${OSVERSION} < 500016
XMMS_LIBS+=	-pthread
. else
XMMS_LIBS+=	-lc_r
. endif
.endif

########################################################################

CL_COMMON_OBJS = \
		host.o \
		sys_linux.o \
		nonintel.o \
\
		cd_freebsd.o \
		snd_freebsd.o \
		snd_dma.o \
		snd_mem.o \
		snd_mix.o \
\
		cl_input.o \
		keys.o \
\
		net_chan.o \
		net_udp.o \
\
		pr_cmds.o \
		pr_edict.o \
		pr_exec.o \
\
		pmove.o \
		pmovetst.o \
		sv_ccmds.o \
		sv_ents.o \
		sv_init.o \
		sv_main.o \
		sv_move.o \
		sv_nchan.o \
		sv_phys.o \
		sv_save.o \
		sv_send.o \
		sv_user.o \
		sv_world.o \
\
		cl_cam.o \
		cl_cmd.o \
		cl_demo.o \
		cl_ents.o \
		cl_main.o \
		cl_parse.o \
		cl_pred.o \
		cl_slist.o \
		cl_tent.o \
		cl_view.o \
\
		cmd.o \
		common.o \
		console.o \
		crc.o \
		cvar.o \
		image.o \
		mathlib.o \
		mdfour.o \
		menu.o \
		sbar.o \
		skin.o \
		teamplay.o \
		version.o \
		wad.o \
		zone.o \
\
		auth.o \
		config_manager.o \
		fchecks.o \
		fmod.o \
		ignore.o \
		logging.o \
		modules.o \
		movie.o \
		mp3_player.o \
		rulesets.o \
		utils.o

.if ${MACHINE_ARCH} == "i386" && !defined(WITHOUT_X86_ASM)
CL_COMMON_AS_OBJS = \
		cl_math.o \
		math.o \
		snd_mixa.o \
		sys_x86.o
.endif

CL_SOFT_OBJS = \
		d_edge.o \
		d_fill.o \
		d_init.o \
		d_modech.o \
		d_part.o \
		d_polyse.o \
		d_scan.o \
		d_sky.o \
		d_sprite.o \
		d_surf.o \
		d_vars.o \
		d_zpoint.o \
\
		screen.o \
\
		r_aclip.o \
		r_alias.o \
		r_bsp.o \
		r_draw.o \
		r_edge.o \
		r_efrag.o \
		r_light.o \
		r_main.o \
		r_misc.o \
		r_model.o \
		r_part.o \
		r_rast.o \
		r_sky.o \
		r_sprite.o \
		r_surf.o \
		r_vars.o

.if ${MACHINE_ARCH} == "i386" && !defined(WITHOUT_X86_ASM)
CL_SOFT_AS_OBJS = \
		d_draw.o \
		d_draw16.o \
		d_parta.o \
		d_polysa.o \
		d_scana.o \
		d_spr8.o \
		d_varsa.o \
		r_aclipa.o \
		r_aliasa.o \
		r_drawa.o \
		r_edgea.o \
		r_varsa.o \
		surf16.o \
		surf8.o
.endif

CL_X11_OBJS = vid_x11.o

CL_GLX_OBJS = \
		gl_draw.o \
		gl_image.o \
		gl_mesh.o \
		gl_model.o \
		gl_ngraph.o \
		gl_refrag.o \
		gl_rlight.o \
		gl_rmain.o \
		gl_rmisc.o \
		gl_rpart.o \
		gl_rsurf.o \
		gl_screen.o \
		gl_texture.o \
		gl_warp.o \
		r_part.o \
		vid_common_gl.o \
		vid_glx.o

CL_SVGA_OBJS = vid_svgalib.o

.if ${MACHINE_ARCH} == "i386" && !defined(WITHOUT_X86_ASM)
CL_SVGA_AS_OBJS = d_copy.o
.endif

CL_COMMON_LIBS = -lm
CL_X11_LIBS = -L${X11BASE}/lib -lX11 -lXext
CL_SVGA_LIBS = -L${LOCALBASE}/lib -lvga
CL_GLX_LIBS = -L${LOCALBASE}/lib -lpng -ljpeg -L${X11BASE}/lib -lGL -lXxf86dga -lXxf86vm

.c.o:
		${CC} ${DO_CFLAGS} -c $< -o $*.o

.s.o:
		${CC} ${DO_CFLAGS} -DELF -x assembler-with-cpp -c $< -o $*.o

x11:	${CL_COMMON_OBJS} ${CL_COMMON_AS_OBJS} \
	${CL_SOFT_OBJS} ${CL_SOFT_AS_OBJS} ${CL_X11_OBJS}
		${CC} ${CFLAGS} -o fuhquake-x11 \
			${CL_COMMON_OBJS} ${CL_COMMON_AS_OBJS} ${CL_SOFT_OBJS} \
			${CL_SOFT_AS_OBJS} ${CL_X11_OBJS} \
			${CL_COMMON_LIBS} ${CL_X11_LIBS} ${XMMS_LIBS}

glx:	${CL_COMMON_OBJS} ${CL_COMMON_AS_OBJS} ${CL_GLX_OBJS}
		${CC} ${CFLAGS} -o fuhquake-glx \
			${CL_COMMON_OBJS} ${CL_COMMON_AS_OBJS} ${CL_GLX_OBJS} \
			${CL_COMMON_LIBS} ${CL_GLX_LIBS} ${XMMS_LIBS}

svga:	${CL_COMMON_OBJS} ${CL_COMMON_AS_OBJS} \
	${CL_SOFT_OBJS} ${CL_SOFT_AS_OBJS} ${CL_SVGA_OBJS} ${CL_SVGA_AS_OBJS}
		${CC} ${DO_CFLAGS} -o fuhquake-svga \
			${CL_COMMON_OBJS} ${CL_COMMON_AS_OBJS} ${CL_SOFT_OBJS} \
			${CL_SOFT_AS_OBJS} ${CL_SVGA_OBJS} ${CL_SVGA_AS_OBJS} \
			${CL_COMMON_LIBS} ${CL_SVGA_LIBS} ${XMMS_LIBS}

clean:
		-rm -f *.o *.core
