From 8cdf8dec703d882b46ca50a769fabb95ffc48e2c Mon Sep 17 00:00:00 2001 From: manuel Date: Thu, 24 Nov 2016 21:27:41 +0100 Subject: sync with upstream --- project/cmake/modules/FindASS.cmake | 48 +++- project/cmake/modules/FindAlsa.cmake | 52 +++- project/cmake/modules/FindAvahi.cmake | 71 +++-- project/cmake/modules/FindBluetooth.cmake | 44 ++++ project/cmake/modules/FindBluray.cmake | 39 +-- project/cmake/modules/FindCCache.cmake | 22 +- project/cmake/modules/FindCEC.cmake | 16 +- project/cmake/modules/FindCWiid.cmake | 44 ++++ project/cmake/modules/FindCXX11.cmake | 4 +- project/cmake/modules/FindCdio.cmake | 51 +++- project/cmake/modules/FindCpluff.cmake | 44 ++-- project/cmake/modules/FindCrossGUID.cmake | 39 ++- project/cmake/modules/FindCurl.cmake | 94 +++++-- project/cmake/modules/FindD3DX11Effects.cmake | 25 +- project/cmake/modules/FindDBus.cmake | 52 ++++ project/cmake/modules/FindDbus.cmake | 21 -- project/cmake/modules/FindEMBEDDED.cmake | 3 +- project/cmake/modules/FindFFMPEG.cmake | 26 +- project/cmake/modules/FindFreeType.cmake | 49 +++- project/cmake/modules/FindFribidi.cmake | 48 +++- project/cmake/modules/FindJsonSchemaBuilder.cmake | 2 + project/cmake/modules/FindLibDRM.cmake | 45 ++++ project/cmake/modules/FindLibDvd.cmake | 291 ++++++++++++++------- project/cmake/modules/FindLibSmbClient.cmake | 65 ----- project/cmake/modules/FindLibXml2.cmake | 84 ++++++ project/cmake/modules/FindLzo2.cmake | 45 ++-- project/cmake/modules/FindMicroHttpd.cmake | 125 +++------ project/cmake/modules/FindMySqlClient.cmake | 24 +- project/cmake/modules/FindNFS.cmake | 2 +- project/cmake/modules/FindOpenGLES.cmake | 2 +- project/cmake/modules/FindOpenGl.cmake | 4 +- project/cmake/modules/FindPulseAudio.cmake | 108 ++++---- project/cmake/modules/FindPython.cmake | 51 ++-- project/cmake/modules/FindRTMP.cmake | 21 -- project/cmake/modules/FindSSE.cmake | 238 ++++++++++------- project/cmake/modules/FindSSH.cmake | 52 +++- project/cmake/modules/FindSWIG.cmake | 27 +- project/cmake/modules/FindShairplay.cmake | 4 +- project/cmake/modules/FindSmbClient.cmake | 47 ++++ project/cmake/modules/FindSqlite3.cmake | 49 +++- project/cmake/modules/FindTagLib.cmake | 4 +- project/cmake/modules/FindTinyXML.cmake | 2 +- project/cmake/modules/FindUDEV.cmake | 47 ++++ project/cmake/modules/FindUDev.cmake | 22 -- project/cmake/modules/FindVAAPI.cmake | 18 ++ project/cmake/modules/FindVDPAU.cmake | 17 +- project/cmake/modules/FindX.cmake | 62 ++++- project/cmake/modules/FindXRandR.cmake | 51 +++- project/cmake/modules/FindXSLT.cmake | 50 ++++ project/cmake/modules/FindXslt.cmake | 18 -- project/cmake/modules/FindYajl.cmake | 71 +++-- project/cmake/modules/LDGOLD.cmake | 45 ++++ .../cmake/modules/extra/ECMEnableSanitizers.cmake | 149 +++++++++++ 53 files changed, 1828 insertions(+), 806 deletions(-) create mode 100644 project/cmake/modules/FindBluetooth.cmake create mode 100644 project/cmake/modules/FindCWiid.cmake create mode 100644 project/cmake/modules/FindDBus.cmake delete mode 100644 project/cmake/modules/FindDbus.cmake create mode 100644 project/cmake/modules/FindLibDRM.cmake delete mode 100644 project/cmake/modules/FindLibSmbClient.cmake create mode 100644 project/cmake/modules/FindLibXml2.cmake delete mode 100644 project/cmake/modules/FindRTMP.cmake create mode 100644 project/cmake/modules/FindSmbClient.cmake create mode 100644 project/cmake/modules/FindUDEV.cmake delete mode 100644 project/cmake/modules/FindUDev.cmake create mode 100644 project/cmake/modules/FindXSLT.cmake delete mode 100644 project/cmake/modules/FindXslt.cmake create mode 100644 project/cmake/modules/LDGOLD.cmake create mode 100644 project/cmake/modules/extra/ECMEnableSanitizers.cmake (limited to 'project/cmake/modules') diff --git a/project/cmake/modules/FindASS.cmake b/project/cmake/modules/FindASS.cmake index 5f4b0c7..2d592fa 100644 --- a/project/cmake/modules/FindASS.cmake +++ b/project/cmake/modules/FindASS.cmake @@ -1,18 +1,44 @@ -# - Try to find ASS -# Once done this will define +#.rst: +# FindASS +# ------- +# Finds the ASS library # -# ASS_FOUND - system has libass -# ASS_INCLUDE_DIRS - the libass include directory -# ASS_LIBRARIES - The libass libraries +# This will will define the following variables:: +# +# ASS_FOUND - system has ASS +# ASS_INCLUDE_DIRS - the ASS include directory +# ASS_LIBRARIES - the ASS libraries +# +# and the following imported targets:: +# +# ASS::ASS - The ASS library if(PKG_CONFIG_FOUND) - pkg_check_modules (ASS libass) -else() - find_path(ASS_INCLUDE_DIRS ass/ass.h) - find_library(ASS_LIBRARIES NAMES ass libass) + pkg_check_modules(PC_ASS libass QUIET) endif() +find_path(ASS_INCLUDE_DIR NAMES ass/ass.h + PATHS ${PC_ASS_INCLUDEDIR}) +find_library(ASS_LIBRARY NAMES ass libass + PATHS ${PC_ASS_LIBDIR}) + +set(ASS_VERSION ${PC_ASS_VERSION}) + include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(ASS DEFAULT_MSG ASS_INCLUDE_DIRS ASS_LIBRARIES) +find_package_handle_standard_args(ASS + REQUIRED_VARS ASS_LIBRARY ASS_INCLUDE_DIR + VERSION_VAR ASS_VERSION) + +if(ASS_FOUND) + set(ASS_LIBRARIES ${ASS_LIBRARY}) + set(ASS_INCLUDE_DIRS ${ASS_INCLUDE_DIR}) + + if(NOT TARGET ASS::ASS) + add_library(ASS::ASS UNKNOWN IMPORTED) + set_target_properties(ASS::ASS PROPERTIES + IMPORTED_LOCATION "${ASS_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${ASS_INCLUDE_DIR}") + endif() +endif() -mark_as_advanced(ASS_INCLUDE_DIRS ASS_LIBRARIES) +mark_as_advanced(ASS_INCLUDE_DIR ASS_LIBRARY) diff --git a/project/cmake/modules/FindAlsa.cmake b/project/cmake/modules/FindAlsa.cmake index b15a0cf..a282243 100644 --- a/project/cmake/modules/FindAlsa.cmake +++ b/project/cmake/modules/FindAlsa.cmake @@ -1,20 +1,46 @@ -# - Try to find ALSA -# Once done this will define +#.rst: +# FindAlsa +# -------- +# Finds the Alsa library # -# ALSA_FOUND - system has libALSA -# ALSA_INCLUDE_DIRS - the libALSA include directory -# ALSA_LIBRARIES - The libALSA libraries +# This will will define the following variables:: +# +# ALSA_FOUND - system has Alsa +# ALSA_INCLUDE_DIRS - the Alsa include directory +# ALSA_LIBRARIES - the Alsa libraries +# ALSA_DEFINITIONS - the Alsa compile definitions +# +# and the following imported targets:: +# +# ALSA::ALSA - The Alsa library if(PKG_CONFIG_FOUND) - pkg_check_modules (ALSA alsa) -else() - find_path(ALSA_INCLUDE_DIRS asoundlib.h PATH_SUFFIXES alsa) - find_library(ALSA_LIBRARIES asound) + pkg_check_modules(PC_ALSA alsa QUIET) endif() +find_path(ALSA_INCLUDE_DIR NAMES alsa/asoundlib.h + PATHS ${PC_ALSA_INCLUDEDIR}) +find_library(ALSA_LIBRARY NAMES asound + PATHS ${PC_ALSA_LIBDIR}) + +set(ALSA_VERSION ${PC_ALSA_VERSION}) + include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(Alsa DEFAULT_MSG ALSA_INCLUDE_DIRS ALSA_LIBRARIES) +find_package_handle_standard_args(ALSA + REQUIRED_VARS ALSA_LIBRARY ALSA_INCLUDE_DIR + VERSION_VAR ALSA_VERSION) + +if(ALSA_FOUND) + set(ALSA_INCLUDE_DIRS "") # Don't want these added as 'timer.h' is a dangerous file + set(ALSA_LIBRARIES ${ALSA_LIBRARY}) + set(ALSA_DEFINITIONS -DHAVE_ALSA=1 -DUSE_ALSA=1) + + if(NOT TARGET ALSA::ALSA) + add_library(ALSA::ALSA UNKNOWN IMPORTED) + set_target_properties(ALSA::ALSA PROPERTIES + IMPORTED_LOCATION "${ALSA_LIBRARY}" + INTERFACE_COMPILE_DEFINITIONS "${ALSA_DEFINITIONS}") + endif() +endif() -set(ALSA_INCLUDE_DIRS "") # Dont want these added as 'timer.h' is a dangerous file -mark_as_advanced(ALSA_INCLUDE_DIRS ALSA_LIBRARIES) -list(APPEND ALSA_DEFINITIONS -DHAVE_ALSA=1 -DUSE_ALSA=1) +mark_as_advanced(ALSA_INCLUDE_DIR ALSA_LIBRARY) diff --git a/project/cmake/modules/FindAvahi.cmake b/project/cmake/modules/FindAvahi.cmake index 24bf15c..77c3e4d 100644 --- a/project/cmake/modules/FindAvahi.cmake +++ b/project/cmake/modules/FindAvahi.cmake @@ -1,26 +1,63 @@ -# - Try to find avahi -# Once done this will define +#.rst: +# FindAvahi +# --------- +# Finds the avahi library +# +# This will will define the following variables:: # # AVAHI_FOUND - system has avahi # AVAHI_INCLUDE_DIRS - the avahi include directory -# AVAHI_LIBRARIES - The avahi libraries +# AVAHI_LIBRARIES - the avahi libraries +# AVAHI_DEFINITIONS - the avahi definitions +# +# and the following imported targets:: +# +# Avahi::Avahi - The avahi library if(PKG_CONFIG_FOUND) - pkg_check_modules (AVAHI avahi-client) - list(APPEND AVAHI_INCLUDE_DIRS ${AVAHI_INCLUDEDIR}) -else() - find_path(AVAHI_CLIENT_INCLUDE_DIRS avahi-client/client.h) - find_path(AVAHI_COMMON_INCLUDE_DIRS avahi-common/defs.h) - find_library(AVAHI_COMMON_LIBRARIES avahi-common) - find_library(AVAHI_CLIENT_LIBRARIES avahi-common) - set(AVAHI_INCLUDE_DIRS ${AVAHI_CLIENT_INCLUDE_DIRS} - ${AVAHI_COMMON_INCLUDE_DIRS}) - set(AVAHI_LIBRARIES ${AVAHI_CLIENT_LIBRARIES} - ${AVAHI_COMMON_LIBRARIES}) + pkg_check_modules(PC_AVAHI avahi-client QUIET) endif() +find_path(AVAHI_CLIENT_INCLUDE_DIR NAMES avahi-client/client.h + PATHS ${PC_AVAHI_INCLUDEDIR}) +find_path(AVAHI_COMMON_INCLUDE_DIR NAMES avahi-common/defs.h + PATHS ${PC_AVAHI_INCLUDEDIR}) +find_library(AVAHI_CLIENT_LIBRARY NAMES avahi-client + PATHS ${PC_AVAHI_LIBDIR}) +find_library(AVAHI_COMMON_LIBRARY NAMES avahi-common + PATHS ${PC_AVAHI_LIBDIR}) + +set(AVAHI_VERSION ${PC_AVAHI_VERSION}) + include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(Avahi DEFAULT_MSG AVAHI_INCLUDE_DIRS AVAHI_LIBRARIES) +find_package_handle_standard_args(Avahi + REQUIRED_VARS AVAHI_CLIENT_LIBRARY AVAHI_COMMON_LIBRARY + AVAHI_CLIENT_INCLUDE_DIR AVAHI_COMMON_INCLUDE_DIR + VERSION_VAR AVAHI_VERSION) + +if(AVAHI_FOUND) + set(AVAHI_INCLUDE_DIRS ${AVAHI_CLIENT_INCLUDE_DIR} + ${AVAHI_COMMON_INCLUDE_DIR}) + set(AVAHI_LIBRARIES ${AVAHI_CLIENT_LIBRARY} + ${AVAHI_COMMON_LIBRARY}) + set(AVAHI_DEFINITIONS -DHAVE_LIBAVAHI_CLIENT=1 -DHAVE_LIBAVAHI_COMMON=1) + + if(NOT TARGET Avahi::Avahi) + add_library(Avahi::Avahi UNKNOWN IMPORTED) + set_target_properties(Avahi::Avahi PROPERTIES + IMPORTED_LOCATION "${AVAHI_CLIENT_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${AVAHI_CLIENT_INCLUDE_DIR}" + INTERFACE_COMPILE_DEFINITIONS HAVE_LIBAVAHI_CLIENT=1) + endif() + if(NOT TARGET Avahi::AvahiCommon) + add_library(Avahi::AvahiCommon UNKNOWN IMPORTED) + set_target_properties(Avahi::AvahiCommon PROPERTIES + IMPORTED_LOCATION "${AVAHI_COMMON_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${AVAHI_COMMON_INCLUDE_DIR}" + INTERFACE_COMPILE_DEFINITIONS HAVE_LIBAVAHI_COMMON=1 + INTERFACE_LINK_LIBRARIES Avahi::Avahi) + endif() +endif() -mark_as_advanced(AVAHI_INCLUDE_DIRS AVAHI_LIBRARIES) -list(APPEND AVAHI_DEFINITIONS -DHAVE_LIBAVAHI_COMMON=1 -DHAVE_LIBAVAHI_CLIENT=1) +mark_as_advanced(AVAHI_CLIENT_INCLUDE_DIR AVAHI_COMMON_INCLUDE_DIR + AVAHI_CLIENT_LIBRARY AVAHI_COMMON_LIBRARY) diff --git a/project/cmake/modules/FindBluetooth.cmake b/project/cmake/modules/FindBluetooth.cmake new file mode 100644 index 0000000..538e89c --- /dev/null +++ b/project/cmake/modules/FindBluetooth.cmake @@ -0,0 +1,44 @@ +#.rst: +# FindBluetooth +# --------- +# Finds the Bluetooth library +# +# This will will define the following variables:: +# +# BLUETOOTH_FOUND - system has Bluetooth +# BLUETOOTH_INCLUDE_DIRS - the Bluetooth include directory +# BLUETOOTH_LIBRARIES - the Bluetooth libraries +# +# and the following imported targets:: +# +# Bluetooth::Bluetooth - The Bluetooth library + +if(PKG_CONFIG_FOUND) + pkg_check_modules(PC_BLUETOOTH bluetooth QUIET) +endif() + +find_path(BLUETOOTH_INCLUDE_DIR NAMES bluetooth/bluetooth.h + PATHS ${PC_BLUETOOTH_INCLUDEDIR}) +find_library(BLUETOOTH_LIBRARY NAMES bluetooth + PATHS ${PC_BLUETOOTH_LIBDIR}) + +set(BLUETOOTH_VERSION ${PC_BLUETOOTH_VERSION}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Bluetooth + REQUIRED_VARS BLUETOOTH_LIBRARY BLUETOOTH_INCLUDE_DIR + VERSION_VAR ${BLUETOOTH_VERSION}) + +if(BLUETOOTH_FOUND) + set(BLUETOOTH_INCLUDE_DIRS ${BLUETOOTH_INCLUDE_DIR}) + set(BLUETOOTH_LIBRARIES ${BLUETOOTH_LIBRARY}) + + if(NOT TARGET Bluetooth::Bluetooth) + add_library(Bluetooth::Bluetooth UNKNOWN IMPORTED) + set_target_properties(Bluetooth::Bluetooth PROPERTIES + IMPORTED_LOCATION "${BLUETOOTH_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${BLUETOOTH_INCLUDE_DIR}") + endif() +endif() + +mark_as_advanced(BLUETOOTH_INCLUDE_DIR BLUETOOTH_LIBRARY) diff --git a/project/cmake/modules/FindBluray.cmake b/project/cmake/modules/FindBluray.cmake index 2b0a449..b8422ed 100644 --- a/project/cmake/modules/FindBluray.cmake +++ b/project/cmake/modules/FindBluray.cmake @@ -15,26 +15,27 @@ # Bluray::Bluray - The libblueray library if(PKG_CONFIG_FOUND) - pkg_check_modules(BLURAY libbluray>=0.7.0) - set(BLURAY_VERSION ${PC_BLURAY_VERSION}) + pkg_check_modules(PC_BLURAY libbluray>=0.7.0 QUIET) +endif() + +find_path(BLURAY_INCLUDE_DIR libbluray/bluray.h + PATHS ${PC_BLURAY_INCLUDEDIR}) + +set(BLURAY_VERSION ${PC_BLURAY_VERSION}) + +include(FindPackageHandleStandardArgs) +if(NOT WIN32) + find_library(BLURAY_LIBRARY NAMES bluray + PATHS ${PC_BLURAY_LIBDIR}) + + find_package_handle_standard_args(Bluray + REQUIRED_VARS BLURAY_LIBRARY BLURAY_INCLUDE_DIR + VERSION_VAR BLURAY_VERSION) else() - find_path(BLURAY_INCLUDE_DIR libbluray/bluray.h - PATHS ${PC_BLURAY_INCLUDEDIR}) - - include(FindPackageHandleStandardArgs) - if(NOT WIN32) - find_library(BLURAY_LIBRARY NAMES bluray - PATHS ${PC_BLURAY_LIBDIR}) - - find_package_handle_standard_args(BLURAY - REQUIRED_VARS BLURAY_LIBRARY BLURAY_INCLUDE_DIR - VERSION_VAR BLURAY_VERSION) - else() - # Dynamically loaded DLL - find_package_handle_standard_args(BLURAY - REQUIRED_VARS BLURAY_INCLUDE_DIR - VERSION_VAR BLURAY_VERSION) - endif() + # Dynamically loaded DLL + find_package_handle_standard_args(Bluray + REQUIRED_VARS BLURAY_INCLUDE_DIR + VERSION_VAR BLURAY_VERSION) endif() if(BLURAY_FOUND) diff --git a/project/cmake/modules/FindCCache.cmake b/project/cmake/modules/FindCCache.cmake index 4ad7d07..a7fd29f 100644 --- a/project/cmake/modules/FindCCache.cmake +++ b/project/cmake/modules/FindCCache.cmake @@ -1,6 +1,18 @@ -find_program(CCACHE_FOUND ccache) -if(CCACHE_FOUND) - set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache) - set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache) -endif(CCACHE_FOUND) +#.rst: +# FindCCache +# ---------- +# Finds ccache and sets it up as compiler wrapper. +# This should ideally be called before the call to project(). +# +# See: https://crascit.com/2016/04/09/using-ccache-with-cmake/ + +find_program(CCACHE_PROGRAM ccache) +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(CCACHE REQUIRED_VARS CCACHE_PROGRAM) + +if(CCACHE_FOUND) + # Supports Unix Makefiles and Ninja + set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}") + set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "${CCACHE_PROGRAM}") +endif() diff --git a/project/cmake/modules/FindCEC.cmake b/project/cmake/modules/FindCEC.cmake index 98e900d..bd6fd1d 100644 --- a/project/cmake/modules/FindCEC.cmake +++ b/project/cmake/modules/FindCEC.cmake @@ -15,13 +15,23 @@ # CEC::CEC - The libCEC library if(PKG_CONFIG_FOUND) - pkg_check_modules(PC_CEC libCEC>=3.0.0 QUIET) + pkg_check_modules(PC_CEC libcec QUIET) endif() -find_path(CEC_INCLUDE_DIR libCEC/CEC.h +find_path(CEC_INCLUDE_DIR NAMES libcec/cec.h libCEC/CEC.h PATHS ${PC_CEC_INCLUDEDIR}) -set(CEC_VERSION ${PC_CEC_VERSION}) +if(PC_CEC_VERSION) + set(CEC_VERSION ${PC_CEC_VERSION}) +elseif(CEC_INCLUDE_DIR AND EXISTS "${CEC_INCLUDE_DIR}/libcec/version.h") + file(STRINGS "${CEC_INCLUDE_DIR}/libcec/version.h" cec_version_str REGEX "^[\t ]+LIBCEC_VERSION_TO_UINT\\(.*\\)") + string(REGEX REPLACE "^[\t ]+LIBCEC_VERSION_TO_UINT\\(([0-9]+), ([0-9]+), ([0-9]+)\\)" "\\1.\\2.\\3" CEC_VERSION "${cec_version_str}") + unset(cec_version_str) +endif() + +if(NOT CEC_FIND_VERSION) + set(CEC_FIND_VERSION 4.0.0) +endif() include(FindPackageHandleStandardArgs) if(NOT WIN32) diff --git a/project/cmake/modules/FindCWiid.cmake b/project/cmake/modules/FindCWiid.cmake new file mode 100644 index 0000000..88cfbef --- /dev/null +++ b/project/cmake/modules/FindCWiid.cmake @@ -0,0 +1,44 @@ +#.rst: +# FindCWiid +# --------- +# Finds the CWiid library +# +# This will will define the following variables:: +# +# CWIID_FOUND - system has CWiid +# CWIID_INCLUDE_DIRS - the CWiid include directory +# CWIID_LIBRARIES - the CWiid libraries +# +# and the following imported targets:: +# +# CWiid::CWiid - The CWiid library + +if(PKG_CONFIG_FOUND) + pkg_check_modules(PC_CWIID cwiid QUIET) +endif() + +find_path(CWIID_INCLUDE_DIR NAMES cwiid.h + PATHS ${PC_CWIID_INCLUDEDIR}) +find_library(CWIID_LIBRARY NAMES cwiid + PATHS ${PC_CWIID_LIBDIR}) + +set(CWIID_VERSION ${PC_CWIID_VERSION}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(CWIID + REQUIRED_VARS CWIID_LIBRARY CWIID_INCLUDE_DIR + VERSION_VAR CWIID_VERSION) + +if(CWIID_FOUND) + set(CWIID_INCLUDE_DIRS ${CWIID_INCLUDE_DIR}) + set(CWIID_LIBRARIES ${CWIID_LIBRARY}) + + if(NOT TARGET CWiid::CWiid) + add_library(CWiid::CWiid UNKNOWN IMPORTED) + set_target_properties(CWiid::CWiid PROPERTIES + IMPORTED_LOCATION "${CWIID_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${CWIID_INCLUDE_DIR}") + endif() +endif() + +mark_as_advanced(CWIID_INCLUDE_DIR CWIID_LIBRARY) diff --git a/project/cmake/modules/FindCXX11.cmake b/project/cmake/modules/FindCXX11.cmake index f1b7346..c0b9a52 100644 --- a/project/cmake/modules/FindCXX11.cmake +++ b/project/cmake/modules/FindCXX11.cmake @@ -11,8 +11,8 @@ else() if(CXX_FLAG_CXX0X) add_options (CXX ALL_BUILDS "-std=c++0x") set(CXX_STD11_FLAGS "-std=c++0x") - endif(CXX_FLAG_CXX0X) -endif(CXX_FLAG_CXX11) + endif() +endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(CXX11 DEFAULT_MSG CXX_STD11_FLAGS) diff --git a/project/cmake/modules/FindCdio.cmake b/project/cmake/modules/FindCdio.cmake index 1b6b8cd..aa089c2 100644 --- a/project/cmake/modules/FindCdio.cmake +++ b/project/cmake/modules/FindCdio.cmake @@ -1,20 +1,45 @@ -# - Try to find cdio -# Once done this will define +#.rst: +# FindCdio +# -------- +# Finds the cdio library # -# CDIO_FOUND - system has libcdio -# CDIO_INCLUDE_DIRS - the libcdio include directory -# CDIO_LIBRARIES - The libcdio libraries +# This will will define the following variables:: +# +# 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 (CDIO libcdio libiso9660) - list(APPEND CDIO_INCLUDE_DIRS ${CDIO_libcdio_INCLUDEDIR} ${CDIO_libiso9660_INCLUDEDIR}) -endif() -if(NOT CDIO_FOUND) - find_path(CDIO_INCLUDE_DIRS cdio/cdio.h) - find_library(MODPLUG_LIBRARIES NAMES cdio) + pkg_check_modules(PC_CDIO libcdio libiso9660 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 + PATHS ${CDIO_libcdio_LIBDIR} ${CDIO_libiso9660_LIBDIR}) + +set(CDIO_VERSION ${PC_CDIO_libcdio_VERSION}) + include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(Cdio DEFAULT_MSG CDIO_INCLUDE_DIRS CDIO_LIBRARIES) +find_package_handle_standard_args(CDIO + REQUIRED_VARS CDIO_LIBRARY CDIO_INCLUDE_DIR + VERSION_VAR CDIO_VERSION) + +if(CDIO_FOUND) + set(CDIO_LIBRARIES ${CDIO_LIBRARY}) + set(CDIO_INCLUDE_DIRS ${CDIO_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() +endif() -mark_as_advanced(CDIO_INCLUDE_DIRS CDIO_LIBRARIES) +mark_as_advanced(CDIO_INCLUDE_DIR CDIO_LIBRARY) diff --git a/project/cmake/modules/FindCpluff.cmake b/project/cmake/modules/FindCpluff.cmake index c6693fa..fb2bb25 100644 --- a/project/cmake/modules/FindCpluff.cmake +++ b/project/cmake/modules/FindCpluff.cmake @@ -8,38 +8,46 @@ if(NOT WIN32) string(REPLACE ";" " " defines "${CMAKE_C_FLAGS} ${SYSTEM_DEFINES} -I${EXPAT_INCLUDE_DIR}") - get_filename_component(expat_dir ${EXPAT_LIBRARY} PATH) + get_filename_component(expat_dir ${EXPAT_LIBRARY} DIRECTORY) set(ldflags "-L${expat_dir}") ExternalProject_Add(libcpluff SOURCE_DIR ${CORE_SOURCE_DIR}/lib/cpluff BUILD_IN_SOURCE 1 PREFIX ${CORE_BUILD_DIR}/cpluff - PATCH_COMMAND rm -f config.status - UPDATE_COMMAND PATH=${NATIVEPREFIX}/bin:$ENV{PATH} autoreconf -vif CONFIGURE_COMMAND CC=${CMAKE_C_COMPILER} ${CORE_SOURCE_DIR}/lib/cpluff/configure --disable-nls --enable-static --disable-shared --with-pic --prefix= + --libdir=/lib --host=${ARCH} CFLAGS=${defines} - LDFLAGS=${ldflags} - BUILD_COMMAND make V=1) + LDFLAGS=${ldflags}) + 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(ldflags "${ldflags};-lexpat") core_link_library(${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/cpluff/lib/libcpluff.a system/libcpluff libcpluff extras "${ldflags}") - set(WRAP_FILES ${WRAP_FILES} PARENT_SCOPE) + set(CPLUFF_INCLUDE_DIRS ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/cpluff/include) + set(CPLUFF_FOUND 1) + mark_as_advanced(CPLUFF_INCLUDE_DIRS CPLUFF_FOUND) else() - ExternalProject_Add(libcpluff SOURCE_DIR ${CORE_SOURCE_DIR}/lib/cpluff - PREFIX ${CORE_BUILD_DIR}/cpluff - CONFIGURE_COMMAND "" - # TODO: Building the project directly from lib/cpluff/libcpluff/win32/cpluff.vcxproj - # fails becaue it imports XBMC.defaults.props - BUILD_COMMAND msbuild ${CORE_SOURCE_DIR}/project/VS2010Express/XBMC\ for\ Windows.sln - /t:cpluff /p:Configuration=${CORE_BUILD_CONFIG} - INSTALL_COMMAND "") -endif() + find_path(CPLUFF_INCLUDE_DIR cpluff.h) -set(CPLUFF_INCLUDE_DIRS ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/cpluff/include) -set(CPLUFF_FOUND 1) -mark_as_advanced(CPLUFF_INCLUDE_DIRS CPLUFF_FOUND) + include(FindPackageHandleStandardArgs) + find_package_handle_standard_args(CPLUFF + REQUIRED_VARS CPLUFF_INCLUDE_DIR) + + if(CPLUFF_FOUND) + set(CPLUFF_INCLUDE_DIRS ${CPLUFF_INCLUDE_DIR}) + endif() + mark_as_advanced(CPLUFF_INCLUDE_DIRS CPLUFF_FOUND) + + add_custom_target(libcpluff) +endif() +set_target_properties(libcpluff PROPERTIES FOLDER "External Projects") diff --git a/project/cmake/modules/FindCrossGUID.cmake b/project/cmake/modules/FindCrossGUID.cmake index df40c9e..bcae3d3 100644 --- a/project/cmake/modules/FindCrossGUID.cmake +++ b/project/cmake/modules/FindCrossGUID.cmake @@ -5,8 +5,22 @@ if(ENABLE_INTERNAL_CROSSGUID) list(GET CGUID_VER 0 CGUID_VER) string(SUBSTRING "${CGUID_VER}" 8 -1 CGUID_VER) + # allow user to override the download URL with a local tarball + # needed for offline build envs + if(CROSSGUID_URL) + get_filename_component(CROSSGUID_URL "${CROSSGUID_URL}" ABSOLUTE) + else() + set(CROSSGUID_URL http://mirrors.kodi.tv/build-deps/sources/crossguid-${CGUID_VER}.tar.gz) + endif() + if(VERBOSE) + message(STATUS "CROSSGUID_URL: ${CROSSGUID_URL}") + endif() + + set(CROSSGUID_LIBRARY ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/libcrossguid.a) + set(CROSSGUID_INCLUDE_DIR ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/include) externalproject_add(crossguid - URL http://mirrors.kodi.tv/build-deps/sources/crossguid-${CGUID_VER}.tar.gz + URL ${CROSSGUID_URL} + DOWNLOAD_DIR ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/download PREFIX ${CORE_BUILD_DIR}/crossguid CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} @@ -18,17 +32,19 @@ if(ENABLE_INTERNAL_CROSSGUID) && ${CMAKE_COMMAND} -E copy ${CORE_SOURCE_DIR}/tools/depends/target/crossguid/FindCXX11.cmake - ) - - set(CROSSGUID_FOUND 1) - set(CROSSGUID_LIBRARIES ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/libcrossguid.a) - set(CROSSGUID_INCLUDE_DIRS ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/include) + + BUILD_BYPRODUCTS ${CROSSGUID_LIBRARY}) + set_target_properties(crossguid PROPERTIES FOLDER "External Projects") include(FindPackageHandleStandardArgs) - find_package_handle_standard_args(CROSSGUID DEFAULT_MSG CROSSGUID_INCLUDE_DIRS CROSSGUID_LIBRARIES) - mark_as_advanced(CROSSGUID_INCLUDE_DIRS CROSSGUID_LIBRARIES CROSSGUID_DEFINITIONS CROSSGUID_FOUND) + find_package_handle_standard_args(CrossGuid + REQUIRED_VARS CROSSGUID_LIBRARY CROSSGUID_INCLUDE_DIR + VERSION_VAR CGUID_VER) + + set(CROSSGUID_LIBRARIES ${CROSSGUID_LIBRARY}) + set(CROSSGUID_INCLUDE_DIRS ${CROSSGUID_INCLUDE_DIR}) else() - find_path(CROSSGUID_INCLUDE_DIR guid.h) + find_path(CROSSGUID_INCLUDE_DIR NAMES guid.h) find_library(CROSSGUID_LIBRARY_RELEASE NAMES crossguid) find_library(CROSSGUID_LIBRARY_DEBUG NAMES crossguidd) @@ -37,12 +53,15 @@ else() select_library_configurations(CROSSGUID) include(FindPackageHandleStandardArgs) - find_package_handle_standard_args(CROSSGUID + find_package_handle_standard_args(CrossGuid REQUIRED_VARS CROSSGUID_LIBRARY CROSSGUID_INCLUDE_DIR) if(CROSSGUID_FOUND) set(CROSSGUID_LIBRARIES ${CROSSGUID_LIBRARY}) set(CROSSGUID_INCLUDE_DIRS ${CROSSGUID_INCLUDE_DIR}) + + add_custom_target(crossguid) + set_target_properties(crossguid PROPERTIES FOLDER "External Projects") endif() mark_as_advanced(CROSSGUID_INCLUDE_DIR CROSSGUID_LIBRARY) endif() diff --git a/project/cmake/modules/FindCurl.cmake b/project/cmake/modules/FindCurl.cmake index a2e8862..ed4d81f 100644 --- a/project/cmake/modules/FindCurl.cmake +++ b/project/cmake/modules/FindCurl.cmake @@ -1,37 +1,83 @@ -# - Try to find CURL -# Once done this will define +#.rst: +# FindCurl +# -------- +# Finds the Curl library # -# CURL_FOUND - system has libcurl -# CURL_INCLUDE_DIRS - the libcurl include directory -# CURL_LIBRARIES - The libcurl libraries +# This will will define the following variables:: +# +# CURL_FOUND - system has Curl +# CURL_INCLUDE_DIRS - the Curl include directory +# CURL_LIBRARIES - the Curl libraries +# CURL_DEFINITIONS - the Curl definitions +# +# and the following imported targets:: +# +# Curl::Curl - The Curl library if(PKG_CONFIG_FOUND) - pkg_check_modules (CURL libcurl) - list(APPEND CURL_INCLUDE_DIRS ${CURL_INCLUDEDIR}) -else() - find_path(CURL_INCLUDE_DIRS curl/curl.h) - find_library(CURL_LIBRARIES NAMES curl libcurl) + pkg_check_modules(PC_CURL libcurl QUIET) endif() -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(Curl DEFAULT_MSG CURL_INCLUDE_DIRS CURL_LIBRARIES) -mark_as_advanced(CURL_INCLUDE_DIRS CURL_LIBRARIES) +find_path(CURL_INCLUDE_DIR NAMES curl/curl.h + PATHS ${PC_CURL_INCLUDEDIR}) +find_library(CURL_LIBRARY NAMES curl libcurl + PATHS ${PC_CURL_LIBDIR}) + +set(CURL_VERSION ${PC_CURL_VERSION}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Curl + REQUIRED_VARS CURL_LIBRARY CURL_INCLUDE_DIR + VERSION_VAR CURL_VERSION) if(CURL_FOUND) - if(NOT CURL_LIBRARY_DIRS AND CURL_LIBDIR) - set(CURL_LIBRARY_DIRS ${CURL_LIBDIR}) + set(CURL_INCLUDE_DIRS ${CURL_INCLUDE_DIR}) + set(CURL_LIBRARIES ${CURL_LIBRARY}) + + # Check whether OpenSSL inside libcurl is static. + if(UNIX) + if(NOT DEFINED HAS_CURL_STATIC) + get_filename_component(CURL_LIBRARY_DIR ${CURL_LIBRARY} DIRECTORY) + find_soname(CURL REQUIRED) + + if(APPLE) + set(libchecker nm) + set(searchpattern "T [_]?CRYPTO_set_locking_call") + else() + set(libchecker readelf -s) + set(searchpattern "CRYPTO_set_locking_call") + endif() + execute_process( + COMMAND ${libchecker} ${CURL_LIBRARY_DIR}/${CURL_SONAME} + COMMAND grep -Eq ${searchpattern} + RESULT_VARIABLE HAS_CURL_STATIC) + unset(libchecker) + unset(searchpattern) + if(HAS_CURL_STATIC EQUAL 0) + set(HAS_CURL_STATIC TRUE) + else() + set(HAS_CURL_STATIC FALSE) + endif() + set(HAS_CURL_STATIC ${HAS_CURL_STATIC} CACHE INTERNAL + "OpenSSL is statically linked into Curl") + message(STATUS "OpenSSL is statically linked into Curl: ${HAS_CURL_STATIC}") + endif() endif() - find_soname(CURL) + if(HAS_CURL_STATIC) + set(CURL_DEFINITIONS -DHAS_CURL_STATIC=1) + endif() - if(EXISTS "${CURL_LIBRARY_DIRS}/${CURL_SONAME}") - execute_process(COMMAND readelf -s ${CURL_LIBRARY_DIRS}/${CURL_SONAME} COMMAND grep CRYPTO_set_locking_call OUTPUT_VARIABLE HAS_CURL_STATIC) - else() - message(FATAL_ERROR "curl library not found") + if(NOT TARGET Curl::Curl) + add_library(Curl::Curl UNKNOWN IMPORTED) + set_target_properties(Curl::Curl PROPERTIES + IMPORTED_LOCATION "${CURL_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${CURL_INCLUDE_DIR}") + if(HAS_CURL_STATIC) + set_target_properties(Curl::Curl PROPERTIES + INTERFACE_COMPILE_DEFINITIONS HAS_CURL_STATIC=1) + endif() endif() endif() -if(HAS_CURL_STATIC) - mark_as_advanced(HAS_CURL_STATIC) - list(APPEND CURL_DEFINITIONS -DHAS_CURL_STATIC=1) -endif() +mark_as_advanced(CURL_INCLUDE_DIR CURL_LIBRARY) diff --git a/project/cmake/modules/FindD3DX11Effects.cmake b/project/cmake/modules/FindD3DX11Effects.cmake index 9de8c2b..d7468e1 100644 --- a/project/cmake/modules/FindD3DX11Effects.cmake +++ b/project/cmake/modules/FindD3DX11Effects.cmake @@ -1,28 +1,8 @@ -# - Builds D3DX11Effects as external project +# - Finds D3DX11 dependencies # Once done this will define # -# D3DX11EFFECTS_FOUND - system has D3DX11Effects -# D3DX11EFFECTS_INCLUDE_DIRS - the D3DX11Effects include directories # D3DCOMPILER_DLL - Path to the Direct3D Compiler - -include(ExternalProject) -ExternalProject_Add(d3dx11effects - SOURCE_DIR ${CORE_SOURCE_DIR}/lib/win32/Effects11 - PREFIX ${CORE_BUILD_DIR}/Effects11 - CONFIGURE_COMMAND "" - BUILD_COMMAND msbuild ${CORE_SOURCE_DIR}/lib/win32/Effects11/Effects11_2013.sln - /t:Effects11 /p:Configuration=${CORE_BUILD_CONFIG} - INSTALL_COMMAND "") - -set(D3DX11EFFECTS_FOUND 1) -set(D3DX11EFFECTS_INCLUDE_DIRS ${CORE_SOURCE_DIR}/lib/win32/Effects11/inc) - -set(D3DX11EFFECTS_LIBRARY_RELEASE ${CORE_SOURCE_DIR}/lib/win32/Effects11/libs/Effects11/Release/Effects11.lib) -set(D3DX11EFFECTS_LIBRARY_DEBUG ${CORE_SOURCE_DIR}/lib/win32/Effects11/libs/Effects11/Debug/Effects11.lib) -include(SelectLibraryConfigurations) -select_library_configurations(D3DX11EFFECTS) - -mark_as_advanced(D3DX11EFFECTS_FOUND) +# FXC - Path to the DirectX Effects Compiler (FXC) find_file(D3DCOMPILER_DLL NAMES d3dcompiler_47.dll d3dcompiler_46.dll @@ -36,6 +16,7 @@ if(NOT D3DCOMPILER_DLL) message(WARNING "Could NOT find Direct3D Compiler") endif() mark_as_advanced(D3DCOMPILER_DLL) +copy_file_to_buildtree(${D3DCOMPILER_DLL} DIRECTORY .) find_program(FXC fxc PATHS diff --git a/project/cmake/modules/FindDBus.cmake b/project/cmake/modules/FindDBus.cmake new file mode 100644 index 0000000..2d64af4 --- /dev/null +++ b/project/cmake/modules/FindDBus.cmake @@ -0,0 +1,52 @@ +#.rst: +# FindDBUS +# ------- +# Finds the DBUS library +# +# This will will define the following variables:: +# +# DBUS_FOUND - system has DBUS +# DBUS_INCLUDE_DIRS - the DBUS include directory +# DBUS_LIBRARIES - the DBUS libraries +# DBUS_DEFINITIONS - the DBUS definitions +# +# and the following imported targets:: +# +# DBus::DBus - The DBUS library + +if(PKG_CONFIG_FOUND) + pkg_check_modules(PC_DBUS dbus-1 QUIET) +endif() + +find_path(DBUS_INCLUDE_DIR NAMES dbus/dbus.h + PATH_SUFFIXES dbus-1.0 + PATHS ${PC_DBUS_INCLUDE_DIR}) +find_path(DBUS_ARCH_INCLUDE_DIR NAMES dbus/dbus-arch-deps.h + PATH_SUFFIXES dbus-1.0/include + PATHS ${PC_DBUS_LIBDIR} + /usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}) +find_library(DBUS_LIBRARY NAMES dbus-1 + PATHS ${PC_DBUS_LIBDIR}) + +set(DBUS_VERSION ${PC_DBUS_VERSION}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(DBus + REQUIRED_VARS DBUS_LIBRARY DBUS_INCLUDE_DIR DBUS_ARCH_INCLUDE_DIR + VERSION_VAR DBUS_VERSION) + +if(DBUS_FOUND) + set(DBUS_LIBRARIES ${DBUS_LIBRARY}) + set(DBUS_INCLUDE_DIRS ${DBUS_INCLUDE_DIR} ${DBUS_ARCH_INCLUDE_DIR}) + set(DBUS_DEFINITIONS -DHAVE_DBUS=1) + + if(NOT TARGET DBus::DBus) + add_library(DBus::DBus UNKNOWN IMPORTED) + set_target_properties(DBus::DBus PROPERTIES + IMPORTED_LOCATION "${DBUS_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${DBUS_INCLUDE_DIR}" + INTERFACE_COMPILE_DEFINITIONS HAVE_DBUS=1) + endif() +endif() + +mark_as_advanced(DBUS_INCLUDE_DIR DBUS_LIBRARY) diff --git a/project/cmake/modules/FindDbus.cmake b/project/cmake/modules/FindDbus.cmake deleted file mode 100644 index cdc3f52..0000000 --- a/project/cmake/modules/FindDbus.cmake +++ /dev/null @@ -1,21 +0,0 @@ -# - Try to find dbus -# Once done this will define -# -# DBUS_FOUND - system has libdbus -# DBUS_INCLUDE_DIRS - the libdbus include directory -# DBUS_LIBRARIES - The libdbus libraries - -if(PKG_CONFIG_FOUND) - pkg_check_modules (DBUS dbus-1) -endif() - -if(DBUS_FOUND) - find_path(DBUS_INCLUDE_DIRS dbus/dbus.h PATH_SUFFIXES dbus-1.0) - find_library(DBUS_LIBRARIES dbus-1.0) -endif() - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(Dbus DEFAULT_MSG DBUS_INCLUDE_DIRS DBUS_LIBRARIES) - -list(APPEND DBUS_DEFINITIONS -DHAVE_DBUS=1) -mark_as_advanced(DBUS_INCLUDE_DIRS DBUS_LIBRARIES DBUS_DEFINITIONS) diff --git a/project/cmake/modules/FindEMBEDDED.cmake b/project/cmake/modules/FindEMBEDDED.cmake index bc1b456..aa938c5 100644 --- a/project/cmake/modules/FindEMBEDDED.cmake +++ b/project/cmake/modules/FindEMBEDDED.cmake @@ -11,7 +11,6 @@ endif() string(REGEX MATCH "^arm" TARGET_ARCH_ARM "${CMAKE_SYSTEM_PROCESSOR}") if(NOT CMAKE_CROSSCOMPILING AND NOT TARGET_ARCH_ARM) return() -endif(NOT CMAKE_CROSSCOMPILING AND NOT TARGET_ARCH_ARM) +endif() find_path(EMBEDDED_FOUND NAMES include/linux/imxfb.h include/bcm_host.h PATHS /opt/vc) - diff --git a/project/cmake/modules/FindFFMPEG.cmake b/project/cmake/modules/FindFFMPEG.cmake index 7f8e37f..a9f88fb 100644 --- a/project/cmake/modules/FindFFMPEG.cmake +++ b/project/cmake/modules/FindFFMPEG.cmake @@ -12,6 +12,18 @@ if(ENABLE_INTERNAL_FFMPEG) if(FFMPEG_PATH) message(WARNING "Internal FFmpeg enabled, but FFMPEG_PATH given, ignoring") endif() + + # allow user to override the download URL with a local tarball + # needed for offline build envs + if(FFMPEG_URL) + get_filename_component(FFMPEG_URL "${FFMPEG_URL}" ABSOLUTE) + else() + set(FFMPEG_URL ${FFMPEG_BASE_URL}/${FFMPEG_VER}.tar.gz) + endif() + if(VERBOSE) + message(STATUS "FFMPEG_URL: ${FFMPEG_URL}") + endif() + if(CMAKE_CROSSCOMPILING) set(CROSS_ARGS -DDEPENDS_PATH=${DEPENDS_PATH} -DPKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE} @@ -28,7 +40,9 @@ if(ENABLE_INTERNAL_FFMPEG) endif() externalproject_add(ffmpeg - URL ${FFMPEG_BASE_URL}/${FFMPEG_VER}.tar.gz + URL ${FFMPEG_URL} + DOWNLOAD_NAME ffmpeg-${FFMPEG_VER}.tar.gz + DOWNLOAD_DIR ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/download PREFIX ${CORE_BUILD_DIR}/ffmpeg CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} @@ -44,7 +58,7 @@ if(ENABLE_INTERNAL_FFMPEG) file(WRITE ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/ffmpeg/ffmpeg-link-wrapper "#!/bin/bash -if [[ $@ == *${APP_NAME_LC}.bin* || $@ == *${APP_NAME_LC}-test* ]] +if [[ $@ == *${APP_NAME_LC}.bin* || $@ == *${APP_NAME_LC}.so* || $@ == *${APP_NAME_LC}-test* ]] then avformat=`PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig ${PKG_CONFIG_EXECUTABLE} --libs --static libavcodec` avcodec=`PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig ${PKG_CONFIG_EXECUTABLE} --libs --static libavformat` @@ -53,8 +67,7 @@ then swscale=`PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig ${PKG_CONFIG_EXECUTABLE} --libs --static libswscale` swresample=`PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig ${PKG_CONFIG_EXECUTABLE} --libs --static libswresample` gnutls=`PKG_CONFIG_PATH=${DEPENDS_PATH}/lib/pkgconfig/ ${PKG_CONFIG_EXECUTABLE} --libs-only-l --static --silence-errors gnutls` - vorbisenc=`PKG_CONFIG_PATH=${DEPENDS_PATH}/lib/pkgconfig/ ${PKG_CONFIG_EXECUTABLE} --libs-only-l --static --silence-errors vorbisenc` - $@ $avcodec $avformat $avcodec $avfilter $swscale $swresample -lpostproc $gnutls $vorbisenc + $@ $avcodec $avformat $avcodec $avfilter $swscale $swresample -lpostproc $gnutls else $@ fi") @@ -62,6 +75,7 @@ fi") DESTINATION ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR} FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE) set(FFMPEG_LINK_EXECUTABLE "${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/ffmpeg-link-wrapper -o " PARENT_SCOPE) + set(FFMPEG_CREATE_SHARED_LIBRARY "${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/ffmpeg-link-wrapper -o " PARENT_SCOPE) set(FFMPEG_INCLUDE_DIRS ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/include) list(APPEND FFMPEG_DEFINITIONS -DFFMPEG_VER_SHA=\"${FFMPEG_VER}\" -DUSE_STATIC_FFMPEG=1) @@ -72,10 +86,11 @@ else() endif() set(FFMPEG_PKGS libavcodec>=56.26.100 libavfilter>=5.11.100 libavformat>=56.25.101 libavutil>=54.20.100 libswscale>=3.1.101 libswresample>=1.1.100 libpostproc>=53.3.100) - if(PKG_CONFIG_FOUND) + if(PKG_CONFIG_FOUND AND NOT WIN32) pkg_check_modules (FFMPEG ${FFMPEG_PKGS}) string(REGEX REPLACE "framework;" "framework " FFMPEG_LDFLAGS "${FFMPEG_LDFLAGS}") set(FFMPEG_LIBRARIES ${FFMPEG_LDFLAGS}) + add_custom_target(ffmpeg) else() find_path(FFMPEG_INCLUDE_DIRS libavcodec/avcodec.h PATH_SUFFIXES ffmpeg) find_library(FFMPEG_LIBAVCODEC NAMES avcodec libavcodec PATH_SUFFIXES ffmpeg/libavcodec) @@ -94,5 +109,6 @@ else() set(FFMPEG_FOUND 1) list(APPEND FFMPEG_DEFINITIONS -DFFMPEG_VER_SHA=\"${FFMPEG_VER}\") endif() +set_target_properties(ffmpeg PROPERTIES FOLDER "External Projects") mark_as_advanced(FFMPEG_INCLUDE_DIRS FFMPEG_LIBRARIES FFMPEG_DEFINITIONS FFMPEG_FOUND) diff --git a/project/cmake/modules/FindFreeType.cmake b/project/cmake/modules/FindFreeType.cmake index a1e69ab..fb4c668 100644 --- a/project/cmake/modules/FindFreeType.cmake +++ b/project/cmake/modules/FindFreeType.cmake @@ -1,18 +1,45 @@ -# - Try to find freetype -# Once done this will define +#.rst: +# FindFreetype +# ------------ +# Finds the FreeType library # -# FREETYPE_FOUND - system has freetype -# FREETYPE_INCLUDE_DIRS - the freetype include directory -# FREETYPE_LIBRARIES - The freetype libraries +# This will will define the following variables:: +# +# FREETYPE_FOUND - system has FreeType +# FREETYPE_INCLUDE_DIRS - the FreeType include directory +# FREETYPE_LIBRARIES - the FreeType libraries +# +# and the following imported targets:: +# +# FreeType::FreeType - The FreeType library if(PKG_CONFIG_FOUND) - pkg_check_modules (FREETYPE freetype2) -else() - find_path(FREETYPE_INCLUDE_DIRS freetype/freetype.h) - find_library(FREETYPE_LIBRARIES NAMES freetype freetype246MT) + pkg_check_modules(PC_FREETYPE freetype2 QUIET) endif() +find_path(FREETYPE_INCLUDE_DIR NAMES freetype/freetype.h freetype.h + PATHS ${PC_FREETYPE_INCLUDEDIR} + ${PC_FREETYPE_INCLUDE_DIRS}) +find_library(FREETYPE_LIBRARY NAMES freetype freetype246MT + PATHS ${PC_FREETYPE_LIBDIR}) + +set(FREETYPE_VERSION ${PC_FREETYPE_VERSION}) + include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(FreeType DEFAULT_MSG FREETYPE_INCLUDE_DIRS FREETYPE_LIBRARIES) +find_package_handle_standard_args(FreeType + REQUIRED_VARS FREETYPE_LIBRARY FREETYPE_INCLUDE_DIR + VERSION_VAR FREETYPE_VERSION) + +if(FREETYPE_FOUND) + set(FREETYPE_LIBRARIES ${FREETYPE_LIBRARY}) + set(FREETYPE_INCLUDE_DIRS ${FREETYPE_INCLUDE_DIR}) + + if(NOT TARGET FreeType::FreeType) + add_library(FreeType::FreeType UNKNOWN IMPORTED) + set_target_properties(FreeType::FreeType PROPERTIES + IMPORTED_LOCATION "${FREETYPE_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${FREETYPE_INCLUDE_DIR}") + endif() +endif() -mark_as_advanced(FREETYPE_INCLUDE_DIRS FREETYPE_LIBRARIES) +mark_as_advanced(FREETYPE_INCLUDE_DIR FREETYPE_LIBRARY) diff --git a/project/cmake/modules/FindFribidi.cmake b/project/cmake/modules/FindFribidi.cmake index 65a8d8b..03c2f53 100644 --- a/project/cmake/modules/FindFribidi.cmake +++ b/project/cmake/modules/FindFribidi.cmake @@ -1,18 +1,44 @@ -# - Try to find Fribidi -# Once done this will define +#.rst: +# FindFribidi +# ----------- +# Finds the GNU FriBidi library # -# FRIBIDI_FOUND - system has fribidi -# FRIBIDI_INCLUDE_DIRS - the fribidi include directory -# FRIBIDI_LIBRARIES - The fribidi libraries +# This will will define the following variables:: +# +# FRIBIDI_FOUND - system has FriBidi +# FRIBIDI_INCLUDE_DIRS - the FriBidi include directory +# FRIBIDI_LIBRARIES - the FriBidi libraries +# +# and the following imported targets:: +# +# FriBidi::FriBidi - The FriBidi library if(PKG_CONFIG_FOUND) - pkg_check_modules (FRIBIDI fribidi) -else() - find_path(FRIBIDI_INCLUDE_DIRS fribidi/fribidi.h) - find_library(FRIBIDI_LIBRARIES NAMES fribidi libfribidi) + pkg_check_modules(PC_FRIBIDI fribidi QUIET) endif() +find_path(FRIBIDI_INCLUDE_DIR NAMES fribidi/fribidi.h + PATHS ${PC_FRIBIDI_INCLUDEDIR}) +find_library(FRIBIDI_LIBRARY NAMES fribidi libfribidi + PATHS ${PC_FRIBIDI_LIBDIR}) + +set(FRIBIDI_VERSION ${PC_FRIBIDI_VERSION}) + include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(Fribidi DEFAULT_MSG FRIBIDI_INCLUDE_DIRS FRIBIDI_LIBRARIES) +find_package_handle_standard_args(FriBidi + REQUIRED_VARS FRIBIDI_LIBRARY FRIBIDI_INCLUDE_DIR + VERSION_VAR FRIBIDI_VERSION) + +if(FRIBIDI_FOUND) + set(FRIBIDI_LIBRARIES ${FRIBIDI_LIBRARY}) + set(FRIBIDI_INCLUDE_DIRS ${FRIBIDI_INCLUDE_DIR}) + + if(NOT TARGET FriBidi::FriBidi) + add_library(FriBidi::FriBidi UNKNOWN IMPORTED) + set_target_properties(FriBidi::FriBidi PROPERTIES + IMPORTED_LOCATION "${FRIBIDI_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${FRIBIDI_INCLUDE_DIR}") + endif() +endif() -mark_as_advanced(FRIBIDI_INCLUDE_DIRS FRIBIDI_LIBRARIES) +mark_as_advanced(FRIBIDI_INCLUDE_DIR FRIBIDI_LIBRARY) diff --git a/project/cmake/modules/FindJsonSchemaBuilder.cmake b/project/cmake/modules/FindJsonSchemaBuilder.cmake index 78e8d0a..ecff1e4 100644 --- a/project/cmake/modules/FindJsonSchemaBuilder.cmake +++ b/project/cmake/modules/FindJsonSchemaBuilder.cmake @@ -12,8 +12,10 @@ if(NOT TARGET JsonSchemaBuilder::JsonSchemaBuilder) add_executable(JsonSchemaBuilder::JsonSchemaBuilder IMPORTED GLOBAL) set_target_properties(JsonSchemaBuilder::JsonSchemaBuilder PROPERTIES IMPORTED_LOCATION "${NATIVEPREFIX}/bin/JsonSchemaBuilder") + set_target_properties(JsonSchemaBuilder::JsonSchemaBuilder PROPERTIES FOLDER Tools) else() add_subdirectory(${CORE_SOURCE_DIR}/tools/depends/native/JsonSchemaBuilder build/jsonschemabuilder) add_executable(JsonSchemaBuilder::JsonSchemaBuilder ALIAS JsonSchemaBuilder) + set_target_properties(JsonSchemaBuilder PROPERTIES FOLDER Tools) endif() endif() diff --git a/project/cmake/modules/FindLibDRM.cmake b/project/cmake/modules/FindLibDRM.cmake new file mode 100644 index 0000000..35d632e --- /dev/null +++ b/project/cmake/modules/FindLibDRM.cmake @@ -0,0 +1,45 @@ +#.rst: +# FindLibDRM +# ---------- +# Finds the LibDRM library +# +# This will will define the following variables:: +# +# LIBDRM_FOUND - system has LibDRM +# LIBDRM_INCLUDE_DIRS - the LibDRM include directory +# LIBDRM_LIBRARIES - the LibDRM libraries +# +# and the following imported targets:: +# +# LibDRM::LibDRM - The LibDRM library + +if(PKG_CONFIG_FOUND) + pkg_check_modules(PC_LIBDRM libdrm QUIET) +endif() + +find_path(LIBDRM_INCLUDE_DIR NAMES drm.h + PATH_SUFFIXES libdrm drm + PATHS ${PC_LIBDRM_INCLUDEDIR}) +find_library(LIBDRM_LIBRARY NAMES drm + PATHS ${PC_LIBDRM_LIBDIR}) + +set(LIBDRM_VERSION ${PC_LIBDRM_VERSION}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(LibDRM + REQUIRED_VARS LIBDRM_LIBRARY LIBDRM_INCLUDE_DIR + VERSION_VAR LIBDRM_VERSION) + +if(LIBDRM_FOUND) + set(LIBDRM_LIBRARIES ${LIBDRM_LIBRARY}) + set(LIBDRM_INCLUDE_DIRS ${LIBDRM_INCLUDE_DIR}) + + if(NOT TARGET LIBDRM::LIBDRM) + add_library(LIBDRM::LIBDRM UNKNOWN IMPORTED) + set_target_properties(LIBDRM::LIBDRM PROPERTIES + IMPORTED_LOCATION "${LIBDRM_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${LIBDRM_INCLUDE_DIR}") + endif() +endif() + +mark_as_advanced(LIBDRM_INCLUDE_DIR LIBDRM_LIBRARY) diff --git a/project/cmake/modules/FindLibDvd.cmake b/project/cmake/modules/FindLibDvd.cmake index f281773..fa644d6 100644 --- a/project/cmake/modules/FindLibDvd.cmake +++ b/project/cmake/modules/FindLibDvd.cmake @@ -1,106 +1,206 @@ -set(dvdlibs libdvdread libdvdnav) -if(ENABLE_DVDCSS) - list(APPEND dvdlibs libdvdcss) -endif() - if(NOT WIN32) - foreach(dvdlib ${dvdlibs}) - file(GLOB VERSION_FILE ${CORE_SOURCE_DIR}/tools/depends/target/${dvdlib}/DVD*-VERSION) - file(STRINGS ${VERSION_FILE} VER) - string(REGEX MATCH "VERSION=[^ ]*$.*" ${dvdlib}_VER "${VER}") - list(GET ${dvdlib}_VER 0 ${dvdlib}_VER) - string(SUBSTRING "${${dvdlib}_VER}" 8 -1 ${dvdlib}_VER) - string(REGEX MATCH "BASE_URL=([^ ]*)" ${dvdlib}_BASE_URL "${VER}") - list(GET ${dvdlib}_BASE_URL 0 ${dvdlib}_BASE_URL) - string(SUBSTRING "${${dvdlib}_BASE_URL}" 9 -1 ${dvdlib}_BASE_URL) - endforeach() - - set(DVDREAD_CFLAGS "${DVDREAD_CFLAGS} -I${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd/include") if(CMAKE_CROSSCOMPILING) - set(EXTRA_FLAGS "CC=${CMAKE_C_COMPILER}") - endif() + set(_dvdlibs dvdread dvdnav) + set(_handlevars LIBDVD_INCLUDE_DIRS DVDREAD_LIBRARY DVDNAV_LIBRARY) + if(ENABLE_DVDCSS) + list(APPEND _dvdlibs libdvdcss) + list(APPEND _handlevars DVDCSS_LIBRARY) + endif() + + if(PKG_CONFIG_FOUND) + pkg_check_modules(PC_DVD ${_dvdlibs} QUIET) + endif() + + find_path(LIBDVD_INCLUDE_DIRS dvdnav/dvdnav.h PATHS ${PC_DVD_INCLUDE_DIRS}) + find_library(DVDREAD_LIBRARY NAMES dvdread libdvdread PATHS ${PC_DVD_dvdread_LIBDIR}) + find_library(DVDNAV_LIBRARY NAMES dvdnav libdvdnav PATHS ${PC_DVD_dvdnav_LIBDIR}) + if(ENABLE_DVDCSS) + find_library(DVDCSS_LIBRARY NAMES dvdcss libdvdcss PATHS ${PC_DVD_libdvdcss_LIBDIR}) + endif() + + include(FindPackageHandleStandardArgs) + find_package_handle_standard_args(LIBDVD REQUIRED_VARS ${_handlevars}) + if(LIBDVD_FOUND) + add_library(dvdnav UNKNOWN IMPORTED) + set_target_properties(dvdnav PROPERTIES + FOLDER "External Projects" + IMPORTED_LOCATION "${DVDNAV_LIBRARY}") + + add_library(dvdread UNKNOWN IMPORTED) + set_target_properties(dvdread PROPERTIES + FOLDER "External Projects" + IMPORTED_LOCATION "${DVDREAD_LIBRARY}") + add_library(dvdcss UNKNOWN IMPORTED) + set_target_properties(dvdcss PROPERTIES + FOLDER "External Projects" + IMPORTED_LOCATION "${DVDCSS_LIBRARY}") - if(APPLE) + set(_linklibs ${DVDREAD_LIBRARY}) + if(ENABLE_DVDCSS) + list(APPEND _linklibs ${DVDCSS_LIBRARY}) + endif() + core_link_library(${DVDNAV_LIBRARY} system/players/VideoPlayer/libdvdnav dvdnav archives "${_linklibs}") + set(LIBDVD_LIBRARIES ${DVDNAV_LIBRARY}) + mark_as_advanced(LIBDVD_INCLUDE_DIRS LIBDVD_LIBRARIES) + endif() + else() + set(dvdlibs libdvdread libdvdnav) + if(ENABLE_DVDCSS) + list(APPEND dvdlibs libdvdcss) + endif() + foreach(dvdlib ${dvdlibs}) + file(GLOB VERSION_FILE ${CORE_SOURCE_DIR}/tools/depends/target/${dvdlib}/DVD*-VERSION) + file(STRINGS ${VERSION_FILE} VER) + string(REGEX MATCH "VERSION=[^ ]*$.*" ${dvdlib}_VER "${VER}") + list(GET ${dvdlib}_VER 0 ${dvdlib}_VER) + string(SUBSTRING "${${dvdlib}_VER}" 8 -1 ${dvdlib}_VER) + string(REGEX MATCH "BASE_URL=([^ ]*)" ${dvdlib}_BASE_URL "${VER}") + list(GET ${dvdlib}_BASE_URL 0 ${dvdlib}_BASE_URL) + string(SUBSTRING "${${dvdlib}_BASE_URL}" 9 -1 ${dvdlib}_BASE_URL) + string(TOUPPER ${dvdlib} DVDLIB) + + # allow user to override the download URL with a local tarball + # needed for offline build envs + # allow upper and lowercase var name + if(${dvdlib}_URL) + set(${DVDLIB}_URL ${${dvdlib}_URL}) + endif() + if(${DVDLIB}_URL) + get_filename_component(${DVDLIB}_URL "${${DVDLIB}_URL}" ABSOLUTE) + else() + set(${DVDLIB}_URL ${${dvdlib}_BASE_URL}/archive/${${dvdlib}_VER}.tar.gz) + endif() + if(VERBOSE) + message(STATUS "${DVDLIB}_URL: ${${DVDLIB}_URL}") + endif() + endforeach() + + set(DVDREAD_CFLAGS "${DVDREAD_CFLAGS} -I${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd/include") + if(CMAKE_CROSSCOMPILING) + set(EXTRA_FLAGS "CC=${CMAKE_C_COMPILER}") + endif() + + if(APPLE) set(CMAKE_LD_FLAGS "-framework IOKit -framework CoreFoundation") - endif() + endif() + + set(HOST_ARCH ${ARCH}) + if(CORE_SYSTEM_NAME STREQUAL android) + if(ARCH STREQUAL arm) + set(HOST_ARCH arm-linux-androideabi) + elseif(ARCH STREQUAL aarch64) + set(HOST_ARCH aarch64-linux-android) + elseif(ARCH STREQUAL i486-linux) + set(HOST_ARCH i686-linux-android) + endif() + endif() - if(ENABLE_DVDCSS) - ExternalProject_ADD(dvdcss URL ${libdvdcss_BASE_URL}/archive/${libdvdcss_VER}.tar.gz + if(ENABLE_DVDCSS) + set(DVDCSS_LIBRARY ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd/lib/libdvdcss.a) + ExternalProject_Add(dvdcss URL ${LIBDVDCSS_URL} + DOWNLOAD_NAME libdvdcss-${libdvdcss_VER}.tar.gz + DOWNLOAD_DIR ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/download + PREFIX ${CORE_BUILD_DIR}/libdvd + CONFIGURE_COMMAND ac_cv_path_GIT= /configure + --target=${HOST_ARCH} + --host=${HOST_ARCH} + --disable-doc + --enable-static + --disable-shared + --with-pic + --prefix= + --libdir=/lib + "${EXTRA_FLAGS}" + "CFLAGS=${CMAKE_C_FLAGS} ${DVDREAD_CFLAGS}" + "LDFLAGS=${CMAKE_LD_FLAGS}" + BUILD_BYPRODUCTS ${DVDCSS_LIBRARY}) + ExternalProject_Add_Step(dvdcss autoreconf + DEPENDEES download update patch + DEPENDERS configure + COMMAND PATH=${NATIVEPREFIX}/bin:$ENV{PATH} autoreconf -vif + WORKING_DIRECTORY ) + + set_target_properties(dvdcss PROPERTIES FOLDER "External Projects") + endif() + + set(DVDREAD_CFLAGS "-D_XBMC") + if(ENABLE_DVDCSS) + set(DVDREAD_CFLAGS "${DVDREAD_CFLAGS} -DHAVE_DVDCSS_DVDCSS_H -I${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd/include") + endif() + + set(DVDREAD_LIBRARY ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd/lib/libdvdread.a) + ExternalProject_Add(dvdread URL ${LIBDVDREAD_URL} + DOWNLOAD_NAME libdvdread-${libdvdread_VER}.tar.gz + DOWNLOAD_DIR ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/download + PREFIX ${CORE_BUILD_DIR}/libdvd + CONFIGURE_COMMAND ac_cv_path_GIT= /configure + --target=${HOST_ARCH} + --host=${HOST_ARCH} + --enable-static + --disable-shared + --with-pic + --prefix= + --libdir=/lib + "${EXTRA_FLAGS}" + "CFLAGS=${CMAKE_C_FLAGS} ${DVDREAD_CFLAGS}" + "LDFLAGS=${CMAKE_LD_FLAGS}" + BUILD_BYPRODUCTS ${DVDREAD_LIBRARY}) + ExternalProject_Add_Step(dvdread autoreconf + DEPENDEES download update patch + DEPENDERS configure + COMMAND PATH=${NATIVEPREFIX}/bin:$ENV{PATH} autoreconf -vif + WORKING_DIRECTORY ) + if(ENABLE_DVDCSS) + add_dependencies(dvdread dvdcss) + endif() + + set_target_properties(dvdread PROPERTIES FOLDER "External Projects") + + if(ENABLE_DVDCSS) + set(DVDNAV_LIBS -ldvdcss) + endif() + + set(DVDNAV_LIBRARY ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd/lib/libdvdnav.a) + ExternalProject_Add(dvdnav URL ${LIBDVDNAV_URL} + DOWNLOAD_NAME libdvdnav-${libdvdnav_VER}.tar.gz + DOWNLOAD_DIR ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/download PREFIX ${CORE_BUILD_DIR}/libdvd - UPDATE_COMMAND PATH=${NATIVEPREFIX}/bin:$ENV{PATH} autoreconf -vif CONFIGURE_COMMAND ac_cv_path_GIT= /configure - --target=${ARCH} - --host=${ARCH} - --disable-doc - --enable-static - --disable-shared - --with-pic - --prefix= - "${EXTRA_FLAGS}" - "CFLAGS=${CMAKE_C_FLAGS} ${DVDREAD_CFLAGS}" - "LDFLAGS=${CMAKE_LD_FLAGS}") - - core_link_library(${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd/lib/libdvdcss.a - system/players/VideoPlayer/libdvdcss dvdcss) - endif() + --target=${HOST_ARCH} + --host=${HOST_ARCH} + --enable-static + --disable-shared + --with-pic + --prefix=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd + --libdir=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd/lib + "${EXTRA_FLAGS}" + "LDFLAGS=${CMAKE_LD_FLAGS} -L${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd/lib" + "CFLAGS=${CMAKE_C_FLAGS} ${DVDREAD_CFLAGS}" + "DVDREAD_CFLAGS=${DVDREAD_CFLAGS}" + "DVDREAD_LIBS=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd/lib/libdvdread.la" + "LIBS=${DVDNAV_LIBS}" + BUILD_BYPRODUCTS ${DVDNAV_LIBRARY}) + ExternalProject_Add_Step(dvdnav autoreconf + DEPENDEES download update patch + DEPENDERS configure + COMMAND PATH=${NATIVEPREFIX}/bin:$ENV{PATH} autoreconf -vif + WORKING_DIRECTORY ) + add_dependencies(dvdnav dvdread) + set_target_properties(dvdnav PROPERTIES FOLDER "External Projects") - set(DVDREAD_CFLAGS "-D_XBMC") - if(ENABLE_DVDCSS) - set(DVDREAD_CFLAGS "${DVDREAD_CFLAGS} -DHAVE_DVDCSS_DVDCSS_H -I${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd/include") - endif(ENABLE_DVDCSS) - - ExternalProject_ADD(dvdread URL ${libdvdread_BASE_URL}/archive/${libdvdread_VER}.tar.gz - PREFIX ${CORE_BUILD_DIR}/libdvd - UPDATE_COMMAND PATH=${NATIVEPREFIX}/bin:$ENV{PATH} autoreconf -vif - CONFIGURE_COMMAND ac_cv_path_GIT= /configure - --target=${ARCH} - --host=${ARCH} - --enable-static - --disable-shared - --with-pic - --prefix= - "${EXTRA_FLAGS}" - "CFLAGS=${CMAKE_C_FLAGS} ${DVDREAD_CFLAGS}" - "LDFLAGS=${CMAKE_LD_FLAGS}") - if(ENABLE_DVDCSS) - add_dependencies(dvdread dvdcss) - endif() + set(_dvdlibs ${DVDREAD_LIBRARY} ${DVDCSS_LIBRARY}) + # link a shared dvdnav library that includes the whole archives of dvdread and dvdcss as well + # the quotes around _dvdlibs are on purpose, since we want to pass a list to the function that will be unpacked automatically + core_link_library(${DVDNAV_LIBRARY} system/players/VideoPlayer/libdvdnav dvdnav archives "${_dvdlibs}") - core_link_library(${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd/lib/libdvdread.a - system/players/VideoPlayer/libdvdread dvdread) - - if(ENABLE_DVDCSS) - set(DVDNAV_LIBS -ldvdcss) - endif(ENABLE_DVDCSS) - - ExternalProject_ADD(dvdnav URL ${libdvdnav_BASE_URL}/archive/${libdvdnav_VER}.tar.gz - PREFIX ${CORE_BUILD_DIR}/libdvd - UPDATE_COMMAND PATH=${NATIVEPREFIX}/bin:$ENV{PATH} autoreconf -vif - CONFIGURE_COMMAND ac_cv_path_GIT= /configure - --target=${ARCH} - --host=${ARCH} - --enable-static - --disable-shared - --with-pic - --prefix=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd - "${EXTRA_FLAGS}" - "LDFLAGS=${CMAKE_LD_FLAGS} -L${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd/lib" - "CFLAGS=${CMAKE_C_FLAGS} ${DVDREAD_CFLAGS}" - "DVDREAD_CFLAGS=${DVDREAD_CFLAGS}" - "DVDREAD_LIBS=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd/lib/libdvdread.la" - "LIBS=${DVDNAV_LIBS}") - add_dependencies(dvdnav dvdread) - core_link_library(${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd/lib/libdvdnav.a - system/players/VideoPlayer/libdvdnav dvdnav) - - set(LIBDVD_INCLUDE_DIRS ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd/include) - set(LIBDVD_LIBRARIES ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd/lib/libdvdnav.a - ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd/lib/libdvdread.a) - if(ENABLE_DVDCSS) - list(APPEND LIBDVD_LIBRARIES ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd/lib/libdvdcss.a) - endif() - set(LIBDVD_LIBRARIES ${LIBDVD_LIBRARIES} CACHE STRING "libdvd libraries" FORCE) - set(LIBDVD_FOUND 1 CACHE BOOL "libdvd found" FORCE) + set(LIBDVD_INCLUDE_DIRS ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd/include) + set(LIBDVD_LIBRARIES ${DVDNAV_LIBRARY} ${DVDREAD_LIBRARY}) + if(ENABLE_DVDCSS) + list(APPEND LIBDVD_LIBRARIES ${DVDCSS_LIBRARY}) + endif() + set(LIBDVD_LIBRARIES ${LIBDVD_LIBRARIES} CACHE STRING "libdvd libraries" FORCE) + set(LIBDVD_FOUND 1 CACHE BOOL "libdvd found" FORCE) + endif() else() # Dynamically loaded on Windows find_path(LIBDVD_INCLUDE_DIR dvdcss/dvdcss.h PATHS ${CORE_SOURCE_DIR}/lib/libdvd/include) @@ -110,6 +210,9 @@ else() if(LIBDVD_FOUND) set(LIBDVD_INCLUDE_DIRS ${LIBDVD_INCLUDE_DIR}) + + add_custom_target(dvdnav) + set_target_properties(dvdnav PROPERTIES FOLDER "External Projects") endif() mark_as_advanced(LIBDVD_INCLUDE_DIR) diff --git a/project/cmake/modules/FindLibSmbClient.cmake b/project/cmake/modules/FindLibSmbClient.cmake deleted file mode 100644 index 897fa7b..0000000 --- a/project/cmake/modules/FindLibSmbClient.cmake +++ /dev/null @@ -1,65 +0,0 @@ -# - Try to find Libsmbclient - -if(PKGCONFIG_FOUND) - pkg_check_modules(LIBSMBCLIENT smbclient) - set(LIBSMBCLIENT_DEFINITIONS -DHAVE_LIBSMBCLIENT=1) -endif() - -if (LIBSMBCLIENT_LIBRARIES AND LIBSMBCLIENT_INCLUDE_DIRS) - # in cache already - set(LIBSMBCLIENT_FOUND TRUE) -else (LIBSMBCLIENT_LIBRARIES AND LIBSMBCLIENT_INCLUDE_DIRS) - find_path(LIBSMBCLIENT_INCLUDE_DIR - NAMES - libsmbclient.h - PATHS - /usr/include - /usr/local/include - /opt/local/include - /sw/include - ) - - find_library(SMBCLIENT_LIBRARY - NAMES - smbclient - PATHS - /usr/lib - /usr/local/lib - /opt/local/lib - /sw/lib - ) - - if (SMBCLIENT_LIBRARY) - set(SMBCLIENT_FOUND TRUE) - endif (SMBCLIENT_LIBRARY) - - set(LIBSMBCLIENT_INCLUDE_DIRS - ${LIBSMBCLIENT_INCLUDE_DIR} - ) - - if (SMBCLIENT_FOUND) - set(LIBSMBCLIENT_LIBRARIES - ${LIBSMBCLIENT_LIBRARIES} - ${SMBCLIENT_LIBRARY} - ) - endif (SMBCLIENT_FOUND) - - if (LIBSMBCLIENT_INCLUDE_DIRS AND LIBSMBCLIENT_LIBRARIES) - set(LIBSMBCLIENT_FOUND TRUE) - endif (LIBSMBCLIENT_INCLUDE_DIRS AND LIBSMBCLIENT_LIBRARIES) - - if (LIBSMBCLIENT_FOUND) - if (NOT Libsmbclient_FIND_QUIETLY) - message(STATUS "Found Libsmbclient: ${LIBSMBCLIENT_LIBRARIES}") - endif (NOT Libsmbclient_FIND_QUIETLY) - else (LIBSMBCLIENT_FOUND) - if (Libsmbclient_FIND_REQUIRED) - message(FATAL_ERROR "Could not find Libsmbclient") - endif (Libsmbclient_FIND_REQUIRED) - endif (LIBSMBCLIENT_FOUND) - set(LIBSMBCLIENT_DEFINITIONS -DHAVE_LIBSMBCLIENT=1) - - # show the LIBSMBCLIENT_INCLUDE_DIRS and LIBSMBCLIENT_LIBRARIES variables only in the advanced view - mark_as_advanced(LIBSMBCLIENT_INCLUDE_DIRS LIBSMBCLIENT_LIBRARIES LIBSMBCLIENT_DEFINITIONS) - -endif (LIBSMBCLIENT_LIBRARIES AND LIBSMBCLIENT_INCLUDE_DIRS) diff --git a/project/cmake/modules/FindLibXml2.cmake b/project/cmake/modules/FindLibXml2.cmake new file mode 100644 index 0000000..caeb945 --- /dev/null +++ b/project/cmake/modules/FindLibXml2.cmake @@ -0,0 +1,84 @@ +#.rst: +# FindLibXml2 +# ----------- +# +# Try to find the LibXml2 xml processing library +# +# Once done this will define +# +# :: +# +# LIBXML2_FOUND - System has LibXml2 +# LIBXML2_INCLUDE_DIR - The LibXml2 include directory +# LIBXML2_LIBRARIES - The libraries needed to use LibXml2 +# LIBXML2_DEFINITIONS - Compiler switches required for using LibXml2 +# LIBXML2_XMLLINT_EXECUTABLE - The XML checking tool xmllint coming with LibXml2 +# LIBXML2_VERSION_STRING - the version of LibXml2 found (since CMake 2.8.8) + +#============================================================================= +# Copyright 2006-2009 Kitware, Inc. +# Copyright 2006 Alexander Neundorf +# Copyright 2016 Team Kodi +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# use pkg-config to get the directories and then use these values +# in the find_path() and find_library() calls +find_package(PkgConfig QUIET) +PKG_CHECK_MODULES(PC_LIBXML QUIET libxml-2.0) +set(LIBXML2_DEFINITIONS ${PC_LIBXML_CFLAGS_OTHER}) + +find_path(LIBXML2_INCLUDE_DIR NAMES libxml/xpath.h + HINTS + ${PC_LIBXML_INCLUDEDIR} + ${PC_LIBXML_INCLUDE_DIRS} + PATH_SUFFIXES libxml2 + ) + +find_library(LIBXML2_LIBRARY NAMES xml2 libxml2 + HINTS + ${PC_LIBXML_LIBDIR} + ${PC_LIBXML_LIBRARY_DIRS} + ) + +find_program(LIBXML2_XMLLINT_EXECUTABLE xmllint) +# for backwards compat. with KDE 4.0.x: +set(XMLLINT_EXECUTABLE "${LIBXML2_XMLLINT_EXECUTABLE}") + +# Make sure to use static flags if apropriate +if(PC_LIBXML_FOUND) + if(${LIBXML2_LIBRARY} MATCHES ".+\.a$" AND PC_LIBXML_STATIC_LDFLAGS) + set(LIBXML2_LIBRARY ${LIBXML2_LIBRARY} ${PC_LIBXML_STATIC_LDFLAGS}) + endif() +endif() + +if(PC_LIBXML_VERSION) + set(LIBXML2_VERSION_STRING ${PC_LIBXML_VERSION}) +elseif(LIBXML2_INCLUDE_DIR AND EXISTS "${LIBXML2_INCLUDE_DIR}/libxml/xmlversion.h") + file(STRINGS "${LIBXML2_INCLUDE_DIR}/libxml/xmlversion.h" libxml2_version_str + REGEX "^#define[\t ]+LIBXML_DOTTED_VERSION[\t ]+\".*\"") + string(REGEX REPLACE "^#define[\t ]+LIBXML_DOTTED_VERSION[\t ]+\"([^\"]*)\".*" "\\1" + LIBXML2_VERSION_STRING "${libxml2_version_str}") + unset(libxml2_version_str) +endif() + + +include(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibXml2 + REQUIRED_VARS LIBXML2_LIBRARY LIBXML2_INCLUDE_DIR + VERSION_VAR LIBXML2_VERSION_STRING) + +if(LibXml2_FOUND) + set(LIBXML2_LIBRARIES ${LIBXML2_LIBRARY}) + set(LIBXML2_INCLUDE_DIRS ${LIBXML2_INCLUDE_DIR}) +endif() + +mark_as_advanced(LIBXML2_INCLUDE_DIRS LIBXML2_LIBRARIES LIBXML2_XMLLINT_EXECUTABLE) diff --git a/project/cmake/modules/FindLzo2.cmake b/project/cmake/modules/FindLzo2.cmake index 33eee10..4f7313f 100644 --- a/project/cmake/modules/FindLzo2.cmake +++ b/project/cmake/modules/FindLzo2.cmake @@ -1,22 +1,37 @@ -# - Try to find Lzo2 -# Once done this will define +#.rst: +# FindLzo2 +# -------- +# Finds the Lzo2 library # -# Lzo2_FOUND - system has Lzo2 -# Lzo2_INCLUDE_DIR - the Lzo2 include directory -# Lzo2_LIBRARIES - Link these to use Lzo2 -# Lzo2_NEED_PREFIX - this is set if the functions are prefixed with BZ2_ - -# Copyright (c) 2006, Alexander Neundorf, +# This will will define the following variables:: # -# Redistribution and use is allowed according to the terms of the BSD license. -# For details see the accompanying COPYING-CMAKE-SCRIPTS file. - +# LZO2_FOUND - system has Lzo2 +# LZO2_INCLUDE_DIRS - the Lzo2 include directory +# LZO2_LIBRARIES - the Lzo2 libraries +# +# and the following imported targets:: +# +# Lzo2::Lzo2 - The Lzo2 library -FIND_PATH(LZO2_INCLUDE_DIRS lzo1x.h PATH_SUFFIXES lzo) +find_path(LZO2_INCLUDE_DIR NAMES lzo1x.h + PATH_SUFFIXES lzo) -FIND_LIBRARY(LZO2_LIBRARIES NAMES lzo2 liblzo2) +find_library(LZO2_LIBRARY NAMES lzo2 liblzo2) include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(Lzo2 DEFAULT_MSG LZO2_INCLUDE_DIRS LZO2_LIBRARIES) +find_package_handle_standard_args(Lzo2 + REQUIRED_VARS LZO2_LIBRARY LZO2_INCLUDE_DIR) + +if(LZO2_FOUND) + set(LZO2_LIBRARIES ${LZO2_LIBRARY}) + set(LZO2_INCLUDE_DIRS ${LZO2_INCLUDE_DIR}) + + if(NOT TARGET Lzo2::Lzo2) + add_library(Lzo2::Lzo2 UNKNOWN IMPORTED) + set_target_properties(Lzo2::Lzo2 PROPERTIES + IMPORTED_LOCATION "${LZO2_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${LZO2_INCLUDE_DIR}") + endif() +endif() -MARK_AS_ADVANCED(LZO2_INCLUDE_DIRS LZO2_LIBRARIES) +mark_as_advanced(LZO2_INCLUDE_DIR LZO2_LIBRARY) diff --git a/project/cmake/modules/FindMicroHttpd.cmake b/project/cmake/modules/FindMicroHttpd.cmake index f73dc77..7d011fa 100644 --- a/project/cmake/modules/FindMicroHttpd.cmake +++ b/project/cmake/modules/FindMicroHttpd.cmake @@ -1,106 +1,49 @@ -IF (NOT WIN32) - include(FindPkgConfig) - if ( PKG_CONFIG_FOUND ) - - pkg_check_modules (MICROHTTPD libmicrohttpd>=0.4) - - set(MICROHTTPD_DEFINITIONS ${MICROHTTPD_CFLAGS_OTHER}) - endif(PKG_CONFIG_FOUND) -endif (NOT WIN32) - +#.rst: +# FindMicroHttpd +# -------------- +# Finds the MicroHttpd library # -# set defaults -if(NOT MICROHTTPD_FOUND) - SET(_microhttpd_HOME "/usr/local") - SET(_microhttpd_INCLUDE_SEARCH_DIRS - ${CMAKE_INCLUDE_PATH} - /usr/local/include - /usr/include - ) - - SET(_microhttpd_LIBRARIES_SEARCH_DIRS - ${CMAKE_LIBRARY_PATH} - /usr/local/lib - /usr/lib - ) - - ## - if( "${MICROHTTPD_HOME}" STREQUAL "") - if("" MATCHES "$ENV{MICROHTTPD_HOME}") - message(STATUS "MICROHTTPD_HOME env is not set, setting it to /usr/local") - set (MICROHTTPD_HOME ${_microhttpd_HOME}) - else("" MATCHES "$ENV{MICROHTTPD_HOME}") - set (MICROHTTPD_HOME "$ENV{MICROHTTPD_HOME}") - endif("" MATCHES "$ENV{MICROHTTPD_HOME}") - else( "${MICROHTTPD_HOME}" STREQUAL "") - message(STATUS "MICROHTTPD_HOME is not empty: \"${MICROHTTPD_HOME}\"") - endif( "${MICROHTTPD_HOME}" STREQUAL "") - ## - - message(STATUS "Looking for microhttpd in ${MICROHTTPD_HOME}") - - IF( NOT ${MICROHTTPD_HOME} STREQUAL "" ) - SET(_microhttpd_INCLUDE_SEARCH_DIRS ${MICROHTTPD_HOME}/include ${_microhttpd_INCLUDE_SEARCH_DIRS}) - SET(_microhttpd_LIBRARIES_SEARCH_DIRS ${MICROHTTPD_HOME}/lib ${_microhttpd_LIBRARIES_SEARCH_DIRS}) - SET(_microhttpd_HOME ${MICROHTTPD_HOME}) - ENDIF( NOT ${MICROHTTPD_HOME} STREQUAL "" ) - - IF( NOT $ENV{MICROHTTPD_INCLUDEDIR} STREQUAL "" ) - SET(_microhttpd_INCLUDE_SEARCH_DIRS $ENV{MICROHTTPD_INCLUDEDIR} ${_microhttpd_INCLUDE_SEARCH_DIRS}) - ENDIF( NOT $ENV{MICROHTTPD_INCLUDEDIR} STREQUAL "" ) +# This will will define the following variables:: +# +# MICROHTTPD_FOUND - system has MicroHttpd +# MICROHTTPD_INCLUDE_DIRS - the MicroHttpd include directory +# MICROHTTPD_LIBRARIES - the MicroHttpd libraries +# MICROHTTPD_DEFINITIONS - the MicroHttpd definitions +# +# and the following imported targets:: +# +# MicroHttpd::MicroHttpd - The MicroHttpd library - IF( NOT $ENV{MICROHTTPD_LIBRARYDIR} STREQUAL "" ) - SET(_microhttpd_LIBRARIES_SEARCH_DIRS $ENV{MICROHTTPD_LIBRARYDIR} ${_microhttpd_LIBRARIES_SEARCH_DIRS}) - ENDIF( NOT $ENV{MICROHTTPD_LIBRARYDIR} STREQUAL "" ) +if(PKG_CONFIG_FOUND) + pkg_check_modules(PC_MICROHTTPD libmicrohttpd>=0.4 QUIET) +endif() - IF( MICROHTTPD_HOME ) - SET(_microhttpd_INCLUDE_SEARCH_DIRS ${MICROHTTPD_HOME}/include ${_microhttpd_INCLUDE_SEARCH_DIRS}) - SET(_microhttpd_LIBRARIES_SEARCH_DIRS ${MICROHTTPD_HOME}/lib ${_microhttpd_LIBRARIES_SEARCH_DIRS}) - SET(_microhttpd_HOME ${MICROHTTPD_HOME}) - ENDIF( MICROHTTPD_HOME ) +find_path(MICROHTTPD_INCLUDE_DIR NAMES microhttpd.h + PATHS ${PC_MICROHTTPD_INCLUDEDIR}) +find_library(MICROHTTPD_LIBRARY NAMES microhttpd libmicrohttpd + PATHS ${PC_MICROHTTPD_LIBDIR}) - # find the include files - FIND_PATH(MICROHTTPD_INCLUDE_DIRS microhttpd.h - HINTS - ${_microhttpd_INCLUDE_SEARCH_DIRS} - ${PC_MICROHTTPD_INCLUDEDIR} - ${PC_MICROHTTPD_INCLUDE_DIRS} - ${CMAKE_INCLUDE_PATH} - ) +set(MICROHTTPD_VERSION ${PC_MICROHTTPD_VERSION}) - # locate the library - IF(WIN32) - SET(MICROHTTPD_LIBRARY_NAMES ${MICROHTTPD_LIBRARY_NAMES} libmicrohttpd.lib) - ELSE(WIN32) - SET(MICROHTTPD_LIBRARY_NAMES ${MICROHTTPD_LIBRARY_NAMES} libmicrohttpd.a) - ENDIF(WIN32) - FIND_LIBRARY(MICROHTTPD_LIBRARIES NAMES ${MICROHTTPD_LIBRARY_NAMES} - HINTS - ${_microhttpd_LIBRARIES_SEARCH_DIRS} - ${PC_MICROHTTPD_LIBDIR} - ${PC_MICROHTTPD_LIBRARY_DIRS} - ) +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(MicroHttpd + REQUIRED_VARS MICROHTTPD_LIBRARY MICROHTTPD_INCLUDE_DIR + VERSION_VAR MICROHTTPD_VERSION) - # if the include and the program are found then we have it - IF(MICROHTTPD_INCLUDE_DIRS AND MICROHTTPD_LIBRARIES) - SET(MICROHTTPD_FOUND "YES") - ENDIF(MICROHTTPD_INCLUDE_DIRS AND MICROHTTPD_LIBRARIES) +if(MICROHTTPD_FOUND) + set(MICROHTTPD_LIBRARIES ${MICROHTTPD_LIBRARY}) + set(MICROHTTPD_INCLUDE_DIRS ${MICROHTTPD_INCLUDE_DIR}) + set(MICROHTTPD_DEFINITIONS -DHAVE_LIBMICROHTTPD=1) - if( NOT WIN32) + if(NOT WIN32) find_library(GCRYPT_LIBRARY gcrypt) find_library(GPGERROR_LIBRARY gpg-error) list(APPEND MICROHTTPD_LIBRARIES ${GCRYPT_LIBRARY} ${GPGERROR_LIBRARY}) + mark_as_advanced(GCRYPT_LIBRARY GPGERROR_LIBRARY) if(NOT APPLE AND NOT CORE_SYSTEM_NAME STREQUAL android) list(APPEND MICROHTTPD_LIBRARIES "-lrt") endif() - endif( NOT WIN32) + endif() endif() -list(APPEND MICROHTTPD_DEFINITIONS -DHAVE_LIBMICROHTTPD=1) - -MARK_AS_ADVANCED( - MICROHTTPD_FOUND - MICROHTTPD_LIBRARIES - MICROHTTPD_DEFINITIONS - MICROHTTPD_INCLUDE_DIRS -) +mark_as_advanced(MICROHTTPD_LIBRARY MICROHTTPD_INCLUDE_DIR) diff --git a/project/cmake/modules/FindMySqlClient.cmake b/project/cmake/modules/FindMySqlClient.cmake index 2295c81..ceccea3 100644 --- a/project/cmake/modules/FindMySqlClient.cmake +++ b/project/cmake/modules/FindMySqlClient.cmake @@ -14,18 +14,34 @@ # # MySqlClient::MySqlClient - The MySqlClient library +# Don't find system wide installed version on Windows +if(WIN32) + set(EXTRA_FIND_ARGS NO_SYSTEM_ENVIRONMENT_PATH) +else() + set(EXTRA_FIND_ARGS) +endif() + find_path(MYSQLCLIENT_INCLUDE_DIR mysql/mysql_time.h) find_library(MYSQLCLIENT_LIBRARY_RELEASE NAMES mysqlclient libmysql - PATH_SUFFIXES mysql) + PATH_SUFFIXES mysql + ${EXTRA_FIND_ARGS}) find_library(MYSQLCLIENT_LIBRARY_DEBUG NAMES mysqlclient libmysql - PATH_SUFFIXES mysql) + PATH_SUFFIXES mysql + ${EXTRA_FIND_ARGS}) + +if(MYSQLCLIENT_INCLUDE_DIR AND EXISTS "${MYSQLCLIENT_INCLUDE_DIR}/mysql/mysql_version.h") + file(STRINGS "${MYSQLCLIENT_INCLUDE_DIR}/mysql/mysql_version.h" mysql_version_str REGEX "^#define[\t ]+LIBMYSQL_VERSION[\t ]+\".*\".*") + string(REGEX REPLACE "^#define[\t ]+LIBMYSQL_VERSION[\t ]+\"([^\"]+)\".*" "\\1" MYSQLCLIENT_VERSION_STRING "${mysql_version_str}") + unset(mysql_version_str) +endif() include(SelectLibraryConfigurations) select_library_configurations(MYSQLCLIENT) include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(MYSQLCLIENT - REQUIRED_VARS MYSQLCLIENT_LIBRARY MYSQLCLIENT_INCLUDE_DIR) +find_package_handle_standard_args(MySqlClient + REQUIRED_VARS MYSQLCLIENT_LIBRARY MYSQLCLIENT_INCLUDE_DIR + VERSION_VAR MYSQLCLIENT_VERSION_STRING) if(MYSQLCLIENT_FOUND) set(MYSQLCLIENT_LIBRARIES ${MYSQLCLIENT_LIBRARY}) diff --git a/project/cmake/modules/FindNFS.cmake b/project/cmake/modules/FindNFS.cmake index 3fd9d61..646ee33 100644 --- a/project/cmake/modules/FindNFS.cmake +++ b/project/cmake/modules/FindNFS.cmake @@ -15,7 +15,7 @@ # NFS::NFS - The libnfs library if(PKG_CONFIG_FOUND) - pkg_check_modules(NFS libnfs QUIET) + pkg_check_modules(PC_NFS libnfs QUIET) endif() find_path(NFS_INCLUDE_DIR nfsc/libnfs.h diff --git a/project/cmake/modules/FindOpenGLES.cmake b/project/cmake/modules/FindOpenGLES.cmake index 5d71dd4..ab06f96 100644 --- a/project/cmake/modules/FindOpenGLES.cmake +++ b/project/cmake/modules/FindOpenGLES.cmake @@ -13,7 +13,7 @@ find_package(EMBEDDED) if(PKG_CONFIG_FOUND AND NOT PLATFORM STREQUAL "raspberry-pi") - pkg_check_modules(PC_OPENGLES glesv2) + pkg_check_modules(PC_OPENGLES glesv2 QUIET) if(NOT OPENGLES_FOUND AND EMBEDDED_FOUND) set(CMAKE_PREFIX_PATH ${EMBEDDED_FOUND} ${CMAKE_PREFIX_PATH}) endif() diff --git a/project/cmake/modules/FindOpenGl.cmake b/project/cmake/modules/FindOpenGl.cmake index 9d6ec01..b8cff79 100644 --- a/project/cmake/modules/FindOpenGl.cmake +++ b/project/cmake/modules/FindOpenGl.cmake @@ -11,10 +11,10 @@ # OPENGL_DEFINITIONS - the OpenGl definitions if(PKG_CONFIG_FOUND) - pkg_check_modules(PC_OPENGL gl glu) + pkg_check_modules(PC_OPENGL gl glu QUIET) endif() -if(NOT CORE_SYSTEM_NAME STREQUAL darwin) +if(NOT CORE_SYSTEM_NAME STREQUAL osx) find_path(OPENGL_INCLUDE_DIR GL/gl.h PATHS ${PC_OPENGL_gl_INCLUDEDIR}) find_library(OPENGL_gl_LIBRARY NAMES GL diff --git a/project/cmake/modules/FindPulseAudio.cmake b/project/cmake/modules/FindPulseAudio.cmake index 5b57364..5761005 100644 --- a/project/cmake/modules/FindPulseAudio.cmake +++ b/project/cmake/modules/FindPulseAudio.cmake @@ -1,72 +1,68 @@ -# Try to find the PulseAudio library +#.rst: +# FindPulseAudio +# -------------- +# Finds the PulseAudio library # -# Once done this will define: +# This will define the following variables:: # # PULSEAUDIO_FOUND - system has the PulseAudio library -# PULSEAUDIO_INCLUDE_DIR - the PulseAudio include directory -# PULSEAUDIO_LIBRARY - the libraries needed to use PulseAudio -# PULSEAUDIO_MAINLOOP_LIBRARY - the libraries needed to use PulsAudio Mailoop +# PULSEAUDIO_INCLUDE_DIRS - the PulseAudio include directory +# PULSEAUDIO_LIBRARIES - the libraries needed to use PulseAudio +# PULSEAUDIO_DEFINITIONS - the definitions needed to use PulseAudio # -# Copyright (c) 2008, Matthias Kretz, -# Copyright (c) 2009, Marcus Hufgard, +# and the following imported targets:: # -# Redistribution and use is allowed according to the terms of the BSD license. -# For details see the accompanying COPYING-CMAKE-SCRIPTS file. +# PulseAudio::PulseAudio - The PulseAudio library -if (NOT PULSEAUDIO_MINIMUM_VERSION) - set(PULSEAUDIO_MINIMUM_VERSION "1.0.0") -endif (NOT PULSEAUDIO_MINIMUM_VERSION) - -if (PULSEAUDIO_INCLUDE_DIRS AND PULSEAUDIO_LIBRARY AND PULSEAUDIO_MAINLOOP_LIBRARY) - # Already in cache, be silent - set(PULSEAUDIO_FIND_QUIETLY TRUE) -endif (PULSEAUDIO_INCLUDE_DIRS AND PULSEAUDIO_LIBRARY AND PULSEAUDIO_MAINLOOP_LIBRARY) +if(NOT PulseAudio_FIND_VERSION) + set(PulseAudio_FIND_VERSION 2.0.0) +endif() -if (NOT WIN32) - include(FindPkgConfig) - pkg_check_modules(PC_PULSEAUDIO libpulse>=${PULSEAUDIO_MINIMUM_VERSION}) - pkg_check_modules(PC_PULSEAUDIO_MAINLOOP libpulse-mainloop-glib) -endif (NOT WIN32) +if(PKG_CONFIG_FOUND) + pkg_check_modules(PC_PULSEAUDIO libpulse>=${PulseAudio_FIND_VERSION} QUIET) + pkg_check_modules(PC_PULSEAUDIO_MAINLOOP libpulse-mainloop-glib QUIET) +endif() -FIND_PATH(PULSEAUDIO_INCLUDE_DIRS pulse/pulseaudio.h - HINTS - ${PC_PULSEAUDIO_INCLUDEDIR} - ${PC_PULSEAUDIO_INCLUDE_DIRS} - ) +find_path(PULSEAUDIO_INCLUDE_DIR NAMES pulse/pulseaudio.h + PATHS ${PC_PULSEAUDIO_INCLUDEDIR} ${PC_PULSEAUDIO_INCLUDE_DIRS}) -FIND_LIBRARY(PULSEAUDIO_LIBRARY NAMES pulse libpulse - HINTS - ${PC_PULSEAUDIO_LIBDIR} - ${PC_PULSEAUDIO_LIBRARY_DIRS} - ) +find_library(PULSEAUDIO_LIBRARY NAMES pulse libpulse + PATHS ${PC_PULSEAUDIO_LIBDIR} ${PC_PULSEAUDIO_LIBRARY_DIRS}) -FIND_LIBRARY(PULSEAUDIO_MAINLOOP_LIBRARY NAMES pulse-mainloop pulse-mainloop-glib libpulse-mainloop-glib - HINTS - ${PC_PULSEAUDIO_LIBDIR} - ${PC_PULSEAUDIO_LIBRARY_DIRS} - ) +find_library(PULSEAUDIO_MAINLOOP_LIBRARY NAMES pulse-mainloop pulse-mainloop-glib libpulse-mainloop-glib + PATHS ${PC_PULSEAUDIO_LIBDIR} ${PC_PULSEAUDIO_LIBRARY_DIRS}) -if (NOT PULSEAUDIO_INCLUDE_DIRS OR NOT PULSEAUDIO_LIBRARY) - set(PULSEAUDIO_FOUND FALSE) -else() - set(PULSEAUDIO_FOUND TRUE) +if(PC_PULSEAUDIO_VERSION) + set(PULSEAUDIO_VERSION_STRING ${PC_PULSEAUDIO_VERSION}) +elseif(PULSEAUDIO_INCLUDE_DIR AND EXISTS "${PULSEAUDIO_INCLUDE_DIR}/pulse/version.h") + file(STRINGS "${PULSEAUDIO_INCLUDE_DIR}/pulse/version.h" pulseaudio_version_str REGEX "^#define[\t ]+pa_get_headers_version\\(\\)[\t ]+\\(\".*\"\\).*") + string(REGEX REPLACE "^#define[\t ]+pa_get_headers_version\\(\\)[\t ]+\\(\"([^\"]+)\"\\).*" "\\1" PULSEAUDIO_VERSION_STRING "${pulseaudio_version_str}") + unset(pulseaudio_version_str) endif() -if (PULSEAUDIO_FOUND) - if (NOT PULSEAUDIO_FIND_QUIETLY) - message(STATUS "Found PulseAudio: ${PULSEAUDIO_LIBRARY}") - if (PULSEAUDIO_MAINLOOP_LIBRARY) - message(STATUS "Found PulseAudio Mainloop: ${PULSEAUDIO_MAINLOOP_LIBRARY}") - else (PULSAUDIO_MAINLOOP_LIBRARY) - message(STATUS "Could NOT find PulseAudio Mainloop Library") - endif (PULSEAUDIO_MAINLOOP_LIBRARY) - endif (NOT PULSEAUDIO_FIND_QUIETLY) -else (PULSEAUDIO_FOUND) - message(STATUS "Could NOT find PulseAudio") -endif (PULSEAUDIO_FOUND) +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(PulseAudio + REQUIRED_VARS PULSEAUDIO_LIBRARY PULSEAUDIO_MAINLOOP_LIBRARY PULSEAUDIO_INCLUDE_DIR + VERSION_VAR PULSEAUDIO_VERSION_STRING) -set(PULSEAUDIO_LIBRARIES ${PULSEAUDIO_LIBRARY}) +if(PULSEAUDIO_FOUND) + set(PULSEAUDIO_INCLUDE_DIRS ${PULSEAUDIO_INCLUDE_DIR}) + set(PULSEAUDIO_LIBRARIES ${PULSEAUDIO_LIBRARY} ${PULSEAUDIO_MAINLOOP_LIBRARY}) + set(PULSEAUDIO_DEFINITIONS -DHAVE_LIBPULSE=1) -list(APPEND PULSEAUDIO_DEFINITIONS -DHAVE_LIBPULSE=1) + if(NOT TARGET PulseAudio::PulseAudioMainloop) + add_library(PulseAudio::PulseAudioMainloop UNKNOWN IMPORTED) + set_target_properties(PulseAudio::PulseAudioMainloop PROPERTIES + IMPORTED_LOCATION "${PULSEAUDIO_MAINLOOP_LIBRARY}") + endif() + if(NOT TARGET PulseAudio::PulseAudio) + add_library(PulseAudio::PulseAudio UNKNOWN IMPORTED) + set_target_properties(PulseAudio::PulseAudio PROPERTIES + IMPORTED_LOCATION "${PULSEAUDIO_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${PULSEAUDIO_INCLUDE_DIR}" + INTERFACE_COMPILE_DEFINITIONS HAVE_LIBPULSE=1 + INTERFACE_LINK_LIBRARIES PulseAudio::PulseAudioMainloop) + endif() +endif() -mark_as_advanced(PULSEAUDIO_INCLUDE_DIRS PULSEAUDIO_LIBRARIES PULSEAUDIO_LIBRARY PULSEAUDIO_MAINLOOP_LIBRARY) +mark_as_advanced(PULSEAUDIO_INCLUDE_DIR PULSEAUDIO_LIBRARY PULSEAUDIO_MAINLOOP_LIBRARY) diff --git a/project/cmake/modules/FindPython.cmake b/project/cmake/modules/FindPython.cmake index 6f9f236..68b7359 100644 --- a/project/cmake/modules/FindPython.cmake +++ b/project/cmake/modules/FindPython.cmake @@ -5,39 +5,34 @@ # PYTHON_INCLUDE_DIRS - the python include directory # PYTHON_LIBRARIES - The python libraries -if(PKG_CONFIG_FOUND AND NOT CMAKE_CROSSCOMPILING) - pkg_check_modules (PYTHON python) +if(PKG_CONFIG_FOUND) + pkg_check_modules(PC_PYTHON python >= 2.7 QUIET) endif() -if(NOT PYTHON_FOUND) - if(CMAKE_CROSSCOMPILING) - find_program(PYTHON_EXECUTABLE python ONLY_CMAKE_FIND_ROOT_PATH) - find_library(PYTHON_LIBRARY NAMES python2.6 python2.7) - find_path(PYTHON_INCLUDE_DIRS NAMES Python.h PATHS ${DEPENDS_PATH}/include/python2.6 ${DEPENDS_PATH}/include/python2.7) - set(PYTHON_INCLUDE_DIR ${PYTHON_INCLUDE_DIRS} CACHE PATH "python include dir" FORCE) - - find_library(FFI_LIBRARY ffi) - find_library(EXPAT_LIBRARY expat) - find_library(INTL_LIBRARY intl) - - if(NOT CORE_SYSTEM_NAME STREQUAL android) - set(PYTHON_DEP_LIBRARIES -lpthread -ldl -lutil) - endif() - - set(PYTHON_LIBRARIES ${PYTHON_LIBRARY} ${FFI_LIBRARY} ${EXPAT_LIBRARY} ${INTL_LIBRARY} ${PYTHON_DEP_LIBRARIES} - CACHE INTERNAL "python libraries" FORCE) - else() - find_package(PythonLibs) +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) + +if(CMAKE_CROSSCOMPILING) + find_library(FFI_LIBRARY ffi REQUIRED) + find_library(EXPAT_LIBRARY expat REQUIRED) + find_library(INTL_LIBRARY intl REQUIRED) + find_library(GMP_LIBRARY gmp REQUIRED) + + if(NOT CORE_SYSTEM_NAME STREQUAL android) + set(PYTHON_DEP_LIBRARIES -lpthread -ldl -lutil) endif() + + set(PYTHON_LIBRARIES ${PYTHON_LIBRARY} ${FFI_LIBRARY} ${EXPAT_LIBRARY} ${INTL_LIBRARY} ${GMP_LIBRARY} ${PYTHON_DEP_LIBRARIES}) +else() + find_package(PythonLibs 2.7 REQUIRED) endif() -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(Python DEFAULT_MSG PYTHON_INCLUDE_DIRS PYTHON_LIBRARIES) -if(CMAKE_SYSTEM_NAME STREQUAL Darwin) - find_library(FFI_LIBRARY ffi REQUIRED) - find_library(INTL_LIBRARY intl) - list(APPEND PYTHON_LIBRARIES ${FFI_LIBRARY} ${INTL_LIBRARY}) +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(PYTHON REQUIRED_VARS PYTHON_INCLUDE_DIR PYTHON_LIBRARY PYTHON_LIBRARIES) +if(PYTHON_FOUND) + set(PYTHON_INCLUDE_DIRS ${PYTHON_INCLUDE_DIR}) endif() -mark_as_advanced(PYTHON_INCLUDE_DIRS PYTHON_LIBRARIES PYTHON_LDFLAGS) +mark_as_advanced(PYTHON_EXECUTABLE PYTHON_INCLUDE_DIRS PYTHON_INCLUDE_DIR PYTHON_LIBRARY PYTHON_LIBRARIES PYTHON_LDFLAGS FFI_LIBRARY EXPAT_LIBRARY INTL_LIBRARY GMP_LIBRARY) diff --git a/project/cmake/modules/FindRTMP.cmake b/project/cmake/modules/FindRTMP.cmake deleted file mode 100644 index 432b77d..0000000 --- a/project/cmake/modules/FindRTMP.cmake +++ /dev/null @@ -1,21 +0,0 @@ -# - Try to find rtmp -# Once done this will define -# -# RTMP_FOUND - system has librtmp -# RTMP_INCLUDE_DIRS - the librtmp include directory -# RTMP_LIBRARIES - The librtmp libraries - -if(PKG_CONFIG_FOUND) - pkg_check_modules (RTMP librtmp) - list(APPEND RTMP_INCLUDE_DIRS ${RTMP_INCLUDEDIR}) -else() - find_path(RTMP_INCLUDE_DIRS librtmp/rtmp.h) - find_library(RTMP_LIBRARIES rtmp) -endif() - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(RTMP DEFAULT_MSG RTMP_INCLUDE_DIRS RTMP_LIBRARIES) - -list(APPEND RTMP_DEFINITIONS -DHAS_LIBRTMP=1) - -mark_as_advanced(RTMP_INCLUDE_DIRS RTMP_LIBRARIES RTMP_DEFINITIONS) diff --git a/project/cmake/modules/FindSSE.cmake b/project/cmake/modules/FindSSE.cmake index c76b811..0554663 100644 --- a/project/cmake/modules/FindSSE.cmake +++ b/project/cmake/modules/FindSSE.cmake @@ -1,105 +1,143 @@ # Check if SSE instructions are available on the machine where # the project is compiled. +include(TestCXXAcceptsFlag) -IF(CMAKE_SYSTEM_NAME MATCHES "Linux") - EXEC_PROGRAM(cat ARGS "/proc/cpuinfo" OUTPUT_VARIABLE CPUINFO) - - STRING(REGEX REPLACE "^.*(sse2).*$" "\\1" SSE_THERE ${CPUINFO}) - STRING(COMPARE EQUAL "sse2" "${SSE_THERE}" SSE2_TRUE) - IF (SSE2_TRUE) - set(SSE2_FOUND true CACHE BOOL "SSE2 available on host") - ELSE (SSE2_TRUE) - set(SSE2_FOUND false CACHE BOOL "SSE2 available on host") - ENDIF (SSE2_TRUE) - - # /proc/cpuinfo apparently omits sse3 :( - STRING(REGEX REPLACE "^.*[^s](sse3).*$" "\\1" SSE_THERE ${CPUINFO}) - STRING(COMPARE EQUAL "sse3" "${SSE_THERE}" SSE3_TRUE) - IF (NOT SSE3_TRUE) - STRING(REGEX REPLACE "^.*(T2300).*$" "\\1" SSE_THERE ${CPUINFO}) - STRING(COMPARE EQUAL "T2300" "${SSE_THERE}" SSE3_TRUE) - ENDIF (NOT SSE3_TRUE) - - STRING(REGEX REPLACE "^.*(ssse3).*$" "\\1" SSE_THERE ${CPUINFO}) - STRING(COMPARE EQUAL "ssse3" "${SSE_THERE}" SSSE3_TRUE) - IF (SSE3_TRUE OR SSSE3_TRUE) - set(SSE3_FOUND true CACHE BOOL "SSE3 available on host") - ELSE (SSE3_TRUE OR SSSE3_TRUE) - set(SSE3_FOUND false CACHE BOOL "SSE3 available on host") - ENDIF (SSE3_TRUE OR SSSE3_TRUE) - IF (SSSE3_TRUE) - set(SSSE3_FOUND true CACHE BOOL "SSSE3 available on host") - ELSE (SSSE3_TRUE) - set(SSSE3_FOUND false CACHE BOOL "SSSE3 available on host") - ENDIF (SSSE3_TRUE) - - STRING(REGEX REPLACE "^.*(sse4_1).*$" "\\1" SSE_THERE ${CPUINFO}) - STRING(COMPARE EQUAL "sse4_1" "${SSE_THERE}" SSE41_TRUE) - IF (SSE41_TRUE) - set(SSE4_1_FOUND true CACHE BOOL "SSE4.1 available on host") - ELSE (SSE41_TRUE) - set(SSE4_1_FOUND false CACHE BOOL "SSE4.1 available on host") - ENDIF (SSE41_TRUE) -ELSEIF(CMAKE_SYSTEM_NAME MATCHES "Darwin") - EXEC_PROGRAM("/usr/sbin/sysctl -n machdep.cpu.features" OUTPUT_VARIABLE - CPUINFO) - - STRING(REGEX REPLACE "^.*[^S](SSE2).*$" "\\1" SSE_THERE ${CPUINFO}) - STRING(COMPARE EQUAL "SSE2" "${SSE_THERE}" SSE2_TRUE) - IF (SSE2_TRUE) - set(SSE2_FOUND true CACHE BOOL "SSE2 available on host") - ELSE (SSE2_TRUE) - set(SSE2_FOUND false CACHE BOOL "SSE2 available on host") - ENDIF (SSE2_TRUE) - - STRING(REGEX REPLACE "^.*[^S](SSE3).*$" "\\1" SSE_THERE ${CPUINFO}) - STRING(COMPARE EQUAL "SSE3" "${SSE_THERE}" SSE3_TRUE) - IF (SSE3_TRUE) - set(SSE3_FOUND true CACHE BOOL "SSE3 available on host") - ELSE (SSE3_TRUE) - set(SSE3_FOUND false CACHE BOOL "SSE3 available on host") - ENDIF (SSE3_TRUE) - - STRING(REGEX REPLACE "^.*(SSSE3).*$" "\\1" SSE_THERE ${CPUINFO}) - STRING(COMPARE EQUAL "SSSE3" "${SSE_THERE}" SSSE3_TRUE) - IF (SSSE3_TRUE) - set(SSSE3_FOUND true CACHE BOOL "SSSE3 available on host") - ELSE (SSSE3_TRUE) - set(SSSE3_FOUND false CACHE BOOL "SSSE3 available on host") - ENDIF (SSSE3_TRUE) - - STRING(REGEX REPLACE "^.*(SSE4.1).*$" "\\1" SSE_THERE ${CPUINFO}) - STRING(COMPARE EQUAL "SSE4.1" "${SSE_THERE}" SSE41_TRUE) - IF (SSE41_TRUE) - set(SSE4_1_FOUND true CACHE BOOL "SSE4.1 available on host") - ELSE (SSE41_TRUE) - set(SSE4_1_FOUND false CACHE BOOL "SSE4.1 available on host") - ENDIF (SSE41_TRUE) -ELSEIF(CMAKE_SYSTEM_NAME MATCHES "Windows") +if(CMAKE_SYSTEM_NAME MATCHES "Linux") + if(CPU MATCHES "x86_64" OR CPU MATCHES "i.86") + exec_program(cat ARGS "/proc/cpuinfo" OUTPUT_VARIABLE CPUINFO) + + string(REGEX REPLACE "^.*(sse).*$" "\\1" _SSE_THERE ${CPUINFO}) + string(COMPARE EQUAL "sse" "${_SSE_THERE}" _SSE_TRUE) + CHECK_CXX_ACCEPTS_FLAG("-msse" _SSE_OK) + + string(REGEX REPLACE "^.*(sse2).*$" "\\1" _SSE_THERE ${CPUINFO}) + string(COMPARE EQUAL "sse2" "${_SSE_THERE}" _SSE2_TRUE) + CHECK_CXX_ACCEPTS_FLAG("-msse2" _SSE2_OK) + + # /proc/cpuinfo apparently omits sse3 :( + string(REGEX REPLACE "^.*[^s](sse3).*$" "\\1" _SSE_THERE ${CPUINFO}) + string(COMPARE EQUAL "sse3" "${_SSE_THERE}" _SSE3_TRUE) + if(NOT _SSE3_TRUE) + string(REGEX REPLACE "^.*(T2300).*$" "\\1" _SSE_THERE ${CPUINFO}) + string(COMPARE EQUAL "T2300" "${_SSE_THERE}" _SSE3_TRUE) + endif() + CHECK_CXX_ACCEPTS_FLAG("-msse3" _SSE3_OK) + + string(REGEX REPLACE "^.*(ssse3).*$" "\\1" _SSE_THERE ${CPUINFO}) + string(COMPARE EQUAL "ssse3" "${_SSE_THERE}" _SSSE3_TRUE) + CHECK_CXX_ACCEPTS_FLAG("-mssse3" _SSSE3_OK) + + string(REGEX REPLACE "^.*(sse4_1).*$" "\\1" _SSE_THERE ${CPUINFO}) + string(COMPARE EQUAL "sse4_1" "${_SSE_THERE}" _SSE41_TRUE) + CHECK_CXX_ACCEPTS_FLAG("-msse4.1" _SSE41_OK) + + string(REGEX REPLACE "^.*(sse4_2).*$" "\\1" _SSE_THERE ${CPUINFO}) + string(COMPARE EQUAL "sse4_2" "${_SSE_THERE}" _SSE42_TRUE) + CHECK_CXX_ACCEPTS_FLAG("-msse4.2" _SSE42_OK) + + string(REGEX REPLACE "^.*(avx).*$" "\\1" _SSE_THERE ${CPUINFO}) + string(COMPARE EQUAL "avx" "${_SSE_THERE}" _AVX_TRUE) + CHECK_CXX_ACCEPTS_FLAG("-mavx" _AVX_OK) + + string(REGEX REPLACE "^.*(avx2).*$" "\\1" _SSE_THERE ${CPUINFO}) + string(COMPARE EQUAL "avx2" "${_SSE_THERE}" _AVX2_TRUE) + CHECK_CXX_ACCEPTS_FLAG("-mavx2" _AVX2_OK) + endif() +elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin") + if(NOT CPU MATCHES "arm") + exec_program("/usr/sbin/sysctl -n machdep.cpu.features machdep.cpu.leaf7_features" OUTPUT_VARIABLE CPUINFO) + + string(REGEX REPLACE "^.*[^S](SSE).*$" "\\1" _SSE_THERE ${CPUINFO}) + string(COMPARE EQUAL "SSE" "${_SSE_THERE}" _SSE_TRUE) + CHECK_CXX_ACCEPTS_FLAG("-msse" _SSE_OK) + + string(REGEX REPLACE "^.*[^S](SSE2).*$" "\\1" _SSE_THERE ${CPUINFO}) + string(COMPARE EQUAL "SSE2" "${_SSE_THERE}" _SSE2_TRUE) + CHECK_CXX_ACCEPTS_FLAG("-msse2" _SSE2_OK) + + string(REGEX REPLACE "^.*[^S](SSE3).*$" "\\1" _SSE_THERE ${CPUINFO}) + string(COMPARE EQUAL "SSE3" "${_SSE_THERE}" _SSE3_TRUE) + CHECK_CXX_ACCEPTS_FLAG("-msse3" _SSE3_OK) + + string(REGEX REPLACE "^.*(SSSE3).*$" "\\1" _SSE_THERE ${CPUINFO}) + string(COMPARE EQUAL "SSSE3" "${_SSE_THERE}" _SSSE3_TRUE) + CHECK_CXX_ACCEPTS_FLAG("-mssse3" _SSSE3_OK) + + string(REGEX REPLACE "^.*(SSE4.1).*$" "\\1" _SSE_THERE ${CPUINFO}) + string(COMPARE EQUAL "SSE4.1" "${_SSE_THERE}" _SSE41_TRUE) + CHECK_CXX_ACCEPTS_FLAG("-msse4.1" _SSE41_OK) + + string(REGEX REPLACE "^.*(SSE4.2).*$" "\\1" _SSE_THERE ${CPUINFO}) + string(COMPARE EQUAL "SSE4.2" "${_SSE_THERE}" _SSE42_TRUE) + CHECK_CXX_ACCEPTS_FLAG("-msse4.2" _SSE42_OK) + + string(REGEX REPLACE "^.*(AVX).*$" "\\1" _SSE_THERE ${CPUINFO}) + string(COMPARE EQUAL "AVX" "${_SSE_THERE}" _AVX_TRUE) + CHECK_CXX_ACCEPTS_FLAG("-mavx" _AVX_OK) + + string(REGEX REPLACE "^.*(AVX2).*$" "\\1" _SSE_THERE ${CPUINFO}) + string(COMPARE EQUAL "AVX2" "${_SSE_THERE}" _AVX2_TRUE) + CHECK_CXX_ACCEPTS_FLAG("-mavx2" _AVX2_OK) + endif() +elseif(CMAKE_SYSTEM_NAME MATCHES "Windows") # TODO - set(SSE2_FOUND true CACHE BOOL "SSE2 available on host") - set(SSE3_FOUND false CACHE BOOL "SSE3 available on host") - set(SSSE3_FOUND false CACHE BOOL "SSSE3 available on host") - set(SSE4_1_FOUND false CACHE BOOL "SSE4.1 available on host") -ELSE(CMAKE_SYSTEM_NAME MATCHES "Linux") - set(SSE2_FOUND true CACHE BOOL "SSE2 available on host") - set(SSE3_FOUND false CACHE BOOL "SSE3 available on host") - set(SSSE3_FOUND false CACHE BOOL "SSSE3 available on host") - set(SSE4_1_FOUND false CACHE BOOL "SSE4.1 available on host") -ENDIF(CMAKE_SYSTEM_NAME MATCHES "Linux") - -if(NOT SSE2_FOUND) - MESSAGE(STATUS "Could not find hardware support for SSE2 on this machine.") -endif(NOT SSE2_FOUND) -if(NOT SSE3_FOUND) - MESSAGE(STATUS "Could not find hardware support for SSE3 on this machine.") -endif(NOT SSE3_FOUND) -if(NOT SSSE3_FOUND) - MESSAGE(STATUS "Could not find hardware support for SSSE3 on this machine.") -endif(NOT SSSE3_FOUND) -if(NOT SSE4_1_FOUND) - MESSAGE(STATUS "Could not find hardware support for SSE4.1 on this machine.") -endif(NOT SSE4_1_FOUND) - -mark_as_advanced(SSE2_FOUND SSE3_FOUND SSSE3_FOUND SSE4_1_FOUND) + set(_SSE_TRUE true) + set(_SSE_OK true) + set(_SSE2_TRUE true) + set(_SSE2_OK true) +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(SSE + REQUIRED_VARS _SSE_TRUE _SSE_OK + FAIL_MESSAGE "Could not find hardware support for SSE") +find_package_handle_standard_args(SSE2 + REQUIRED_VARS _SSE2_TRUE _SSE2_OK + FAIL_MESSAGE "Could not find hardware support for SSE2") +find_package_handle_standard_args(SSE3 + REQUIRED_VARS _SSE3_TRUE _SSE3_OK + FAIL_MESSAGE "Could not find hardware support for SSE3") +find_package_handle_standard_args(SSSE3 + REQUIRED_VARS _SSSE3_TRUE _SSSE3_OK + FAIL_MESSAGE "Could not find hardware support for SSSE3") +find_package_handle_standard_args(SSE4_1 + REQUIRED_VARS _SSE41_TRUE _SSE41_OK + FAIL_MESSAGE "Could not find hardware support for SSE4.1") +find_package_handle_standard_args(SSE4_2 + REQUIRED_VARS _SSE42_TRUE _SSE42_OK + FAIL_MESSAGE "Could not find hardware support for SSE4.2") +find_package_handle_standard_args(AVX + REQUIRED_VARS _AVX_TRUE _AVX_OK + FAIL_MESSAGE "Could not find hardware support for AVX") +find_package_handle_standard_args(AVX2 + REQUIRED_VARS _AVX2_TRUE _AVX2_OK + FAIL_MESSAGE "Could not find hardware support for AVX2") + +mark_as_advanced(SSE2_FOUND SSE3_FOUND SSSE3_FOUND SSE4_1_FOUND SSE4_2_FOUND AVX_FOUND AVX2_FOUND) + +unset(_SSE_THERE) +unset(_SSE_TRUE) +unset(_SSE_OK) +unset(_SSE_OK CACHE) +unset(_SSE2_TRUE) +unset(_SSE2_OK) +unset(_SSE2_OK CACHE) +unset(_SSE3_TRUE) +unset(_SSE3_OK) +unset(_SSE3_OK CACHE) +unset(_SSSE3_TRUE) +unset(_SSSE3_OK) +unset(_SSSE3_OK CACHE) +unset(_SSE4_1_TRUE) +unset(_SSE41_OK) +unset(_SSE41_OK CACHE) +unset(_SSE4_2_TRUE) +unset(_SSE42_OK) +unset(_SSE42_OK CACHE) +unset(_AVX_TRUE) +unset(_AVX_OK) +unset(_AVX_OK CACHE) +unset(_AVX2_TRUE) +unset(_AVX2_OK) +unset(_AVX2_OK CACHE) diff --git a/project/cmake/modules/FindSSH.cmake b/project/cmake/modules/FindSSH.cmake index 60c3537..538c699 100644 --- a/project/cmake/modules/FindSSH.cmake +++ b/project/cmake/modules/FindSSH.cmake @@ -1,21 +1,47 @@ -# - Try to find libssh -# Once done this will define +#.rst: +# FindSSH +# ------- +# Finds the SSH library # -# SSH_FOUND - system has libssh -# SSH_INCLUDE_DIRS - the libssh include directory -# SSH_LIBRARIES - The libssh libraries +# This will will define the following variables:: +# +# SSH_FOUND - system has SSH +# SSH_INCLUDE_DIRS - the SSH include directory +# SSH_LIBRARIES - the SSH libraries +# SSH_DEFINITIONS - the SSH definitions +# +# and the following imported targets:: +# +# SSH::SSH - The SSH library if(PKG_CONFIG_FOUND) - pkg_check_modules (SSH libssh) - list(APPEND SSH_INCLUDE_DIRS /usr/include) -else() - find_path(SSH_INCLUDE_DIRS libssh/libssh.h) - find_library(SSH_LIBRARIES ssh) + pkg_check_modules(PC_SSH libssh QUIET) endif() +find_path(SSH_INCLUDE_DIR NAMES libssh/libssh.h + PATHS ${PC_SSH_INCLUDEDIR}) +find_library(SSH_LIBRARY NAMES ssh + PATHS ${PC_SSH_LIBDIR}) + +set(SSH_VERSION ${PC_SSH_VERSION}) + include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(SSH DEFAULT_MSG SSH_INCLUDE_DIRS SSH_LIBRARIES) +find_package_handle_standard_args(SSH + REQUIRED_VARS SSH_LIBRARY SSH_INCLUDE_DIR + VERSION_VAR SSH_VERSION) + +if(SSH_FOUND) + set(SSH_LIBRARIES ${SSH_LIBRARY}) + set(SSH_INCLUDE_DIRS ${SSH_INCLUDE_DIR}) + set(SSH_DEFINITIONS -DHAVE_LIBSSH=1) -list(APPEND SSH_DEFINITIONS -DHAVE_LIBSSH=1) + if(NOT TARGET SSH::SSH) + add_library(SSH::SSH UNKNOWN IMPORTED) + set_target_properties(SSH::SSH PROPERTIES + IMPORTED_LOCATION "${SSH_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${SSH_INCLUDE_DIR}" + INTERFACE_COMPILE_DEFINITIONS HAVE_LIBSSH=1) + endif() +endif() -mark_as_advanced(SSH_INCLUDE_DIRS SSH_LIBRARIES SSH_DEFINITIONS) +mark_as_advanced(SSH_INCLUDE_DIR SSH_LIBRARY) diff --git a/project/cmake/modules/FindSWIG.cmake b/project/cmake/modules/FindSWIG.cmake index 84c7a51..523b49b 100644 --- a/project/cmake/modules/FindSWIG.cmake +++ b/project/cmake/modules/FindSWIG.cmake @@ -1,14 +1,29 @@ -if(NOT SWIG_EXECUTABLE) - find_program(SWIG_EXECUTABLE NAMES swig2.0 swig PATH_SUFFIXES swig) -endif() +#.rst: +# FindSWIG +# -------- +# Finds the SWIG executable +# +# This will will define the following variables:: +# +# SWIG_FOUND - system has SWIG +# SWIG_EXECUTABLE - the SWIG executable + +find_program(SWIG_EXECUTABLE NAMES swig3.0 swig2.0 swig + PATH_SUFFIXES swig) if(SWIG_EXECUTABLE) execute_process(COMMAND ${SWIG_EXECUTABLE} -swiglib OUTPUT_VARIABLE SWIG_DIR ERROR_VARIABLE SWIG_swiglib_error RESULT_VARIABLE SWIG_swiglib_result) + execute_process(COMMAND ${SWIG_EXECUTABLE} -version + OUTPUT_VARIABLE SWIG_version_output + ERROR_VARIABLE SWIG_version_output + RESULT_VARIABLE SWIG_version_result) + string(REGEX REPLACE ".*SWIG Version[^0-9.]*\([0-9.]+\).*" "\\1" + SWIG_VERSION "${SWIG_version_output}") endif() - include(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(SWIG REQUIRED_VARS SWIG_EXECUTABLE SWIG_DIR - VERSION_VAR SWIG_VERSION ) +find_package_handle_standard_args(SWIG + REQUIRED_VARS SWIG_EXECUTABLE SWIG_DIR + VERSION_VAR SWIG_VERSION) diff --git a/project/cmake/modules/FindShairplay.cmake b/project/cmake/modules/FindShairplay.cmake index 4804686..87d3107 100644 --- a/project/cmake/modules/FindShairplay.cmake +++ b/project/cmake/modules/FindShairplay.cmake @@ -35,11 +35,11 @@ if(NOT WIN32) " HAVE_SHAIRPLAY_CALLBACK_CLS) endif() - find_package_handle_standard_args(SHAIRPLAY + 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 + find_package_handle_standard_args(Shairplay REQUIRED_VARS SHAIRPLAY_INCLUDE_DIR) endif() diff --git a/project/cmake/modules/FindSmbClient.cmake b/project/cmake/modules/FindSmbClient.cmake new file mode 100644 index 0000000..6455cce --- /dev/null +++ b/project/cmake/modules/FindSmbClient.cmake @@ -0,0 +1,47 @@ +#.rst: +# FindSmbClient +# ------------- +# Finds the SMB Client library +# +# This will will define the following variables:: +# +# SMBCLIENT_FOUND - system has SmbClient +# SMBCLIENT_INCLUDE_DIRS - the SmbClient include directory +# SMBCLIENT_LIBRARIES - the SmbClient libraries +# SMBCLIENT_DEFINITIONS - the SmbClient definitions +# +# and the following imported targets:: +# +# SmbClient::SmbClient - The SmbClient library + +if(PKGCONFIG_FOUND) + pkg_check_modules(PC_SMBCLIENT smbclient QUIET) +endif() + +find_path(SMBCLIENT_INCLUDE_DIR NAMES libsmbclient.h + PATHS ${PC_SMBCLIENT_INCLUDEDIR}) +find_library(SMBCLIENT_LIBRARY NAMES smbclient + PATHS ${PC_SMBCLIENT_LIBDIR}) + +set(SMBCLIENT_VERSION ${PC_SMBCLIENT_VERSION}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(SmbClient + REQUIRED_VARS SMBCLIENT_LIBRARY SMBCLIENT_INCLUDE_DIR + VERSION_VAR SMBCLIENT_VERSION) + +if(SMBCLIENT_FOUND) + set(SMBCLIENT_LIBRARIES ${SMBCLIENT_LIBRARY}) + set(SMBCLIENT_INCLUDE_DIRS ${SMBCLIENT_INCLUDE_DIR}) + set(SMBCLIENT_DEFINITIONS -DHAVE_LIBSMBCLIENT=1) + + if(NOT TARGET SmbClient::SmbClient) + add_library(SmbClient::SmbClient UNKNOWN IMPORTED) + set_target_properties(SmbClient::SmbClient PROPERTIES + IMPORTED_LOCATION "${SMBCLIENT_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${SMBCLIENT_INCLUDE_DIR}" + INTERFACE_COMPILE_DEFINITIONS HAVE_LIBSMBCLIENT=1) + endif() +endif() + +mark_as_advanced(LIBSMBCLIENT_INCLUDE_DIR LIBSMBCLIENT_LIBRARY) diff --git a/project/cmake/modules/FindSqlite3.cmake b/project/cmake/modules/FindSqlite3.cmake index a47944e..abde0cf 100644 --- a/project/cmake/modules/FindSqlite3.cmake +++ b/project/cmake/modules/FindSqlite3.cmake @@ -1,19 +1,44 @@ -# - Try to find SQLITE3 -# Once done this will define +#.rst: +# FindSqlite3 +# ----------- +# Finds the SQLite3 library # -# SQLITE3_FOUND - system has sqlite3 -# SQLITE3_INCLUDE_DIRS - the sqlite3 include directory -# SQLITE3_LIBRARIES - The sqlite3 libraries +# This will will define the following variables:: +# +# SQLITE3_FOUND - system has SQLite3 +# SQLITE3_INCLUDE_DIRS - the SQLite3 include directory +# SQLITE3_LIBRARIES - the SQLite3 libraries +# +# and the following imported targets:: +# +# SQLite3::SQLite3 - The SQLite3 library if(PKG_CONFIG_FOUND) - pkg_check_modules (SQLITE3 sqlite3) - list(APPEND SQLITE3_INCLUDE_DIRS ${SQLITE3_INCLUDEDIR}) -else() - find_path(SQLITE3_INCLUDE_DIRS sqlite3.h) - find_library(SQLITE3_LIBRARIES sqlite3) + pkg_check_modules(PC_SQLITE3 sqlite3 QUIET) endif() +find_path(SQLITE3_INCLUDE_DIR NAMES sqlite3.h + PATHS ${PC_SQLITE3_INCLUDEDIR}) +find_library(SQLITE3_LIBRARY NAMES sqlite3 + PATHS ${PC_SQLITE3_LIBDIR}) + +set(SQLITE3_VERSION ${PC_SQLITE3_VERSION}) + include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(Sqlite3 DEFAULT_MSG SQLITE3_INCLUDE_DIRS SQLITE3_LIBRARIES) +find_package_handle_standard_args(Sqlite3 + REQUIRED_VARS SQLITE3_LIBRARY SQLITE3_INCLUDE_DIR + VERSION_VAR SQLITE3_VERSION) + +if(SQLITE3_FOUND) + set(SQLITE3_INCLUDE_DIRS ${SQLITE3_INCLUDE_DIR}) + set(SQLITE3_LIBRARIES ${SQLITE3_LIBRARY}) + + if(NOT TARGET SQLite3::SQLite3) + add_library(SQLite3::SQLite3 UNKNOWN IMPORTED) + set_target_properties(SQLite3::SQLite3 PROPERTIES + IMPORTED_LOCATION "${SQLITE3_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${SQLITE3_INCLUDE_DIR}") + endif() +endif() -mark_as_advanced(SQLITE3_INCLUDE_DIRS SQLITE3_LIBRARIES) +mark_as_advanced(SQLITE3_INCLUDE_DIR SQLITE3_LIBRARY) diff --git a/project/cmake/modules/FindTagLib.cmake b/project/cmake/modules/FindTagLib.cmake index 06b615d..8c8c2f3 100644 --- a/project/cmake/modules/FindTagLib.cmake +++ b/project/cmake/modules/FindTagLib.cmake @@ -14,7 +14,7 @@ # TagLib::TagLib - The TagLib library if(PKG_CONFIG_FOUND) - pkg_check_modules(PC_TAGLIB taglib>=1.8.0 QUIET) + pkg_check_modules(PC_TAGLIB taglib>=1.9.0 QUIET) endif() find_path(TAGLIB_INCLUDE_DIR taglib/tag.h @@ -29,7 +29,7 @@ include(SelectLibraryConfigurations) select_library_configurations(TAGLIB) include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(TAGLIB +find_package_handle_standard_args(TagLib REQUIRED_VARS TAGLIB_LIBRARY TAGLIB_INCLUDE_DIR VERSION_VAR TAGLIB_VERSION) diff --git a/project/cmake/modules/FindTinyXML.cmake b/project/cmake/modules/FindTinyXML.cmake index 54ec946..1220a94 100644 --- a/project/cmake/modules/FindTinyXML.cmake +++ b/project/cmake/modules/FindTinyXML.cmake @@ -33,7 +33,7 @@ include(SelectLibraryConfigurations) select_library_configurations(TINYXML) include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(TINYXML +find_package_handle_standard_args(TinyXML REQUIRED_VARS TINYXML_LIBRARY TINYXML_INCLUDE_DIR VERSION_VAR TINYXML_VERSION) diff --git a/project/cmake/modules/FindUDEV.cmake b/project/cmake/modules/FindUDEV.cmake new file mode 100644 index 0000000..422c437 --- /dev/null +++ b/project/cmake/modules/FindUDEV.cmake @@ -0,0 +1,47 @@ +#.rst: +# FindUDEV +# ------- +# Finds the UDEV library +# +# This will will define the following variables:: +# +# UDEV_FOUND - system has UDEV +# UDEV_INCLUDE_DIRS - the UDEV include directory +# UDEV_LIBRARIES - the UDEV libraries +# UDEV_DEFINITIONS - the UDEV definitions +# +# and the following imported targets:: +# +# UDEV::UDEV - The UDEV library + +if(PKG_CONFIG_FOUND) + pkg_check_modules(PC_UDEV libudev QUIET) +endif() + +find_path(UDEV_INCLUDE_DIR NAMES libudev.h + PATHS ${PC_UDEV_INCLUDEDIR}) +find_library(UDEV_LIBRARY NAMES udev + PATHS ${PC_UDEV_LIBDIR}) + +set(UDEV_VERSION ${PC_UDEV_VERSION}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(UDEV + REQUIRED_VARS UDEV_LIBRARY UDEV_INCLUDE_DIR + VERSION_VAR UDEV_VERSION) + +if(UDEV_FOUND) + set(UDEV_LIBRARIES ${UDEV_LIBRARY}) + set(UDEV_INCLUDE_DIRS ${UDEV_INCLUDE_DIR}) + set(UDEV_DEFINITIONS -DHAVE_LIBUDEV=1) + + if(NOT TARGET UDEV::UDEV) + add_library(UDEV::UDEV UNKNOWN IMPORTED) + set_target_properties(UDEV::UDEV PROPERTIES + IMPORTED_LOCATION "${UDEV_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${UDEV_INCLUDE_DIR}" + INTERFACE_COMPILE_DEFINITIONS HAVE_LIBUDEV=1) + endif() +endif() + +mark_as_advanced(UDEV_INCLUDE_DIR UDEV_LIBRARY) diff --git a/project/cmake/modules/FindUDev.cmake b/project/cmake/modules/FindUDev.cmake deleted file mode 100644 index 97fa956..0000000 --- a/project/cmake/modules/FindUDev.cmake +++ /dev/null @@ -1,22 +0,0 @@ -# - Try to find udev -# Once done this will define -# -# UDEV_FOUND - system has libudev -# UDEV_INCLUDE_DIRS - the libudev include directory -# UDEV_LIBRARIES - The libudev libraries - -if(PKG_CONFIG_FOUND) - pkg_check_modules (UDEV libudev) - list(APPEND UDEV_INCLUDE_DIRS ${UDEV_INCLUDEDIR}) -endif() - -if(NOT UDEV_FOUND) - find_path(UDEV_INCLUDE_DIRS libudev.h) - find_library(UDEV_LIBRARIES udev) -endif() - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(UDev DEFAULT_MSG UDEV_INCLUDE_DIRS UDEV_LIBRARIES) - -mark_as_advanced(UDEV_INCLUDE_DIRS UDEV_LIBRARIES) -list(APPEND UDEV_DEFINITIONS -DHAVE_LIBUDEV=1) diff --git a/project/cmake/modules/FindVAAPI.cmake b/project/cmake/modules/FindVAAPI.cmake index 08e821f..ce3fe1a 100644 --- a/project/cmake/modules/FindVAAPI.cmake +++ b/project/cmake/modules/FindVAAPI.cmake @@ -9,6 +9,10 @@ # VAAPI_INCLUDE_DIRS - the VAAPI include directory # VAAPI_LIBRARIES - the VAAPI libraries # VAAPI_DEFINITIONS - the VAAPI definitions +# +# and the following imported targets:: +# +# VAAPI::VAAPI - The VAAPI library if(PKG_CONFIG_FOUND) pkg_check_modules(PC_VAAPI libva libva-x11 QUIET) @@ -42,6 +46,20 @@ if(VAAPI_FOUND) set(VAAPI_INCLUDE_DIRS ${VAAPI_INCLUDE_DIR}) set(VAAPI_LIBRARIES ${VAAPI_libva_LIBRARY} ${VAAPI_libva-x11_LIBRARY}) set(VAAPI_DEFINITIONS -DHAVE_LIBVA=1) + + if(NOT TARGET VAAPI::VAAPI_X11) + add_library(VAAPI::VAAPI_X11 UNKNOWN IMPORTED) + set_target_properties(VAAPI::VAAPI_X11 PROPERTIES + IMPORTED_LOCATION "${VAAPI_libva-x11_LIBRARY}") + endif() + if(NOT TARGET VAAPI::VAAPI) + add_library(VAAPI::VAAPI UNKNOWN IMPORTED) + set_target_properties(VAAPI::VAAPI PROPERTIES + IMPORTED_LOCATION "${VAAPI_libva_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${VAAPI_INCLUDE_DIR}" + INTERFACE_COMPILE_DEFINITIONS HAVE_LIBVA=1 + INTERFACE_LINK_LIBRARIES VAAPI::VAAPI_X11) + endif() endif() mark_as_advanced(VAAPI_INCLUDE_DIR VAAPI_libva_LIBRARY VAAPI_libva-x11_LIBRARY) diff --git a/project/cmake/modules/FindVDPAU.cmake b/project/cmake/modules/FindVDPAU.cmake index 680b45f..b99e03f 100644 --- a/project/cmake/modules/FindVDPAU.cmake +++ b/project/cmake/modules/FindVDPAU.cmake @@ -9,6 +9,10 @@ # VDPAU_INCLUDE_DIRS - the VDPAU include directory # VDPAU_LIBRARIES - the VDPAU libraries # VDPAU_DEFINITIONS - the VDPAU definitions +# +# and the following imported targets:: +# +# VDPAU::VDPAU - The VDPAU library if(PKG_CONFIG_FOUND) pkg_check_modules(PC_VDPAU vdpau QUIET) @@ -19,14 +23,25 @@ find_path(VDPAU_INCLUDE_DIR NAMES vdpau/vdpau.h vdpau/vdpau_x11.h find_library(VDPAU_LIBRARY NAMES vdpau PATHS ${PC_VDPAU_LIBDIR}) +set(VDPAU_VERSION ${PC_VDPAU_VERSION}) + include(FindPackageHandleStandardArgs) find_package_handle_standard_args(VDPAU - REQUIRED_VARS VDPAU_LIBRARY VDPAU_INCLUDE_DIR) + REQUIRED_VARS VDPAU_LIBRARY VDPAU_INCLUDE_DIR + VERSION_VAR VDPAU_VERSION) if(VDPAU_FOUND) set(VDPAU_INCLUDE_DIRS ${VDPAU_INCLUDE_DIR}) set(VDPAU_LIBRARIES ${VDPAU_LIBRARY}) set(VDPAU_DEFINITIONS -DHAVE_LIBVDPAU=1) + + if(NOT TARGET VDPAU::VDPAU) + add_library(VDPAU::VDPAU UNKNOWN IMPORTED) + set_target_properties(VDPAU::VDPAU PROPERTIES + IMPORTED_LOCATION "${VDPAU_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${VDPAU_INCLUDE_DIR}" + INTERFACE_COMPILE_DEFINITIONS HAVE_LIBVDPAU=1) + endif() endif() mark_as_advanced(VDPAU_INCLUDE_DIR VDPAU_LIBRARY) diff --git a/project/cmake/modules/FindX.cmake b/project/cmake/modules/FindX.cmake index d9ab5bc..19bb770 100644 --- a/project/cmake/modules/FindX.cmake +++ b/project/cmake/modules/FindX.cmake @@ -1,21 +1,57 @@ -# - Try to find X11 -# Once done this will define +#.rst: +# FindX +# ----- +# Finds the X11 library # -# X11_FOUND - system has X11 -# X11_INCLUDE_DIRS - the X11 include directory -# X11_LIBRARIES - The X11 libraries +# This will will define the following variables:: +# +# X_FOUND - system has X11 +# X_INCLUDE_DIRS - the X11 include directory +# X_LIBRARIES - the X11 libraries +# X_DEFINITIONS - the X11 definitions +# +# and the following imported targets:: +# +# X::X - The X11 library +# X::Xext - The X11 extension library if(PKG_CONFIG_FOUND) - pkg_check_modules (X x11 xext libdrm egl) - list(APPEND X_INCLUDE_DIRS /usr/include) -else() - find_path(X_INCLUDE_DIRS X11/Xlib.h) - find_library(X_LIBRARIES X11) + pkg_check_modules(PC_X x11 xext QUIET) endif() +find_path(X_INCLUDE_DIR NAMES X11/Xlib.h + PATHS ${PC_X_x11_INCLUDEDIR}) +find_library(X_LIBRARY NAMES X11 + PATHS ${PC_X_x11_LIBDIR}) +find_library(X_EXT_LIBRARY NAMES Xext + PATHS ${PC_X_xext_LIBDIR}) + +set(X_VERSION ${PC_X_x11_VERSION}) + include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(X DEFAULT_MSG X_INCLUDE_DIRS X_LIBRARIES) +find_package_handle_standard_args(X + REQUIRED_VARS X_LIBRARY X_EXT_LIBRARY X_INCLUDE_DIR + VERSION_VAR X_VERSION) + +if(X_FOUND) + set(X_LIBRARIES ${X_LIBRARY} ${X_EXT_LIBRARY}) + set(X_INCLUDE_DIRS ${X_INCLUDE_DIR}) + set(X_DEFINITIONS -DHAVE_X11=1) -list(APPEND X_DEFINITIONS -DHAVE_X11=1) + if(NOT TARGET X::X) + add_library(X::X UNKNOWN IMPORTED) + set_target_properties(X::X PROPERTIES + IMPORTED_LOCATION "${X_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${X_INCLUDE_DIR}" + INTERFACE_COMPILE_DEFINITIONS HAVE_X11=1) + endif() + if(NOT TARGET X::Xext) + add_library(X::Xext UNKNOWN IMPORTED) + set_target_properties(X::Xext PROPERTIES + IMPORTED_LOCATION "${X_EXT_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${X_INCLUDE_DIR}" + INTERFACE_LINK_LIBRARIES X::X) + endif() +endif() -mark_as_advanced(X_INCLUDE_DIRS X_LIBRARIES X_DEFINITIONS) +mark_as_advanced(X_INCLUDE_DIR X_LIBRARY X_EXT_LIBRARY) diff --git a/project/cmake/modules/FindXRandR.cmake b/project/cmake/modules/FindXRandR.cmake index 57ff750..9feaedc 100644 --- a/project/cmake/modules/FindXRandR.cmake +++ b/project/cmake/modules/FindXRandR.cmake @@ -1,22 +1,47 @@ -# - Try to find xrandr -# Once done this will define +#.rst: +# FindXRandR +# ---------- +# Finds the XRandR library # -# XRANDR_FOUND - system has lixrandr -# XRANDR_INCLUDE_DIRS - the libxrandr include directory -# XRANDR_LIBRARIES - The libxrandr libraries +# This will will define the following variables:: +# +# XRANDR_FOUND - system has XRANDR +# XRANDR_INCLUDE_DIRS - the XRANDR include directory +# XRANDR_LIBRARIES - the XRANDR libraries +# XRANDR_DEFINITIONS - the XRANDR definitions +# +# and the following imported targets:: +# +# XRandR::XRandR - The XRANDR library if(PKG_CONFIG_FOUND) - pkg_check_modules (XRANDR xrandr) - list(APPEND XRANDR_INCLUDE_DIRS ${XRANDR_INCLUDEDIR}) -else() - find_library(XRANDR_LIBRARIES Xrandr) + pkg_check_modules(PC_XRANDR xrandr QUIET) endif() -if(XRANDR_FOUND) +find_path(XRANDR_INCLUDE_DIR NAMES X11/extensions/Xrandr.h + PATHS ${PC_XRANDR_INCLUDEDIR}) +find_library(XRANDR_LIBRARY NAMES Xrandr + PATHS ${PC_XRANDR_LIBDIR}) + +set(XRANDR_VERSION ${PC_XRANDR_VERSION}) + include(FindPackageHandleStandardArgs) - find_package_handle_standard_args(XRandR DEFAULT_MSG XRANDR_INCLUDE_DIRS XRANDR_LIBRARIES) +find_package_handle_standard_args(XRandR + REQUIRED_VARS XRANDR_LIBRARY XRANDR_INCLUDE_DIR + VERSION_VAR XRANDR_VERSION) - list(APPEND XRANDR_DEFINITIONS -DHAVE_LIBXRANDR=1) +if(XRANDR_FOUND) + set(XRANDR_LIBRARIES ${XRANDR_LIBRARY}) + set(XRANDR_INCLUDE_DIRS ${XRANDR_INCLUDE_DIR}) + set(XRANDR_DEFINITIONS -DHAVE_LIBXRANDR=1) - mark_as_advanced(XRANDR_INCLUDE_DIRS XRANDR_LIBRARIES XRANDR_DEFINITIONS) + if(NOT TARGET XRandR::XRandR) + add_library(XRandR::XRandR UNKNOWN IMPORTED) + set_target_properties(XRandR::XRandR PROPERTIES + IMPORTED_LOCATION "${XRANDR_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${XRANDR_INCLUDE_DIR}" + INTERFACE_COMPILE_DEFINITIONS HAVE_LIBXRANDR=1) + endif() endif() + +mark_as_advanced(XRANDR_INCLUDE_DIR XRANDR_LIBRARY) diff --git a/project/cmake/modules/FindXSLT.cmake b/project/cmake/modules/FindXSLT.cmake new file mode 100644 index 0000000..9be51d3 --- /dev/null +++ b/project/cmake/modules/FindXSLT.cmake @@ -0,0 +1,50 @@ +#.rst: +# FindXSLT +# -------- +# Finds the XSLT library +# +# This will will define the following variables:: +# +# XSLT_FOUND - system has XSLT +# XSLT_INCLUDE_DIRS - the XSLT include directory +# XSLT_LIBRARIES - the XSLT libraries +# XSLT_DEFINITIONS - the XSLT definitions +# +# and the following imported targets:: +# +# XSLT::XSLT - The XSLT library + +find_package(LibXml2 REQUIRED) + +if(PKG_CONFIG_FOUND) + pkg_check_modules(PC_XSLT libxslt QUIET) +endif() + +find_path(XSLT_INCLUDE_DIR NAMES libxslt/xslt.h + PATHS ${PC_XSLT_INCLUDEDIR}) +find_library(XSLT_LIBRARY NAMES xslt libxslt + PATHS ${PC_XSLT_LIBDIR}) + +set(XSLT_VERSION ${PC_XSLT_VERSION}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(XSLT + REQUIRED_VARS XSLT_LIBRARY XSLT_INCLUDE_DIR + VERSION_VAR XSLT_VERSION) + +if(XSLT_FOUND) + set(XSLT_LIBRARIES ${XSLT_LIBRARY} ${LIBXML2_LIBRARIES}) + set(XSLT_INCLUDE_DIRS ${XSLT_INCLUDE_DIR} ${LIBXML2_INCLUDE_DIR}) + set(XSLT_DEFINITIONS -DHAVE_LIBXSLT=1) + + if(NOT TARGET XSLT::XSLT) + add_library(XSLT::XSLT UNKNOWN IMPORTED) + set_target_properties(XSLT::XSLT PROPERTIES + IMPORTED_LOCATION "${XSLT_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${XSLT_INCLUDE_DIR} ${LIBXML2_INCLUDE_DIR}" + INTERFACE_COMPILE_DEFINITIONS HAVE_LIBXSLT=1 + ITERFACE_LINK_LIBRARIES "${LIBXML2_LIBRARIES}") + endif() +endif() + +mark_as_advanced(XSLT_INCLUDE_DIR XSLT_LIBRARY) diff --git a/project/cmake/modules/FindXslt.cmake b/project/cmake/modules/FindXslt.cmake deleted file mode 100644 index 442ba43..0000000 --- a/project/cmake/modules/FindXslt.cmake +++ /dev/null @@ -1,18 +0,0 @@ -# - Try to find XSLT -# Once done this will define -# -# XSLT_FOUND - system has libxslt -# XSLT_INCLUDE_DIRS - the libxslt include directory -# XSLT_LIBRARIES - The libxslt libraries - -if(PKG_CONFIG_FOUND) - pkg_check_modules (XSLT libxslt) -else() - find_path(XSLT_INCLUDE_DIRS libxslt/xslt.h) - find_library(XSLT_LIBRARIES NAMES xslt libxslt) -endif() - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(Xslt DEFAULT_MSG XSLT_INCLUDE_DIRS XSLT_LIBRARIES) - -mark_as_advanced(XSLT_INCLUDE_DIRS XSLT_LIBRARIES) diff --git a/project/cmake/modules/FindYajl.cmake b/project/cmake/modules/FindYajl.cmake index c27b03a..c73a67b 100644 --- a/project/cmake/modules/FindYajl.cmake +++ b/project/cmake/modules/FindYajl.cmake @@ -1,27 +1,62 @@ -# Base Io build system -# Written by Jeremy Tregunna +#.rst: +# FindYajl +# -------- +# Finds the Yajl library # -# Find libyajl -pkg_check_modules(YAJL yajl>=2.0) -if(YAJL_FOUND) - list(APPEND YAJL_DEFINITIONS -DYAJL_MAJOR=2) +# This will will define the following variables:: +# +# YAJL_FOUND - system has Yajl +# YAJL_INCLUDE_DIRS - Yajl include directory +# YAJL_LIBRARIES - the Yajl libraries +# +# and the following imported targets:: +# +# Yajl::Yajl - The Yajl library + +if(NOT Yajl_FIND_VERSION) + set(Yajl_FIND_VERSION 2.0.0) +endif() + +if(PKG_CONFIG_FOUND) + pkg_check_modules(PC_YAJL yajl>=${Yajl_FIND_VERSION} QUIET) endif() -if(NOT YAJL_FOUND) - find_path(YAJL_INCLUDE_DIRS yajl/yajl_common.h) - find_library(YAJL_LIBRARIES NAMES yajl) +find_path(YAJL_INCLUDE_DIR NAMES yajl/yajl_common.h + PATHS ${PC_YAJL_INCLUDEDIR}) +find_library(YAJL_LIBRARY NAMES yajl + PATHS ${PC_YAJL_LIBDIR}) - file(STRINGS ${YAJL_INCLUDE_DIRS}/yajl/yajl_version.h version_header) - string(REGEX MATCH "YAJL_MAJOR ([0-9]+)" YAJL_VERSION_MAJOR ${version_header}) +if(PC_YAJL_VERSION) + set(YAJL_VERSION_STRING ${PC_YAJL_VERSION}) +elseif(YAJL_INCLUDE_DIR AND EXISTS "${YAJL_INCLUDE_DIR}/yajl/yajl_version.h") + file(STRINGS "${YAJL_INCLUDE_DIR}/yajl/yajl_version.h" yajl_version_str REGEX "^[ \t]*#define[ \t]+YAJL_(MAJOR|MINOR|MICRO)") string(REGEX REPLACE "YAJL_MAJOR ([0-9]+)" "\\1" YAJL_VERSION_MAJOR "${YAJL_VERSION_MAJOR}") - if (YAJL_VERSION_MINOR LESS 2) - set(YAJL_INCLUDE_DIRS) - set(YALJ_LIBRARIES) - endif() - list(APPEND YAJL_DEFINITIONS -DYAJL_MAJOR=${YAJL_VERSION_MAJOR}) + + string(REGEX REPLACE ".*YAJL_MAJOR ([0-9]+).*" "\\1" yajl_major "${yajl_version_str}") + string(REGEX REPLACE ".*YAJL_MINOR ([0-9]+).*" "\\1" yajl_minor "${yajl_version_str}") + string(REGEX REPLACE ".*YAJL_MICRO ([0-9]+).*" "\\1" yajl_micro "${yajl_version_str}") + set(YAJL_VERSION_STRING "${yajl_major}.${yajl_minor}.${yajl_micro}") + unset(yajl_version_str) + unset(yajl_major) + unset(yajl_minor) + unset(yajl_micro) endif() include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(Yajl DEFAULT_MSG YAJL_INCLUDE_DIRS YAJL_LIBRARIES) +find_package_handle_standard_args(Yajl + REQUIRED_VARS YAJL_LIBRARY YAJL_INCLUDE_DIR + VERSION_VAR YAJL_VERSION_STRING) + +if(YAJL_FOUND) + set(YAJL_INCLUDE_DIRS ${YAJL_INCLUDE_DIR}) + set(YAJL_LIBRARIES ${YAJL_LIBRARY}) + + if(NOT TARGET Yajl::Yajl) + add_library(Yajl::Yajl UNKNOWN IMPORTED) + set_target_properties(Yajl::Yajl PROPERTIES + IMPORTED_LOCATION "${YAJL_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${YAJL_INCLUDE_DIR}") + endif() +endif() -mark_as_advanced(YAJL_INCLUDE_DIRS YAJL_LIBRARIES YAJL_DEFINITIONS) +mark_as_advanced(YAJL_INCLUDE_DIR YAJL_LIBRARY) diff --git a/project/cmake/modules/LDGOLD.cmake b/project/cmake/modules/LDGOLD.cmake new file mode 100644 index 0000000..ad19c6b --- /dev/null +++ b/project/cmake/modules/LDGOLD.cmake @@ -0,0 +1,45 @@ +option(ENABLE_LDGOLD "Use GNU gold linker" ON) + +set(LDGOLD_FOUND FALSE) +if(ENABLE_LDGOLD) + execute_process(COMMAND ${CMAKE_C_COMPILER} -fuse-ld=gold -Wl,--version ERROR_QUIET OUTPUT_VARIABLE LD_VERSION) + if(LD_VERSION MATCHES "GNU gold") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold") + set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold") + set(LDGOLD_FOUND TRUE) + message(STATUS "Linker: GNU gold") + else() + message(WARNING "GNU gold linker is not available, falling back to default system linker") + endif() +else() + message(STATUS "Linker: Default system linker") +endif() + +set(DEFAULT_ENABLE_DEBUGFISSION FALSE) +if(CMAKE_BUILD_TYPE STREQUAL Debug OR + CMAKE_BUILD_TYPE STREQUAL RelWithDebInfo AND + LDGOLD_FOUND) + set(DEFAULT_ENABLE_DEBUGFISSION TRUE) +endif() + +include(CMakeDependentOption) +cmake_dependent_option(ENABLE_DEBUGFISSION "Enable Debug Fission support" ON + "DEFAULT_ENABLE_DEBUGFISSION" OFF) + +set(DEBUGFISSION_FOUND FALSE) +if(ENABLE_DEBUGFISSION) + include(TestCXXAcceptsFlag) + check_cxx_accepts_flag(-gsplit-dwarf CXX_ACCEPTS_GSPLIT_DWARF) + if(CXX_ACCEPTS_GSPLIT_DWARF) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -gsplit-dwarf") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -gsplit-dwarf") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gdb-index") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gdb-index") + set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gdb-index") + set(DEBUGFISSION_FOUND TRUE) + message(STATUS "Debug Fission enabled") + else() + message(WARNING "Debug Fission is not available") + endif() +endif() diff --git a/project/cmake/modules/extra/ECMEnableSanitizers.cmake b/project/cmake/modules/extra/ECMEnableSanitizers.cmake new file mode 100644 index 0000000..aa7092d --- /dev/null +++ b/project/cmake/modules/extra/ECMEnableSanitizers.cmake @@ -0,0 +1,149 @@ +#.rst: +# ECMEnableSanitizers +# ------------------- +# +# Enable compiler sanitizer flags. +# +# The following sanitizers are supported: +# +# - Address Sanitizer +# - Memory Sanitizer +# - Thread Sanitizer +# - Leak Sanitizer +# - Undefined Behaviour Sanitizer +# +# All of them are implemented in Clang, depending on your version, and +# there is an work in progress in GCC, where some of them are currently +# implemented. +# +# This module will check your current compiler version to see if it +# supports the sanitizers that you want to enable +# +# Usage +# ===== +# +# Simply add:: +# +# include(ECMEnableSanitizers) +# +# to your ``CMakeLists.txt``. Note that this module is included in +# KDECompilerSettings, so projects using that module do not need to also +# include this one. +# +# The sanitizers are not enabled by default. Instead, you must set +# ``ECM_ENABLE_SANITIZERS`` (either in your ``CMakeLists.txt`` or on the +# command line) to a semicolon-separated list of sanitizers you wish to enable. +# The options are: +# +# - address +# - memory +# - thread +# - leak +# - undefined +# +# The sanitizers "address", "memory" and "thread" are mutually exclusive. You +# cannot enable two of them in the same build. +# +# "leak" requires the "address" sanitizer. +# +# .. note:: +# +# To reduce the overhead induced by the instrumentation of the sanitizers, it +# is advised to enable compiler optimizations (``-O1`` or higher). +# +# Example +# ======= +# +# This is an example of usage:: +# +# mkdir build +# cd build +# cmake -DECM_ENABLE_SANITIZERS='address;leak;undefined' .. +# +# .. note:: +# +# Most of the sanitizers will require Clang. To enable it, use:: +# +# -DCMAKE_CXX_COMPILER=clang++ +# +# Since 1.3.0. + +#============================================================================= +# Copyright 2014 Mathieu Tarral +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file COPYING-CMAKE-SCRIPTS for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of extra-cmake-modules, substitute the full +# License text for the above reference.) + +# MACRO check_compiler_version +#----------------------------- +macro (check_compiler_version gcc_required_version clang_required_version) + if ( + ( + CMAKE_CXX_COMPILER_ID MATCHES "GNU" + AND + CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${gcc_required_version} + ) + OR + ( + CMAKE_CXX_COMPILER_ID MATCHES "Clang" + AND + CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${clang_required_version} + ) + ) + # error ! + message(FATAL_ERROR "You ask to enable the sanitizer ${CUR_SANITIZER}, + but your compiler ${CMAKE_CXX_COMPILER_ID} version ${CMAKE_CXX_COMPILER_VERSION} + does not support it ! + You should use at least GCC ${gcc_required_version} or Clang ${clang_required_version} + (99.99 means not implemented yet)") + endif () +endmacro () + +# MACRO check_compiler_support +#------------------------------ +macro (enable_sanitizer_flags sanitize_option) + if (${sanitize_option} MATCHES "address") + check_compiler_version("4.8" "3.1") + set(XSAN_COMPILE_FLAGS "-fsanitize=address -fno-omit-frame-pointer -fno-optimize-sibling-calls") + set(XSAN_LINKER_FLAGS "asan") + elseif (${sanitize_option} MATCHES "thread") + check_compiler_version("4.8" "3.1") + set(XSAN_COMPILE_FLAGS "-fsanitize=thread") + set(XSAN_LINKER_FLAGS "tsan") + elseif (${sanitize_option} MATCHES "memory") + check_compiler_version("99.99" "3.1") + set(XSAN_COMPILE_FLAGS "-fsanitize=memory") + elseif (${sanitize_option} MATCHES "leak") + check_compiler_version("4.9" "3.4") + set(XSAN_COMPILE_FLAGS "-fsanitize=leak") + set(XSAN_LINKER_FLAGS "lsan") + elseif (${sanitize_option} MATCHES "undefined") + check_compiler_version("4.9" "3.1") + set(XSAN_COMPILE_FLAGS "-fsanitize=undefined -fno-omit-frame-pointer -fno-optimize-sibling-calls") + else () + message(FATAL_ERROR "Compiler sanitizer option \"${sanitize_option}\" not supported.") + endif () +endmacro () + +# for each element of the ECM_ENABLE_SANITIZERS list +foreach ( CUR_SANITIZER ${ECM_ENABLE_SANITIZERS} ) + # lowercase filter + string(TOLOWER ${CUR_SANITIZER} CUR_SANITIZER) + # check option and enable appropriate flags + enable_sanitizer_flags ( ${CUR_SANITIZER} ) + set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${XSAN_COMPILE_FLAGS}" ) + if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") + link_libraries(${XSAN_LINKER_FLAGS}) + endif() + if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + string(REPLACE "-Wl,--no-undefined" "" CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}") + string(REPLACE "-Wl,--no-undefined" "" CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS}") + endif () +endforeach () -- cgit v1.2.3