blob: b725385e0881547db8c1bfcbee60c0d7e766d1aa [file] [log] [blame]
// Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8;
import com.android.tools.r8.utils.VersionProperties;
/** Version of the D8/R8 library. */
public final class Version {
private static final String MAIN_LABEL = "main";
// This field is accessed from release scripts using simple pattern matching.
// Therefore, changing this field could break our release scripts.
public static final String LABEL = "main";
private Version() {
}
/** Returns current R8 version (with additional info) as a string. */
public static String getVersionString() {
return LABEL + " (" + VersionProperties.INSTANCE.getDescription() + ")";
}
/**
* Returns the major version number of the compiler.
*
* @return Major version or -1 for an unreleased build.
*/
public static int getMajorVersion() {
return getMajorVersion(LABEL);
}
static int getMajorVersion(String label) {
if (label.equals(MAIN_LABEL)) {
return -1;
}
int start = 0;
int end = label.indexOf('.');
return Integer.parseInt(label.substring(start, end));
}
/**
* Returns the minor version number of the compiler.
*
* @return Minor version or -1 for an unreleased build.
*/
public static int getMinorVersion() {
return getMinorVersion(LABEL);
}
static int getMinorVersion(String label) {
if (label.equals(MAIN_LABEL)) {
return -1;
}
int start = label.indexOf('.') + 1;
int end = label.indexOf('.', start);
return Integer.parseInt(label.substring(start, end));
}
/**
* Returns the patch version number of the compiler.
*
* @return Patch version or -1 for an unreleased build.
*/
public static int getPatchVersion() {
return getPatchVersion(LABEL);
}
static int getPatchVersion(String label) {
if (label.equals(MAIN_LABEL)) {
return -1;
}
int skip = label.indexOf('.') + 1;
int start = label.indexOf('.', skip) + 1;
int end = label.indexOf('-', start);
return Integer.parseInt(label.substring(start, end != -1 ? end : label.length()));
}
/**
* Returns the pre-release version information of the compiler.
*
* @return Pre-release information if present, the empty string if absent, and null for an
* unreleased build.
*/
public static String getPreReleaseString() {
return getPreReleaseString(LABEL);
}
static String getPreReleaseString(String label) {
if (label.equals(MAIN_LABEL)) {
return null;
}
int start = label.indexOf('-') + 1;
if (start > 0) {
return label.substring(start);
}
return "";
}
/**
* Is this a development version of the D8/R8 library.
*
* @return True if the build is not a release or if it is a development release.
*/
public static boolean isDevelopmentVersion() {
return isDevelopmentVersion(LABEL, VersionProperties.INSTANCE.isEngineering());
}
static boolean isDevelopmentVersion(String label, boolean isEngineering) {
return label.equals(MAIN_LABEL) || label.endsWith("-dev") || isEngineering;
}
public static boolean isMainVersion() {
return LABEL.equals(MAIN_LABEL);
}
}