diff --git a/CMakeLists.txt b/CMakeLists.txt
index c4542368bf..68e3ac0a75 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -69,6 +69,8 @@ set(CPACK_SOURCE_IGNORE_FILES "" CACHE STRING "Files to be ignored by CPack")
set(ZEEK_INCLUDE_PLUGINS "" CACHE STRING "Extra plugins to add to the build.")
+set(ZEEK_VERSION_LOCAL "" CACHE STRING "Custom version string.")
+
# Look into the build tree for additional CMake modules.
list(APPEND CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR})
list(APPEND CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR})
@@ -557,6 +559,15 @@ set(VERSION_C_IDENT "${VERSION}_plugin_${API_VERSION}")
string(REGEX REPLACE "-[0-9]*$" "_git" VERSION_C_IDENT "${VERSION_C_IDENT}")
string(REGEX REPLACE "[^a-zA-Z0-9_\$]" "_" VERSION_C_IDENT "${VERSION_C_IDENT}")
+set(ZEEK_VERSION_FULL_LOCAL "${VERSION}")
+if (NOT ZEEK_VERSION_LOCAL STREQUAL "")
+ if (ZEEK_VERSION_LOCAL MATCHES "-")
+ message(FATAL_ERROR "ZEEK_VERSION_LOCAL can not contain dashes: ${ZEEK_VERSION_LOCAL}")
+ endif ()
+ set(ZEEK_VERSION_FULL_LOCAL "${ZEEK_VERSION_FULL_LOCAL}-${ZEEK_VERSION_LOCAL}")
+ set(VERSION_C_IDENT "${VERSION_C_IDENT}_${ZEEK_VERSION_LOCAL}")
+endif ()
+
if (ENABLE_DEBUG)
set(VERSION_C_IDENT "${VERSION_C_IDENT}_debug")
target_compile_definitions(zeek_internal INTERFACE DEBUG)
diff --git a/configure b/configure
index 25bde692b6..317eaf941a 100755
--- a/configure
+++ b/configure
@@ -33,6 +33,9 @@ Usage: $0 [OPTION]... [VAR=VALUE]...
--sanitizers=LIST comma-separated list of sanitizer names to enable
--include-plugins=PATHS paths containing plugins to build directly into Zeek
(semicolon delimited and quoted when multiple)
+ --localversion=version version contains an additional, custom version string
+ that is appended to the standard Zeek version string,
+ with a dash [-] separating the two.
Installation Directories:
--prefix=PREFIX installation directory [/usr/local/zeek]
@@ -208,6 +211,9 @@ while [ $# -ne 0 ]; do
--include-plugins=*)
append_cache_entry ZEEK_INCLUDE_PLUGINS STRING \"$optarg\"
;;
+ --localversion=*)
+ append_cache_entry ZEEK_VERSION_LOCAL STRING \"$optarg\"
+ ;;
--prefix=*)
append_cache_entry CMAKE_INSTALL_PREFIX PATH $optarg
;;
diff --git a/docker/Makefile b/docker/Makefile
index 93d908d621..306bc909e0 100644
--- a/docker/Makefile
+++ b/docker/Makefile
@@ -1,6 +1,12 @@
# See the file "COPYING" in the main distribution directory for copyright.
VERSION := $(shell cat ../VERSION)
+LOCALVERSION ?= ""
+LOCAL_VERSION_FLAG = ""
+ifneq ($(LOCALVERSION), "")
+ VERSION := $(VERSION)-$(LOCALVERSION)
+ LOCAL_VERSION_FLAG := --localversion=$(LOCALVERSION)
+endif
BUILD_IMAGE := zeek-builder:$(VERSION)
BUILD_CONTAINER := zeek-builder-container-$(VERSION)
ZEEK_IMAGE ?= zeek:$(VERSION)
@@ -11,7 +17,7 @@ ZEEK_CONFIGURE_FLAGS ?= \
--build-type=Release \
--disable-btest-pcaps \
--disable-broker-tests \
- --disable-cpp-tests
+ --disable-cpp-tests $(LOCAL_VERSION_FLAG)
.PHONY: all
diff --git a/scripts/base/misc/version.zeek b/scripts/base/misc/version.zeek
index 321f35d1cc..14e3d4c2a7 100644
--- a/scripts/base/misc/version.zeek
+++ b/scripts/base/misc/version.zeek
@@ -34,6 +34,8 @@ export {
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;
};
@@ -56,10 +58,10 @@ export {
function parse(version_string: string): VersionDescription
{
- if ( /[0-9]+\.[0-9]+(\.[0-9]+)?(-(beta|rc|dev)[0-9]*)?((-|\.)[0-9]+)?(-debug)?/ != version_string )
+ 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, $version_string=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;
@@ -67,6 +69,7 @@ function parse(version_string: string): VersionDescription
local patchlevel = 0;
local commit = 0;
local vs = version_string;
+ local localversion = "";
local parts = split_string1(vs, /\./);
local major = to_count(parts[0]);
@@ -92,9 +95,17 @@ function parse(version_string: string): VersionDescription
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_\.]+$/, "");
+ }
- # Either a .X, or -X possibly remaining
- vs = lstrip(vs, ".-");
+ # A .X possibly remaining
+ vs = lstrip(vs, ".");
if ( |vs| > 0 )
commit = to_count(vs);
@@ -105,6 +116,7 @@ function parse(version_string: string): VersionDescription
return VersionDescription($version_number=version_number, $major=major,
$minor=minor, $patch=patchlevel, $commit=commit,
$beta=beta, $debug=debug,
+ $localversion=localversion,
$version_string=version_string);
}
diff --git a/src/version.c.in b/src/version.c.in
index e7508c8415..4c30a2005f 100644
--- a/src/version.c.in
+++ b/src/version.c.in
@@ -1,7 +1,7 @@
#include "zeek/zeek-version.h"
-char version[] = "@VERSION@";
+char version[] = "@ZEEK_VERSION_FULL_LOCAL@";
// A C function that has the current version built into its name.
// One can link a shared library against this to ensure that it won't
diff --git a/testing/btest/Baseline/plugins.hooks/output b/testing/btest/Baseline/plugins.hooks/output
index 2ee5766d00..e899ed7c8c 100644
--- a/testing/btest/Baseline/plugins.hooks/output
+++ b/testing/btest/Baseline/plugins.hooks/output
@@ -803,6 +803,7 @@
0.000000 MetaHookPost CallFunction(disable_event_group, , (Analyzer::Logging::include_confirmations)) ->
0.000000 MetaHookPost CallFunction(enable_module_events, , (Analyzer::Logging)) ->
0.000000 MetaHookPost CallFunction(filter_change_tracking, , ()) ->
+0.000000 MetaHookPost CallFunction(find_last, , (-15, <...>/)) ->
0.000000 MetaHookPost CallFunction(getenv, , (CLUSTER_NODE)) ->
0.000000 MetaHookPost CallFunction(getenv, , (ZEEK_DEFAULT_LISTEN_ADDRESS)) ->
0.000000 MetaHookPost CallFunction(global_options, , ()) ->
@@ -2427,6 +2428,7 @@
0.000000 MetaHookPre CallFunction(disable_event_group, , (Analyzer::Logging::include_confirmations))
0.000000 MetaHookPre CallFunction(enable_module_events, , (Analyzer::Logging))
0.000000 MetaHookPre CallFunction(filter_change_tracking, , ())
+0.000000 MetaHookPre CallFunction(find_last, , (-15, <...>/))
0.000000 MetaHookPre CallFunction(getenv, , (CLUSTER_NODE))
0.000000 MetaHookPre CallFunction(getenv, , (ZEEK_DEFAULT_LISTEN_ADDRESS))
0.000000 MetaHookPre CallFunction(global_options, , ())
@@ -4050,6 +4052,7 @@
0.000000 | HookCallFunction disable_event_group(Analyzer::Logging::include_confirmations)
0.000000 | HookCallFunction enable_module_events(Analyzer::Logging)
0.000000 | HookCallFunction filter_change_tracking()
+0.000000 | HookCallFunction find_last(-15, <...>/)
0.000000 | HookCallFunction getenv(CLUSTER_NODE)
0.000000 | HookCallFunction getenv(ZEEK_DEFAULT_LISTEN_ADDRESS)
0.000000 | HookCallFunction global_options()
diff --git a/testing/btest/Baseline/scripts.base.misc.version/.stderr b/testing/btest/Baseline/scripts.base.misc.version/.stderr
index 11cfa0470e..4cd9e25cb2 100644
--- a/testing/btest/Baseline/scripts.base.misc.version/.stderr
+++ b/testing/btest/Baseline/scripts.base.misc.version/.stderr
@@ -1,4 +1,4 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
-error in <...>/version.zeek, line 61: Version string 1 cannot be parsed
-error in <...>/version.zeek, line 61: Version string 1.12-beta-drunk cannot be parsed
-error in <...>/version.zeek, line 61: Version string JustARandomString cannot be parsed
+error in <...>/version.zeek, line 63: Version string 1 cannot be parsed
+error in <...>/version.zeek, line 63: Version string 1.12-beta-drunk-too-much cannot be parsed
+error in <...>/version.zeek, line 63: Version string JustARandomString cannot be parsed
diff --git a/testing/btest/Baseline/scripts.base.misc.version/.stdout b/testing/btest/Baseline/scripts.base.misc.version/.stdout
index 8b5394fb40..29dc0a1608 100644
--- a/testing/btest/Baseline/scripts.base.misc.version/.stdout
+++ b/testing/btest/Baseline/scripts.base.misc.version/.stdout
@@ -1,26 +1,42 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
-[version_number=10500, major=1, minor=5, patch=0, commit=0, beta=F, debug=F, version_string=1.5]
-[version_number=20000, major=2, minor=0, patch=0, commit=0, beta=F, debug=F, version_string=2.0]
-[version_number=20600, major=2, minor=6, patch=0, commit=0, beta=F, debug=F, version_string=2.6]
-[version_number=20500, major=2, minor=5, patch=0, commit=0, beta=T, debug=F, version_string=2.5-beta]
-[version_number=20501, major=2, minor=5, patch=1, commit=0, beta=F, debug=T, version_string=2.5.1-debug]
-[version_number=20500, major=2, minor=5, patch=0, commit=12, beta=T, debug=F, version_string=2.5-beta-12]
-[version_number=20500, major=2, minor=5, patch=0, commit=12, beta=F, debug=T, version_string=2.5-12-debug]
-[version_number=20502, major=2, minor=5, patch=2, commit=12, beta=T, debug=T, version_string=2.5.2-beta-12-debug]
-[version_number=20502, major=2, minor=5, patch=2, commit=12, beta=T, debug=T, version_string=2.5.2-beta5-12-debug]
-[version_number=11220, major=1, minor=12, patch=20, commit=2562, beta=T, debug=T, version_string=1.12.20-beta-2562-debug]
-[version_number=20600, major=2, minor=6, patch=0, commit=936, beta=F, debug=F, version_string=2.6-936]
-[version_number=120500, major=12, minor=5, patch=0, commit=0, beta=F, debug=F, version_string=12.5]
-[version_number=30000, major=3, minor=0, patch=0, commit=0, beta=F, debug=F, version_string=3.0.0]
-[version_number=30001, major=3, minor=0, patch=1, commit=0, beta=F, debug=F, version_string=3.0.1]
-[version_number=30100, major=3, minor=1, patch=0, commit=0, beta=F, debug=F, version_string=3.1.0]
-[version_number=30000, major=3, minor=0, patch=0, commit=0, beta=T, debug=F, version_string=3.0.0-rc]
-[version_number=30000, major=3, minor=0, patch=0, commit=37, beta=T, debug=F, version_string=3.0.0-rc.37]
-[version_number=30000, major=3, minor=0, patch=0, commit=13, beta=T, debug=F, version_string=3.0.0-rc2.13]
-[version_number=30000, major=3, minor=0, patch=0, commit=37, beta=T, debug=T, version_string=3.0.0-rc.37-debug]
-[version_number=30000, major=3, minor=0, patch=0, commit=13, beta=T, debug=T, version_string=3.0.0-rc2.13-debug]
-[version_number=30100, major=3, minor=1, patch=0, commit=42, beta=F, debug=F, version_string=3.1.0-dev.42]
-[version_number=30100, major=3, minor=1, patch=0, commit=42, beta=F, debug=T, version_string=3.1.0-dev.42-debug]
-[version_number=0, major=0, minor=0, patch=0, commit=0, beta=F, debug=F, version_string=1]
-[version_number=0, major=0, minor=0, patch=0, commit=0, beta=F, debug=F, version_string=1.12-beta-drunk]
-[version_number=0, major=0, minor=0, patch=0, commit=0, beta=F, debug=F, version_string=JustARandomString]
+[version_number=10500, major=1, minor=5, patch=0, commit=0, beta=F, debug=F, localversion=, version_string=1.5]
+[version_number=20000, major=2, minor=0, patch=0, commit=0, beta=F, debug=F, localversion=, version_string=2.0]
+[version_number=20600, major=2, minor=6, patch=0, commit=0, beta=F, debug=F, localversion=, version_string=2.6]
+[version_number=20600, major=2, minor=6, patch=0, commit=0, beta=F, debug=F, localversion=custom1, version_string=2.6-custom1]
+[version_number=20500, major=2, minor=5, patch=0, commit=0, beta=T, debug=F, localversion=, version_string=2.5-beta]
+[version_number=20500, major=2, minor=5, patch=0, commit=0, beta=T, debug=F, localversion=custom2, version_string=2.5-beta-custom2]
+[version_number=20501, major=2, minor=5, patch=1, commit=0, beta=F, debug=T, localversion=, version_string=2.5.1-debug]
+[version_number=20501, major=2, minor=5, patch=1, commit=0, beta=F, debug=T, localversion=custom3, version_string=2.5.1-custom3-debug]
+[version_number=20500, major=2, minor=5, patch=0, commit=12, beta=T, debug=F, localversion=, version_string=2.5-beta.12]
+[version_number=20500, major=2, minor=5, patch=0, commit=12, beta=T, debug=F, localversion=custom4, version_string=2.5-beta.12-custom4]
+[version_number=20512, major=2, minor=5, patch=12, commit=0, beta=F, debug=T, localversion=, version_string=2.5.12-debug]
+[version_number=20512, major=2, minor=5, patch=12, commit=0, beta=F, debug=T, localversion=custom5, version_string=2.5.12-custom5-debug]
+[version_number=20502, major=2, minor=5, patch=2, commit=12, beta=T, debug=T, localversion=, version_string=2.5.2-beta.12-debug]
+[version_number=20502, major=2, minor=5, patch=2, commit=12, beta=T, debug=T, localversion=custom6, version_string=2.5.2-beta.12-custom6-debug]
+[version_number=20502, major=2, minor=5, patch=2, commit=12, beta=T, debug=T, localversion=, version_string=2.5.2-beta5.12-debug]
+[version_number=20502, major=2, minor=5, patch=2, commit=12, beta=T, debug=T, localversion=custom7, version_string=2.5.2-beta5.12-custom7-debug]
+[version_number=11220, major=1, minor=12, patch=20, commit=2562, beta=T, debug=T, localversion=, version_string=1.12.20-beta.2562-debug]
+[version_number=11220, major=1, minor=12, patch=20, commit=2562, beta=T, debug=T, localversion=custom8, version_string=1.12.20-beta.2562-custom8-debug]
+[version_number=21536, major=2, minor=6, patch=936, commit=0, beta=F, debug=F, localversion=, version_string=2.6.936]
+[version_number=120500, major=12, minor=5, patch=0, commit=0, beta=F, debug=F, localversion=, version_string=12.5]
+[version_number=30000, major=3, minor=0, patch=0, commit=0, beta=F, debug=F, localversion=, version_string=3.0.0]
+[version_number=30001, major=3, minor=0, patch=1, commit=0, beta=F, debug=F, localversion=, version_string=3.0.1]
+[version_number=30100, major=3, minor=1, patch=0, commit=0, beta=F, debug=F, localversion=, version_string=3.1.0]
+[version_number=30100, major=3, minor=1, patch=0, commit=0, beta=F, debug=F, localversion=custom9, version_string=3.1.0-custom9]
+[version_number=30000, major=3, minor=0, patch=0, commit=0, beta=T, debug=F, localversion=, version_string=3.0.0-rc]
+[version_number=30000, major=3, minor=0, patch=0, commit=0, beta=T, debug=F, localversion=custom10, version_string=3.0.0-rc-custom10]
+[version_number=30000, major=3, minor=0, patch=0, commit=37, beta=T, debug=F, localversion=, version_string=3.0.0-rc.37]
+[version_number=30000, major=3, minor=0, patch=0, commit=37, beta=T, debug=F, localversion=custom11, version_string=3.0.0-rc.37-custom11]
+[version_number=30000, major=3, minor=0, patch=0, commit=13, beta=T, debug=F, localversion=, version_string=3.0.0-rc2.13]
+[version_number=30000, major=3, minor=0, patch=0, commit=13, beta=T, debug=F, localversion=custom12, version_string=3.0.0-rc2.13-custom12]
+[version_number=30000, major=3, minor=0, patch=0, commit=37, beta=T, debug=T, localversion=, version_string=3.0.0-rc.37-debug]
+[version_number=30000, major=3, minor=0, patch=0, commit=37, beta=T, debug=T, localversion=custom13, version_string=3.0.0-rc.37-custom13-debug]
+[version_number=30000, major=3, minor=0, patch=0, commit=13, beta=T, debug=T, localversion=, version_string=3.0.0-rc2.13-debug]
+[version_number=30000, major=3, minor=0, patch=0, commit=13, beta=T, debug=T, localversion=custom14, version_string=3.0.0-rc2.13-custom14-debug]
+[version_number=30100, major=3, minor=1, patch=0, commit=42, beta=F, debug=F, localversion=, version_string=3.1.0-dev.42]
+[version_number=30100, major=3, minor=1, patch=0, commit=42, beta=F, debug=F, localversion=custom15, version_string=3.1.0-dev.42-custom15]
+[version_number=30100, major=3, minor=1, patch=0, commit=42, beta=F, debug=T, localversion=, version_string=3.1.0-dev.42-debug]
+[version_number=30100, major=3, minor=1, patch=0, commit=42, beta=F, debug=T, localversion=custom16, version_string=3.1.0-dev.42-custom16-debug]
+[version_number=0, major=0, minor=0, patch=0, commit=0, beta=F, debug=F, localversion=, version_string=1]
+[version_number=0, major=0, minor=0, patch=0, commit=0, beta=F, debug=F, localversion=, version_string=1.12-beta-drunk-too-much]
+[version_number=0, major=0, minor=0, patch=0, commit=0, beta=F, debug=F, localversion=, version_string=JustARandomString]
diff --git a/testing/btest/scripts/base/misc/version.zeek b/testing/btest/scripts/base/misc/version.zeek
index 00312f3961..38dfad8f2d 100644
--- a/testing/btest/scripts/base/misc/version.zeek
+++ b/testing/btest/scripts/base/misc/version.zeek
@@ -6,29 +6,45 @@
print Version::parse("1.5");
print Version::parse("2.0");
print Version::parse("2.6");
+print Version::parse("2.6-custom1");
print Version::parse("2.5-beta");
+print Version::parse("2.5-beta-custom2");
print Version::parse("2.5.1-debug");
-print Version::parse("2.5-beta-12");
-print Version::parse("2.5-12-debug");
-print Version::parse("2.5.2-beta-12-debug");
-print Version::parse("2.5.2-beta5-12-debug");
-print Version::parse("1.12.20-beta-2562-debug");
-print Version::parse("2.6-936");
+print Version::parse("2.5.1-custom3-debug");
+print Version::parse("2.5-beta.12");
+print Version::parse("2.5-beta.12-custom4");
+print Version::parse("2.5.12-debug");
+print Version::parse("2.5.12-custom5-debug");
+print Version::parse("2.5.2-beta.12-debug");
+print Version::parse("2.5.2-beta.12-custom6-debug");
+print Version::parse("2.5.2-beta5.12-debug");
+print Version::parse("2.5.2-beta5.12-custom7-debug");
+print Version::parse("1.12.20-beta.2562-debug");
+print Version::parse("1.12.20-beta.2562-custom8-debug");
+print Version::parse("2.6.936");
print Version::parse("12.5");
print Version::parse("3.0.0");
print Version::parse("3.0.1");
print Version::parse("3.1.0");
+print Version::parse("3.1.0-custom9");
print Version::parse("3.0.0-rc");
+print Version::parse("3.0.0-rc-custom10");
print Version::parse("3.0.0-rc.37");
+print Version::parse("3.0.0-rc.37-custom11");
print Version::parse("3.0.0-rc2.13");
+print Version::parse("3.0.0-rc2.13-custom12");
print Version::parse("3.0.0-rc.37-debug");
+print Version::parse("3.0.0-rc.37-custom13-debug");
print Version::parse("3.0.0-rc2.13-debug");
+print Version::parse("3.0.0-rc2.13-custom14-debug");
print Version::parse("3.1.0-dev.42");
+print Version::parse("3.1.0-dev.42-custom15");
print Version::parse("3.1.0-dev.42-debug");
+print Version::parse("3.1.0-dev.42-custom16-debug");
# bad versions
print Version::parse("1");
-print Version::parse("1.12-beta-drunk");
+print Version::parse("1.12-beta-drunk-too-much");
print Version::parse("JustARandomString");
# check that current running version of Zeek parses without error
diff --git a/zeek-config.in b/zeek-config.in
index 0940f6fe09..0ab6c1cf6f 100755
--- a/zeek-config.in
+++ b/zeek-config.in
@@ -14,7 +14,7 @@ prefix="@CMAKE_INSTALL_PREFIX@"
python_dir="@PY_MOD_INSTALL_DIR@"
script_dir="@ZEEK_SCRIPT_INSTALL_PATH@"
site_dir="@ZEEK_SCRIPT_INSTALL_PATH@/site"
-version="@VERSION@"
+version="@ZEEK_VERSION_FULL_LOCAL@"
zeek_dist="@ZEEK_DIST@"
zeekpath="@DEFAULT_ZEEKPATH@"
diff --git a/zeek-version.h.in b/zeek-version.h.in
index f09f9ce5a7..2a6902318b 100644
--- a/zeek-version.h.in
+++ b/zeek-version.h.in
@@ -3,7 +3,7 @@
#pragma once
/* Version number of package */
-#define VERSION "@VERSION@"
+#define VERSION "@ZEEK_VERSION_FULL_LOCAL@"
// Zeek version number.
// This is the result of (major * 10000 + minor * 100 + patch)