# Version info for the builds.

# Version number
# --------------
#
# The version number format is (since FreeMarker 2.3.22):
#
#   Version ::= major '.' minor '.' micro ('-' Qualifier)?
#   Qualifier :: = NightlyQualifier
#                  |
#                  ( ('pre'|'rc') twoDigitPositiveInteger ('-' NightlyQualifier)? )
#   NightlyQualifier :: = 'nightly_@timestampInVersion@'
#
# This format is compatible both with Maven and JSR 277, and it must
# remain so. Stable versions must not have a qualifier.
# Note that qualifiers are compared with String.compareTo,
# thus "nightly" < "pre" < "rc", etc.
#
# Examples:
#   Version number        Means
#   3.0.0                 3.0.0 stable release
#   3.3.12                3.3.12 stable release
#   3.3.13-nightly_@timestampInVersion@
#                         Modified version after 3.3.12, which will
#                         become to 3.3.13 one day.
#   3.4.0-pre03           The 3rd preview of version 3.4.0
#   3.4.0-pre04-nightly_@timestampInVersion@
#                         Unreleased nightly version of the yet unfinished
#                         3.4.0-pre04.
#   3.4.0-rc01            1st release candidate of 3.4.0
#
# Backward-compatibility policy (since FreeMarker 2.3.20):
# - When only the micro version number is increased, full backward
#   compatibility is expected (ignoring extreme cases where the user
#   code or template breaks if an exception is *not* thrown anymore
#   as the FreeMarker bug causing it was fixed).
# - When the minor version number is increased, some minor backward
#   compatibility violations are allowed. Most dependent code should
#   continue working without modification or recompilation.
# - When the major version number is increased, major backward
#   compatibility violations are allowed, but still should be avoided.
version=2.3.24-pre01
# This exists as oss.sonatype only allows SNAPSHOT and final releases,
# so instead 2.3.21-rc01 and such we have to use 2.3.21-SNAPSHOT.
# For final releases it's the same as "version".
mavenVersion=2.3.24-SNAPSHOT

# Version string that conforms to OSGi
# ------------------------------------
#
# This is different from the plain version string:
# - "." is used instead of a "-" before the qualifier.
# - The stable releases must use "stable" qualifier.
#   Examples:
#   2.4.0.stable
#   2.4.0.rc01
#   2.4.0.pre01
#   2.4.0.nightly_@timestampInVersion@
versionForOSGi=2.3.24.pre01

# Version string that conforms to legacy MF
# -----------------------------------------
#
# Examples:
# version        -> versionForMf
# 2.2.5          -> 2.2.5
# 2.3.0          -> 2.3.0
# 2.3.0.pre13    -> 2.2.98.13
# 2.3.0.pre13-nightly -> 2.2.98.13.97
# 2.3.0.rc1      -> 2.2.99.1
# 2.3.0.nightly -> 2.2.97
# 3.0.0.pre2     -> 2.98.2
#
# "97 denotes "nightly", 98 denotes "pre", 99 denotes "rc" build.
# In general, for the nightly/preview/rc Y of version 2.X, the versionForMf is
# 2.X-1.(99|98).Y. Note the X-1.
versionForMf=2.3.23.98.1

# The date of the build.
# This should be automatically filled by the building tool (Ant).
buildTimestamp=@timestampNice@

isGAECompliant=true
