#!/usr/bin/env python

import subprocess
import difflib

def capture_2(args0, args1):
    import subprocess
    p0 = subprocess.Popen(args0, stdin=None, stdout=subprocess.PIPE,
                          stderr=subprocess.PIPE)
    p1 = subprocess.Popen(args1, stdin=p0.stdout, stdout=subprocess.PIPE,
                          stderr=subprocess.PIPE)
    out,_ = p1.communicate()
    return out

def normalize_nm(data):    
    lines = data.split('\n')
    lines.sort()

    # FIXME: Ignore common symbols for now.
    lines = [ln for ln in lines
             if not ln.startswith('         C')]

    return lines

def main():
    import sys
    clang = sys.argv[1]
    flags = sys.argv[2:]

    # FIXME: Relax to include undefined symbols.
    nm_args = ["llvm-nm", "-extern-only", "-defined-only"]

    llvmgcc_args = ["llvm-gcc"] + flags + ["-emit-llvm","-c","-o","-"]
    clang_args = [clang] + flags + ["-emit-llvm","-c","-o","-"]

    llvmgcc_nm = capture_2(llvmgcc_args, nm_args)
    clang_nm = capture_2(clang_args, nm_args)

    llvmgcc_nm = normalize_nm(llvmgcc_nm)
    clang_nm = normalize_nm(clang_nm)

    if llvmgcc_nm == clang_nm:
        sys.exit(0)

    print ' '.join(llvmgcc_args), '|', ' '.join(nm_args)
    print ' '.join(clang_args), '|', ' '.join(nm_args)
    for line in difflib.unified_diff(llvmgcc_nm, clang_nm,
                                     fromfile="llvm-gcc symbols",
                                     tofile="clang symbols"):
        print line
    sys.exit(1)

if __name__ == '__main__':
    main()
