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

Import('*')

if env['platform'] == 'windows':
    SConscript('getopt/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')

SConscript('mapi/glapi/gen/SConscript')
SConscript('mapi/glapi/SConscript')

SConscript('mesa/SConscript')

SConscript('gallium/SConscript')

