diff --git a/build.gradle b/build.gradle index 763ebefa234f19eafccfcfc8bdeea22177155a51..d705e2ebf584482f693317c312108bd48a8d895b 100644 --- a/build.gradle +++ b/build.gradle @@ -110,6 +110,47 @@ jastadd { jastaddOptions = ["--lineColumnNumbers", "--safeLazy", "--visitCheck=true", "--rewrite=cnta", "--cache=all"] } +def versionFile = 'src/main/resources/RelASTVersion.properties' +task updateVersion { + /* version string handling adapted from https://bitbucket.org/extendj/extendj/src/master/build.gradle + written by Jesper Öqvist <jesper.oqvist@cs.lth.se> */ + group 'build' + description 'Updates the version file for RelAST' + + doLast { + def oldProps = new Properties() + String oldFullVersion, fullVersion + + try { + file(versionFile).withInputStream { stream -> oldProps.load(stream) } + oldFullVersion = oldProps['version'] + } catch (ignored) { + oldFullVersion = "???" + } + try { + def proc = 'git describe'.execute(null, rootDir) + if (proc.waitFor() == 0) { + fullVersion = proc.text.trim() + if (hasProperty('withNewVersion')) { + // Trim to get latest tag: + version = (fullVersion =~ /-\d+\-g.+$/).replaceAll('') + } + if (oldFullVersion != fullVersion) { + def props = new Properties() + props['version'] = fullVersion + props.store(file(versionFile).newWriter(), null) + } + } else { + logger.warn('No git tags found.') + } + } catch (IOException e) { + logger.warn("Failded to run git describe (${e.getMessage()}).") + } + } +} + +processResources.dependsOn updateVersion + task preprocessRelationTest(type: JavaExec, group: 'verification') { doFirst { diff --git a/src/main/java/org/jastadd/relast/compiler/Compiler.java b/src/main/java/org/jastadd/relast/compiler/Compiler.java index ea8de0ce29021cd75f25c66d296120ad191d9235..2f6ef2572c7e6ad4fda1f7e6abaf78eb577e3669 100644 --- a/src/main/java/org/jastadd/relast/compiler/Compiler.java +++ b/src/main/java/org/jastadd/relast/compiler/Compiler.java @@ -8,14 +8,11 @@ import org.jastadd.relast.parser.RelAstParser; import org.jastadd.relast.scanner.RelAstScanner; import java.io.*; -import java.util.ArrayList; -import java.util.Arrays; +import java.util.*; import java.util.List; public class Compiler { - private static final String VERSION = "0.2.4"; - private ArrayList<Option<?>> options; private FlagOption optionWriteToFile; private FlagOption optionPrintAST; @@ -35,7 +32,7 @@ public class Compiler { commandLine = new CommandLine(options); commandLine.parse(args); - printMessage("Running RelAST " + VERSION); + printMessage("Running RelAST " + readVersion()); if (commandLine.getArguments().size() < 1) { error("specify at least one input file"); @@ -126,6 +123,26 @@ public class Compiler { } } + /** + * Reads the version string. + * + * The version string is read from the property file + * src/main/resources/Version.properties. This + * file should be generated during the build process. If it is missing + * then there is some problem in the build script. + * + * @author Jesper Öqvist <jesper.oqvist@cs.lth.se> + * @return the read version string, or <code>version ?</code> + */ + private String readVersion() { + try { + ResourceBundle resources = ResourceBundle.getBundle("Version"); + return resources.getString("version"); + } catch (MissingResourceException e) { + return "version ?"; + } + } + public static void main(String[] args) { try { new Compiler(args); diff --git a/src/main/resources/.gitignore b/src/main/resources/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..e4a21f4a3975000dd59369f1430ec3e931b4e3e3 --- /dev/null +++ b/src/main/resources/.gitignore @@ -0,0 +1 @@ +RelASTVersion.properties