Selaa lähdekoodia

build: new build version info system

 * JmeVersion is no longer autogenerated, instead it pulls info from version.properties
 * Added version.gradle script to generate version info and expose it to other gradle scripts
 * Embed version info inside JAR manifest
 * Refactor NDK finding to use the same way as the version generation
Kirill Vainer 10 vuotta sitten
vanhempi
commit
17887b1fb0

+ 1 - 1
.gitignore

@@ -5,7 +5,7 @@
 /build/
 /netbeans/
 /jme3-core/build/
-/jme3-core/src/main/java/com/jme3/system/JmeVersion.java
+/jme3-core/src/main/resources/com/jme3/system/version.properties
 /jme3-plugins/build/
 /jme3-desktop/build/
 /jme3-android-native/build/

+ 16 - 24
build.gradle

@@ -1,15 +1,16 @@
 import org.gradle.api.artifacts.*
 
 buildscript {
-	repositories {
-		mavenCentral()
-	}
-	dependencies {
-		classpath 'com.android.tools.build:gradle:1.1.0'
-	}
+    repositories {
+        mavenCentral()
+    }
+    dependencies {
+        classpath 'com.android.tools.build:gradle:1.1.0'
+    }
 }
 
 apply plugin: 'base'
+apply from: file('version.gradle')
 
 // This is applied to all sub projects
 subprojects {
@@ -114,7 +115,12 @@ task wrapper(type: Wrapper, description: 'Creates and deploys the Gradle wrapper
     gradleVersion = '2.2.1'
 }
 
-String findNDK() {
+ext {
+    ndkCommandPath  = ""
+    ndkExists       = false
+}
+
+task configureAndroidNDK {
     def ndkBuildFile = "ndk-build"
     // if windows, use ndk-build.cmd instead
     if (System.properties['os.name'].toLowerCase().contains('windows')) {
@@ -127,27 +133,13 @@ String findNDK() {
     if (System.env.ANDROID_NDK != null) {
         ndkBuildPath = System.env.ANDROID_NDK + File.separator + ndkBuildFile
     }
+    
     if (new File(ndkBuildPath).exists()) {
-        return ndkBuildPath
-    } else {
-        return null
+        ndkExists = true
+        ndkCommandPath = ndkBuildPath
     }
 }
 
-boolean checkNdkExists(String ndkCommandPath) {
-//    String ndkCommandPath = findNDK()
-    if (ndkCommandPath != null && new File(ndkCommandPath).exists()) {
-        return true
-    } else {
-        return false
-    }
-}
-
-ext {
-    ndkCommandPath = findNDK()
-    ndkExists = checkNdkExists(ndkCommandPath)
-}
-
 //class IncrementalReverseTask extends DefaultTask {
 //    @InputDirectory
 //    def File inputDir

+ 7 - 2
common.gradle

@@ -6,8 +6,8 @@ apply plugin: 'java'
 apply plugin: 'maven'
 apply plugin: 'maven-publish'
 
-group   = 'com.jme3'
-version = jmeVersion + '-' + jmeVersionTag
+group = 'com.jme3'
+version = jmePomVersion
 
 sourceCompatibility = '1.6'
 [compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
@@ -22,6 +22,11 @@ repositories {
 dependencies {
     // Adding dependencies here will add the dependencies to each subproject.
     testCompile group: 'junit', name: 'junit', version: '4.10'
+jar {
+    manifest {
+        attributes 'Implementation-Title': 'jMonkeyEngine',
+                   'Implementation-Version': version
+    }
 }
 
 javadoc {

+ 14 - 47
jme3-core/build.gradle

@@ -12,55 +12,22 @@ sourceSets {
     }
 }
 
-buildscript {
-    repositories {
-        mavenCentral()
-    }
-    dependencies {
-        classpath 'org.ajoberstar:gradle-git:1.0.0-rc.1'
-    }
-}
-
-import java.text.SimpleDateFormat
-import org.ajoberstar.grgit.*
-
-task updateVersion << {
-    
-    def verfile = file('src/main/java/com/jme3/system/JmeVersion.java')
-    def jmeGitHash
-    def jmeShortGitHash
-    def jmeBuildDate
-    def jmeBranchName
-    
-    try {
-        def grgit = Grgit.open(project.file('.').parent)
-        jmeGitHash = grgit.head().id
-        jmeShortGitHash = grgit.head().abbreviatedId
-        jmeBuildDate = new SimpleDateFormat("yyyy-MM-dd").format(new Date())
-        jmeBranchName = grgit.branch.current.name
-    } catch (ex) {
-        // Failed to get repo info
-        logger.warn("Failed to get repository info: " + ex.message + ". " + \
-                    "Only partial build info will be generated.")
-        
-        jmeGitHash = ""
-        jmeShortGitHash = ""
-        jmeBuildDate = new SimpleDateFormat("yyyy-MM-dd").format(new Date())
-        jmeBranchName = "unknown"
-    }
-    
-    verfile.text = "\npackage com.jme3.system;\n\n" +
-                   "/**\n * THIS IS AN AUTO-GENERATED FILE..\n * DO NOT MODIFY!\n */\n" + 
-                   "public class JmeVersion {\n" + 
-                   "    public static final String BUILD_DATE = \"${jmeBuildDate}\";\n" + 
-                   "    public static final String BRANCH_NAME = \"${jmeBranchName}\";\n" + 
-                   "    public static final String GIT_HASH = \"${jmeGitHash}\";\n" + 
-                   "    public static final String GIT_SHORT_HASH = \"${jmeShortGitHash}\";\n" + 
-                   "    public static final String FULL_NAME = \"jMonkeyEngine ${jmeVersion} (${jmeVersionTag})\";\n" + 
-                   "}\n"
+task updateVersionPropertiesFile << {
+    def verfile = file('src/main/resources/com/jme3/system/version.properties')
+    verfile.text = "# THIS IS AN AUTO-GENERATED FILE..\n" +
+                   "# DO NOT MODIFY!\n" + 
+                   "build.date=${jmeBuildDate}\n" +
+                   "git.revision=${jmeRevision}\n" +
+                   "git.branch=${jmeBranchName}\n" + 
+                   "git.hash=${jmeGitHash}\n" + 
+                   "git.hash.short=${jmeShortGitHash}\n" + 
+                   "git.tag=${jmeGitTag}\n" + 
+                   "name.full=${jmeFullName}\n" +
+                   "version.number=${jmeVersion}\n" + 
+                   "version.tag=${jmeVersionTag}"
 }
 
-compileJava.dependsOn(updateVersion)
+compileJava.dependsOn(updateVersionPropertiesFile)
 
 dependencies {
 }

+ 65 - 0
jme3-core/src/main/java/com/jme3/system/JmeVersion.java

@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2009-2015 jMonkeyEngine
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ *
+ * * Neither the name of 'jMonkeyEngine' nor the names of its contributors
+ *   may be used to endorse or promote products derived from this software
+ *   without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package com.jme3.system;
+
+import java.io.IOException;
+import java.util.Properties;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Pulls in version info from the version.properties file.
+ * 
+ * @author Kirill Vainer
+ */
+public class JmeVersion {
+    
+    private static final Logger logger = Logger.getLogger(JmeVersion.class.getName());
+    private static final Properties props = new Properties();
+    
+    static {
+        try {
+            props.load(JmeVersion.class.getResourceAsStream("version.properties"));
+        } catch (IOException ex) {
+            logger.log(Level.WARNING, "Unable to read version info!", ex);
+        }
+    }
+    
+    public static final String BUILD_DATE       = props.getProperty("build.date", "1900-01-01");
+    public static final String BRANCH_NAME      = props.getProperty("git.branch", "unknown");
+    public static final String GIT_HASH         = props.getProperty("git.hash", "");
+    public static final String GIT_SHORT_HASH   = props.getProperty("git.hash.short", "");
+    public static final String GIT_TAG          = props.getProperty("git.tag", "");
+    public static final String VERSION_NUMBER   = props.getProperty("version.number", "");
+    public static final String VERSION_TAG      = props.getProperty("version.tag", "");
+    public static final String FULL_NAME        = props.getProperty("name.full", "jMonkeyEngine (unknown version)");
+}

+ 11 - 0
jme3-core/src/main/resources/com/jme3/system/version.properties

@@ -0,0 +1,11 @@
+# THIS IS AN AUTO-GENERATED FILE..
+# DO NOT MODIFY!
+build.date=1900-01-01
+git.revision=0
+git.branch=unknown
+git.hash=
+git.hash.short=
+git.tag=
+name.full=jMonkeyEngine 3.1.0-UNKNOWN
+version.number=3.1.0
+version.tag=SNAPSHOT

+ 109 - 0
version.gradle

@@ -0,0 +1,109 @@
+/*
+ Version Info Examples
+ =====================
+ 
+ Nightly Build Snapshot
+ * Full Name: jMonkeyEngine 3.1.0-5124
+ * POM Version: 3.1.0-SNAPSHOT
+ * NBM Version: 3.1.0.5124
+ * NBM UC Suffix: nightly/3.1/plugins
+
+ Nightly Build Snapshot (PBRIsComing branch)
+ * Full Name: jMonkeyEngine 3.1.0-PBRIsComing-5124
+ * POM Version: 3.1.0-PBRIsComing-SNAPSHOT
+ * NBM Version: 3.1.0.5124
+ * NBM UC Suffix: PBRIsComing-nightly/3.1/plugins
+
+ Alpha1 Release
+ * Full Name: jMonkeyEngine 3.1.0-alpha1
+ * POM Version: 3.1.0-alpha1
+ * NBM Version: 3.1.0.0
+ * NBM UC Suffix: alpha1/3.1/plugins
+ 
+ Final Release
+ * Full Name: jMonkeyEngine 3.1.0
+ * POM Version: 3.1.0
+ * NBM Version: 3.1.0.0
+ * NBM UC Suffix: stable/3.1/plugins
+ */ 
+
+import java.text.SimpleDateFormat
+import org.ajoberstar.grgit.*
+
+buildscript {
+    repositories {
+        mavenCentral()
+    }
+    dependencies {
+        classpath 'org.ajoberstar:gradle-git:1.2.0'
+    }
+}
+
+ext {
+    jmeRevision     = 0
+    jmeGitHash      = ""
+    jmeGitTag       = ""
+    jmeShortGitHash = ""
+    jmeBuildDate    = new SimpleDateFormat("yyyy-MM-dd").format(new Date())
+    jmeBranchName   = "unknown"
+    jmeFullName     = "jMonkeyEngine ${jmeVersion}-UNKNOWN"
+    jmePomVersion   = "unknown"
+    jmeNbmVersion   = "0.0.0.0"
+    jmeNbmUcSuffix  = "unknown"
+}
+
+task configureVersionInfo {
+    try {
+        def grgit = Grgit.open(project.file('.'))
+        jmeRevision = grgit.log(includes:['HEAD']).size()
+        jmeGitHash = grgit.head().id
+        jmeShortGitHash = grgit.head().abbreviatedId
+        jmeBranchName = grgit.branch.current.name
+        jmeGitTag = grgit.describe()
+        if (jmeGitTag == null) jmeGitTag = ""
+        
+        jmeFullName   = "jMonkeyEngine ${jmeVersion}"
+        jmePomVersion = jmeVersion
+        jmeNbmVersion = jmeVersion
+        
+        if (jmeBranchName != "master") {
+            jmeFullName    += "-${jmeBranchName}"
+            jmePomVersion  += "-${jmeBranchName}"
+            
+            jmeNbmUcSuffix = "${jmeBranchName}-"
+        } else {
+            jmeNbmUcSuffix = ""
+        }
+        
+        if (jmeVersionTag == "SNAPSHOT") {
+            jmeNbmUcSuffix += "nightly"
+        } else if (jmeVersionTag == "") {
+            jmeNbmUcSuffix += "stable"
+        } else {
+            jmeNbmUcSuffix += jmeVersionTag
+        }
+        
+        jmeNbmUcSuffix += "/" + jmeMainVersion + "/plugins"
+        
+        if (jmeVersionTag == "SNAPSHOT") {
+            jmeFullName   += "-${jmeRevision}"
+            jmePomVersion += "-SNAPSHOT"
+            jmeNbmVersion += ".${jmeRevision}"
+        } else if (jmeVersionTag == "") {
+            jmeNbmVersion += ".0"
+        } else {
+            jmeFullName   += "-${jmeVersionTag}"
+            jmePomVersion += "-${jmeVersionTag}"
+            jmeNbmVersion += ".0"
+        }
+        
+        logger.warn("Full Name: ${jmeFullName}")
+        logger.warn("POM Version: ${jmePomVersion}")
+        logger.warn("NBM Version: ${jmeNbmVersion}")
+        logger.warn("NBM UC Suffix: ${jmeNbmUcSuffix}")
+    } catch (ex) {
+        // Failed to get repo info
+        logger.warn("Failed to get repository info: " + ex.message + ". " + \
+                    "Only partial build info will be generated.")
+    }
+}