changeset 17059:a5dc5513ce85

mx: add check for compliance level of a distribution
author Bernhard Urban <bernhard.urban@jku.at>
date Mon, 08 Sep 2014 09:46:07 +0200
parents 97d0508b7cf1
children cc8bd79d8d57
files mx/projects mxtool/mx.py
diffstat 2 files changed, 12 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/mx/projects	Sat Sep 06 17:20:11 2014 +0100
+++ b/mx/projects	Mon Sep 08 09:46:07 2014 +0200
@@ -103,6 +103,7 @@
 distribution@TRUFFLE@path=build/truffle.jar
 distribution@TRUFFLE@subDir=graal
 distribution@TRUFFLE@sourcesPath=build/truffle.src.zip
+distribution@TRUFFLE@javaCompliance=1.7
 distribution@TRUFFLE@dependencies=\
 com.oracle.truffle.api.dsl,\
 com.oracle.nfi
@@ -119,6 +120,7 @@
 distribution@TRUFFLE-DSL-PROCESSOR@path=build/truffle-dsl-processor.jar
 distribution@TRUFFLE-DSL-PROCESSOR@subDir=graal
 distribution@TRUFFLE-DSL-PROCESSOR@sourcesPath=build/truffle-dsl-processor.src.zip
+distribution@TRUFFLE-DSL-PROCESSOR@javaCompliance=1.7
 distribution@TRUFFLE-DSL-PROCESSOR@dependencies=\
 com.oracle.truffle.dsl.processor
 distribution@TRUFFLE-DSL-PROCESSOR@distDependencies=TRUFFLE
--- a/mxtool/mx.py	Sat Sep 06 17:20:11 2014 +0100
+++ b/mxtool/mx.py	Mon Sep 08 09:46:07 2014 +0200
@@ -64,7 +64,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, mainClass, excludedDependencies, distDependencies):
+    def __init__(self, suite, name, path, sourcesPath, deps, mainClass, excludedDependencies, distDependencies, javaCompliance):
         self.suite = suite
         self.name = name
         self.path = path.replace('/', os.sep)
@@ -75,6 +75,7 @@
         self.mainClass = mainClass
         self.excludedDependencies = excludedDependencies
         self.distDependencies = distDependencies
+        self.javaCompliance = JavaCompliance(javaCompliance) if javaCompliance else None
 
     def sorted_deps(self, includeLibs=False, transitive=False):
         deps = []
@@ -169,6 +170,10 @@
                     if isCoveredByDependecy:
                         continue
 
+                    if self.javaCompliance:
+                        if p.javaCompliance > self.javaCompliance:
+                            abort("Compliance level doesn't match: Distribution {0} requires {1}, but {2} is {3}.".format(self.name, self.javaCompliance, p.name, p.javaCompliance))
+
                     # skip a  Java project if its Java compliance level is "higher" than the configured JDK
                     jdk = java(p.javaCompliance)
                     assert jdk
@@ -930,7 +935,8 @@
             mainClass = attrs.pop('mainClass', None)
             exclDeps = pop_list(attrs, 'exclude')
             distDeps = pop_list(attrs, 'distDependencies')
-            d = Distribution(self, name, path, sourcesPath, deps, mainClass, exclDeps, distDeps)
+            javaCompliance = attrs.pop('javaCompliance', None)
+            d = Distribution(self, name, path, sourcesPath, deps, mainClass, exclDeps, distDeps, javaCompliance)
             d.__dict__.update(attrs)
             self.dists.append(d)
 
@@ -955,7 +961,8 @@
                 mainClass = None
                 exclDeps = []
                 distDeps = []
-                d = Distribution(self, dname, path, sourcesPath, deps, mainClass, exclDeps, distDeps)
+                javaCompliance = None
+                d = Distribution(self, dname, path, sourcesPath, deps, mainClass, exclDeps, distDeps, javaCompliance)
                 d.subDir = os.path.relpath(os.path.dirname(p.dir), self.dir)
                 self.dists.append(d)
                 p.definedAnnotationProcessors = annotationProcessors