import subprocess
def getRoot(config):
if not config.parent:
return config
return getRoot(config.parent)
def is_gold_linker_available():
if not config.gold_executable:
return False
try:
ld_cmd = subprocess.Popen(
[config.gold_executable, "--help"], stdout=subprocess.PIPE
)
ld_out = ld_cmd.stdout.read().decode()
ld_cmd.wait()
except:
return False
if not "-plugin" in ld_out:
return False
# config.clang is not guaranteed to be just the executable!
clang_cmd = subprocess.Popen(
" ".join([config.clang, "-fuse-ld=gold", "-xc", "-"]),
shell=True,
universal_newlines=True,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
clang_err = clang_cmd.communicate("int main() { return 0; }")[1]
if not "invalid linker" in clang_err:
return True
return False
root = getRoot(config)
if root.host_os not in ["Linux"] or not is_gold_linker_available():
config.unsupported = True
if config.have_curl:
config.available_features.add("curl")