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)