dep/RtspServer was pinned at a071599, which predates the portability
fix, so cmake --build fails on macOS in the vendored server:
dep/RtspServer/src/net/Pipe.cpp:60:6: error: use of undeclared
identifier 'pipe2'
ZoneMinder/RtspServer#14 emulates pipe2() with pipe() + fcntl() on
platforms that lack it (macOS, the BSDs). Pinning master (a8781ec)
rather than that one merge commit, so the submodule tracks a branch
tip we can move forward again.
The bump carries four upstream commits:
bf6576a fix: emulate pipe2 with pipe + fcntl on platforms without it
7ea3c31 fix: hold shared_ptr to self in RtpConnection trigger lambda
abdf5ad feat: AV1Source passthrough mode for pre-formed RTP payloads
064e08c docs: rewrite README as standalone project
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B5KL9Xbi7K5aGsauLtd8tG
The same treatment #5080 gave jwt-cpp. CxxUrl was already kept out of the
install, by saving ENABLE_INSTALL, forcing it off around the add_subdirectory
and restoring it. That works, but it rests on the submodule continuing to spell
its option exactly ENABLE_INSTALL, and on CMAKE_POLICY_DEFAULT_CMP0077 being
forced to NEW so that option() honours the value we set - CxxUrl asks for CMake
3.10, where it otherwise would not. Rename the option upstream, or bump the
submodule past a rename, and the guard silently stops working: headers, the
static library and the cmake package files start staging into the prefix again,
which is #4590 coming back with nothing to notice it.
EXCLUDE_FROM_ALL is enforced by CMake rather than by the dependency, and gives
one idiom for both vendored copies instead of two. Inter-target dependencies
supersede the exclusion, so zm still builds and links CxxUrl.
The tradeoff is that CxxUrl's ENABLE_INSTALL block now runs at configure time,
so CxxUrlConfig.cmake, CxxUrlConfigVersion.cmake and CxxUrlTargets.cmake are
generated into its build directory and CMAKE_PREFIX_PATH picks up that directory
in dep/ scope. Nothing reads any of it - CxxUrl is the last entry in this file -
and none of it is installed.
Verified by configuring before and after: dep/cmake_install.cmake goes from
including CxxUrl's install script to not referencing it. Neither staged
anything, so this is not a behaviour fix, it is a guarantee that it stays that
way.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Nr76CednxtDt2nPuq6WrbL
Update RtspServer cmake_minimum_required from 3.5 to 3.10 and set
CMP0077 policy to NEW before adding CxxUrl subdirectory to suppress
developer warnings.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add ZM_USE_SYSTEM_JWT_CPP CMake option (default OFF) to allow using
system-installed jwt-cpp instead of the vendored version. When enabled,
CMake will search for jwt-cpp via find_package(jwt-cpp CONFIG).
The vendored jwt-cpp in dep/ is only built when not using system version.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Extract H264 SPS/PPS and H265 VPS/SPS/PPS from video stream and pass
to xop sources for inclusion in SDP sprop-parameter-sets. This allows
RTSP clients like go2rtc to properly decode video with correct
dimensions.
Also adds auth_hash refresh support to go2rtc manager to prevent
authentication timeout after 2 hours.
Changes:
- zm_rtsp_server_fifo_h264_source.cpp: Re-enable SPS/PPS extraction
- zm_rtsp_server_fifo_video_source.h: Add xop source pointers
- zm_rtsp_server.cpp: Connect FIFO sources to xop sources
- zm_monitor_go2rtc.cpp: Add periodic auth_hash refresh
- zm_monitor.h: Add refresh tracking members to Go2RTCManager
- dep/RtspServer: Update xop H264/H265Source with sprop support
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This is a header-only library so there is no target to compile for which warnings could be disabled.
Moreover a target dependency with INTERFACE visibility propagates to the dependants. This disabled warnings further down the chain.
src/ should only contain our code. Move the in-tree dependencies to dep/
This allows us (if necessary) to e.g. exclude that part of the tree from being analyzed by
various tools or mark it as external code in IDEs.