#######################################################################
# SConscript for xlib winsys

Import('*')

env = env.Clone()

env.Append(CPPPATH = [
    '#/src/mapi',
    '#/src/mesa',
    '#/src/mesa/main',
    '#src/gallium/state_trackers/glx/xlib',
    Dir('../../../mapi'), # src/mapi build path for python-generated GL API files/headers
])

env.Append(CPPDEFINES = ['USE_XSHM'])

env.Prepend(LIBS = env['X11_LIBS'])
env.Prepend(LIBPATH = env['X11_LIBPATH'])

# when GLES is enabled, gl* and _glapi_* belong to bridge_glapi and
# shared_glapi respectively
if env['gles']:
    env.Prepend(LIBPATH = [shared_glapi.dir])
    glapi = [bridge_glapi, 'glapi']

env.Prepend(LIBS = [
    st_xlib,
    ws_xlib,
    glapi,
    mesautil,
    compiler,
    mesa,
    glsl,
    nir,
    gallium,
])

sources = [
    'xlib.c',
]

if True:
    env.Append(CPPDEFINES = ['GALLIUM_TRACE', 'GALLIUM_RBUG', 'GALLIUM_SOFTPIPE'])
    env.Prepend(LIBS = [trace, rbug, softpipe])

if env['llvm']:
    env.Append(CPPDEFINES = ['GALLIUM_LLVMPIPE'])
    env.Prepend(LIBS = [llvmpipe])

    if env['swr']:
        env.Append(CPPDEFINES = 'GALLIUM_SWR')
        env.Prepend(LIBS = [swr])

if env['platform'] != 'darwin':
    # Disallow undefined symbols, except with Address Sanitizer, since libasan
    # is not linked on shared libs, as it should be LD_PRELOAD'ed instead
    if not env['asan']:
        env.Append(SHLINKFLAGS = [
            '-Wl,-z,defs',
        ])
    env.Append(SHLINKFLAGS = [
        # Restrict exported symbols
        '-Wl,--version-script=%s' % File("libgl-xlib.sym").srcnode().path,
    ])

# libGL.so.1.5
libgl_1_5 = env.SharedLibrary(
    target ='GL',
    source = sources,
    SHLIBSUFFIX = env['SHLIBSUFFIX'] + '.1.5',
)

# libGL.so.1
libgl = env.subst('${SHLIBPREFIX}GL${SHLIBSUFFIX}')
libgl_1 = libgl + '.1'
env.Command(libgl_1, libgl_1_5, "ln -sf ${SOURCE.file} ${TARGET}")
env.Command(libgl, libgl_1, "ln -sf ${SOURCE.file} ${TARGET}")

env.Alias('libgl-xlib', libgl)