summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAustin S. Hemmelgarn <austin@netdata.cloud>2024-02-09 06:51:41 -0500
committerGitHub <noreply@github.com>2024-02-09 06:51:41 -0500
commit63f53de380732ab4c088c6b6d7eb48e33310eea9 (patch)
tree881bff344bce6d2d22bab9032dfa9c894f0fbafc
parentdd11815cd97c9a427bc06e8d3efbb8b7f2bd7712 (diff)
Use C++14 by default when building on systems that support it. (#16972)
This is needed to properly support the latest versions of Protobuf.
-rw-r--r--CMakeLists.txt8
-rwxr-xr-xnetdata-installer.sh3
-rw-r--r--netdata.spec.in5
-rw-r--r--packaging/installer/functions.sh22
4 files changed, 37 insertions, 1 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 48326c887b..944a5105ec 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -60,7 +60,13 @@ project(netdata
find_package(PkgConfig REQUIRED)
set(CMAKE_C_STANDARD 11)
-set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_CXX_STANDARD 14)
+
+option(USE_CXX_11 "use C++11 instead of C++14" False)
+
+if(USE_CXX_11)
+ set(CMAKE_CXX_STANDARD 11)
+endif()
set(CMAKE_C_STANDARD_REQUIRED On)
set(CMAKE_CXX_STANDARD_REQUIRED On)
diff --git a/netdata-installer.sh b/netdata-installer.sh
index bce098dd91..d2fe1a2abd 100755
--- a/netdata-installer.sh
+++ b/netdata-installer.sh
@@ -209,6 +209,7 @@ USAGE: ${PROGRAM} [options]
--disable-ebpf Disable eBPF Kernel plugin. Default: enabled.
--disable-cloud Disable all Netdata Cloud functionality.
--require-cloud Fail the install if it can't build Netdata Cloud support.
+ --force-legacy-cxx Force usage of an older C++ standard to allow building on older systems. This will usually be autodetected.
--enable-plugin-freeipmi Enable the FreeIPMI plugin. Default: enable it when libipmimonitoring is available.
--disable-plugin-freeipmi Explicitly disable the FreeIPMI plugin.
--disable-https Explicitly disable TLS support.
@@ -257,6 +258,7 @@ ENABLE_H2O=1
ENABLE_CLOUD=1
ENABLE_LOGS_MANAGEMENT=1
ENABLE_LOGS_MANAGEMENT_TESTS=0
+FORCE_LEGACY_CXX=0
NETDATA_CMAKE_OPTIONS="${NETDATA_CMAKE_OPTIONS-}"
RELEASE_CHANNEL="nightly" # valid values are 'nightly' and 'stable'
@@ -273,6 +275,7 @@ while [ -n "${1}" ]; do
"--auto-update-type") ;;
"--stable-channel") RELEASE_CHANNEL="stable" ;;
"--nightly-channel") RELEASE_CHANNEL="nightly" ;;
+ "--force-legacy-cxx") FORCE_LEGACY_CXX=1 ;;
"--enable-plugin-freeipmi") ENABLE_FREEIPMI=1 ;;
"--disable-plugin-freeipmi") ENABLE_FREEIPMI=0 ;;
"--disable-https")
diff --git a/netdata.spec.in b/netdata.spec.in
index 1a099ce6f0..ad0a6a36f0 100644
--- a/netdata.spec.in
+++ b/netdata.spec.in
@@ -352,6 +352,11 @@ make download
# Conf step
%cmake -G Ninja \
-DCMAKE_INSTALL_PREFIX=/ \
+ %if 0%{?centos_ver:1}
+ %if %{centos_ver} < 8
+ -DUSE_CXX_11=On \
+ %endif
+ %endif
%if %{_have_cups}
-DENABLE_PLUGIN_CUPS=On \
%else
diff --git a/packaging/installer/functions.sh b/packaging/installer/functions.sh
index 0eea4d4a47..9a0df58e9a 100644
--- a/packaging/installer/functions.sh
+++ b/packaging/installer/functions.sh
@@ -235,6 +235,28 @@ check_for_feature() {
prepare_cmake_options() {
NETDATA_CMAKE_OPTIONS="-S ./ -B ${NETDATA_BUILD_DIR} ${CMAKE_OPTS} ${NETDATA_PREFIX+-DCMAKE_INSTALL_PREFIX="${NETDATA_PREFIX}"} ${NETDATA_USER:+-DNETDATA_USER=${NETDATA_USER}} ${NETDATA_CMAKE_OPTIONS} "
+ NEED_OLD_CXX=0
+
+ if [ "${FORCE_LEGACY_CXX:-0}" -eq 1 ]; then
+ NEED_OLD_CXX=1
+ else
+ if command -v gcc >/dev/null 2>&1; then
+ if [ "$(gcc --version | head -n 1 | sed 's/(.*) //' | cut -f 2 -d ' ' | cut -f 1 -d '.')" -lt 5 ]; then
+ NEED_OLD_CXX=1
+ fi
+ fi
+
+ if command -v clang >/dev/null 2>&1; then
+ if [ "$(clang --version | head -n 1 | cut -f 3 -d ' ' | cut -f 1 -d '.')" -lt 4 ]; then
+ NEED_OLD_CXX=1
+ fi
+ fi
+ fi
+
+ if [ "${NEED_OLD_CXX}" -eq 1 ]; then
+ NETDATA_CMAKE_OPTIONS="${NETDATA_CMAKE_OPTIONS} -DUSE_CXX_11=On"
+ fi
+
if [ "${USE_SYSTEM_PROTOBUF:-1}" -eq 1 ]; then
enable_feature BUNDLED_PROTOBUF 0
else