import os
import pipes
import shlex
import sys

if not 'go' in config.root.llvm_bindings:
    config.unsupported = True

if not config.root.include_go_tests:
    config.unsupported = True

if config.have_tf_aot or config.have_tf_api:
    config.unsupported = True

def find_executable(executable, path=None):
    if path is None:
        path = os.environ['PATH']
    paths = path.split(os.pathsep)
    base, ext = os.path.splitext(executable)

    if (sys.platform == 'win32' or os.name == 'os2') and (ext != '.exe'):
        executable = executable + '.exe'

    if not os.path.isfile(executable):
        for p in paths:
            f = os.path.join(p, executable)
            if os.path.isfile(f):
                return f
        return None
    else:
        return executable

# Resolve certain symlinks in the first word of compiler.
#
# This is a Go-specific hack. cgo and other Go tools check $CC and $CXX for the
# substring 'clang' to determine if the compiler is Clang. This won't work if
# $CC is cc and cc is a symlink pointing to clang, as it is on Darwin.
#
# Go tools also have problems with ccache, so we disable it.
def fixup_compiler_path(compiler):
    args = shlex.split(compiler)
    if args[0].endswith('ccache') or args[0].endswith('gomacc'):
        args = args[1:]

    path = find_executable(args[0])

    try:
        if path.endswith('/cc') and os.readlink(path) == 'clang':
            args[0] = path[:len(path)-2] + 'clang'
    except (AttributeError, OSError):
        pass

    try:
        if path.endswith('/c++') and os.readlink(path) == 'clang++':
            args[0] = path[:len(path)-3] + 'clang++'
    except (AttributeError, OSError):
        pass

    return ' '.join([pipes.quote(arg) for arg in args])

config.environment['CC'] = fixup_compiler_path(config.host_cc)
config.environment['CXX'] = fixup_compiler_path(config.host_cxx)
config.environment['CGO_LDFLAGS'] = config.host_ldflags
