aboutsummaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
authorJake Petroules <jake.petroules@petroules.com>2015-05-09 01:02:43 -0700
committerJake Petroules <jake.petroules@petroules.com>2015-05-11 16:28:46 +0000
commit0b965aa0b64ae1a8b93a27627a19bf8e422739b7 (patch)
treeb0ad64941e2f4d4a51901a01f09151d634702b78 /share
parent2f507d112c8563297b51e9f6bfb2101044f27d95 (diff)
Add support for determining the Java compiler version.
Change-Id: I2a34759fb57284f9d002d81a06997fdb02a95f06 Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
Diffstat (limited to 'share')
-rw-r--r--share/qbs/modules/java/JavaModule.qbs36
1 files changed, 36 insertions, 0 deletions
diff --git a/share/qbs/modules/java/JavaModule.qbs b/share/qbs/modules/java/JavaModule.qbs
index cb6b19277..88450f335 100644
--- a/share/qbs/modules/java/JavaModule.qbs
+++ b/share/qbs/modules/java/JavaModule.qbs
@@ -31,6 +31,7 @@
import qbs
import qbs.FileInfo
import qbs.ModUtils
+import qbs.Process
import "utils.js" as JavaUtils
@@ -48,6 +49,13 @@ Module {
property string jarName: "jar"
property path jdkPath
+ property string compilerVersion: rawCompilerVersion ? rawCompilerVersion[1] : undefined
+ property var compilerVersionParts: compilerVersion ? compilerVersion.split(/[\._]/).map(function(item) { return parseInt(item, 10); }) : []
+ property int compilerVersionMajor: compilerVersionParts[0]
+ property int compilerVersionMinor: compilerVersionParts[1]
+ property int compilerVersionPatch: compilerVersionParts[2]
+ property int compilerVersionUpdate: compilerVersionParts[3]
+
property string languageVersion
PropertyOptions {
name: "languageVersion"
@@ -65,6 +73,34 @@ Module {
// Internal properties
property path classFilesDir: FileInfo.joinPaths(product.buildDirectory, "classFiles")
+ // private properties
+ readonly property var rawCompilerVersion: {
+ var p = new Process();
+ try {
+ p.exec(compilerFilePath, ["-version"]);
+ var match = p.readStdErr().trim().match(/^javac (([0-9]+(?:\.[0-9]+){2,2})_([0-9]+))$/);
+ if (match !== null)
+ return match;
+ } finally {
+ p.close();
+ }
+ }
+
+ validate: {
+ var validator = new ModUtils.PropertyValidator("java");
+ validator.setRequiredProperty("compilerVersion", compilerVersion);
+ validator.setRequiredProperty("compilerVersionParts", compilerVersionParts);
+ validator.setRequiredProperty("compilerVersionMajor", compilerVersionMajor);
+ validator.setRequiredProperty("compilerVersionMinor", compilerVersionMinor);
+ validator.setRequiredProperty("compilerVersionUpdate", compilerVersionUpdate);
+ validator.addVersionValidator("compilerVersion", compilerVersion.replace("_", "."), 4, 4);
+ validator.addRangeValidator("compilerVersionMajor", compilerVersionMajor, 1);
+ validator.addRangeValidator("compilerVersionMinor", compilerVersionMinor, 0);
+ validator.addRangeValidator("compilerVersionPatch", compilerVersionPatch, 0);
+ validator.addRangeValidator("compilerVersionUpdate", compilerVersionUpdate, 0);
+ validator.validate();
+ }
+
FileTagger {
patterns: "*.java"
fileTags: ["java.java"]