import filecmp
import os
import subprocess
from sys import executable as python_cmd

Import('*')

if env['platform'] == 'windows':
    SConscript('getopt/SConscript')

SConscript('util/xmlpool/SConscript')
SConscript('util/SConscript')
SConscript('compiler/SConscript')

if env['hostonly']:
    # We are just compiling the things necessary on the host for cross
    # compilation
    Return()


def write_git_sha1_h_file(filename):
    """Mesa looks for a git_sha1.h file at compile time in order to display
    the current git hash id in the GL_VERSION string.  This function tries
    to retrieve the git hashid and write the header file.  An empty file
    will be created if anything goes wrong."""

    args = [ python_cmd, Dir('#').abspath + '/bin/git_sha1_gen.py', '--output', filename ]
    try:
        subprocess.call(args)
    except:
        print("Warning: exception in write_git_sha1_h_file()")
        return


# Create the git_sha1.h header file
write_git_sha1_h_file("git_sha1.h")
# and update CPPPATH so the git_sha1.h header can be found
env.Append(CPPPATH = ["#" + env['build_dir']])



if env['platform'] != 'windows':
    SConscript('loader/SConscript')

# When env['gles'] is set, the targets defined in mapi/glapi/SConscript are not
# used.  libgl-xlib and libgl-gdi adapt themselves to use the targets defined
# in mapi/glapi-shared/SConscript.  mesa/SConscript also adapts itself to
# enable OpenGL ES support.
SConscript('mapi/glapi/gen/SConscript')
SConscript('mapi/glapi/SConscript')

# Haiku C++ libGL dispatch (renderers depend on libgl)
if env['platform'] in ['haiku']:
    SConscript('hgl/SConscript')

SConscript('mesa/SConscript')

if not env['embedded']:
    if env['platform'] not in ('cygwin', 'darwin', 'freebsd', 'haiku', 'windows'):
        SConscript('glx/SConscript')
    if env['platform'] == 'haiku':
        SConscript('egl/SConscript')

    if env['gles']:
        SConscript('mapi/shared-glapi/SConscript')

SConscript('gallium/SConscript')

