# HG changeset patch # User Doug Simon # Date 1432909465 -7200 # Node ID 4437f0da4b26cca0c8fc1ce8c2030b2dedb622b5 # Parent 250fbc03954a1bb13e8d677276510386706e2bda handle graal.jar that has already had Graal.class patched diff -r 250fbc03954a -r 4437f0da4b26 mx/mx_graal.py --- a/mx/mx_graal.py Fri May 29 16:15:57 2015 +0200 +++ b/mx/mx_graal.py Fri May 29 16:24:25 2015 +0200 @@ -677,16 +677,23 @@ Patches the constant "@@graal.version@@" in the constant pool of Graal.class with the computed Graal version string. """ + zf = zipfile.ZipFile(dist.path, 'r') + graalClassfilePath = 'com/oracle/graal/api/runtime/Graal.class' + graalClassfile = zf.read(graalClassfilePath) + versionSpec = '{:' + str(len('@@graal.version@@')) + '}' + versionStr = versionSpec.format(graal_version()) + if '@@graal.version@@' not in graalClassfile: + assert versionStr in graalClassfile, 'could not find "@@graal.version@@" or "' + versionStr + '" constant in ' + dist.path + '!' + graalClassfilePath + zf.close() + return False + zfOutFd, zfOutPath = tempfile.mkstemp(suffix='', prefix=basename(dist.path) + '.', dir=dirname(dist.path)) zfOut = zipfile.ZipFile(zfOutPath, 'w') - zf = zipfile.ZipFile(dist.path, 'r') for zi in zf.infolist(): - data = zf.read(zi) - if zi.filename == 'com/oracle/graal/api/runtime/Graal.class': - versionSpec = '{:' + str(len('@@graal.version@@')) + '}' - versionStr = versionSpec.format(graal_version()) - #assert '@@graal.version@@' in data, 'could not find "@@graal.version@@" constant in ' + dist.path + '!' + zi.filename - data = data.replace('@@graal.version@@', versionStr) + if zi.filename == graalClassfilePath: + data = graalClassfile.replace('@@graal.version@@', versionStr) + else: + data = zf.read(zi) zfOut.writestr(zi, data) zfOut.close() os.close(zfOutFd)