Mercurial > hg > graal-compiler
changeset 15819:2460aed6c899
mx: add support for setting a main class in distributions
author | Bernhard Urban <bernhard.urban@jku.at> |
---|---|
date | Wed, 21 May 2014 15:11:14 +0200 |
parents | 718034423138 |
children | f0127716b881 |
files | mx/mx_graal.py mxtool/mx.py |
diffstat | 2 files changed, 21 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/mx/mx_graal.py Wed May 21 15:17:21 2014 +0200 +++ b/mx/mx_graal.py Wed May 21 15:11:14 2014 +0200 @@ -1542,7 +1542,7 @@ if not mx.library(name, fatalIfMissing=False): mx.log('Skipping ' + groupId + '.' + artifactId + '.jar as ' + name + ' cannot be resolved') return - d = mx.Distribution(graalSuite, name=artifactId, path=path, sourcesPath=path, deps=deps, excludedDependencies=[], distDependencies=[]) + d = mx.Distribution(graalSuite, name=artifactId, path=path, sourcesPath=path, deps=deps, mainClass=None, excludedDependencies=[], distDependencies=[]) d.make_archive() cmd = ['mvn', 'install:install-file', '-DgroupId=' + groupId, '-DartifactId=' + artifactId, '-Dversion=1.0-SNAPSHOT', '-Dpackaging=jar', '-Dfile=' + d.path]
--- a/mxtool/mx.py Wed May 21 15:17:21 2014 +0200 +++ b/mxtool/mx.py Wed May 21 15:11:14 2014 +0200 @@ -63,7 +63,7 @@ A distribution is a jar or zip file containing the output from one or more Java projects. """ class Distribution: - def __init__(self, suite, name, path, sourcesPath, deps, excludedDependencies, distDependencies): + def __init__(self, suite, name, path, sourcesPath, deps, mainClass, excludedDependencies, distDependencies): self.suite = suite self.name = name self.path = path.replace('/', os.sep) @@ -71,6 +71,7 @@ self.sourcesPath = _make_absolute(sourcesPath.replace('/', os.sep), suite.dir) if sourcesPath else None self.deps = deps self.update_listeners = set() + self.mainClass = mainClass self.excludedDependencies = excludedDependencies self.distDependencies = distDependencies @@ -98,9 +99,17 @@ if not hasattr(zf, '_provenance'): zf._provenance = {} existingSource = zf._provenance.get(arcname, None) + isOverwrite = False if existingSource and existingSource != source and not arcname.endswith('/'): log('warning: ' + self.path + ': overwriting ' + arcname + '\n new: ' + source + '\n old: ' + existingSource) + isOverwrite = True zf._provenance[arcname] = source + return isOverwrite + + if self.mainClass: + manifest = "Manifest-Version: 1.0\nMain-Class: %s\n\n" % (self.mainClass) + if not overwriteCheck(arc.zf, "META-INF/MANIFEST.MF", "project files"): + arc.zf.writestr("META-INF/MANIFEST.MF", manifest) for dep in self.sorted_deps(includeLibs=True): if dep.isLibrary(): @@ -117,13 +126,13 @@ assert '/' not in service services.setdefault(service, []).extend(lp.read(arcname).splitlines()) else: - overwriteCheck(arc.zf, arcname, lpath + '!' + arcname) - arc.zf.writestr(arcname, lp.read(arcname)) + if not overwriteCheck(arc.zf, arcname, lpath + '!' + arcname): + arc.zf.writestr(arcname, lp.read(arcname)) if srcArc.zf and libSourcePath: with zipfile.ZipFile(libSourcePath, 'r') as lp: for arcname in lp.namelist(): - overwriteCheck(srcArc.zf, arcname, lpath + '!' + arcname) - srcArc.zf.writestr(arcname, lp.read(arcname)) + if not overwriteCheck(srcArc.zf, arcname, lpath + '!' + arcname): + srcArc.zf.writestr(arcname, lp.read(arcname)) elif dep.isProject(): p = dep @@ -157,8 +166,8 @@ else: for f in files: arcname = join(relpath, f).replace(os.sep, '/') - overwriteCheck(arc.zf, arcname, join(root, f)) - arc.zf.write(join(root, f), arcname) + if not overwriteCheck(arc.zf, arcname, join(root, f)): + arc.zf.write(join(root, f), arcname) if srcArc.zf: sourceDirs = p.source_dirs() if p.source_gen_dir(): @@ -169,8 +178,8 @@ for f in files: if f.endswith('.java'): arcname = join(relpath, f).replace(os.sep, '/') - overwriteCheck(srcArc.zf, arcname, join(root, f)) - srcArc.zf.write(join(root, f), arcname) + if not overwriteCheck(srcArc.zf, arcname, join(root, f)): + srcArc.zf.write(join(root, f), arcname) for service, providers in services.iteritems(): arcname = 'META-INF/services/' + service @@ -822,9 +831,10 @@ path = attrs.pop('path') sourcesPath = attrs.pop('sourcesPath', None) deps = pop_list(attrs, 'dependencies') + mainClass = attrs.pop('mainClass', None) exclDeps = pop_list(attrs, 'exclude') distDeps = pop_list(attrs, 'distDependencies') - d = Distribution(self, name, path, sourcesPath, deps, exclDeps, distDeps) + d = Distribution(self, name, path, sourcesPath, deps, mainClass, exclDeps, distDeps) d.__dict__.update(attrs) self.dists.append(d)