From 5f8335c1e49ce108ef3481863833c98efa00411b Mon Sep 17 00:00:00 2001 From: manuel Date: Thu, 2 Jul 2020 23:09:26 +0200 Subject: sync with upstream --- cmake/modules/FindAML.cmake | 49 ---------------- cmake/modules/FindBluray.cmake | 4 ++ cmake/modules/FindCdio.cmake | 38 +++--------- cmake/modules/FindClangFormat.cmake | 11 ++++ cmake/modules/FindCpluff.cmake | 51 ---------------- cmake/modules/FindCrossGUID.cmake | 9 +-- cmake/modules/FindDav1d.cmake | 82 ++++++++++++++++++++++++++ cmake/modules/FindEpollShim.cmake | 27 +++++++++ cmake/modules/FindFFMPEG.cmake | 29 ++++++--- cmake/modules/FindFlatBuffers.cmake | 3 +- cmake/modules/FindFmt.cmake | 9 +-- cmake/modules/FindFriBidi.cmake | 3 +- cmake/modules/FindGIF.cmake | 12 +--- cmake/modules/FindGtest.cmake | 84 ++++++++++++++++++++++++++ cmake/modules/FindIso9660pp.cmake | 43 ++++++++++++++ cmake/modules/FindLibDRM.cmake | 15 +++++ cmake/modules/FindLibDvd.cmake | 3 + cmake/modules/FindLibUSB.cmake | 2 +- cmake/modules/FindMariaDBClient.cmake | 4 +- cmake/modules/FindNFS.cmake | 38 ++++++++++++ cmake/modules/FindOpenGLES.cmake | 2 +- cmake/modules/FindPlist.cmake | 19 ++---- cmake/modules/FindPython.cmake | 10 ++-- cmake/modules/FindSSE.cmake | 2 + cmake/modules/FindSWIG.cmake | 2 +- cmake/modules/FindShairplay.cmake | 42 ++++++------- cmake/modules/FindSmbClient.cmake | 3 + cmake/modules/FindSpdlog.cmake | 107 ++++++++++++++++++++++++++++++++++ cmake/modules/FindUdfread.cmake | 78 +++++++++++++++++++++++++ 29 files changed, 574 insertions(+), 207 deletions(-) delete mode 100644 cmake/modules/FindAML.cmake create mode 100644 cmake/modules/FindClangFormat.cmake delete mode 100644 cmake/modules/FindCpluff.cmake create mode 100644 cmake/modules/FindDav1d.cmake create mode 100644 cmake/modules/FindEpollShim.cmake create mode 100644 cmake/modules/FindGtest.cmake create mode 100644 cmake/modules/FindIso9660pp.cmake create mode 100644 cmake/modules/FindSpdlog.cmake create mode 100644 cmake/modules/FindUdfread.cmake (limited to 'cmake/modules') diff --git a/cmake/modules/FindAML.cmake b/cmake/modules/FindAML.cmake deleted file mode 100644 index 89d1fd9..0000000 --- a/cmake/modules/FindAML.cmake +++ /dev/null @@ -1,49 +0,0 @@ -#.rst: -# FindAML -# ------- -# Finds the AML codec -# -# This will define the following variables:: -# -# AML_FOUND - system has AML -# AML_INCLUDE_DIRS - the AML include directory -# AML_DEFINITIONS - the AML definitions -# -# and the following imported targets:: -# -# AML::AML - The AML codec - -find_path(AML_INCLUDE_DIR codec_error.h - PATH_SUFFIXES amcodec) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(AML - REQUIRED_VARS AML_INCLUDE_DIR) - -include(CheckCSourceCompiles) -set(CMAKE_REQUIRED_INCLUDES ${AML_INCLUDE_DIR}) -check_c_source_compiles("#include - - int main() - { - int i = VIDEO_DEC_FORMAT_VP9; - return 0; - } - " AML_HAS_VP9) - -if(AML_FOUND) - set(AML_INCLUDE_DIRS ${AML_INCLUDE_DIR}) - set(AML_DEFINITIONS -DHAS_LIBAMCODEC=1) - if(AML_HAS_VP9) - list(APPEND AML_DEFINITIONS -DHAS_LIBAMCODEC_VP9=1) - endif() - - if(NOT TARGET AML::AML) - add_library(AML::AML UNKNOWN IMPORTED) - set_target_properties(AML::AML PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${AML_INCLUDE_DIR}" - INTERFACE_COMPILE_DEFINITIONS HAS_LIBAMCODEC=1) - endif() -endif() - -mark_as_advanced(AMLCODEC_INCLUDE_DIR) diff --git a/cmake/modules/FindBluray.cmake b/cmake/modules/FindBluray.cmake index 58a9a91..34bc50e 100644 --- a/cmake/modules/FindBluray.cmake +++ b/cmake/modules/FindBluray.cmake @@ -48,6 +48,10 @@ if(BLURAY_FOUND) list(APPEND BLURAY_DEFINITIONS -DHAVE_LIBBLURAY_BDJ=1) endif() + if(${BLURAY_LIBRARY} MATCHES ".+\.a$" AND PC_BLURAY_STATIC_LIBRARIES) + list(APPEND BLURAY_LIBRARIES ${PC_BLURAY_STATIC_LIBRARIES}) + endif() + if(NOT TARGET Bluray::Bluray) add_library(Bluray::Bluray UNKNOWN IMPORTED) if(BLURAY_LIBRARY) diff --git a/cmake/modules/FindCdio.cmake b/cmake/modules/FindCdio.cmake index 91ba7bc..465ecc6 100644 --- a/cmake/modules/FindCdio.cmake +++ b/cmake/modules/FindCdio.cmake @@ -8,47 +8,27 @@ # CDIO_FOUND - system has cdio # CDIO_INCLUDE_DIRS - the cdio include directory # CDIO_LIBRARIES - the cdio libraries -# -# and the following imported targets:: -# -# CDIO::CDIO - The cdio library if(PKG_CONFIG_FOUND) - pkg_check_modules(PC_CDIO libcdio>=0.78 libiso9660 QUIET) + pkg_check_modules(PC_CDIO libcdio>=0.80 QUIET) endif() find_path(CDIO_INCLUDE_DIR NAMES cdio/cdio.h - PATHS ${PC_CDIO_libcdio_INCLUDEDIR} - ${PC_CDIO_libiso9660_INCLUDEDIR}) -find_library(CDIO_LIBRARY NAMES cdio libcdio - PATHS ${CDIO_libcdio_LIBDIR} ${CDIO_libiso9660_LIBDIR}) + PATHS ${PC_CDIO_INCLUDEDIR}) -if(NOT WIN32) - find_path(ISO9660_INCLUDE_DIR NAMES cdio/iso9660.h - PATHS ${PC_CDIO_libcdio_INCLUDEDIR} - ${PC_CDIO_libiso9660_INCLUDEDIR}) - find_library(ISO9660_LIBRARY NAMES iso9660 - PATHS ${CDIO_libcdio_LIBDIR} ${CDIO_libiso9660_LIBDIR}) - list(APPEND ISO9660_VARS ISO9660_INCLUDE_DIR ISO9660_LIBRARY) -endif() +find_library(CDIO_LIBRARY NAMES cdio libcdio + PATHS ${PC_CDIO_LIBDIR}) -set(CDIO_VERSION ${PC_CDIO_libcdio_VERSION}) +set(CDIO_VERSION ${PC_CDIO_VERSION}) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(Cdio - REQUIRED_VARS CDIO_LIBRARY CDIO_INCLUDE_DIR ${ISO9660_VARS} + REQUIRED_VARS CDIO_LIBRARY CDIO_INCLUDE_DIR VERSION_VAR CDIO_VERSION) if(CDIO_FOUND) - set(CDIO_LIBRARIES ${CDIO_LIBRARY} ${ISO9660_LIBRARY}) - set(CDIO_INCLUDE_DIRS ${CDIO_INCLUDE_DIR} ${ISO9660_INCLUDE_DIR}) - - if(NOT TARGET CDIO::CDIO) - add_library(CDIO::CDIO UNKNOWN IMPORTED) - set_target_properties(CDIO::CDIO PROPERTIES - IMPORTED_LOCATION "${CDIO_LIBRARY}" - INTERFACE_INCLUDE_DIRECTORIES "${CDIO_INCLUDE_DIR}") - endif() + set(CDIO_LIBRARIES ${CDIO_LIBRARY}) + set(CDIO_INCLUDE_DIRS ${CDIO_INCLUDE_DIR}) endif() -mark_as_advanced(CDIO_INCLUDE_DIR CDIO_LIBRARY ISO9660_INCLUDE_DIR ISO9660_LIBRARY) +mark_as_advanced(CDIO_INCLUDE_DIR CDIO_LIBRARY) diff --git a/cmake/modules/FindClangFormat.cmake b/cmake/modules/FindClangFormat.cmake new file mode 100644 index 0000000..7220d31 --- /dev/null +++ b/cmake/modules/FindClangFormat.cmake @@ -0,0 +1,11 @@ +#.rst: +# FindClangFormat +# ---------- +# Finds clang-format + +find_program(CLANG_FORMAT_EXECUTABLE clang-format) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(ClangFormat REQUIRED_VARS CLANG_FORMAT_EXECUTABLE) + +mark_as_advanced(CLANG_FORMAT_EXECUTABLE) diff --git a/cmake/modules/FindCpluff.cmake b/cmake/modules/FindCpluff.cmake deleted file mode 100644 index 9e29e17..0000000 --- a/cmake/modules/FindCpluff.cmake +++ /dev/null @@ -1,51 +0,0 @@ -# - Builds Cpluff as external project -# Once done this will define -# -# CPLUFF_FOUND - system has cpluff -# CPLUFF_INCLUDE_DIRS - the cpluff include directories -# -# and link Kodi against the cpluff libraries. - -find_package(EXPAT REQUIRED) -if(CORE_SYSTEM_NAME MATCHES windows) - add_subdirectory(${CMAKE_SOURCE_DIR}/lib/cpluff) - set(CPLUFF_LIBRARIES $ ${EXPAT_LIBRARIES}) -else() - string(REPLACE ";" " " defines "${CMAKE_C_FLAGS} ${SYSTEM_DEFINES} -I${EXPAT_INCLUDE_DIR}") - get_filename_component(expat_dir ${EXPAT_LIBRARY} DIRECTORY) - set(ldflags "-L${expat_dir}") - - # iOS: Without specifying -arch, configure tries to use /bin/cpp as C-preprocessor - # http://stackoverflow.com/questions/38836754/cant-cross-compile-c-library-for-arm-ios - if(CORE_SYSTEM_NAME STREQUAL ios) - set(cppflags "-arch ${CPU}") - endif() - - ExternalProject_Add(libcpluff SOURCE_DIR ${CMAKE_SOURCE_DIR}/lib/cpluff - BUILD_IN_SOURCE 1 - PREFIX ${CORE_BUILD_DIR}/cpluff - CONFIGURE_COMMAND AR=${CMAKE_AR} RANLIB=${CMAKE_RANLIB} CC=${CMAKE_C_COMPILER} ${CMAKE_SOURCE_DIR}/lib/cpluff/configure - --disable-nls - --enable-static - --disable-shared - --with-pic - --prefix= - --libdir=/lib - --host=${ARCH} - CFLAGS=${defines} - CPPFLAGS=${cppflags} - LDFLAGS=${ldflags} - BUILD_BYPRODUCTS /lib/libcpluff.a) - ExternalProject_Add_Step(libcpluff autoreconf - DEPENDEES download update patch - DEPENDERS configure - COMMAND rm -f config.status - COMMAND PATH=${NATIVEPREFIX}/bin:$ENV{PATH} autoreconf -vif - WORKING_DIRECTORY ) - - set(CPLUFF_LIBRARIES ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/cpluff/lib/libcpluff.a ${EXPAT_LIBRARIES}) -endif() -set(CPLUFF_INCLUDE_DIRS ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/cpluff/include) -set(CPLUFF_FOUND 1) -mark_as_advanced(CPLUFF_INCLUDE_DIRS CPLUFF_LIBRARIES) -set_target_properties(libcpluff PROPERTIES FOLDER "External Projects") diff --git a/cmake/modules/FindCrossGUID.cmake b/cmake/modules/FindCrossGUID.cmake index 7384747..613c2a4 100644 --- a/cmake/modules/FindCrossGUID.cmake +++ b/cmake/modules/FindCrossGUID.cmake @@ -34,9 +34,6 @@ if(ENABLE_INTERNAL_CROSSGUID) && ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/tools/depends/target/crossguid/FindUUID.cmake - && - ${CMAKE_COMMAND} -E copy - ${CMAKE_SOURCE_DIR}/tools/depends/target/crossguid/FindCXX11.cmake BUILD_BYPRODUCTS ${CROSSGUID_LIBRARY}) set_target_properties(crossguid PROPERTIES FOLDER "External Projects") @@ -49,7 +46,7 @@ if(ENABLE_INTERNAL_CROSSGUID) set(CROSSGUID_LIBRARIES ${CROSSGUID_LIBRARY}) set(CROSSGUID_INCLUDE_DIRS ${CROSSGUID_INCLUDE_DIR}) else() - find_path(CROSSGUID_INCLUDE_DIR NAMES guid.h) + find_path(CROSSGUID_INCLUDE_DIR NAMES guid.hpp guid.h) find_library(CROSSGUID_LIBRARY_RELEASE NAMES crossguid) find_library(CROSSGUID_LIBRARY_DEBUG NAMES crossguidd) @@ -65,6 +62,10 @@ else() set(CROSSGUID_LIBRARIES ${CROSSGUID_LIBRARY}) set(CROSSGUID_INCLUDE_DIRS ${CROSSGUID_INCLUDE_DIR}) + if(EXISTS "${CROSSGUID_INCLUDE_DIR}/guid.hpp") + set(CROSSGUID_DEFINITIONS -DHAVE_NEW_CROSSGUID) + endif() + add_custom_target(crossguid) set_target_properties(crossguid PROPERTIES FOLDER "External Projects") endif() diff --git a/cmake/modules/FindDav1d.cmake b/cmake/modules/FindDav1d.cmake new file mode 100644 index 0000000..7625afa --- /dev/null +++ b/cmake/modules/FindDav1d.cmake @@ -0,0 +1,82 @@ +#.rst: +# FindDav1d +# -------- +# Finds the dav1d library +# +# This will define the following variables:: +# +# DAV1D_FOUND - system has dav1d +# DAV1D_INCLUDE_DIRS - the dav1d include directories +# DAV1D_LIBRARIES - the dav1d libraries + +if(PKG_CONFIG_FOUND) + pkg_check_modules(PC_DAV1D dav1d QUIET) +endif() + +find_library(DAV1D_LIBRARY NAMES dav1d libdav1d + PATHS ${PC_DAV1D_LIBDIR}) + +find_path(DAV1D_INCLUDE_DIR NAMES dav1d/dav1d.h + PATHS ${PC_DAV1D_INCLUDEDIR}) + +set(DAV1D_VERSION ${PC_DAV1D_VERSION}) + +if(ENABLE_INTERNAL_DAV1D) + include(ExternalProject) + + # Extract version + file(STRINGS ${CMAKE_SOURCE_DIR}/tools/depends/target/dav1d/DAV1D-VERSION VER) + + string(REGEX MATCH "VERSION=[^ ]*$.*" DAV1D_VER "${VER}") + list(GET DAV1D_VER 0 DAV1D_VER) + string(SUBSTRING "${DAV1D_VER}" 8 -1 DAV1D_VER) + + # allow user to override the download URL with a local tarball + # needed for offline build envs + if(DAV1D_URL) + get_filename_component(DAV1D_URL "${DAV1D_URL}" ABSOLUTE) + else() + set(DAV1D_URL http://mirrors.kodi.tv/build-deps/sources/dav1d-${DAV1D_VER}.tar.gz) + endif() + + if(VERBOSE) + message(STATUS "DAV1D_URL: ${DAV1D_URL}") + endif() + + set(DAV1D_LIBRARY ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/libdav1d.a) + set(DAV1D_INCLUDE_DIR ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/include) + set(DAV1D_VERSION ${DAV1D_VER}) + + externalproject_add(dav1d + URL ${DAV1D_URL} + DOWNLOAD_NAME dav1d-${DAV1D_VER}.tar.gz + DOWNLOAD_DIR ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/download + PREFIX ${CORE_BUILD_DIR}/dav1d + CONFIGURE_COMMAND meson + --buildtype=release + --default-library=static + --prefix=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR} + --libdir=lib + -Denable_asm=true + -Denable_tools=false + -Denable_examples=false + -Denable_tests=false + ../dav1d + BUILD_COMMAND ninja + INSTALL_COMMAND ninja install + BUILD_BYPRODUCTS ${DAV1D_LIBRARY}) + + set_target_properties(dav1d PROPERTIES FOLDER "External Projects") +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Dav1d + REQUIRED_VARS DAV1D_LIBRARY DAV1D_INCLUDE_DIR + VERSION_VAR DAV1D_VERSION) + +if(DAV1D_FOUND) + set(DAV1D_INCLUDE_DIRS ${DAV1D_INCLUDE_DIR}) + set(DAV1D_LIBRARIES ${DAV1D_LIBRARY}) +endif() + +mark_as_advanced(DAV1D_INCLUDE_DIR DAV1D_LIBRARY) diff --git a/cmake/modules/FindEpollShim.cmake b/cmake/modules/FindEpollShim.cmake new file mode 100644 index 0000000..61366d8 --- /dev/null +++ b/cmake/modules/FindEpollShim.cmake @@ -0,0 +1,27 @@ +# FindEpollShim +# ------------- +# Finds the epoll-shim library +# +# This will define the following variables:: +# +# EPOLLSHIM_FOUND - the system has epoll-shim +# EPOLLSHIM_INCLUDE_DIR - the epoll-shim include directory +# EPOLLSHIM_LIBRARY - the epoll-shim library + +if(PKG_CONFIG_FOUND) + pkg_check_modules(PC_EPOLLSHIM epoll-shim QUIET) +endif() + +find_path(EPOLLSHIM_INCLUDE_DIR NAMES sys/epoll.h PATHS ${PC_EPOLLSHIM_INCLUDE_DIRS}) +find_library(EPOLLSHIM_LIBRARY NAMES epoll-shim PATHS ${PC_EPOLLSHIM_LIBDIR}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(EpollShim + REQUIRED_VARS EPOLLSHIM_LIBRARY EPOLLSHIM_INCLUDE_DIR) + +if(EPOLLSHIM_FOUND) + set(EPOLLSHIM_INCLUDE_DIRS ${EPOLLSHIM_INCLUDE_DIR}) + set(EPOLLSHIM_LIBRARIES ${EPOLLSHIM_LIBRARY}) +endif() + +mark_as_advanced(EPOLLSHIM_INCLUDE_DIR EPOLLSHIM_LIBRARY) diff --git a/cmake/modules/FindFFMPEG.cmake b/cmake/modules/FindFFMPEG.cmake index ef74671..81d2697 100644 --- a/cmake/modules/FindFFMPEG.cmake +++ b/cmake/modules/FindFFMPEG.cmake @@ -33,14 +33,14 @@ # # required ffmpeg library versions -set(REQUIRED_FFMPEG_VERSION 4.0) -set(_avcodec_ver ">=58.18.100") -set(_avfilter_ver ">=7.16.100") -set(_avformat_ver ">=58.12.100") -set(_avutil_ver ">=56.14.100") -set(_swscale_ver ">=5.1.100") -set(_swresample_ver ">=3.1.100") -set(_postproc_ver ">=55.1.100") +set(REQUIRED_FFMPEG_VERSION 4.3) +set(_avcodec_ver ">=58.91.100") +set(_avfilter_ver ">=7.85.100") +set(_avformat_ver ">=58.45.100") +set(_avutil_ver ">=56.51.100") +set(_swscale_ver ">=5.7.100") +set(_swresample_ver ">=3.7.100") +set(_postproc_ver ">=55.7.100") # Allows building with external ffmpeg not found in system paths, @@ -229,10 +229,16 @@ if(NOT FFMPEG_FOUND) message(STATUS "FFMPEG_URL: ${FFMPEG_URL}") endif() + if (NOT DAV1D_FOUND) + message(STATUS "dav1d not found, internal ffmpeg build will be missing AV1 support!") + endif() + set(FFMPEG_OPTIONS -DENABLE_CCACHE=${ENABLE_CCACHE} -DCCACHE_PROGRAM=${CCACHE_PROGRAM} -DENABLE_VAAPI=${ENABLE_VAAPI} - -DENABLE_VDPAU=${ENABLE_VDPAU}) + -DENABLE_VDPAU=${ENABLE_VDPAU} + -DENABLE_DAV1D=${DAV1D_FOUND} + -DEXTRA_FLAGS=${FFMPEG_EXTRA_FLAGS}) if(KODI_DEPENDSBUILD) set(CROSS_ARGS -DDEPENDS_PATH=${DEPENDS_PATH} @@ -265,6 +271,7 @@ if(NOT FFMPEG_FOUND) -DCMAKE_EXE_LINKER_FLAGS=${LINKER_FLAGS} ${CROSS_ARGS} ${FFMPEG_OPTIONS} + -DPKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig PATCH_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/tools/depends/target/ffmpeg/CMakeLists.txt && @@ -272,6 +279,10 @@ if(NOT FFMPEG_FOUND) ${CMAKE_SOURCE_DIR}/tools/depends/target/ffmpeg/FindGnuTls.cmake ) + if (ENABLE_INTERNAL_DAV1D) + add_dependencies(ffmpeg dav1d) + endif() + find_program(BASH_COMMAND bash) if(NOT BASH_COMMAND) message(FATAL_ERROR "Internal FFmpeg requires bash.") diff --git a/cmake/modules/FindFlatBuffers.cmake b/cmake/modules/FindFlatBuffers.cmake index 6f7e6a2..5ca67c5 100644 --- a/cmake/modules/FindFlatBuffers.cmake +++ b/cmake/modules/FindFlatBuffers.cmake @@ -11,7 +11,7 @@ if(ENABLE_INTERNAL_FLATBUFFERS) include(ExternalProject) - file(STRINGS ${CMAKE_SOURCE_DIR}/tools/depends/native/flatbuffers-native/Makefile VER REGEX "^[ ]*VERSION[ ]*=.+$") + file(STRINGS ${CMAKE_SOURCE_DIR}/tools/depends/native/flatbuffers/Makefile VER REGEX "^[ ]*VERSION[ ]*=.+$") string(REGEX REPLACE "^[ ]*VERSION[ ]*=[ ]*" "" FLATBUFFERS_VER "${VER}") # Allow user to override the download URL with a local tarball @@ -43,7 +43,6 @@ if(ENABLE_INTERNAL_FLATBUFFERS) -DFLATBUFFERS_BUILD_GRPCTEST=OFF -DFLATBUFFERS_BUILD_SHAREDLIB=OFF "${EXTRA_ARGS}" - PATCH_COMMAND patch -p1 < ${CORE_SOURCE_DIR}/tools/depends/native/flatbuffers-native/0001-Fix-compiler-warning.patch BUILD_BYPRODUCTS ${FLATBUFFERS_FLATC_EXECUTABLE}) set_target_properties(flatbuffers PROPERTIES FOLDER "External Projects" INTERFACE_INCLUDE_DIRECTORIES ${FLATBUFFERS_INCLUDE_DIR}) diff --git a/cmake/modules/FindFmt.cmake b/cmake/modules/FindFmt.cmake index 47cf8be..b426d8c 100644 --- a/cmake/modules/FindFmt.cmake +++ b/cmake/modules/FindFmt.cmake @@ -39,6 +39,8 @@ if(ENABLE_INTERNAL_FMT) DOWNLOAD_DIR ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/download PREFIX ${CORE_BUILD_DIR}/fmt CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR} + -DCMAKE_CXX_EXTENSIONS=${CMAKE_CXX_EXTENSIONS} + -DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DCMAKE_INSTALL_LIBDIR=lib -DFMT_DOC=OFF @@ -57,12 +59,7 @@ if(ENABLE_INTERNAL_FMT) else() -if(CORE_SYSTEM_NAME STREQUAL windows OR CORE_SYSTEM_NAME STREQUAL windowsstore) - # TODO: fix windows fmt package to include fmt-config.cmake and fmt-config-version.cmake - set(FMT_VERSION 3.0.1) -else() - find_package(FMT 3.0.1 CONFIG REQUIRED QUIET) -endif() +find_package(FMT 6.1.2 CONFIG REQUIRED QUIET) if(PKG_CONFIG_FOUND) pkg_check_modules(PC_FMT libfmt QUIET) diff --git a/cmake/modules/FindFriBidi.cmake b/cmake/modules/FindFriBidi.cmake index 91f3994..7a135e7 100644 --- a/cmake/modules/FindFriBidi.cmake +++ b/cmake/modules/FindFriBidi.cmake @@ -17,7 +17,8 @@ if(PKG_CONFIG_FOUND) pkg_check_modules(PC_FRIBIDI fribidi QUIET) endif() -find_path(FRIBIDI_INCLUDE_DIR NAMES fribidi/fribidi.h +find_path(FRIBIDI_INCLUDE_DIR NAMES fribidi.h + PATH_SUFFIXES fribidi PATHS ${PC_FRIBIDI_INCLUDEDIR}) find_library(FRIBIDI_LIBRARY NAMES fribidi libfribidi PATHS ${PC_FRIBIDI_LIBDIR}) diff --git a/cmake/modules/FindGIF.cmake b/cmake/modules/FindGIF.cmake index 1c616e0..7564a58 100644 --- a/cmake/modules/FindGIF.cmake +++ b/cmake/modules/FindGIF.cmake @@ -16,15 +16,9 @@ find_path(GIF_INCLUDE_DIR gif_lib.h) include(FindPackageHandleStandardArgs) -if(NOT WIN32) - find_library(GIF_LIBRARY NAMES gif) - find_package_handle_standard_args(GIF - REQUIRED_VARS GIF_LIBRARY GIF_INCLUDE_DIR) -else() - # Dynamically loaded DLL - find_package_handle_standard_args(GIF - REQUIRED_VARS GIF_INCLUDE_DIR) -endif() +find_library(GIF_LIBRARY NAMES gif) +find_package_handle_standard_args(GIF + REQUIRED_VARS GIF_LIBRARY GIF_INCLUDE_DIR) if(GIF_FOUND) set(GIF_LIBRARIES ${GIF_LIBRARY}) diff --git a/cmake/modules/FindGtest.cmake b/cmake/modules/FindGtest.cmake new file mode 100644 index 0000000..b59554b --- /dev/null +++ b/cmake/modules/FindGtest.cmake @@ -0,0 +1,84 @@ +#.rst: +# FindGtest +# -------- +# Finds the gtest library +# +# This will define the following variables:: +# +# GTEST_FOUND - system has gtest +# GTEST_INCLUDE_DIRS - the gtest include directories +# GTEST_LIBRARIES - the gtest libraries +# +# and the following imported targets: +# +# Gtest::Gtest - The gtest library + +if(ENABLE_INTERNAL_GTEST) + include(ExternalProject) + + file(STRINGS ${CMAKE_SOURCE_DIR}/tools/depends/target/googletest/Makefile VER) + string(REGEX MATCH "VERSION=[^ ]*" GTEST_VERSION "${VER}") + list(GET GTEST_VERSION 0 GTEST_VERSION) + string(SUBSTRING "${GTEST_VERSION}" 8 -1 GTEST_VERSION) + + # allow user to override the download URL with a local tarball + # needed for offline build envs + if(GTEST_URL) + get_filename_component(GTEST_URL "${GTEST_URL}" ABSOLUTE) + else() + set(GTEST_URL http://mirrors.kodi.tv/build-deps/sources/googletest-${GTEST_VERSION}.tar.gz) + endif() + + if(VERBOSE) + message(STATUS "GTEST_URL: ${GTEST_URL}") + endif() + + set(GTEST_LIBRARY ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/libgtest.a) + set(GTEST_INCLUDE_DIR ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/include) + + externalproject_add(gtest + URL ${GTEST_URL} + DOWNLOAD_DIR ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/download + PREFIX ${CORE_BUILD_DIR}/gtest + INSTALL_DIR ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR} + CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DBUILD_GMOCK=OFF -DINSTALL_GTEST=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX= -DCMAKE_INSTALL_LIBDIR=lib + BUILD_BYPRODUCTS ${GTEST_LIBRARY}) + set_target_properties(gtest PROPERTIES FOLDER "External Projects") +else() + if(PKG_CONFIG_FOUND) + pkg_check_modules(PC_GTEST gtest>=1.10.0 QUIET) + set(GTEST_VERSION ${PC_GTEST_VERSION}) + elseif(WIN32) + set(GTEST_VERSION 1.10.0) + endif() + + find_path(GTEST_INCLUDE_DIR NAMES gtest/gtest.h + PATHS ${PC_GTEST_INCLUDEDIR}) + + find_library(GTEST_LIBRARY_RELEASE NAMES gtest + PATHS ${PC_GTEST_LIBDIR}) + find_library(GTEST_LIBRARY_DEBUG NAMES gtestd + PATHS ${PC_GTEST_LIBDIR}) + + include(SelectLibraryConfigurations) + select_library_configurations(GTEST) +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Gtest + REQUIRED_VARS GTEST_LIBRARY GTEST_INCLUDE_DIR + VERSION_VAR GTEST_VERSION) + +if(GTEST_FOUND) + set(GTEST_LIBRARIES ${GTEST_LIBRARY}) + set(GTEST_INCLUDE_DIRS ${GTEST_INCLUDE_DIR}) +endif() + +if(NOT TARGET Gtest::Gtest) + add_library(Gtest::Gtest UNKNOWN IMPORTED) + set_target_properties(Gtest::Gtest PROPERTIES + IMPORTED_LOCATION "${GTEST_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIR}") +endif() + +mark_as_advanced(GTEST_INCLUDE_DIR GTEST_LIBRARY) diff --git a/cmake/modules/FindIso9660pp.cmake b/cmake/modules/FindIso9660pp.cmake new file mode 100644 index 0000000..5f84b55 --- /dev/null +++ b/cmake/modules/FindIso9660pp.cmake @@ -0,0 +1,43 @@ +#.rst: +# FindIso9660pp +# -------- +# Finds the iso9660++ library +# +# This will define the following variables:: +# +# ISO9660PP_FOUND - system has iso9660++ +# ISO9660PP_INCLUDE_DIRS - the iso9660++ include directory +# ISO9660PP_LIBRARIES - the iso9660++ libraries +# ISO9660PP_DEFINITIONS - the iso9660++ definitions + +if(PKG_CONFIG_FOUND) + pkg_check_modules(PC_ISO9660PP libiso9660++>=2.1.0 QUIET) + pkg_check_modules(PC_ISO9660 libiso9660>=2.1.0 QUIET) +endif() + +find_path(ISO9660PP_INCLUDE_DIR NAMES cdio++/iso9660.hpp + PATHS ${PC_ISO9660PP_INCLUDEDIR}) + +find_library(ISO9660PP_LIBRARY NAMES libiso9660++ iso9660++ + PATHS ${PC_ISO9660PP_LIBDIR}) + +find_path(ISO9660_INCLUDE_DIR NAMES cdio/iso9660.h + PATHS ${PC_ISO9660_INCLUDEDIR}) + +find_library(ISO9660_LIBRARY NAMES libiso9660 iso9660 + PATHS ${PC_ISO9660_LIBDIR}) + +set(ISO9660PP_VERSION ${PC_ISO9660PP_VERSION}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Iso9660pp + REQUIRED_VARS ISO9660PP_LIBRARY ISO9660PP_INCLUDE_DIR ISO9660_LIBRARY ISO9660_INCLUDE_DIR + VERSION_VAR ISO9660PP_VERSION) + +if(ISO9660PP_FOUND) + set(ISO9660PP_LIBRARIES ${ISO9660PP_LIBRARY} ${ISO9660_LIBRARY}) + set(ISO9660PP_INCLUDE_DIRS ${ISO9660PP_INCLUDE_DIR} ${ISO9660_INCLUDE_DIR}) + set(ISO9660PP_DEFINITIONS -DHAS_ISO9660PP=1) +endif() + +mark_as_advanced(ISO9660PP_INCLUDE_DIR ISO9660PP_LIBRARY ISO9660_INCLUDE_DIR ISO9660_LIBRARY) diff --git a/cmake/modules/FindLibDRM.cmake b/cmake/modules/FindLibDRM.cmake index 4b39de3..0d680f2 100644 --- a/cmake/modules/FindLibDRM.cmake +++ b/cmake/modules/FindLibDRM.cmake @@ -8,6 +8,7 @@ # LIBDRM_FOUND - system has LibDRM # LIBDRM_INCLUDE_DIRS - the LibDRM include directory # LIBDRM_LIBRARIES - the LibDRM libraries +# LIBDRM_DEFINITIONS - the LibDRM definitions # # and the following imported targets:: # @@ -30,9 +31,23 @@ find_package_handle_standard_args(LibDRM REQUIRED_VARS LIBDRM_LIBRARY LIBDRM_INCLUDE_DIR VERSION_VAR LIBDRM_VERSION) +include(CheckCSourceCompiles) +set(CMAKE_REQUIRED_INCLUDES ${LIBDRM_INCLUDE_DIR}) +check_c_source_compiles("#include + + int main() + { + struct hdr_output_metadata test; + return test.metadata_type; + } + " LIBDRM_HAS_HDR_OUTPUT_METADATA) + if(LIBDRM_FOUND) set(LIBDRM_LIBRARIES ${LIBDRM_LIBRARY}) set(LIBDRM_INCLUDE_DIRS ${LIBDRM_INCLUDE_DIR}) + if(LIBDRM_HAS_HDR_OUTPUT_METADATA) + set(LIBDRM_DEFINITIONS -DHAVE_HDR_OUTPUT_METADATA=1) + endif() if(NOT TARGET LIBDRM::LIBDRM) add_library(LIBDRM::LIBDRM UNKNOWN IMPORTED) diff --git a/cmake/modules/FindLibDvd.cmake b/cmake/modules/FindLibDvd.cmake index bd08b94..44e7e92 100644 --- a/cmake/modules/FindLibDvd.cmake +++ b/cmake/modules/FindLibDvd.cmake @@ -89,6 +89,8 @@ else() set(HOST_ARCH aarch64-linux-android) elseif(ARCH STREQUAL i486-linux) set(HOST_ARCH i686-linux-android) + elseif(ARCH STREQUAL x86_64) + set(HOST_ARCH x86_64-linux-android) endif() elseif(CORE_SYSTEM_NAME STREQUAL windowsstore) set(LIBDVD_ADDITIONAL_ARGS "-DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}" "-DCMAKE_SYSTEM_VERSION=${CMAKE_SYSTEM_VERSION}") @@ -233,6 +235,7 @@ else() set(LIBDVD_TARGET_DIR dlls) endif() copy_file_to_buildtree(${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd/bin/libdvdnav.dll DIRECTORY ${LIBDVD_TARGET_DIR}) + add_dependencies(export-files dvdnav) endif() set(LIBDVD_INCLUDE_DIRS ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd/include) diff --git a/cmake/modules/FindLibUSB.cmake b/cmake/modules/FindLibUSB.cmake index 17cf6ec..7bf3a92 100644 --- a/cmake/modules/FindLibUSB.cmake +++ b/cmake/modules/FindLibUSB.cmake @@ -24,7 +24,7 @@ find_library(LIBUSB_LIBRARY NAMES usb set(LIBUSB_VERSION ${PC_LIBUSB_VERSION}) include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(LIBUSB +find_package_handle_standard_args(LibUSB REQUIRED_VARS LIBUSB_LIBRARY LIBUSB_INCLUDE_DIR VERSION_VAR LIBUSB_VERSION) diff --git a/cmake/modules/FindMariaDBClient.cmake b/cmake/modules/FindMariaDBClient.cmake index 7530ab5..374aeeb 100644 --- a/cmake/modules/FindMariaDBClient.cmake +++ b/cmake/modules/FindMariaDBClient.cmake @@ -28,11 +28,11 @@ endif() find_path(MARIADBCLIENT_INCLUDE_DIR NAMES mariadb/mysql.h mariadb/server/mysql.h PATHS ${PC_MARIADBCLIENT_INCLUDEDIR}) -find_library(MARIADBCLIENT_LIBRARY_RELEASE NAMES mariadbclient mariadb +find_library(MARIADBCLIENT_LIBRARY_RELEASE NAMES mariadbclient mariadb libmariadb PATHS ${PC_MARIADBCLIENT_LIBDIR} PATH_SUFFIXES mariadb ${EXTRA_FIND_ARGS}) -find_library(MARIADBCLIENT_LIBRARY_DEBUG NAMES mariadbclient mariadb +find_library(MARIADBCLIENT_LIBRARY_DEBUG NAMES mariadbclient mariadb libmariadbd PATHS ${PC_MARIADBCLIENT_LIBDIR} PATH_SUFFIXES mariadb ${EXTRA_FIND_ARGS}) diff --git a/cmake/modules/FindNFS.cmake b/cmake/modules/FindNFS.cmake index c2414a1..d62d4e6 100644 --- a/cmake/modules/FindNFS.cmake +++ b/cmake/modules/FindNFS.cmake @@ -36,6 +36,44 @@ if(NFS_FOUND) set(NFS_INCLUDE_DIRS ${NFS_INCLUDE_DIR}) set(NFS_DEFINITIONS -DHAS_FILESYSTEM_NFS=1) + set(CMAKE_REQUIRED_INCLUDES "${NFS_INCLUDE_DIR}") + set(CMAKE_REQUIRED_LIBRARIES ${NFS_LIBRARY}) + if(CMAKE_SYSTEM_NAME MATCHES "Windows") + set(NFS_CXX_INCLUDE "#include ") + set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} "ws2_32.lib") + endif() + +# Check for nfs_set_timeout + check_cxx_source_compiles(" + ${NFS_CXX_INCLUDE} + #include + int main() + { + nfs_set_timeout(NULL, 0); + } + " NFS_SET_TIMEOUT) + + if(NFS_SET_TIMEOUT) + list(APPEND NFS_DEFINITIONS -DHAS_NFS_SET_TIMEOUT) + endif() + +# Check for mount_getexports_timeout + check_cxx_source_compiles(" + ${NFS_CXX_INCLUDE} + #include + int main() + { + mount_getexports_timeout(NULL, 0); + } + " NFS_MOUNT_GETEXPORTS_TIMEOUT) + + if(NFS_MOUNT_GETEXPORTS_TIMEOUT) + list(APPEND NFS_DEFINITIONS -DHAS_NFS_MOUNT_GETEXPORTS_TIMEOUT) + endif() + + unset(CMAKE_REQUIRED_INCLUDES) + unset(CMAKE_REQUIRED_LIBRARIES) + if(NOT TARGET NFS::NFS) add_library(NFS::NFS UNKNOWN IMPORTED) if(NFS_LIBRARY) diff --git a/cmake/modules/FindOpenGLES.cmake b/cmake/modules/FindOpenGLES.cmake index 0191d9e..43a1367 100644 --- a/cmake/modules/FindOpenGLES.cmake +++ b/cmake/modules/FindOpenGLES.cmake @@ -18,7 +18,7 @@ if(PKG_CONFIG_FOUND) pkg_check_modules(PC_OPENGLES ${_brcmprefix}glesv2 QUIET) endif() -if(NOT CORE_SYSTEM_NAME STREQUAL ios) +if(NOT CORE_SYSTEM_NAME STREQUAL darwin_embedded) find_path(OPENGLES_INCLUDE_DIR GLES2/gl2.h PATHS ${PC_OPENGLES_INCLUDEDIR}) find_library(OPENGLES_gl_LIBRARY NAMES ${_brcmprefix}GLESv2 diff --git a/cmake/modules/FindPlist.cmake b/cmake/modules/FindPlist.cmake index cd143e9..2c86b74 100644 --- a/cmake/modules/FindPlist.cmake +++ b/cmake/modules/FindPlist.cmake @@ -23,20 +23,13 @@ find_path(PLIST_INCLUDE_DIR plist/plist.h set(PLIST_VERSION ${PC_PLIST_VERSION}) +find_library(PLIST_LIBRARY NAMES plist libplist + PATHS ${PC_PLIST_LIBDIR}) + include(FindPackageHandleStandardArgs) -if(NOT WIN32) - find_library(PLIST_LIBRARY NAMES plist - PATHS ${PC_PLIST_LIBDIR}) - - find_package_handle_standard_args(Plist - REQUIRED_VARS PLIST_LIBRARY PLIST_INCLUDE_DIR - VERSION_VAR PLIST_VERSION) -else() - # Dynamically loaded DLL - find_package_handle_standard_args(Plist - REQUIRED_VARS PLIST_INCLUDE_DIR - VERSION_VAR PLIST_VERSION) -endif() +find_package_handle_standard_args(Plist + REQUIRED_VARS PLIST_LIBRARY PLIST_INCLUDE_DIR + VERSION_VAR PLIST_VERSION) if(PLIST_FOUND) set(PLIST_LIBRARIES ${PLIST_LIBRARY}) diff --git a/cmake/modules/FindPython.cmake b/cmake/modules/FindPython.cmake index 213b17c..e39d4e5 100644 --- a/cmake/modules/FindPython.cmake +++ b/cmake/modules/FindPython.cmake @@ -6,12 +6,12 @@ # PYTHON_LIBRARIES - The python libraries if(PKG_CONFIG_FOUND) - pkg_check_modules(PC_PYTHON python>=2.7 QUIET) + pkg_check_modules(PC_PYTHON python3>=3.5 QUIET) endif() -find_program(PYTHON_EXECUTABLE python ONLY_CMAKE_FIND_ROOT_PATH) -find_library(PYTHON_LIBRARY NAMES python2.7 PATHS ${PC_PYTHON_LIBDIR}) -find_path(PYTHON_INCLUDE_DIR NAMES Python.h PATHS ${PC_PYTHON_INCLUDE_DIRS} ${DEPENDS_PATH}/include/python2.7) +find_program(PYTHON_EXECUTABLE python3 ONLY_CMAKE_FIND_ROOT_PATH) +find_library(PYTHON_LIBRARY NAMES python3.8 python3.7 python3.6 python3.5 PATHS ${PC_PYTHON_LIBDIR}) +find_path(PYTHON_INCLUDE_DIR NAMES Python.h PATHS ${PC_PYTHON_INCLUDE_DIRS} PATH_SUFFIXES python3.8 python3.7 python3.6 python3.5) if(KODI_DEPENDSBUILD) find_library(FFI_LIBRARY ffi REQUIRED) @@ -25,7 +25,7 @@ if(KODI_DEPENDSBUILD) set(PYTHON_LIBRARIES ${PYTHON_LIBRARY} ${FFI_LIBRARY} ${EXPAT_LIBRARY} ${INTL_LIBRARY} ${GMP_LIBRARY} ${PYTHON_DEP_LIBRARIES}) else() - find_package(PythonLibs 2.7 REQUIRED) + find_package(PythonLibs 3.5 REQUIRED) list(APPEND PYTHON_LIBRARIES ${PC_PYTHON_STATIC_LIBRARIES}) endif() diff --git a/cmake/modules/FindSSE.cmake b/cmake/modules/FindSSE.cmake index 08e3630..d9d5c7a 100644 --- a/cmake/modules/FindSSE.cmake +++ b/cmake/modules/FindSSE.cmake @@ -141,6 +141,7 @@ include(FindPackageHandleStandardArgs) find_package_handle_standard_args(SSE REQUIRED_VARS _SSE_TRUE _SSE_OK FAIL_MESSAGE "Could not find hardware support for SSE") +set(FPHSA_NAME_MISMATCHED ON) find_package_handle_standard_args(SSE2 REQUIRED_VARS _SSE2_TRUE _SSE2_OK FAIL_MESSAGE "Could not find hardware support for SSE2") @@ -162,6 +163,7 @@ find_package_handle_standard_args(AVX find_package_handle_standard_args(AVX2 REQUIRED_VARS _AVX2_TRUE _AVX2_OK FAIL_MESSAGE "Could not find hardware support for AVX2") +unset(FPHSA_NAME_MISMATCHED) mark_as_advanced(SSE2_FOUND SSE3_FOUND SSSE3_FOUND SSE4_1_FOUND SSE4_2_FOUND AVX_FOUND AVX2_FOUND) diff --git a/cmake/modules/FindSWIG.cmake b/cmake/modules/FindSWIG.cmake index f9b27c2..fba544b 100644 --- a/cmake/modules/FindSWIG.cmake +++ b/cmake/modules/FindSWIG.cmake @@ -8,7 +8,7 @@ # SWIG_FOUND - system has SWIG # SWIG_EXECUTABLE - the SWIG executable -find_program(SWIG_EXECUTABLE NAMES swig3.0 swig2.0 swig +find_program(SWIG_EXECUTABLE NAMES swig4.0 swig3.0 swig2.0 swig PATH_SUFFIXES swig) if(SWIG_EXECUTABLE) execute_process(COMMAND ${SWIG_EXECUTABLE} -swiglib diff --git a/cmake/modules/FindShairplay.cmake b/cmake/modules/FindShairplay.cmake index bbb3372..506cffd 100644 --- a/cmake/modules/FindShairplay.cmake +++ b/cmake/modules/FindShairplay.cmake @@ -17,32 +17,26 @@ find_path(SHAIRPLAY_INCLUDE_DIR shairplay/raop.h) include(FindPackageHandleStandardArgs) -if(NOT WIN32) - find_library(SHAIRPLAY_LIBRARY NAMES shairplay) - - if(SHAIRPLAY_INCLUDE_DIR AND SHAIRPLAY_LIBRARY) - include(CheckCSourceCompiles) - set(CMAKE_REQUIRED_INCLUDES ${SHAIRPLAY_INCLUDE_DIRS}) - set(CMAKE_REQUIRED_LIBRARIES ${SHAIRPLAY_LIBRARIES}) - check_c_source_compiles("#include - - int main() - { - struct raop_callbacks_s foo; - foo.cls; - return 0; - } - " HAVE_SHAIRPLAY_CALLBACK_CLS) - endif() - - find_package_handle_standard_args(Shairplay - REQUIRED_VARS SHAIRPLAY_LIBRARY SHAIRPLAY_INCLUDE_DIR HAVE_SHAIRPLAY_CALLBACK_CLS) -else() - # Dynamically loaded DLL - find_package_handle_standard_args(Shairplay - REQUIRED_VARS SHAIRPLAY_INCLUDE_DIR) +find_library(SHAIRPLAY_LIBRARY NAMES shairplay libshairplay) + +if(SHAIRPLAY_INCLUDE_DIR AND SHAIRPLAY_LIBRARY) + include(CheckCSourceCompiles) + set(CMAKE_REQUIRED_INCLUDES ${SHAIRPLAY_INCLUDE_DIR}) + set(CMAKE_REQUIRED_LIBRARIES ${SHAIRPLAY_LIBRARIES}) + check_c_source_compiles("#include + + int main() + { + struct raop_callbacks_s foo; + foo.cls; + return 0; + } + " HAVE_SHAIRPLAY_CALLBACK_CLS) endif() +find_package_handle_standard_args(Shairplay + REQUIRED_VARS SHAIRPLAY_LIBRARY SHAIRPLAY_INCLUDE_DIR HAVE_SHAIRPLAY_CALLBACK_CLS) + if(SHAIRPLAY_FOUND) set(SHAIRPLAY_LIBRARIES ${SHAIRPLAY_LIBRARY}) set(SHAIRPLAY_INCLUDE_DIRS ${SHAIRPLAY_INCLUDE_DIR}) diff --git a/cmake/modules/FindSmbClient.cmake b/cmake/modules/FindSmbClient.cmake index 70492ff..fde48ab 100644 --- a/cmake/modules/FindSmbClient.cmake +++ b/cmake/modules/FindSmbClient.cmake @@ -32,6 +32,9 @@ find_package_handle_standard_args(SmbClient if(SMBCLIENT_FOUND) set(SMBCLIENT_LIBRARIES ${SMBCLIENT_LIBRARY}) + if(${SMBCLIENT_LIBRARY} MATCHES ".+\.a$" AND PC_SMBCLIENT_STATIC_LIBRARIES) + list(APPEND SMBCLIENT_LIBRARIES ${PC_SMBCLIENT_STATIC_LIBRARIES}) + endif() set(SMBCLIENT_INCLUDE_DIRS ${SMBCLIENT_INCLUDE_DIR}) set(SMBCLIENT_DEFINITIONS -DHAS_FILESYSTEM_SMB=1) diff --git a/cmake/modules/FindSpdlog.cmake b/cmake/modules/FindSpdlog.cmake new file mode 100644 index 0000000..270e486 --- /dev/null +++ b/cmake/modules/FindSpdlog.cmake @@ -0,0 +1,107 @@ +# FindSpdlog +# ------- +# Finds the Spdlog library +# +# This will define the following variables: +# +# SPDLOG_FOUND - system has Spdlog +# SPDLOG_INCLUDE_DIRS - the Spdlog include directory +# SPDLOG_LIBRARIES - the Spdlog libraries +# SPDLOG_DEFINITIONS - the Spdlog compile definitions +# +# and the following imported targets: +# +# Spdlog::Spdlog - The Spdlog library + +if(ENABLE_INTERNAL_SPDLOG) + include(ExternalProject) + file(STRINGS ${CMAKE_SOURCE_DIR}/tools/depends/target/libspdlog/Makefile VER REGEX "^[ ]*VERSION[ ]*=.+$") + string(REGEX REPLACE "^[ ]*VERSION[ ]*=[ ]*" "" SPDLOG_VERSION "${VER}") + + # allow user to override the download URL with a local tarball + # needed for offline build envs + if(SPDLOG_URL) + get_filename_component(SPDLOG_URL "${SPDLOG_URL}" ABSOLUTE) + else() + set(SPDLOG_URL http://mirrors.kodi.tv/build-deps/sources/spdlog-${SPDLOG_VERSION}.tar.gz) + endif() + if(VERBOSE) + message(STATUS "SPDLOG_URL: ${SPDLOG_URL}") + endif() + + if(APPLE) + set(EXTRA_ARGS "-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}") + endif() + + set(SPDLOG_LIBRARY ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/libspdlog.a) + set(SPDLOG_INCLUDE_DIR ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/include) + + externalproject_add(spdlog + URL ${SPDLOG_URL} + DOWNLOAD_DIR ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/download + PATCH_COMMAND patch -p1 -i ${CMAKE_SOURCE_DIR}/tools/depends/target/libspdlog/0001-fix_fmt_version.patch + PREFIX ${CORE_BUILD_DIR}/spdlog + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR} + -DCMAKE_CXX_EXTENSIONS=${CMAKE_CXX_EXTENSIONS} + -DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD} + -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} + -DCMAKE_INSTALL_LIBDIR=lib + -DSPDLOG_BUILD_EXAMPLE=OFF + -DSPDLOG_BUILD_TESTS=OFF + -DSPDLOG_BUILD_BENCH=OFF + -DSPDLOG_FMT_EXTERNAL=ON + -DCMAKE_PREFIX_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR} + "${EXTRA_ARGS}" + BUILD_BYPRODUCTS ${SPDLOG_LIBRARY}) + set_target_properties(spdlog PROPERTIES FOLDER "External Projects") + + if(ENABLE_INTERNAL_FMT) + add_dependencies(spdlog fmt) + endif() +else() + find_package(spdlog 1.5.0 CONFIG REQUIRED QUIET) + + if(PKG_CONFIG_FOUND) + pkg_check_modules(PC_SPDLOG spdlog QUIET) + set(SPDLOG_VERSION ${PC_SPDLOG_VERSION}) + endif() + + find_path(SPDLOG_INCLUDE_DIR NAMES spdlog/spdlog.h + PATHS ${PC_SPDLOG_INCLUDEDIR}) + + find_library(SPDLOG_LIBRARY_RELEASE NAMES spdlog + PATHS ${PC_SPDLOG_LIBDIR}) + find_library(SPDLOG_LIBRARY_DEBUG NAMES spdlogd + PATHS ${PC_SPDLOG_LIBDIR}) + + include(SelectLibraryConfigurations) + select_library_configurations(SPDLOG) +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Spdlog + REQUIRED_VARS SPDLOG_LIBRARY SPDLOG_INCLUDE_DIR + VERSION_VAR SPDLOG_VERSION) + +if(SPDLOG_FOUND) + set(SPDLOG_LIBRARIES ${SPDLOG_LIBRARY}) + set(SPDLOG_INCLUDE_DIRS ${SPDLOG_INCLUDE_DIR}) + set(SPDLOG_DEFINITIONS -DSPDLOG_FMT_EXTERNAL + -DSPDLOG_DEBUG_ON + -DSPDLOG_NO_ATOMIC_LEVELS + -DSPDLOG_ENABLE_PATTERN_PADDING) + if(WIN32) + list(APPEND SPDLOG_DEFINITIONS -DSPDLOG_WCHAR_FILENAMES + -DSPDLOG_WCHAR_TO_UTF8_SUPPORT) + endif() + + if(NOT TARGET Spdlog::Spdlog) + add_library(Spdlog::Spdlog UNKNOWN IMPORTED) + set_target_properties(Spdlog::Spdlog PROPERTIES + IMPORTED_LOCATION "${SPDLOG_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${SPDLOG_INCLUDE_DIR}" + INTERFACE_COMPILE_DEFINITIONS "${SPDLOG_DEFINITIONS}") + endif() +endif() + +mark_as_advanced(SPDLOG_INCLUDE_DIR SPDLOG_LIBRARY) diff --git a/cmake/modules/FindUdfread.cmake b/cmake/modules/FindUdfread.cmake new file mode 100644 index 0000000..20fb322 --- /dev/null +++ b/cmake/modules/FindUdfread.cmake @@ -0,0 +1,78 @@ +#.rst: +# FindUdfread +# -------- +# Finds the udfread library +# +# This will define the following variables:: +# +# UDFREAD_FOUND - system has udfread +# UDFREAD_INCLUDE_DIRS - the udfread include directory +# UDFREAD_LIBRARIES - the udfread libraries +# UDFREAD_DEFINITIONS - the udfread definitions + +if(PKG_CONFIG_FOUND) + pkg_check_modules(PC_UDFREAD udfread>=1.0.0 QUIET) +endif() + +find_path(UDFREAD_INCLUDE_DIR NAMES udfread/udfread.h + PATHS ${PC_UDFREAD_INCLUDEDIR}) + +find_library(UDFREAD_LIBRARY NAMES udfread libudfread + PATHS ${PC_UDFREAD_LIBDIR}) + +set(UDFREAD_VERSION ${PC_UDFREAD_VERSION}) + +if(ENABLE_INTERNAL_UDFREAD) + include(ExternalProject) + + # Extract version + file(STRINGS ${CMAKE_SOURCE_DIR}/tools/depends/target/libudfread/UDFREAD-VERSION VER) + + string(REGEX MATCH "VERSION=[^ ]*$.*" UDFREAD_VER "${VER}") + list(GET UDFREAD_VER 0 UDFREAD_VER) + string(SUBSTRING "${UDFREAD_VER}" 8 -1 UDFREAD_VER) + + # allow user to override the download URL with a local tarball + # needed for offline build envs + if(UDFREAD_URL) + get_filename_component(UDFREAD_URL "${UDFREAD_URL}" ABSOLUTE) + else() + set(UDFREAD_URL http://mirrors.kodi.tv/build-deps/sources/libudfread-${UDFREAD_VER}.tar.gz) + endif() + + if(VERBOSE) + message(STATUS "UDFREAD_URL: ${UDFREAD_URL}") + endif() + + set(UDFREAD_LIBRARY ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/libudfread.a) + set(UDFREAD_INCLUDE_DIR ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/include) + set(UDFREAD_VERSION ${UDFREAD_VER}) + + externalproject_add(udfread + URL ${UDFREAD_URL} + DOWNLOAD_NAME libudfread-${UDFREAD_VER}.tar.gz + DOWNLOAD_DIR ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/download + PREFIX ${CORE_BUILD_DIR}/libudfread + CONFIGURE_COMMAND autoreconf -vif && + ./configure + --enable-static + --disable-shared + --prefix=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR} + BUILD_BYPRODUCTS ${UDFREAD_LIBRARY} + BUILD_IN_SOURCE 1) + + set_target_properties(udfread PROPERTIES FOLDER "External Projects") +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Udfread + REQUIRED_VARS UDFREAD_LIBRARY UDFREAD_INCLUDE_DIR + VERSION_VAR UDFREAD_VERSION) + +if(UDFREAD_FOUND) + set(UDFREAD_LIBRARIES ${UDFREAD_LIBRARY}) + set(UDFREAD_INCLUDE_DIRS ${UDFREAD_INCLUDE_DIR}) + set(UDFREAD_DEFINITIONS -DHAS_UDFREAD=1) +endif() + +mark_as_advanced(UDFREAD_INCLUDE_DIR UDFREAD_LIBRARY) -- cgit v1.2.3