mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 14:48:21 +00:00

* "bro_is_terminating" is now "zeek_is_terminating" * "bro_version" is now "zeek_version" The old function names still exist for now, but are deprecated.
90 lines
3.5 KiB
Text
90 lines
3.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, e.g. 12 for 2.4-12. 0 for non-development versions
|
|
commit: count;
|
|
## If set to true, the version is a beta build of Zeek
|
|
beta: bool;
|
|
## If set to true, the version is a debug build
|
|
debug: bool;
|
|
## 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 ( /[[:digit:]]\.[[:digit:]][[:digit:]]?(\.[[:digit:]][[:digit:]]?)?(\-beta[[:digit:]]?)?(-[[:digit:]]+)?(\-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, $version_string=version_string);
|
|
}
|
|
|
|
local components = split_string1(version_string, /\-/);
|
|
local version_split = split_string(components[0], /\./);
|
|
local major = to_count(version_split[0]);
|
|
local minor = to_count(version_split[1]);
|
|
local patchlevel = ( |version_split| > 2) ? to_count(version_split[2]) : 0;
|
|
local version_number = major*10000+minor*100+patchlevel;
|
|
local beta = /\-beta/ in version_string;
|
|
local debug = /\-debug/ in version_string;
|
|
local commit = 0;
|
|
if ( |components| > 1 )
|
|
{
|
|
local commitpart = find_last(cat("-", components[1]), /\-[[:digit:]]+/);
|
|
commit = ( |commitpart| > 0 ) ? to_count(sub_bytes(commitpart, 2, 999)) : 0;
|
|
}
|
|
|
|
return VersionDescription($version_number=version_number, $major=major, $minor=minor, $patch=patchlevel, $commit=commit, $beta=beta, $debug=debug, $version_string=version_string);
|
|
}
|
|
|
|
export {
|
|
## 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 = Version::parse(zeek_version())$version_number;
|
|
|
|
## `VersionDescription` record pertaining to the currently running version of Zeek.
|
|
const info = Version::parse(zeek_version());
|
|
}
|
|
|
|
function at_least(version_string: string): bool
|
|
{
|
|
return Version::number >= Version::parse(version_string)$version_number;
|
|
}
|