mirror of
https://github.com/obsproject/obs-studio.git
synced 2024-07-14 23:34:08 +00:00
b3949e6aef
qrcodegen is built on obs-deps for macOS and Windows, with the generated CMake package calling the dependency qrcodegen (not libqrcoden) and associated target qrcodegen::qrcodegen. This change updates the finder (required for Linux) to create the same targets so consumers do not need to differentiate between different variations of the same dependency on Linux. Also updates obs-websocket to 5.3.1 to bring in associated CMake changes.
175 lines
5.6 KiB
CMake
175 lines
5.6 KiB
CMake
#[=======================================================================[.rst
|
|
Findqrcodegencpp
|
|
----------------
|
|
|
|
FindModule for qrcodegencpp and associated libraries
|
|
|
|
Imported Targets
|
|
^^^^^^^^^^^^^^^^
|
|
|
|
.. versionadded:: 3.0
|
|
|
|
This module defines the :prop_tgt:`IMPORTED` target ``qrcodegencpp::qrcodegencpp``.
|
|
|
|
Result Variables
|
|
^^^^^^^^^^^^^^^^
|
|
|
|
This module sets the following variables:
|
|
|
|
``qrcodegencpp_FOUND``
|
|
True, if all required components and the core library were found.
|
|
``qrcodegencpp_VERSION``
|
|
Detected version of found qrcodegencpp libraries.
|
|
|
|
Cache variables
|
|
^^^^^^^^^^^^^^^
|
|
|
|
The following cache variables may also be set:
|
|
|
|
``qrcodegencpp_LIBRARY``
|
|
Path to the library component of qrcodegencpp.
|
|
``qrcodegencpp_INCLUDE_DIR``
|
|
Directory containing ``qrcodegen.hpp``.
|
|
|
|
#]=======================================================================]
|
|
|
|
# cmake-format: off
|
|
# cmake-lint: disable=C0103
|
|
# cmake-lint: disable=C0301
|
|
# cmake-format: on
|
|
|
|
include(FindPackageHandleStandardArgs)
|
|
|
|
find_package(PkgConfig QUIET)
|
|
if(PKG_CONFIG_FOUND)
|
|
pkg_search_module(PC_qrcodegencpp QUIET qrcodegencpp)
|
|
endif()
|
|
|
|
# qrcodegencpp_set_soname: Set SONAME on imported library target
|
|
macro(qrcodegencpp_set_soname)
|
|
if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin")
|
|
execute_process(
|
|
COMMAND sh -c "otool -D '${qrcodegencpp_LIBRARY}' | grep -v '${qrcodegencpp_LIBRARY}'"
|
|
OUTPUT_VARIABLE _output
|
|
RESULT_VARIABLE _result)
|
|
|
|
if(_result EQUAL 0 AND _output MATCHES "^@rpath/")
|
|
set_property(TARGET qrcodegencpp::qrcodegencpp PROPERTY IMPORTED_SONAME "${_output}")
|
|
endif()
|
|
elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD")
|
|
execute_process(
|
|
COMMAND sh -c "${CMAKE_OBJDUMP} -p '${qrcodegencpp_LIBRARY}' | grep SONAME"
|
|
OUTPUT_VARIABLE _output
|
|
RESULT_VARIABLE _result)
|
|
|
|
if(_result EQUAL 0)
|
|
string(REGEX REPLACE "[ \t]+SONAME[ \t]+([^ \t]+)" "\\1" _soname "${_output}")
|
|
set_property(TARGET qrcodegencpp::qrcodegencpp PROPERTY IMPORTED_SONAME "${_soname}")
|
|
unset(_soname)
|
|
endif()
|
|
endif()
|
|
unset(_output)
|
|
unset(_result)
|
|
endmacro()
|
|
|
|
# qrcodegencpp_find_dll: Find DLL for corresponding import library
|
|
macro(qrcodegencpp_find_dll)
|
|
cmake_path(GET qrcodegencpp_IMPLIB PARENT_PATH _implib_path)
|
|
cmake_path(SET _bin_path NORMALIZE "${_implib_path}/../bin")
|
|
|
|
string(REGEX REPLACE "[0-9]+\\.([0-9]+)\\.[0-9]+" "\\1" _dll_version "${qrcodegencpp_VERSION}")
|
|
|
|
find_program(
|
|
qrcodegencpp_LIBRARY
|
|
NAMES qrcodegencpp.dll
|
|
HINTS ${_implib_path} ${_bin_path}
|
|
DOC "qrcodegencpp DLL location")
|
|
|
|
if(NOT qrcodegencpp_LIBRARY)
|
|
set(qrcodegencpp_LIBRARY "${qrcodegencpp_IMPLIB}")
|
|
endif()
|
|
unset(_implib_path)
|
|
unset(_bin_path)
|
|
unset(_dll_version)
|
|
endmacro()
|
|
|
|
find_path(
|
|
qrcodegencpp_INCLUDE_DIR
|
|
NAMES qrcodegen.hpp
|
|
HINTS ${PC_qrcodegencpp_INCLUDE_DIRS}
|
|
PATHS /usr/include /usr/local/include
|
|
PATH_SUFFIXES qrcodegencpp qrcodegen
|
|
DOC "qrcodegencpp include directory")
|
|
|
|
if(PC_qrcodegencpp_VERSION VERSION_GREATER 0)
|
|
set(qrcodegencpp_VERSION ${PC_qrcodegencpp_VERSION})
|
|
else()
|
|
if(NOT qrcodegencpp_FIND_QUIETLY)
|
|
message(AUTHOR_WARNING "Failed to find qrcodegencpp version.")
|
|
endif()
|
|
set(qrcodegencpp_VERSION 0.0.0)
|
|
endif()
|
|
|
|
if(CMAKE_HOST_SYSTEM_NAME MATCHES "Windows")
|
|
find_library(
|
|
qrcodegencpp_IMPLIB
|
|
NAMES qrcodegencpp qrcodegencpp
|
|
DOC "qrcodegencpp import library location")
|
|
|
|
qrcodegencpp_find_dll()
|
|
else()
|
|
find_library(
|
|
qrcodegencpp_LIBRARY
|
|
NAMES qrcodegencpp qrcodegencpp
|
|
HINTS ${PC_qrcodegencpp_LIBRARY_DIRS}
|
|
PATHS /usr/lib /usr/local/lib
|
|
DOC "qrcodegencpp location")
|
|
endif()
|
|
|
|
if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin|Windows")
|
|
set(qrcodegencpp_ERROR_REASON "Ensure that a qrcodegencpp distribution is provided as part of CMAKE_PREFIX_PATH.")
|
|
elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD")
|
|
set(qrcodegencpp_ERROR_REASON "Ensure that qrcodegencpp is installed on the system.")
|
|
endif()
|
|
|
|
find_package_handle_standard_args(
|
|
qrcodegencpp
|
|
REQUIRED_VARS qrcodegencpp_LIBRARY qrcodegencpp_INCLUDE_DIR
|
|
VERSION_VAR qrcodegencpp_VERSION REASON_FAILURE_MESSAGE "${qrcodegencpp_ERROR_REASON}")
|
|
mark_as_advanced(qrcodegencpp_INCLUDE_DIR qrcodegencpp_LIBRARY qrcodegencpp_IMPLIB)
|
|
unset(qrcodegencpp_ERROR_REASON)
|
|
|
|
if(qrcodegencpp_FOUND)
|
|
if(NOT TARGET qrcodegencpp::qrcodegencpp)
|
|
if(IS_ABSOLUTE "${qrcodegencpp_LIBRARY}")
|
|
if(DEFINED qrcodegencpp_IMPLIB)
|
|
if(qrcodegencpp_IMPLIB STREQUAL qrcodegencpp_LIBRARY)
|
|
add_library(qrcodegencpp::qrcodegencpp STATIC IMPORTED)
|
|
else()
|
|
add_library(qrcodegencpp::qrcodegencpp SHARED IMPORTED)
|
|
set_property(TARGET qrcodegencpp::qrcodegencpp PROPERTY IMPORTED_IMPLIB "${qrcodegencpp_IMPLIB}")
|
|
endif()
|
|
else()
|
|
add_library(qrcodegencpp::qrcodegencpp UNKNOWN IMPORTED)
|
|
endif()
|
|
set_property(TARGET qrcodegencpp::qrcodegencpp PROPERTY IMPORTED_LOCATION "${qrcodegencpp_LIBRARY}")
|
|
else()
|
|
add_library(qrcodegencpp::qrcodegencpp INTERFACE IMPORTED)
|
|
set_property(TARGET qrcodegencpp::qrcodegencpp PROPERTY IMPORTED_LIBNAME "${qrcodegencpp_LIBRARY}")
|
|
endif()
|
|
|
|
qrcodegencpp_set_soname()
|
|
set_target_properties(
|
|
qrcodegencpp::qrcodegencpp
|
|
PROPERTIES INTERFACE_COMPILE_OPTIONS "${PC_qrcodegencpp_CFLAGS_OTHER}"
|
|
INTERFACE_INCLUDE_DIRECTORIES "${qrcodegencpp_INCLUDE_DIR}"
|
|
VERSION ${qrcodegencpp_VERSION})
|
|
endif()
|
|
endif()
|
|
|
|
include(FeatureSummary)
|
|
set_package_properties(
|
|
qrcodegencpp PROPERTIES
|
|
URL "https://www.nayuki.io/page/qr-code-generator-library"
|
|
DESCRIPTION "This project aims to be the best, clearest library for generating QR Codes in C++.")
|