mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 06:38:20 +00:00

* topic/christian/localversion:
Parse and store localversion string
Remove commented-out code
Check ZEEK_VERSION_LOCAL for dashes
Update version string btests for localversion
Modify version parsing for localversion
Update version used by spicyz
Update build script
Support for configurable localversion
(cherry picked from commit d09584e52e
)
137 lines
4.5 KiB
Text
137 lines
4.5 KiB
Text
##! Provide information about the currently running Zeek version.
|
|
##! The most convenient way to access this are the Version::number
|
|
##! and Version::info constants.
|
|
|
|
@load base/frameworks/reporter
|
|
@load base/utils/strings
|
|
|
|
module Version;
|
|
|
|
export {
|
|
## A type exactly describing a Zeek version
|
|
type VersionDescription: record {
|
|
## Number representing the version which can be used for easy comparison.
|
|
## The format of the number is ABBCC with A being the major version,
|
|
## bb being the minor version (2 digits) and CC being the patchlevel (2 digits).
|
|
## As an example, Zeek 2.4.1 results in the number 20401.
|
|
version_number: count;
|
|
## Major version number (e.g. 2 for 2.5)
|
|
major: count;
|
|
## Minor version number (e.g. 5 for 2.5)
|
|
minor: count;
|
|
## Patch version number (e.g. 0 for 2.5 or 1 for 2.4.1)
|
|
patch: count;
|
|
## Commit number for development versions, Versions prior to 3.0.0,
|
|
## like "2.4-12", use a post-release commit number (12 commits
|
|
## after the 2.4 release). Versions after 3.0.0, like
|
|
## "3.1.0-dev.37", use a pre-release commit number (37 commits
|
|
## into the development cycle for 3.1.0). For non-development version
|
|
## this number will be zero.
|
|
commit: count;
|
|
## If set to true, the version is a beta build of Zeek. These versions
|
|
## may start like "2.6-beta" or "3.0.0-rc" (the "rc" form started
|
|
## being used for 3.0.0 and later).
|
|
beta: bool;
|
|
## If set to true, the version is a debug build
|
|
debug: bool;
|
|
## Local version portion of the version string
|
|
localversion: string;
|
|
## String representation of this version
|
|
version_string: string;
|
|
};
|
|
|
|
## Parse a given version string.
|
|
##
|
|
## version_string: Zeek version string.
|
|
##
|
|
## Returns: `VersionDescription` record.
|
|
global parse: function(version_string: string): VersionDescription;
|
|
|
|
## Test if the current running version of Zeek is greater or equal to the given version
|
|
## string.
|
|
##
|
|
## version_string: Version to check against the current running version.
|
|
##
|
|
## Returns: True if running version greater or equal to the given version.
|
|
global at_least: function(version_string: string): bool;
|
|
}
|
|
|
|
function parse(version_string: string): VersionDescription
|
|
{
|
|
if ( /[0-9]+\.[0-9]+(\.[0-9]+)?(-(beta|rc|dev)[0-9]*)?(\.[0-9]+)?(-[a-zA-Z0-9_\.]+)?(-debug)?/ != version_string )
|
|
{
|
|
Reporter::error(fmt("Version string %s cannot be parsed", version_string));
|
|
return VersionDescription($version_number=0, $major=0, $minor=0, $patch=0, $commit=0, $beta=F, $debug=F, $localversion="", $version_string=version_string);
|
|
}
|
|
|
|
local beta = /-(beta|rc)/ in version_string;
|
|
local debug = /-debug/ in version_string;
|
|
local patchlevel = 0;
|
|
local commit = 0;
|
|
local vs = version_string;
|
|
local localversion = "";
|
|
|
|
local parts = split_string1(vs, /\./);
|
|
local major = to_count(parts[0]);
|
|
|
|
vs = lstrip(vs, "1234567890");
|
|
vs = lstrip(vs, ".");
|
|
|
|
parts = split_string1(vs, /\.|-/);
|
|
local minor = to_count(parts[0]);
|
|
|
|
vs = lstrip(vs, "1234567890");
|
|
|
|
if ( |vs| > 0 )
|
|
{
|
|
# More than just X.Y
|
|
if ( vs[0] == "." )
|
|
{
|
|
vs = lstrip(vs, ".");
|
|
parts = split_string1(vs, /\.|-/);
|
|
patchlevel = to_count(parts[0]);
|
|
vs = lstrip(vs, "1234567890");
|
|
}
|
|
|
|
vs = gsub(vs, /-debug$/, "");
|
|
vs = gsub(vs, /-(beta|rc|dev)[0-9]*/, "");
|
|
localversion = find_last(vs, /-[a-zA-Z0-9_\.]+$/);
|
|
if ( localversion != "" )
|
|
{
|
|
# Remove leadig dash from localversion
|
|
localversion = lstrip(localversion, "-");
|
|
# Drop the local version piece from the version string
|
|
vs = gsub(vs, /-[a-zA-Z0-9_\.]+$/, "");
|
|
}
|
|
|
|
# A .X possibly remaining
|
|
vs = lstrip(vs, ".");
|
|
|
|
if ( |vs| > 0 )
|
|
commit = to_count(vs);
|
|
}
|
|
|
|
local version_number = major * 10000 + minor * 100 + patchlevel;
|
|
|
|
return VersionDescription($version_number=version_number, $major=major,
|
|
$minor=minor, $patch=patchlevel, $commit=commit,
|
|
$beta=beta, $debug=debug,
|
|
$localversion=localversion,
|
|
$version_string=version_string);
|
|
}
|
|
|
|
export {
|
|
## `VersionDescription` record pertaining to the currently running version of Zeek.
|
|
const info = Version::parse(zeek_version());
|
|
|
|
## version number of the currently running version of Zeek as a numeric representation.
|
|
## The format of the number is ABBCC with A being the major version,
|
|
## bb being the minor version (2 digits) and CC being the patchlevel (2 digits).
|
|
## As an example, Zeek 2.4.1 results in the number 20401
|
|
const number = info$version_number;
|
|
}
|
|
|
|
function at_least(version_string: string): bool
|
|
{
|
|
return Version::number >= Version::parse(version_string)$version_number;
|
|
}
|