# HG changeset patch # User Gilles Duboscq # Date 1429627467 -7200 # Node ID 2ee48d02afe375ced155314889c985dd5b7317cf # Parent 38216fb8941c2c33e5cc524c75ce1f24a0c0e642 mx: Merge graal service files diff -r 38216fb8941c -r 2ee48d02afe3 mx/mx_graal.py --- a/mx/mx_graal.py Tue Apr 21 15:46:42 2015 +0200 +++ b/mx/mx_graal.py Tue Apr 21 16:44:27 2015 +0200 @@ -594,6 +594,35 @@ shutil.move(tmp, dstLib) os.chmod(dstLib, permissions) +def _updateGraalServiceFiles(jdkDir): + jreGraalDir = join(jdkDir, 'jre', 'lib', 'graal') + graalJars = [join(jreGraalDir, e) for e in os.listdir(jreGraalDir) if e.startswith('graal') and e.endswith('.jar')] + jreGraalServicesDir = join(jreGraalDir, 'services') + if exists(jreGraalServicesDir): + shutil.rmtree(jreGraalServicesDir) + os.makedirs(jreGraalServicesDir) + for jar in graalJars: + if os.path.isfile(jar): + with zipfile.ZipFile(jar) as zf: + for member in zf.namelist(): + if not member.startswith('META-INF/services'): + continue + serviceName = basename(member) + # we don't handle directories + assert serviceName + target = join(jreGraalServicesDir, serviceName) + lines = [] + with zf.open(member) as serviceFile: + lines.extend(serviceFile.readlines()) + if exists(target): + with open(target) as targetFile: + lines.extend(targetFile.readlines()) + with open(target, "w+") as targetFile: + for line in lines: + targetFile.write(line.rstrip() + os.linesep) + + + def _installDistInJdks(deployableDist): """ Installs the jar(s) for a given Distribution into all existing Graal JDKs @@ -613,7 +642,8 @@ if exists(jdks): for e in os.listdir(jdks): - jreLibDir = join(jdks, e, 'jre', 'lib') + jdkDir = join(jdks, e) + jreLibDir = join(jdkDir, 'jre', 'lib') if exists(jreLibDir): if deployableDist.isExtension: targetDir = join(jreLibDir, 'ext') @@ -625,23 +655,10 @@ os.makedirs(targetDir) _copyToJdk(dist.path, targetDir) if dist.sourcesPath: - _copyToJdk(dist.sourcesPath, join(jdks, e)) - # deploy service files + _copyToJdk(dist.sourcesPath, jdkDir) if deployableDist.isGraalClassLoader: - # deploy services files - jreGraalServicesDir = join(jreLibDir, 'graal', 'services') - if not exists(jreGraalServicesDir): - os.makedirs(jreGraalServicesDir) - with zipfile.ZipFile(dist.path) as zf: - for member in zf.namelist(): - if not member.startswith('META-INF/services'): - continue - serviceName = basename(member) - # we don't handle directories - assert serviceName - target = join(jreGraalServicesDir, serviceName) - with zf.open(member) as serviceFile, open(target, "w+") as targetFile: - shutil.copyfileobj(serviceFile, targetFile) + # deploy service files + _updateGraalServiceFiles(jdkDir) # run a command in the windows SDK Debug Shell def _runInDebugShell(cmd, workingDir, logFile=None, findInOutput=None, respondTo=None):