#!/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.relpath(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)