v4l2camera: backport upstream patch for CMake >= 4.0 support
authorChristian Marangi <[email protected]>
Mon, 24 Nov 2025 22:53:14 +0000 (23:53 +0100)
committerChristian Marangi <[email protected]>
Mon, 24 Nov 2025 23:57:10 +0000 (00:57 +0100)
Backport upstream patch for v4l2camera for CMake >= 4.0 support.

Signed-off-by: Christian Marangi <[email protected]>
multimedia/v4l2camera/patches/001-update-cmake-version-min.patch [new file with mode: 0644]
multimedia/v4l2camera/patches/002-01-add-logger-in-public-properties.patch [new file with mode: 0644]
multimedia/v4l2camera/patches/002-02-replace-exec_program-with-exec_process.patch [new file with mode: 0644]
multimedia/v4l2camera/patches/002-03-CMake-Improvements-355.patch [new file with mode: 0644]
multimedia/v4l2camera/patches/002-04-remove-useless-verbose.patch [new file with mode: 0644]
multimedia/v4l2camera/patches/002-05-add-pthread-to-lib.patch [new file with mode: 0644]
multimedia/v4l2camera/patches/003-remove-verbose-param.patch [new file with mode: 0644]

diff --git a/multimedia/v4l2camera/patches/001-update-cmake-version-min.patch b/multimedia/v4l2camera/patches/001-update-cmake-version-min.patch
new file mode 100644 (file)
index 0000000..d927b35
--- /dev/null
@@ -0,0 +1,17 @@
+From 8e13b8df40af5d48a05775f851b7900b5f87e9ad Mon Sep 17 00:00:00 2001
+From: Michel Promonet <[email protected]>
+Date: Sun, 29 Dec 2024 15:20:34 +0100
+Subject: [PATCH] update cmake version min
+
+---
+ v4l2rtspserver/libv4l2cpp/CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/v4l2rtspserver/libv4l2cpp/CMakeLists.txt
++++ b/v4l2rtspserver/libv4l2cpp/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 3.0)
++cmake_minimum_required(VERSION 3.5)
+ # set project name from current directory
+ get_filename_component(BASENAME ${CMAKE_CURRENT_LIST_DIR} NAME)
diff --git a/multimedia/v4l2camera/patches/002-01-add-logger-in-public-properties.patch b/multimedia/v4l2camera/patches/002-01-add-logger-in-public-properties.patch
new file mode 100644 (file)
index 0000000..76b173a
--- /dev/null
@@ -0,0 +1,55 @@
+From d912aab90cfc907903a6801801b3f4badefb1cfd Mon Sep 17 00:00:00 2001
+From: Michel Promonet <[email protected]>
+Date: Sat, 21 Sep 2024 22:05:03 +0200
+Subject: [PATCH] add logger in public properties
+
+---
+ v4l2rtspserver/CMakeLists.txt | 26 +++++++++++++-------------
+ 2 files changed, 14 insertions(+), 14 deletions(-)
+
+--- a/v4l2rtspserver/CMakeLists.txt
++++ b/v4l2rtspserver/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 3.0)
++cmake_minimum_required(VERSION 3.5)
+ project(v4l2rtspserver)
+@@ -48,18 +48,6 @@ find_package (Threads)
+ target_link_libraries (${PROJECT_NAME} Threads::Threads) 
+-# LOG4CPP
+-if (LOG4CPP) 
+-    find_library(LOG4CPP_LIBRARY NAMES log4cpp)
+-    if (LOG4CPP_LIBRARY)
+-        message(STATUS "Log4Cpp available ${LOG4CPP_LIBRARY}")
+-        add_definitions(-DHAVE_LOG4CPP)
+-        target_link_libraries(${PROJECT_NAME} "${LOG4CPP_LIBRARY}")
+-        
+-        SET(CPACK_DEBIAN_PACKAGE_DEPENDS ${CPACK_DEBIAN_PACKAGE_DEPENDS}liblog4cpp5v5,)
+-    endif ()
+-endif ()
+-
+ # openssl ?
+ if (WITH_SSL)
+   find_package(OpenSSL QUIET)
+@@ -104,6 +92,18 @@ if (OpenSSL_FOUND)
+     set(LIBRARIES ${LIBRARIES} ${OPENSSL_LIBRARIES})
+ endif ()
++# LOG4CPP
++if (LOG4CPP) 
++    find_library(LOG4CPP_LIBRARY NAMES log4cpp)
++    if (LOG4CPP_LIBRARY)
++        message(STATUS "Log4Cpp available ${LOG4CPP_LIBRARY}")
++        target_compile_definitions(libv4l2rtspserver PUBLIC HAVE_LOG4CPP)
++        target_link_libraries(libv4l2rtspserver PUBLIC "${LOG4CPP_LIBRARY}")
++        
++        SET(CPACK_DEBIAN_PACKAGE_DEPENDS ${CPACK_DEBIAN_PACKAGE_DEPENDS}liblog4cpp5v5,)
++    endif ()
++endif ()
++
+ #ALSA
+ if (ALSA)
+     find_package(ALSA QUIET)
diff --git a/multimedia/v4l2camera/patches/002-02-replace-exec_program-with-exec_process.patch b/multimedia/v4l2camera/patches/002-02-replace-exec_program-with-exec_process.patch
new file mode 100644 (file)
index 0000000..8062f2b
--- /dev/null
@@ -0,0 +1,20 @@
+From d2159e48a6e45f58a4fef652de5785112056ee23 Mon Sep 17 00:00:00 2001
+From: Michel Promonet <[email protected]>
+Date: Sun, 29 Dec 2024 15:21:56 +0100
+Subject: [PATCH] replace exec_program with exec_process
+
+---
+ v4l2rtspserver/CMakeLists.txt | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+--- a/v4l2rtspserver/CMakeLists.txt
++++ b/v4l2rtspserver/CMakeLists.txt
+@@ -117,7 +117,7 @@ if (ALSA)
+ endif()
+ # libv4l2cpp
+-EXEC_PROGRAM("git submodule update --init")
++execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init)
+ add_subdirectory(libv4l2cpp EXCLUDE_FROM_ALL)
+ target_include_directories(libv4l2rtspserver PUBLIC libv4l2cpp/inc)
+ target_link_libraries (libv4l2rtspserver PUBLIC libv4l2cpp ${LIBRARIES}) 
diff --git a/multimedia/v4l2camera/patches/002-03-CMake-Improvements-355.patch b/multimedia/v4l2camera/patches/002-03-CMake-Improvements-355.patch
new file mode 100644 (file)
index 0000000..aa3a788
--- /dev/null
@@ -0,0 +1,131 @@
+From c093fbfcf28541a9bdef46a4c430241c640a031a Mon Sep 17 00:00:00 2001
+From: Edmunt Pienkowsky <[email protected]>
+Date: Tue, 8 Jul 2025 07:17:20 +0200
+Subject: [PATCH] CMake Improvements (#355)
+
+* CMake: Do not define CMAKE_BUILD_TYPE
+
+It is absolutely right to leave CMAKE_BUILD_TYPE variable undefined.
+In this case compilation flags are taken from CFLAGS and CXXFLAGS environment variables.
+
+* CMake: Always define VERSION macro
+
+* Allow to define VERSION macro by V4L2RTSPSERVER_VERSION environment variable.
+* Warn if value of VERSION could not be determined.
+* Use add_compile_definitions instead of add_definitions.
+
+* CMake: Init submodules only if git command is available
+
+* CMake: Use imported targets defined by find_package command
+
+* CMake: Install systemd service conditionally
+
+One may disable installation of systemd service by setting SYSTEND cache variable to OFF (ON by default).
+---
+ CMakeLists.txt | 54 ++++++++++++++++++++++++++++----------------------
+ 1 file changed, 30 insertions(+), 24 deletions(-)
+
+--- a/v4l2rtspserver/CMakeLists.txt
++++ b/v4l2rtspserver/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 3.5)
++cmake_minimum_required(VERSION 3.12)
+ project(v4l2rtspserver)
+@@ -10,24 +10,26 @@ set(STATICSTDCPP ON CACHE BOOL "use gcc
+ set(LOG4CPP OFF CACHE BOOL "use log4cpp if available")
+ set(LIVE555URL http://www.live555.com/liveMedia/public/live555-latest.tar.gz CACHE STRING "live555 url")
+ set(LIVE555CFLAGS -DBSD=1 -DSOCKLEN_T=socklen_t -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 -DALLOW_RTSP_SERVER_PORT_REUSE=1 -DNO_STD_LIB=1 CACHE STRING "live555 CFGLAGS")
+-
+-if(NOT CMAKE_BUILD_TYPE)
+-     set (CMAKE_BUILD_TYPE "Release")
+-endif()
++set(SYSTEMD ON CACHE BOOL "install SystemD service")
+ set(CMAKE_CXX_STANDARD 20)
+ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake/")
+-# set version based on git
+ find_package(Git)
+-if(GIT_FOUND)
++if(DEFINED ENV{V4L2RTSPSERVER_VERSION})
++    # set version from V4L2RTSPSERVER_VERSION env variable
++    add_compile_definitions("VERSION=\"$ENV{V4L2RTSPSERVER_VERSION}\"")
++elseif(GIT_FOUND)
++    # set version based on git
+     EXECUTE_PROCESS(COMMAND ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR} describe --tags --always --dirty OUTPUT_VARIABLE VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
+     STRING(REGEX REPLACE "^v(.*)" "\\1" VERSION "${VERSION}")
+-    add_definitions("-DVERSION=\"${VERSION}\"")
++    add_compile_definitions("VERSION=\"${VERSION}\"")
++else()
++    message(WARNING "VERSION is undefined")
++    add_compile_definitions("VERSION=\"undefined\"")
+ endif()
+-
+ # define executable to build
+ include_directories("inc")
+ add_executable(${PROJECT_NAME} main.cpp)
+@@ -89,7 +91,7 @@ target_compile_definitions(libv4l2rtspse
+ target_link_libraries (${PROJECT_NAME} libv4l2rtspserver ${LIVE_LIBRARIES}) 
+ set (LIBRARIES "")
+ if (OpenSSL_FOUND)
+-    set(LIBRARIES ${LIBRARIES} ${OPENSSL_LIBRARIES})
++    set(LIBRARIES ${LIBRARIES} OpenSSL::SSL)
+ endif ()
+ # LOG4CPP
+@@ -109,15 +111,17 @@ if (ALSA)
+     find_package(ALSA QUIET)
+     MESSAGE("ALSA_FOUND = ${ALSA_FOUND}")
+     if (ALSA_LIBRARY)
+-          target_compile_definitions(libv4l2rtspserver PUBLIC HAVE_ALSA)
+-        set(LIBRARIES ${LIBRARIES} ${ALSA_LIBRARY})
+-        
++        target_compile_definitions(libv4l2rtspserver PUBLIC HAVE_ALSA)
++        set(LIBRARIES ${LIBRARIES} ALSA::ALSA)
++
+         SET(CPACK_DEBIAN_PACKAGE_DEPENDS ${CPACK_DEBIAN_PACKAGE_DEPENDS}libasound2,)  
+     endif ()
+ endif()
+ # libv4l2cpp
+-execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init)
++if (GIT_FOUND)
++    execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init)
++endif()
+ add_subdirectory(libv4l2cpp EXCLUDE_FROM_ALL)
+ target_include_directories(libv4l2rtspserver PUBLIC libv4l2cpp/inc)
+ target_link_libraries (libv4l2rtspserver PUBLIC libv4l2cpp ${LIBRARIES}) 
+@@ -140,17 +144,19 @@ enable_testing()
+ add_test(help ./${PROJECT_NAME} -h)
+ #systemd
+-find_package(PkgConfig)
+-pkg_check_modules(SYSTEMD systemd QUIET)
+-if (SYSTEMD_FOUND)
+-      message(STATUS "SystemD available")
+-      execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=systemdsystemunitdir systemd OUTPUT_VARIABLE SYSTEMD_SERVICES_INSTALL_DIR)
+-      string(REGEX REPLACE "[ \t\n]+" "" SYSTEMD_SERVICES_INSTALL_DIR "${SYSTEMD_SERVICES_INSTALL_DIR}")
+-      message(STATUS "SystemD directory '${SYSTEMD_SERVICES_INSTALL_DIR}'")
+-      
+-      configure_file(v4l2rtspserver.service.in ${CMAKE_CURRENT_BINARY_DIR}/v4l2rtspserver.service @ONLY)
++if (SYSTEMD)
++    find_package(PkgConfig)
++    pkg_check_modules(SYSTEMD systemd QUIET)
++    if (SYSTEMD_FOUND)
++        message(STATUS "SystemD available")
++        execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=systemdsystemunitdir systemd OUTPUT_VARIABLE SYSTEMD_SERVICES_INSTALL_DIR)
++        string(REGEX REPLACE "[ \t\n]+" "" SYSTEMD_SERVICES_INSTALL_DIR "${SYSTEMD_SERVICES_INSTALL_DIR}")
++        message(STATUS "SystemD directory '${SYSTEMD_SERVICES_INSTALL_DIR}'")
++        
++        configure_file(v4l2rtspserver.service.in ${CMAKE_CURRENT_BINARY_DIR}/v4l2rtspserver.service @ONLY)
+         install(FILES ${CMAKE_CURRENT_BINARY_DIR}/v4l2rtspserver.service DESTINATION ${SYSTEMD_SERVICES_INSTALL_DIR})
+-endif (SYSTEMD_FOUND)
++    endif (SYSTEMD_FOUND)
++endif (SYSTEMD)
+ # package
+ install (TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin)
diff --git a/multimedia/v4l2camera/patches/002-04-remove-useless-verbose.patch b/multimedia/v4l2camera/patches/002-04-remove-useless-verbose.patch
new file mode 100644 (file)
index 0000000..a72ad64
--- /dev/null
@@ -0,0 +1,42 @@
+From 765d8da0f9285a6a9aacc4de7479b471781b67b9 Mon Sep 17 00:00:00 2001
+From: Michel Promonet <[email protected]>
+Date: Sat, 21 Sep 2024 23:33:17 +0200
+Subject: [PATCH] remove useless verbose
+
+---
+ v4l2rtspserver/inc/ALSACapture.h      | 5 ++---
+ v4l2rtspserver/src/V4l2RTSPServer.cpp | 2 +-
+ 2 files changed, 3 insertions(+), 4 deletions(-)
+
+--- a/v4l2rtspserver/inc/ALSACapture.h
++++ b/v4l2rtspserver/inc/ALSACapture.h
+@@ -22,8 +22,8 @@
+ struct ALSACaptureParameters 
+ {
+-      ALSACaptureParameters(const char* devname, const std::list<snd_pcm_format_t> & formatList, unsigned int sampleRate, unsigned int channels, int verbose) : 
+-              m_devName(devname), m_formatList(formatList), m_sampleRate(sampleRate), m_channels(channels), m_verbose(verbose) {
++      ALSACaptureParameters(const char* devname, const std::list<snd_pcm_format_t> & formatList, unsigned int sampleRate, unsigned int channels) : 
++              m_devName(devname), m_formatList(formatList), m_sampleRate(sampleRate), m_channels(channels) {
+                       
+       }
+               
+@@ -31,7 +31,6 @@ struct ALSACaptureParameters
+       std::list<snd_pcm_format_t> m_formatList;               
+       unsigned int     m_sampleRate;
+       unsigned int     m_channels;
+-      int              m_verbose;
+ };
+ class ALSACapture  : public DeviceInterface
+--- a/v4l2rtspserver/src/V4l2RTSPServer.cpp
++++ b/v4l2rtspserver/src/V4l2RTSPServer.cpp
+@@ -209,7 +209,7 @@ StreamReplicator* V4l2RTSPServer::Create
+               // Init audio capture
+               LOG(NOTICE) << "Create ALSA Source..." << audioDevice;
+               
+-              ALSACaptureParameters param(audioDevice.c_str(), audioFmtList, audioFreq, audioNbChannels, verbose);
++              ALSACaptureParameters param(audioDevice.c_str(), audioFmtList, audioFreq, audioNbChannels);
+               ALSACapture* audioCapture = ALSACapture::createNew(param);
+               if (audioCapture) 
+               {
diff --git a/multimedia/v4l2camera/patches/002-05-add-pthread-to-lib.patch b/multimedia/v4l2camera/patches/002-05-add-pthread-to-lib.patch
new file mode 100644 (file)
index 0000000..6dc3c77
--- /dev/null
@@ -0,0 +1,33 @@
+From 97d9f7ae4dd7a90fc03685b04e0cdc14ccff7015 Mon Sep 17 00:00:00 2001
+From: mpromonet <[email protected]>
+Date: Sat, 21 Sep 2024 23:10:37 +0200
+Subject: [PATCH] add pthread to lib
+
+---
+ v4l2rtspserver/CMakeLists.txt | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+--- a/v4l2rtspserver/CMakeLists.txt
++++ b/v4l2rtspserver/CMakeLists.txt
+@@ -45,10 +45,6 @@ message(STATUS "CMAKE_TOOLCHAIN_FILE=${C
+ message(STATUS "CMAKE_C_COMPILER=${CMAKE_C_COMPILER}")
+ message(STATUS "CMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}")
+-#pthread
+-find_package (Threads)
+-target_link_libraries (${PROJECT_NAME} Threads::Threads) 
+-
+ # openssl ?
+ if (WITH_SSL)
+@@ -94,6 +90,10 @@ if (OpenSSL_FOUND)
+     set(LIBRARIES ${LIBRARIES} OpenSSL::SSL)
+ endif ()
++#pthread
++find_package (Threads)
++target_link_libraries (libv4l2rtspserver PUBLIC Threads::Threads) 
++
+ # LOG4CPP
+ if (LOG4CPP) 
+     find_library(LOG4CPP_LIBRARY NAMES log4cpp)
diff --git a/multimedia/v4l2camera/patches/003-remove-verbose-param.patch b/multimedia/v4l2camera/patches/003-remove-verbose-param.patch
new file mode 100644 (file)
index 0000000..7432be1
--- /dev/null
@@ -0,0 +1,39 @@
+From 7de505f51e0715f882d00e9aa7cf30df7db52949 Mon Sep 17 00:00:00 2001
+From: Michel Promonet <[email protected]>
+Date: Sat, 21 Sep 2024 23:34:32 +0200
+Subject: [PATCH] remove verbose param
+
+---
+ CMakeLists.txt | 2 +-
+ src/main.cpp   | 4 ++--
+ v4l2rtspserver | 2 +-
+ 3 files changed, 4 insertions(+), 4 deletions(-)
+
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 3.0)
++cmake_minimum_required(VERSION 3.5)
+ option (WITH_COMPRESS "Enable compression" ON)
+ option (BUILD_UI "Build ui" ON)
+--- a/src/main.cpp
++++ b/src/main.cpp
+@@ -152,7 +152,7 @@ int main(int argc, char* argv[])
+       std::string videoDev, audioDev;
+       getline(is, videoDev, ',');                                             
+       getline(is, audioDev);  
+-      V4L2DeviceParameters param(videoDev.c_str(), videoformatList, width, height, fps, ioTypeIn, verbose);
++      V4L2DeviceParameters param(videoDev.c_str(), videoformatList, width, height, fps, ioTypeIn);
+       std::unique_ptr<V4l2Capture> videoCapture(V4l2Capture::create(param));
+       if (!videoCapture)
+       {       
+@@ -162,7 +162,7 @@ int main(int argc, char* argv[])
+       {       
+ #ifdef HAVE_ALSA      
+               std::string audioDevice = V4l2RTSPServer::getV4l2Alsa(audioDev);
+-              ALSACaptureParameters param(audioDevice.c_str(), audioFmtList, audioFreq, audioNbChannels, verbose);
++              ALSACaptureParameters param(audioDevice.c_str(), audioFmtList, audioFreq, audioNbChannels);
+               audioCapture.reset(ALSACapture::createNew(param));
+ #endif