Import('*')

if not env['x11'] or not env['xcb'] or not env['drm']:
    Return()

from sys import executable as python_cmd

env = env.Clone()

env.Prepend(CPPPATH = [
	'.',           # the build/<platform>/glx/ directory
	'#include',
	'#include/GL/internal',
	'#src/',
	'#src/loader',
	'#src/mesa',
	'#src/mapi',
	'#src/mapi/glapi',
	#$(LIBDRM_CFLAGS)
	#$(DRI2PROTO_CFLAGS)
	#$(GLPROTO_CFLAGS)
	#$(X11_INCLUDES)
])

env.Append(CPPDEFINES = [
    '_REENTRANT',
    #('DEFAULT_DRIVER_DIR', 'DRI_DRIVER_SEARCH_DIR')
])

env.Prepend(LIBS = [
    libloader,
    glapi
])

env.PkgUseModules('X11')
env.PkgUseModules('XCB')
env.PkgUseModules('DRM')

if env['HAVE_XF86VIDMODE']:
    env.Append(CPPDEFINES = ['XF86VIDMODE'])
    env.PkgUseModules('XF86VIDMODE')

if False: # XXX: SHARED_GLAPI
    env.Append(CPPDEFINES = ['GLX_SHARED_GLAPI'])

sources = [
    'clientattrib.c',
    'clientinfo.c',
    'create_context.c',
    'compsize.c',
    'eval.c',
    'glx_error.c',
    'glxconfig.c',
    'glxcmds.c',
    'glxcurrent.c',
    'glxext.c',
    'glxextensions.c',
    'indirect_glx.c',
    'indirect.c',
    'indirect_init.c',
    'indirect_size.c',
    'indirect_window_pos.c',
    'indirect_texture_compression.c',
    'indirect_transpose_matrix.c',
    'indirect_vertex_array.c',
    'indirect_vertex_program.c',
    'pixel.c',
    'pixelstore.c',
    'query_renderer.c',
    'render2.c',
    'renderpix.c',
    'single2.c',
    'singlepix.c',
    'vertarr.c',
    'xfont.c',
    'glx_pbuffer.c',
    'glx_query.c',
    'drisw_glx.c',
    'dri_common.c',
    'dri_glx.c',
    'XF86dri.c',
    'glxhash.c',
    'dri2_glx.c',
    'dri2.c',
    'dri_common_query_renderer.c',
    #'dri3_glx.c',
    'applegl_glx.c',
]

libgl = env.SharedLibrary(
    target ='GL',
    source = sources,
)


# Generate GLX-specific .c and .h files here.  Other GL API-related
# files are used, but they're generated in mapi/glapi/gen/ since they're
# used by other targets as well.

GLAPI = '#src/mapi/glapi/'
sources = [GLAPI + 'gen/gl_API.xml'] + env.Glob(GLAPI + 'gen/*.xml')

env.CodeGenerate(
    target = 'indirect.c',
    script = GLAPI + 'gen/glX_proto_send.py',
    source = sources,
    command = python_cmd + ' $SCRIPT -f $SOURCE -m proto > $TARGET'
    )

env.CodeGenerate(
    target = 'indirect_size.c', 
    script = GLAPI + 'gen/glX_proto_size.py',
    source = sources,
    command = python_cmd + ' $SCRIPT -f $SOURCE -m size_c --only-set > $TARGET'
)

env.CodeGenerate(
    target = 'indirect_init.c', 
    script = GLAPI + 'gen/glX_proto_send.py',
    source = sources,
    command = python_cmd + ' $SCRIPT -f $SOURCE -m init_c > $TARGET'
)

env.CodeGenerate(
    target = 'indirect_size.h',
    script = GLAPI + 'gen/glX_proto_size.py',
    source = sources,
    command = python_cmd + ' $SCRIPT -f $SOURCE -m size_h --only-set --header-tag _INDIRECT_SIZE_H > $TARGET'
)

env.CodeGenerate(
    target = 'indirect.h',
    script = GLAPI + 'gen/glX_proto_send.py',
    source = sources,
    command = python_cmd + ' $SCRIPT -m init_h -f $SOURCE > $TARGET',
    )


libgl = env.InstallSharedLibrary(libgl, version=(1, 2))

env.Alias('glx', libgl)
env.Alias('libgl', libgl)