#! /usr/bin/env python
# encoding: utf-8
# mittorn, 2018

from waflib import Logs
import os

top = '.'

def options(opt):
	grp = opt.add_option_group('ref_gl options')

	grp.add_option('--enable-static-gl', action='store_true', dest='GL_STATIC',
	    help = 'don\'t load opengl in runtime, instead link to libGL directly(default: False)')

	grp.add_option('--enable-gles1', action='store_true', dest='NANOGL',
	    help = 'enable gles1 renderer by linking nanogl statically(put source to ref_gl directory)')

	grp.add_option('--enable-gles2', action='store_true', dest='GLWES',
	    help = 'enable gles2 renderer by linking gl-wes-v2 statically(put source to ref_gl directory)')
	
	grp.add_option('--disable-gl', action='store_false', dest='GL', default=True,
		help = 'disable building OpenGL renderer(default: False)')

	# stub
	return

def configure(conf):
	# check for dedicated server build
	if conf.options.DEDICATED:
		return

	if conf.options.SUPPORT_BSP2_FORMAT:
		conf.env.append_unique('DEFINES', 'SUPPORT_BSP2_FORMAT')

	conf.env.NANOGL = conf.options.NANOGL
	conf.env.GLWES  = conf.options.GLWES
	conf.env.GL     = conf.options.GL

	if conf.env.NANOGL:
		conf.add_subproject('nanogl')
	if conf.env.GLWES:
		conf.add_subproject('gl-wes-v2')

	conf.env.GL_STATIC = conf.options.GL_STATIC
	if conf.env.GL_STATIC:
		conf.check( lib='GL' )

	conf.env.append_unique('DEFINES', 'REF_DLL')
	if conf.env.DEST_OS2 == 'android':
		conf.check_cc(lib='log')

def build(bld):
	libs = [ 'public', 'M' ]

	source = bld.path.ant_glob(['*.c'])

	includes = ['.',
		'../engine',
		'../engine/common',
		'../engine/server',
		'../engine/client',
		'../public',
		'../common',
		'../pm_shared' ]

	def link_gl( glstatic ):
		if glstatic: return ['GL']
		else: return []

	def static_gl( glstatic ):
		if glstatic: return ['XASH_GL_STATIC']
		else: return []

	if bld.env.GL:
		bld.shlib(
			source   = source,
			target   = 'ref_gl',
			features = 'c',
			includes = includes,
			use      = libs + link_gl(bld.env.GL_STATIC),
			defines  = static_gl(bld.env.GL_STATIC),
			install_path = bld.env.LIBDIR,
			subsystem = bld.env.MSVC_SUBSYSTEM
		)

	if bld.env.NANOGL:
		bld.add_subproject('nanogl')
		bld.shlib(
			source   = source,
			target   = 'ref_gles1',
			features = 'c',
			includes = includes,
			use      = libs + ['DL', 'nanogl'],
			defines  = ['XASH_NANOGL'],
			install_path = bld.env.LIBDIR,
			subsystem = bld.env.MSVC_SUBSYSTEM)

	if bld.env.GLWES:
		bld.add_subproject('gl-wes-v2')
		bld.shlib(
			source   = source,
			target   = 'ref_gles2',
			features = 'c',
			includes = includes,
			use      = libs + ['DL', 'gl-wes-v2'],
			defines  = ['XASH_WES'],
			install_path = bld.env.LIBDIR,
			subsystem = bld.env.MSVC_SUBSYSTEM)