Replace 4 hardcoded `perl` invocations with `${PERL_EXECUTABLE}` from
find_package(Perl) so builds work when perl isn't in PATH or the wrong
perl would be found (NixOS, custom installs, Homebrew vs system).
Also: fix ZMCONFGEN_RESULT variable case mismatch in error message,
remove deprecated IMMEDIATE keyword from configure_file(), bump
cmake_minimum_required from 3.5 to 3.12 (C++17 requires 3.9+), and
remove dead C++11 fallback for CMake < 3.8 in ConfigureBaseTargets.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add optional libunwind support for better stack traces on ARM
(glibc's backtrace() doesn't work well on ARM due to missing
frame pointers)
- Fix misleading signal info: si_pid/si_uid/si_status are only
valid for SIGCHLD, not for SIGSEGV/SIGBUS - they were showing
garbage values (the fault address misinterpreted as PID)
- Add human-readable fault descriptions for SIGSEGV, SIGBUS,
SIGFPE, and SIGILL signals
- Use clearer terminology in error messages
To enable libunwind on ARM: apt install libunwind-dev
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The manpage compression metadata include the true build time (and not
SOURCE_DATE_EPOCH like the manpages themselves). Excluding the build time
allows the manpage to be build reproducibly.
Ref https://reproducible-builds.org/
Improves detection across different platforms (esp. FreeBSD) since system paths are automatically taken into account (this is in contrast to check_include_file).
Introduce the -DZM_JWT_BACKEND CMake option through which the JWT backend can be selected.
Supported values: jwt_cpp (default; in-tree) and libjwt
When libjwt is chosen ZM_CRYPTO_BACKEND is taken into account to select the corresponding flavour of libjwt.
The zm-dependency-interface target sets compiler flags in a way suitable for external dependencies.
This means mainly to disable compile warnings since they concern upstream and not us.
zm-compile-option-interface:
Use to set various compiler/linker flags
zm-feature-interface:
Use to set required compiler features.
See https://cmake.org/cmake/help/latest/prop_gbl/CMAKE_CXX_KNOWN_FEATURES.html
zm-warning-interface:
Use to set compiler warning flags. If need be a zm-no-warning-interface can be added which suppresses all warning for targets linked against it. Useful for in-tree dependencies from which we don't want compiler warnings.
zm-core-interface:
That's the interface one should normally link against to get all the options.