Revision a8637a8e43f8023d742727c1463ac01992860940 authored by Alon Zakai on 04 January 2016, 22:57:24 UTC, committed by Alon Zakai on 04 January 2016, 22:57:24 UTC
1 parent 907b627
Raw File
emar
#!/usr/bin/env python2

'''
emar - ar helper script
=======================

This script acts as a frontend replacement for ar. See emcc.
'''

import os, subprocess, sys
from tools import shared

DEBUG = os.environ.get('EMCC_DEBUG')
if DEBUG == "0":
  DEBUG = None

newargs = [shared.LLVM_AR] + sys.argv[1:]

if DEBUG:
  print >> sys.stderr, 'emar:', sys.argv, '  ==>  ', newargs

if len(newargs) > 2:
  to_delete = []
  if 'r' in newargs[1]:
    # we are adding files to the archive.
    # find the .a; everything after it is an input file.
    # we add a hash to each input, to make them unique as
    # possible, as llvm-ar cannot extract duplicate names
    # (and only the basename is used!)
    i = 1
    while i < len(newargs):
      if newargs[i].endswith('.a'):
        import hashlib, shutil
        for j in range(i+1, len(newargs)):
          orig_name = newargs[j]
          full_name = os.path.abspath(orig_name)
          dir_name = os.path.dirname(full_name)
          base_name = os.path.basename(full_name)
          h = hashlib.md5(full_name).hexdigest()[:8]
          parts = base_name.split('.')
          parts[0] += '_' + h
          newname = '.'.join(parts)
          full_newname = os.path.join(dir_name, newname)
          if not os.path.exists(full_newname):
            try: # it is ok to fail here, we just don't get hashing
              shutil.copyfile(orig_name, full_newname)
              newargs[j] = full_newname
              to_delete.append(full_newname)
            except:
              pass
        break
      i += 1
  subprocess.call(newargs)
  for d in to_delete:
    shared.try_delete(d)

back to top