| 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") |