From 669f205ed9b780d0bf8af0dec92c6dcd5ed68710 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20G=C3=B3mez=20L=C3=B3pez?= Date: Mon, 1 Mar 2021 12:39:43 +0100 Subject: [PATCH] CMakeList.txt search for previous system installation of liveMedia library Add an alternative HTTPServer definition to be compliant with older liveMedia versions --- CMake/FindBasicUsageEnvironment.cmake | 28 +++++++++++++ CMake/FindGroupSock.cmake | 28 +++++++++++++ CMake/FindLiveMedia.cmake | 28 +++++++++++++ CMake/FindUsageEnvironment.cmake | 28 +++++++++++++ CMakeLists.txt | 58 ++++++++++++++++++++++----- inc/HTTPServer.h | 5 +++ raspberry.toolchain | 1 + 7 files changed, 165 insertions(+), 11 deletions(-) create mode 100644 CMake/FindBasicUsageEnvironment.cmake create mode 100644 CMake/FindGroupSock.cmake create mode 100644 CMake/FindLiveMedia.cmake create mode 100644 CMake/FindUsageEnvironment.cmake diff --git a/CMake/FindBasicUsageEnvironment.cmake b/CMake/FindBasicUsageEnvironment.cmake new file mode 100644 index 0000000..1a0cc6c --- /dev/null +++ b/CMake/FindBasicUsageEnvironment.cmake @@ -0,0 +1,28 @@ +include(GNUInstallDirs) + +find_library( + LIBBASICUSAGEENVIRONMENT_LIBRARY + NAMES BasicUsageEnvironment + HINTS ${PROJECT_BINARY_DIR}/live/) + +find_path(LIBBASICUSAGEENVIRONMENT_INCLUDE_DIR + NAMES BasicUsageEnvironment_version.hh + HINTS ${PROJECT_BINARY_DIR}/live/ ${CMAKE_INSTALL_INCLUDEDIR} + PATH_SUFFIXES BasicUsageEnvironment) + +include(FindPackageHandleStandardArgs) + +find_package_handle_standard_args(libBasicUsageEnvironment DEFAULT_MSG + LIBBASICUSAGEENVIRONMENT_LIBRARY + LIBBASICUSAGEENVIRONMENT_INCLUDE_DIR) + +mark_as_advanced(LIBBASICUSAGEENVIRONMENT_LIBRARY LIBBASICUSAGEENVIRONMENT_INCLUDE_DIR) + +if(LIBBASICUSAGEENVIRONMENT_FOUND AND NOT TARGET libBasicUsageEnvironment::libBasicUsageEnvironment) + add_library(libBasicUsageEnvironment::libBasicUsageEnvironment SHARED IMPORTED) + set_target_properties( + libBasicUsageEnvironment::libBasicUsageEnvironment + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${LIBBASICUSAGEENVIRONMENT_INCLUDE_DIR}" + IMPORTED_LOCATION ${LIBBASICUSAGEENVIRONMENT_LIBRARY}) +endif() diff --git a/CMake/FindGroupSock.cmake b/CMake/FindGroupSock.cmake new file mode 100644 index 0000000..8c21ff1 --- /dev/null +++ b/CMake/FindGroupSock.cmake @@ -0,0 +1,28 @@ +include(GNUInstallDirs) + +find_library( + LIBGROUPSOCK_LIBRARY + NAMES groupsock + HINTS ${PROJECT_BINARY_DIR}/live/) + +find_path(LIBGROUPSOCK_INCLUDE_DIR + NAMES groupsock_version.hh + HINTS ${PROJECT_BINARY_DIR}/live/ ${CMAKE_INSTALL_INCLUDEDIR} + PATH_SUFFIXES groupsock) + +include(FindPackageHandleStandardArgs) + +find_package_handle_standard_args(libgroupsock DEFAULT_MSG + LIBGROUPSOCK_LIBRARY + LIBGROUPSOCK_INCLUDE_DIR) + +mark_as_advanced(LIBGROUPSOCK_LIBRARY LIBGROUPSOCK_INCLUDE_DIR) + +if(LIBGROUPSOCK_FOUND AND NOT TARGET libgroupsock::libgroupsock) + add_library(libgroupsock::libgroupsock SHARED IMPORTED) + set_target_properties( + libgroupsock::libgroupsock + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${LIBGROUPSOCK_INCLUDE_DIR}" + IMPORTED_LOCATION ${LIBGROUPSOCK_LIBRARY}) +endif() diff --git a/CMake/FindLiveMedia.cmake b/CMake/FindLiveMedia.cmake new file mode 100644 index 0000000..2e5e9d7 --- /dev/null +++ b/CMake/FindLiveMedia.cmake @@ -0,0 +1,28 @@ +include(GNUInstallDirs) + +find_library( + LIBLIVEMEDIA_LIBRARY + NAMES liveMedia + HINTS ${PROJECT_BINARY_DIR}/live/) + +find_path(LIBLIVEMEDIA_INCLUDE_DIR + NAMES liveMedia_version.hh + HINTS ${PROJECT_BINARY_DIR}/live/ ${CMAKE_INSTALL_INCLUDEDIR} + PATH_SUFFIXES liveMedia) + +include(FindPackageHandleStandardArgs) + +find_package_handle_standard_args(libliveMedia DEFAULT_MSG + LIBLIVEMEDIA_LIBRARY + LIBLIVEMEDIA_INCLUDE_DIR) + +mark_as_advanced(LIBLIVEMEDIA_LIBRARY LIBLIVEMEDIA_INCLUDE_DIR) + +if(LIBLIVEMEDIA_FOUND AND NOT TARGET libliveMedia::libliveMedia) + add_library(libliveMedia::libliveMedia SHARED IMPORTED) + set_target_properties( + libliveMedia::libliveMedia + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${LIBLIVEMEDIA_INCLUDE_DIR}" + IMPORTED_LOCATION ${LIBLIVEMEDIA_LIBRARY}) +endif() diff --git a/CMake/FindUsageEnvironment.cmake b/CMake/FindUsageEnvironment.cmake new file mode 100644 index 0000000..9f5f18c --- /dev/null +++ b/CMake/FindUsageEnvironment.cmake @@ -0,0 +1,28 @@ +include(GNUInstallDirs) + +find_library( + LIBUSAGEENVIRONMENT_LIBRARY + NAMES UsageEnvironment + HINTS ${PROJECT_BINARY_DIR}/live/) + +find_path(LIBUSAGEENVIRONMENT_INCLUDE_DIR + NAMES UsageEnvironment_version.hh + HINTS ${PROJECT_BINARY_DIR}/live/ ${CMAKE_INSTALL_INCLUDEDIR} + PATH_SUFFIXES UsageEnvironment) + +include(FindPackageHandleStandardArgs) + +find_package_handle_standard_args(libUsageEnvironment DEFAULT_MSG + LIBUSAGEENVIRONMENT_LIBRARY + LIBUSAGEENVIRONMENT_INCLUDE_DIR) + +mark_as_advanced(LIBUSAGEENVIRONMENT_LIBRARY LIBUSAGEENVIRONMENT_INCLUDE_DIR) + +if(LIBUSAGEENVIRONMENT_FOUND AND NOT TARGET libUsageEnvironment::libUsageEnvironment) + add_library(libUsageEnvironment::libUsageEnvironment SHARED IMPORTED) + set_target_properties( + libUsageEnvironment::libUsageEnvironment + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${LIBUSAGEENVIRONMENT_INCLUDE_DIR}" + IMPORTED_LOCATION ${LIBUSAGEENVIRONMENT_LIBRARY}) +endif() diff --git a/CMakeLists.txt b/CMakeLists.txt index bb34b38..6710a0c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,7 +9,14 @@ set(LIVE555URL http://www.live555.com/liveMedia/public/live555-latest.tar.gz CAC set(LIVE555CFLAGS -DBSD=1 -DSOCKLEN_T=socklen_t -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 -DALLOW_RTSP_SERVER_PORT_REUSE=1 -DNO_OPENSSL=1 CACHE STRING "live555 CFGLAGS") set(CMAKE_CXX_STANDARD 11) +#set(CMAKE_INSTALL_PREFIX /usr) +#set(CMAKE_INSTALL_LIBDIR lib/${CMAKE_LIBRARY_ARCHITECTURE}) +#set(CMAKE_INSTALL_FULL_LIBDIR /usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}) +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake/") + +#message(STATUS "Arch: ${CMAKE_LIBRARY_ARCHITECTURE}") +#message(STATUS "Libs: ${CMAKE_INSTALL_LIBDIR}") # set version based on git find_package(Git) if(GIT_FOUND) @@ -70,22 +77,51 @@ add_library(v4l2wrapper STATIC ${LIBSRC_FILES}) target_link_libraries (${PROJECT_NAME} v4l2wrapper) # live555 -set(LIVE ${CMAKE_BINARY_DIR}/live) -set(LIVEINCLUDE ${LIVE}/groupsock/include ${LIVE}/liveMedia/include ${LIVE}/UsageEnvironment/include ${LIVE}/BasicUsageEnvironment/include) -if (NOT EXISTS ${LIVE}) - file (DOWNLOAD ${LIVE555URL} ${CMAKE_BINARY_DIR}/live555-latest.tar.gz ) - EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E tar xvf ${CMAKE_BINARY_DIR}/live555-latest.tar.gz RESULT_VARIABLE unpack_result) - if(NOT unpack_result STREQUAL "0") - message(FATAL_ERROR "Fetching and compiling live555 failed!") +find_package(LiveMedia) +find_package(UsageEnvironment) +find_package(BasicUsageEnvironment) +find_package(GroupSock) +if (NOT LIBLIVEMEDIA_FOUND OR NOT LIBBASICUSAGEENVIRONMENT_FOUND OR NOT LIBUSAGEENVIRONMENT_FOUND OR NOT LIBGROUPSOCK_FOUND ) + set(LIVE ${CMAKE_BINARY_DIR}/live) + set(LIVEINCLUDE ${LIVE}/groupsock/include ${LIVE}/liveMedia/include ${LIVE}/UsageEnvironment/include ${LIVE}/BasicUsageEnvironment/include) + if (NOT EXISTS ${LIVE}) + file (DOWNLOAD ${LIVE555URL} ${CMAKE_BINARY_DIR}/live555-latest.tar.gz ) + EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E tar xvf ${CMAKE_BINARY_DIR}/live555-latest.tar.gz RESULT_VARIABLE unpack_result) + if(NOT unpack_result STREQUAL "0") + message(FATAL_ERROR "Fetching and compiling live555 failed!") + endif() endif() + FILE(GLOB LIVESOURCE ${LIVE}/groupsock/*.c* ${LIVE}/liveMedia/*.c* ${LIVE}/UsageEnvironment/*.c* ${LIVE}/BasicUsageEnvironment/*.c*) + add_definitions(${LIVE555CFLAGS}) +endif() + +if (LIBLIVEMEDIA_FOUND AND LIBBASICUSAGEENVIRONMENT_FOUND AND LIBUSAGEENVIRONMENT_FOUND AND LIBGROUPSOCK_FOUND) + message(STATUS "live555 loaded") + target_link_libraries (${PROJECT_NAME} liveMedia) + target_link_libraries (${PROJECT_NAME} UsageEnvironment) + target_link_libraries (${PROJECT_NAME} BasicUsageEnvironment) + target_link_libraries (${PROJECT_NAME} groupsock) + SET(CPACK_DEBIAN_PACKAGE_DEPENDS ${CPACK_DEBIAN_PACKAGE_DEPENDS}liblivemedia50,) + SET(CPACK_DEBIAN_PACKAGE_DEPENDS ${CPACK_DEBIAN_PACKAGE_DEPENDS}libusageenvironment3,) + SET(CPACK_DEBIAN_PACKAGE_DEPENDS ${CPACK_DEBIAN_PACKAGE_DEPENDS}libbasicusageenvironment1,) + SET(CPACK_DEBIAN_PACKAGE_DEPENDS ${CPACK_DEBIAN_PACKAGE_DEPENDS}libgroupsock8,) endif() -FILE(GLOB LIVESOURCE ${LIVE}/groupsock/*.c* ${LIVE}/liveMedia/*.c* ${LIVE}/UsageEnvironment/*.c* ${LIVE}/BasicUsageEnvironment/*.c*) -add_definitions(${LIVE555CFLAGS}) # librtsp aux_source_directory(src SRC_FILES) -add_library (libv4l2rtspserver STATIC ${LIVESOURCE} ${SRC_FILES}) -target_include_directories(libv4l2rtspserver PUBLIC ${LIVEINCLUDE} inc) +if (NOT LIBLIVEMEDIA_FOUND OR NOT LIBBASICUSAGEENVIRONMENT_FOUND OR NOT LIBUSAGEENVIRONMENT_FOUND OR NOT LIBGROUPSOCK_FOUND ) + add_library (libv4l2rtspserver STATIC ${LIVESOURCE} ${SRC_FILES}) + target_include_directories(libv4l2rtspserver PUBLIC ${LIVEINCLUDE} inc) +endif() +if (LIBLIVEMEDIA_FOUND AND LIBBASICUSAGEENVIRONMENT_FOUND AND LIBUSAGEENVIRONMENT_FOUND AND LIBGROUPSOCK_FOUND) + add_library (libv4l2rtspserver SHARED ${SRC_FILES}) + target_link_libraries (libv4l2rtspserver liveMedia) + target_link_libraries (libv4l2rtspserver UsageEnvironment) + target_link_libraries (libv4l2rtspserver BasicUsageEnvironment) + target_link_libraries (libv4l2rtspserver groupsock) + target_include_directories(libv4l2rtspserver PUBLIC inc}) + target_include_directories(libv4l2rtspserver PUBLIC ${LIBLIVEMEDIA_INCLUDE_DIR} ${LIBBASICUSAGEENVIRONMENT_INCLUDE_DIR} ${LIBUSAGEENVIRONMENT_INCLUDE_DIR} ${LIBGROUPSOCK_INCLUDE_DIR} ) +endif() target_link_libraries (${PROJECT_NAME} libv4l2rtspserver) #testing diff --git a/inc/HTTPServer.h b/inc/HTTPServer.h index 1f9dfe1..8d02310 100644 --- a/inc/HTTPServer.h +++ b/inc/HTTPServer.h @@ -172,8 +172,13 @@ class HTTPServer : public RTSPServer return httpServer; } +#if LIVEMEDIA_LIBRARY_VERSION_INT < 1611187200 + HTTPServer(UsageEnvironment& env, int ourSocketIPv4, int ourSocketIPv6, Port rtspPort, UserAuthenticationDatabase* authDatabase, unsigned reclamationTestSeconds, unsigned int hlsSegment, const std::string & webroot) + : RTSPServer(env, ourSocketIPv4, rtspPort, authDatabase, reclamationTestSeconds), m_hlsSegment(hlsSegment), m_webroot(webroot) +#else HTTPServer(UsageEnvironment& env, int ourSocketIPv4, int ourSocketIPv6, Port rtspPort, UserAuthenticationDatabase* authDatabase, unsigned reclamationTestSeconds, unsigned int hlsSegment, const std::string & webroot) : RTSPServer(env, ourSocketIPv4, ourSocketIPv6, rtspPort, authDatabase, reclamationTestSeconds), m_hlsSegment(hlsSegment), m_webroot(webroot) +#endif { if ( (!m_webroot.empty()) && (*m_webroot.rend() != '/') ) { m_webroot += "/"; diff --git a/raspberry.toolchain b/raspberry.toolchain index 03ab3fd..15b37f9 100644 --- a/raspberry.toolchain +++ b/raspberry.toolchain @@ -2,6 +2,7 @@ SET(CMAKE_SYSTEM_NAME Linux) SET(CPACK_DEBIAN_PACKAGE_ARCHITECTURE armhf) SET(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc) SET(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++) +SET(CMAKE_LIBRARY_ARCHITECTURE arm-linux-gnuebihf) SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)