diff --git a/CMakeLists.txt b/CMakeLists.txt index 72e0c7181..9305239db 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -410,7 +410,6 @@ else() endif() if(WITH_SSO_MIB) - set(SSO_MIB_EXTERNAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/external/sso-mib") find_package(SSO_MIB REQUIRED) endif() diff --git a/client/common/CMakeLists.txt b/client/common/CMakeLists.txt index c7b356cbb..09921717d 100644 --- a/client/common/CMakeLists.txt +++ b/client/common/CMakeLists.txt @@ -55,16 +55,18 @@ endif() include_directories(SYSTEM ${OPENSSL_INCLUDE_DIR}) +addtargetwithresourcefile(${MODULE_NAME} FALSE "${FREERDP_VERSION}" SRCS) + if(WITH_SSO_MIB) - set(SSO_MIB_EXTERNAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../external/sso-mib") + if(SSO_MIB_EXTERNAL_DIR) + add_dependencies(${MODULE_NAME} sso-mib-external) + endif() include_directories(${SSO_MIB_INCLUDE_DIRS}) add_compile_definitions(WITH_SSO_MIB) list(APPEND LIBS ${SSO_MIB_LIBRARIES}) endif() -addtargetwithresourcefile(${MODULE_NAME} FALSE "${FREERDP_VERSION}" SRCS) - list(APPEND LIBS freerdp winpr) include(CheckLibraryExists) diff --git a/cmake/FindSSO_MIB.cmake b/cmake/FindSSO_MIB.cmake index 30a1e085f..6f8aab710 100644 --- a/cmake/FindSSO_MIB.cmake +++ b/cmake/FindSSO_MIB.cmake @@ -5,16 +5,35 @@ # SPDX-FileCopyrightText: Copyright 2025 Siemens find_package(PkgConfig REQUIRED) -pkg_check_modules(PC_SSO_MIB sso-mib>=0.4.0) +pkg_check_modules(PC_SSO_MIB sso-mib>=0.5.0) if(PC_SSO_MIB_FOUND) find_path(SSO_MIB_INCLUDE_DIR NAMES sso-mib/sso-mib.h HINTS ${PC_SSO_MIB_INCLUDEDIR}) find_library(SSO_MIB_LIBRARY NAMES sso-mib HINTS ${PC_SSO_MIB_LIBRARYDIR}) + + find_package_handle_standard_args(SSO_MIB DEFAULT_MSG SSO_MIB_LIBRARY SSO_MIB_INCLUDE_DIR) + + if(SSO_MIB_FOUND) + set(SSO_MIB_LIBRARIES ${SSO_MIB_LIBRARY} ${PC_SSO_MIB_LIBRARIES}) + set(SSO_MIB_INCLUDE_DIRS ${SSO_MIB_INCLUDE_DIR} ${PC_SSO_MIB_INCLUDE_DIRS}) + endif() else() - set(SSO_MIB_ROOT_DIR ${SSO_MIB_EXTERNAL_DIR}) - message(STATUS "SSO_MIB not found through PkgConfig, trying external ${SSO_MIB_ROOT_DIR}") - find_path(SSO_MIB_INCLUDE_DIR NAMES sso-mib/sso-mib.h HINTS ${SSO_MIB_ROOT_DIR}/include) - find_library(SSO_MIB_LIBRARY NAMES sso-mib HINTS ${SSO_MIB_ROOT_DIR}/lib) + include(ExternalProject) + set(SSO_MIB_EXTERNAL_DIR ${CMAKE_BINARY_DIR}/sso-mib-external) + + set(SSO_MIB_URL https://github.com/siemens/sso-mib.git) + set(SSO_MIB_VERSION v0.5.0) + message(STATUS "Adding sso-mib as ExternalProject from ${SSO_MIB_URL}, version ${SSO_MIB_VERSION}") + + ExternalProject_Add( + sso-mib-external GIT_REPOSITORY ${SSO_MIB_URL} GIT_TAG ${SSO_MIB_VERSION} PREFIX ${SSO_MIB_EXTERNAL_DIR} + SOURCE_DIR ${SSO_MIB_EXTERNAL_DIR}/src BINARY_DIR ${SSO_MIB_EXTERNAL_DIR}/build TMP_DIR _deps/tmp + STAMP_DIR _deps/stamp CONFIGURE_COMMAND meson setup --prefix=${SSO_MIB_EXTERNAL_DIR}/install --libdir=lib/ + ${SSO_MIB_EXTERNAL_DIR}/build ${SSO_MIB_EXTERNAL_DIR}/src + BUILD_COMMAND meson compile -C ${SSO_MIB_EXTERNAL_DIR}/build INSTALL_COMMAND meson install -C + ${SSO_MIB_EXTERNAL_DIR}/build + UPDATE_COMMAND "" BUILD_BYPRODUCTS ${SSO_MIB_EXTERNAL_DIR}/install/lib/libsso-mib.so + ) # Dependencies pkg_check_modules(GLIB REQUIRED glib-2.0) @@ -25,13 +44,9 @@ else() set(PC_SSO_MIB_INCLUDE_DIRS ${GLIB_INCLUDE_DIRS} ${GIO_INCLUDE_DIRS} ${JSON_GLIB_INCLUDE_DIRS} ${UUID_INCLUDE_DIRS}) set(PC_SSO_MIB_LIBRARIES ${GLIB_LIBRARIES} ${GIO_LIBRARIES} ${JSON_GLIB_LIBRARIES} ${UUID_LIBRARIES}) endif() -endif() -find_package_handle_standard_args(SSO_MIB DEFAULT_MSG SSO_MIB_LIBRARY SSO_MIB_INCLUDE_DIR) - -if(SSO_MIB_FOUND) - set(SSO_MIB_LIBRARIES ${SSO_MIB_LIBRARY} ${PC_SSO_MIB_LIBRARIES}) - set(SSO_MIB_INCLUDE_DIRS ${SSO_MIB_INCLUDE_DIR} ${PC_SSO_MIB_INCLUDE_DIRS}) + set(SSO_MIB_INCLUDE_DIRS ${SSO_MIB_EXTERNAL_DIR}/install/include ${PC_SSO_MIB_INCLUDE_DIRS}) + set(SSO_MIB_LIBRARIES ${SSO_MIB_EXTERNAL_DIR}/install/lib/libsso-mib.so ${PC_SSO_MIB_LIBRARIES}) endif() mark_as_advanced(SSO_MIB_INCLUDE_DIR SSO_MIB_LIBRARY)