From 2cef3afaa6d2fdb210ffdd5514cbdb8203d9a9b3 Mon Sep 17 00:00:00 2001 From: Sam James Date: Wed, 21 May 2025 20:08:17 +0100 Subject: [PATCH] net-analyzer/icinga2: fix CMake 4 compat, build tests conditionally 413->368 targets with tests disabled Signed-off-by: Sam James --- .../files/icinga2-2.14.5-cmake-4.patch | 67 ++++++++ net-analyzer/icinga2/icinga2-2.14.5-r1.ebuild | 157 ++++++++++++++++++ 2 files changed, 224 insertions(+) create mode 100644 net-analyzer/icinga2/files/icinga2-2.14.5-cmake-4.patch create mode 100644 net-analyzer/icinga2/icinga2-2.14.5-r1.ebuild diff --git a/net-analyzer/icinga2/files/icinga2-2.14.5-cmake-4.patch b/net-analyzer/icinga2/files/icinga2-2.14.5-cmake-4.patch new file mode 100644 index 0000000000000..96c9d470d7091 --- /dev/null +++ b/net-analyzer/icinga2/files/icinga2-2.14.5-cmake-4.patch @@ -0,0 +1,67 @@ +https://github.com/Icinga/icinga2/commit/28c61c904a74db5181a8cc1f3a81fad544d7eab7 +https://github.com/Icinga/icinga2/commit/7f164bda96341272be385fa1359a26f97eb9d2b4 + +From 28c61c904a74db5181a8cc1f3a81fad544d7eab7 Mon Sep 17 00:00:00 2001 +From: Yonas Habteab +Date: Thu, 3 Apr 2025 16:43:31 +0200 +Subject: [PATCH] Fix CMake doesn't export symbols of executables anymore + +CMake 3.4 introduced a new policy [^1] which prevents from automatically +adding the compiler flags needed for exporting the symbols of the +executables and libraries without the `ENABLE_EXPORTS` property. So, by +defining this variable, CMake will restore the previous behaviour by +automatically adding the `ENABLE_EXPORTS` properties to all targets. + +[1]: https://cmake.org/cmake/help/latest/policy/CMP0065.html +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -18,6 +18,10 @@ if(NOT CMAKE_BUILD_TYPE) + FORCE) + endif() + ++# Include symbols in executables so that function names can be printed in stack traces, for example in crash dumps. ++set(CMAKE_ENABLE_EXPORTS ON) # Added in CMake 3.4 ++set(CMAKE_EXECUTABLE_ENABLE_EXPORTS ON) # Added in CMake 3.27 and supersedes the above one. ++ + if(WIN32) + set(ICINGA2_MASTER OFF) + else() + + +From 7f164bda96341272be385fa1359a26f97eb9d2b4 Mon Sep 17 00:00:00 2001 +From: Yonas Habteab +Date: Thu, 3 Apr 2025 10:01:43 +0200 +Subject: [PATCH] Raise cmake minimum required version to `3.8...3.17` + +CMake version `< 3.5` is no longer supported, so the new CMake minimum +policy version is set to `3.8` to support C++17 unconditionally. After +checking all the policies that might affect Icinga 2 in any way, CMake +`3.17` is used as a max supported CMake policy. Anything above that may +work but we didn't explicitly verify the policies introduced with CMake +3.18 and later and may or may not affect Icinga 2. +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -1,17 +1,12 @@ + # Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ + +-cmake_minimum_required(VERSION 2.8.12) ++# CMake 3.8 is required, CMake policy compatibility was verified up to 3.17. ++cmake_minimum_required(VERSION 3.8...3.17) + set(BOOST_MIN_VERSION "1.66.0") + +-if("${CMAKE_VERSION}" VERSION_LESS "3.8") # SLES 12.5 +- if(NOT MSVC) +- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17") +- endif() +-else() +- set(CMAKE_CXX_STANDARD 17) +- set(CMAKE_CXX_STANDARD_REQUIRED ON) +- set(CMAKE_CXX_EXTENSIONS OFF) +-endif() ++set(CMAKE_CXX_STANDARD 17) ++set(CMAKE_CXX_STANDARD_REQUIRED ON) ++set(CMAKE_CXX_EXTENSIONS OFF) + + project(icinga2) + list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") + diff --git a/net-analyzer/icinga2/icinga2-2.14.5-r1.ebuild b/net-analyzer/icinga2/icinga2-2.14.5-r1.ebuild new file mode 100644 index 0000000000000..f7e0d7186bb1c --- /dev/null +++ b/net-analyzer/icinga2/icinga2-2.14.5-r1.ebuild @@ -0,0 +1,157 @@ +# Copyright 1999-2025 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +inherit cmake eapi9-ver + +if [[ ${PV} != 9999 ]]; then + SRC_URI="https://github.com/Icinga/icinga2/archive/v${PV}.tar.gz -> ${P}.tar.gz" + KEYWORDS="~amd64 ~arm64 ~x86" +else + inherit git-r3 + EGIT_REPO_URI="https://github.com/Icinga/icinga2.git" +fi + +DESCRIPTION="Distributed, general purpose, network monitoring engine" +HOMEPAGE="https://icinga.com/" + +LICENSE="GPL-2" +SLOT="0" +IUSE="console jumbo-build mail mariadb minimal +mysql +plugins postgres test systemd" +RESTRICT="!test? ( test )" + +# Add accounts to DEPEND because of fowners in src_install +DEPEND=" + dev-libs/openssl:= + dev-libs/boost:=[context] + console? ( dev-libs/libedit ) + mariadb? ( dev-db/mariadb-connector-c:= ) + mysql? ( dev-db/mysql-connector-c:= ) + postgres? ( dev-db/postgresql:= ) + dev-libs/yajl:= + acct-user/icinga + acct-group/icinga + acct-group/icingacmd +" +BDEPEND=" + app-alternatives/yacc + app-alternatives/lex +" +RDEPEND=" + ${DEPEND} + acct-group/nagios + plugins? ( || ( + net-analyzer/monitoring-plugins + net-analyzer/nagios-plugins + ) ) + mail? ( virtual/mailx ) +" + +REQUIRED_USE="!minimal? ( || ( mariadb mysql postgres ) )" + +PATCHES=( + "${FILESDIR}"/${PN}-2.14.5-boost-1.87.patch + "${FILESDIR}"/${PN}-2.14.5-cmake-4.patch +) + +src_configure() { + local mycmakeargs=( + -DICINGA2_UNITY_BUILD=$(usex jumbo-build) + -DCMAKE_INSTALL_SYSCONFDIR=/etc + -DCMAKE_INSTALL_LOCALSTATEDIR=/var + -DICINGA2_SYSCONFIGFILE=/etc/conf.d/icinga2 + -DICINGA2_PLUGINDIR="/usr/$(get_libdir)/nagios/plugins" + -DICINGA2_USER=icinga + -DICINGA2_GROUP=icingacmd + -DICINGA2_COMMAND_GROUP=icingacmd + -DICINGA2_RUNDIR=/run + -DINSTALL_SYSTEMD_SERVICE_AND_INITSCRIPT=ON + -DUSE_SYSTEMD=$(usex systemd) + -DICINGA2_WITH_TESTS=$(usex test) + -DLOGROTATE_HAS_SU=ON + # only appends -flto + -DICINGA2_LTO_BUILD=OFF + ) + + # default to off if minimal, allow the flags to be set otherwise + if use minimal; then + mycmakeargs+=( + -DICINGA2_WITH_MYSQL=OFF + -DICINGA2_WITH_PGSQL=OFF + ) + else + mycmakeargs+=( + -DICINGA2_WITH_PGSQL=$(usex postgres) + -DICINGA2_WITH_MYSQL=$(usex mysql yes $(usex mariadb)) + ) + fi + + cmake_src_configure +} + +src_install() { + cmake_src_install + + newinitd "${FILESDIR}"/icinga2.initd-3 icinga2 + + if use mysql || use mariadb; then + docinto schema + newdoc "${WORKDIR}"/icinga2-${PV}/lib/db_ido_mysql/schema/mysql.sql mysql.sql + docinto schema/upgrade + dodoc "${WORKDIR}"/icinga2-${PV}/lib/db_ido_mysql/schema/upgrade/* + fi + if use postgres; then + docinto schema + newdoc "${WORKDIR}"/icinga2-${PV}/lib/db_ido_pgsql/schema/pgsql.sql pgsql.sql + docinto schema/upgrade + dodoc "${WORKDIR}"/icinga2-${PV}/lib/db_ido_pgsql/schema/upgrade/* + fi + + # See messiness in bug #638686 + keepdir /etc/icinga2 + keepdir /var/lib/icinga2/api/log + keepdir /var/lib/icinga2/api/repository + keepdir /var/lib/icinga2/api/zones + keepdir /var/lib/icinga2/api/zones-stage + keepdir /var/lib/icinga2/certificate-requests + keepdir /var/lib/icinga2/certs + keepdir /var/log/icinga2 + keepdir /var/log/icinga2/compat + keepdir /var/log/icinga2/compat/archives + keepdir /var/log/icinga2/crash + keepdir /var/spool/icinga2/perfdata + keepdir /var/spool/icinga2/tmp + + rm -r "${D}/run" || die "failed to remove /run" + rm -r "${D}/var/cache" || die "failed to remove /var/cache" + + fowners -R icinga:icinga /etc/icinga2 + fperms 0750 /etc/icinga2 + fowners icinga:icinga /var/lib/icinga2 + fowners -R icinga:icingacmd /var/lib/icinga2/api + fowners -R icinga:icingacmd /var/lib/icinga2/certificate-requests + fowners -R icinga:icingacmd /var/lib/icinga2/certs + fowners icinga:icinga /var/spool/icinga2 + fowners icinga:icinga /var/spool/icinga2/perfdata + fowners icinga:icingacmd /var/log/icinga2 + + fperms ug+rwX,o-rwx /etc/icinga2 + fperms ug+rwX,o-rwx /var/lib/icinga2 + fperms ug+rwX,o-rwx /var/spool/icinga2 + fperms ug+rwX,o-rwx /var/log/icinga2 + + insinto /usr/share/vim/vimfiles + doins -r "${WORKDIR}"/${P}/tools/syntax/vim/ftdetect + doins -r "${WORKDIR}"/${P}/tools/syntax/vim/syntax + + insinto /usr/share/nano + doins "${WORKDIR}"/${P}/tools/syntax/nano/icinga2.nanorc +} + +pkg_postinst() { + if [[ "${PV}" != 9999 ]] && ver_replacing -lt "${PV}"; then + elog "DB IDO schema upgrade may be required." + elog "https://www.icinga.com/docs/icinga2/latest/doc/16-upgrading-icinga-2/" + fi +}