From 4830f27a40323fe859dc166337a2b861877b7121 Mon Sep 17 00:00:00 2001 From: manuel Date: Mon, 1 Jan 2018 13:40:09 +0100 Subject: sync with upstream --- cmake/README.md | 18 ++ cmake/addons/CMakeLists.txt | 8 +- cmake/addons/depends/windowsstore/CMakeLists.txt | 52 +++ cmake/addons/depends/windowsstore/Install.cmake | 24 ++ cmake/addons/depends/windowsstore/README | 19 ++ .../windowsstore/p8-platform/p8-platform.txt | 1 + cmake/addons/depends/windowsstore/prebuilt/README | 21 ++ cmake/installdata/windows/addons.txt | 2 + cmake/installdata/windows/dlls.txt | 1 - cmake/installdata/windowsstore/addons.txt | 3 + cmake/installdata/windowsstore/dlls.txt | 2 + cmake/installdata/windowsstore/irss.txt | 2 + cmake/installdata/windowsstore/python.txt | 1 + cmake/modules/FindAlsa.cmake | 2 +- cmake/modules/FindAvahi.cmake | 6 +- cmake/modules/FindBluray.cmake | 5 + cmake/modules/FindCurl.cmake | 2 +- cmake/modules/FindD3DX11Effects.cmake | 27 +- cmake/modules/FindDBus.cmake | 4 +- cmake/modules/FindEGL.cmake | 8 +- cmake/modules/FindFFMPEG.cmake | 18 +- cmake/modules/FindFmt.cmake | 46 +++ cmake/modules/FindIMX.cmake | 38 --- cmake/modules/FindIconv.cmake | 44 +++ cmake/modules/FindJsonSchemaBuilder.cmake | 2 +- cmake/modules/FindLibDvd.cmake | 357 +++++++++++---------- cmake/modules/FindMDNS.cmake | 8 +- cmake/modules/FindMicroHttpd.cmake | 2 +- cmake/modules/FindMySqlClient.cmake | 4 +- cmake/modules/FindNFS.cmake | 4 +- cmake/modules/FindOpenGLES.cmake | 26 +- cmake/modules/FindOpenGLES3.cmake | 24 -- cmake/modules/FindOpenGl.cmake | 2 +- cmake/modules/FindPlist.cmake | 4 +- cmake/modules/FindPulseAudio.cmake | 14 +- cmake/modules/FindRapidJSON.cmake | 6 +- cmake/modules/FindSSE.cmake | 45 ++- cmake/modules/FindSSH.cmake | 4 +- cmake/modules/FindShairplay.cmake | 4 +- cmake/modules/FindSmbClient.cmake | 4 +- cmake/modules/FindSndio.cmake | 4 +- cmake/modules/FindTexturePacker.cmake | 2 +- cmake/platform/android/android.cmake | 2 +- cmake/platform/freebsd/wayland.cmake | 17 + cmake/platform/freebsd/x11.cmake | 2 + cmake/platform/linux/gbm.cmake | 2 +- cmake/platform/linux/imx.cmake | 1 - cmake/platform/linux/x11.cmake | 4 +- cmake/platform/windowsstore/defines.txt | 1 + cmake/platform/windowsstore/windowsstore.cmake | 1 + cmake/scripts/android/ArchSetup.cmake | 16 +- cmake/scripts/android/Install.cmake | 26 ++ cmake/scripts/common/AddonHelpers.cmake | 19 +- cmake/scripts/common/ArchSetup.cmake | 3 + cmake/scripts/common/GenerateVersionedFiles.cmake | 10 +- cmake/scripts/common/HandleDepends.cmake | 13 + cmake/scripts/common/Macros.cmake | 54 +++- cmake/scripts/common/Platform.cmake | 9 +- cmake/scripts/common/PrepareEnv.cmake | 14 +- cmake/scripts/freebsd/ArchSetup.cmake | 5 +- cmake/scripts/freebsd/ExtraTargets.cmake | 29 ++ cmake/scripts/ios/ArchSetup.cmake | 5 +- cmake/scripts/ios/Install.cmake | 2 + cmake/scripts/linux/ArchSetup.cmake | 37 ++- cmake/scripts/linux/Install.cmake | 13 +- cmake/scripts/linux/clang-check-test.sh.in | 2 +- cmake/scripts/osx/ArchSetup.cmake | 5 +- cmake/scripts/windows/ArchSetup.cmake | 25 +- cmake/scripts/windowsstore/ArchSetup.cmake | 121 +++++++ cmake/scripts/windowsstore/CFlagOverrides.cmake | 12 + cmake/scripts/windowsstore/CXXFlagOverrides.cmake | 12 + cmake/scripts/windowsstore/Install.cmake | 0 cmake/scripts/windowsstore/Macros.cmake | 181 +++++++++++ cmake/scripts/windowsstore/PathSetup.cmake | 34 ++ cmake/scripts/windowsstore/tools/patch.cmake | 37 +++ cmake/treedata/android/subdirs.txt | 3 +- cmake/treedata/common/music.txt | 1 + cmake/treedata/common/retroplayer.txt | 4 + cmake/treedata/common/subdirs.txt | 14 +- cmake/treedata/common/video.txt | 1 + cmake/treedata/freebsd/subdirs.txt | 5 +- cmake/treedata/ios/subdirs.txt | 3 +- cmake/treedata/linux/subdirs.txt | 5 +- cmake/treedata/optional/common/X.txt | 1 + cmake/treedata/optional/common/aml.txt | 1 + cmake/treedata/optional/common/gbm.txt | 3 +- cmake/treedata/optional/common/imx.txt | 1 - cmake/treedata/optional/common/python.txt | 2 +- cmake/treedata/optional/common/wayland.txt | 1 + cmake/treedata/osx/subdirs.txt | 3 +- cmake/treedata/windows/subdirs.txt | 2 + cmake/treedata/windowsstore/externals.txt | 1 + cmake/treedata/windowsstore/subdirs.txt | 16 + version.txt | 8 +- .../kodi-addon-dev-kit/include/kodi/AddonBase.h | 1 + .../kodi-addon-dev-kit/include/kodi/CMakeLists.txt | 24 ++ .../kodi-addon-dev-kit/include/kodi/Filesystem.h | 90 +++++- .../kodi-addon-dev-kit/include/kodi/General.h | 44 ++- .../include/kodi/addon-instance/CMakeLists.txt | 15 + .../include/kodi/addon-instance/Inputstream.h | 50 ++- .../include/kodi/addon-instance/Peripheral.h | 10 + .../include/kodi/addon-instance/PeripheralUtils.h | 3 + .../include/kodi/addon-instance/VideoCodec.h | 4 +- .../include/kodi/gui/CMakeLists.txt | 8 + .../include/kodi/gui/controls/CMakeLists.txt | 16 + .../include/kodi/gui/dialogs/CMakeLists.txt | 14 + .../include/kodi/kodi_game_types.h | 7 + .../include/kodi/libXBMC_addon.h | 35 +- .../include/kodi/tools/CMakeLists.txt | 5 + .../kodi-addon-dev-kit/include/kodi/versions.h | 24 +- .../include/kodi/xbmc_epg_types.h | 11 +- .../kodi-addon-dev-kit/include/kodi/xbmc_pvr_dll.h | 48 +-- .../include/kodi/xbmc_pvr_types.h | 21 +- xbmc/filesystem/.IFileTypes.h.swp | Bin 12288 -> 0 bytes xbmc/filesystem/IFileTypes.h | 23 +- xbmc/input/ActionIDs.h | 13 +- 116 files changed, 1631 insertions(+), 494 deletions(-) create mode 100644 cmake/addons/depends/windowsstore/CMakeLists.txt create mode 100644 cmake/addons/depends/windowsstore/Install.cmake create mode 100644 cmake/addons/depends/windowsstore/README create mode 100644 cmake/addons/depends/windowsstore/p8-platform/p8-platform.txt create mode 100644 cmake/addons/depends/windowsstore/prebuilt/README create mode 100644 cmake/installdata/windowsstore/addons.txt create mode 100644 cmake/installdata/windowsstore/dlls.txt create mode 100644 cmake/installdata/windowsstore/irss.txt create mode 100644 cmake/installdata/windowsstore/python.txt delete mode 100644 cmake/modules/FindIMX.cmake create mode 100644 cmake/modules/FindIconv.cmake delete mode 100644 cmake/modules/FindOpenGLES3.cmake create mode 100644 cmake/platform/freebsd/wayland.cmake create mode 100644 cmake/platform/freebsd/x11.cmake delete mode 100644 cmake/platform/linux/imx.cmake create mode 100644 cmake/platform/windowsstore/defines.txt create mode 100644 cmake/platform/windowsstore/windowsstore.cmake create mode 100644 cmake/scripts/freebsd/ExtraTargets.cmake create mode 100644 cmake/scripts/windowsstore/ArchSetup.cmake create mode 100644 cmake/scripts/windowsstore/CFlagOverrides.cmake create mode 100644 cmake/scripts/windowsstore/CXXFlagOverrides.cmake create mode 100644 cmake/scripts/windowsstore/Install.cmake create mode 100644 cmake/scripts/windowsstore/Macros.cmake create mode 100644 cmake/scripts/windowsstore/PathSetup.cmake create mode 100644 cmake/scripts/windowsstore/tools/patch.cmake delete mode 100644 cmake/treedata/optional/common/imx.txt create mode 100644 cmake/treedata/windowsstore/externals.txt create mode 100644 cmake/treedata/windowsstore/subdirs.txt create mode 100644 xbmc/addons/kodi-addon-dev-kit/include/kodi/CMakeLists.txt create mode 100644 xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/CMakeLists.txt create mode 100644 xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/CMakeLists.txt create mode 100644 xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/controls/CMakeLists.txt create mode 100644 xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/CMakeLists.txt create mode 100644 xbmc/addons/kodi-addon-dev-kit/include/kodi/tools/CMakeLists.txt delete mode 100644 xbmc/filesystem/.IFileTypes.h.swp diff --git a/cmake/README.md b/cmake/README.md index 81c0517..0848f2d 100644 --- a/cmake/README.md +++ b/cmake/README.md @@ -119,12 +119,30 @@ cmake -G "Visual Studio 14" cmake --build . --config "Debug" # or: Build solution with Visual Studio Debug\kodi.exe ``` + +Building on a x64 cpu can be improved, if you're on a cmake version > 3.8: +``` +cmake -G "Visual Studio 14" -T host=x64 +cmake --build . --config "Debug" # or: Build solution with Visual Studio +Debug\kodi.exe +``` +This will choose the x64 toolset, as windows uses the x32 toolset by default. + #### Build for x64 ``` cmake -G "Visual Studio 14 Win64" cmake --build . --config "Debug" # or: Build solution with Visual Studio Debug\kodi.exe ``` + +Building on a x64 cpu can be improved, if you're on a cmake version > 3.8: +``` +cmake -G "Visual Studio 14 Win64" -T host=x64 +cmake --build . --config "Debug" # or: Build solution with Visual Studio +Debug\kodi.exe +``` +This will choose the x64 toolset, as windows uses the x32 toolset by default. + You can always check ``cmake --help` to see which generators are available and how to call those. #### Windows installer generation diff --git a/cmake/addons/CMakeLists.txt b/cmake/addons/CMakeLists.txt index a6ea149..fd1d448 100644 --- a/cmake/addons/CMakeLists.txt +++ b/cmake/addons/CMakeLists.txt @@ -75,6 +75,11 @@ if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT OR NOT CMAKE_INSTALL_PREFIX) endif() list(APPEND CMAKE_PREFIX_PATH ${CMAKE_INSTALL_PREFIX}) +if (CMAKE_SYSTEM_NAME STREQUAL WindowsStore) + set(BUILD_ARGS_ext -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME} + -DCMAKE_SYSTEM_VERSION=${CMAKE_SYSTEM_VERSION}) +endif() + set(BUILD_ARGS -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH} -DCMAKE_INSTALL_PREFIX:PATH= -DPACKAGE_CONFIG_PATH=${ADDON_DEPENDS_PATH}/lib/pkgconfig @@ -86,7 +91,8 @@ set(BUILD_ARGS -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH} -DCORE_SYSTEM_NAME=${CORE_SYSTEM_NAME} -DBUILD_SHARED_LIBS=1 -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} - -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}) + -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} + ${BUILD_ARGS_ext}) if(MSVC) # move cmake specific targets to a CMakePredefinedTargets folder in Visual Studio diff --git a/cmake/addons/depends/windowsstore/CMakeLists.txt b/cmake/addons/depends/windowsstore/CMakeLists.txt new file mode 100644 index 0000000..c8739c0 --- /dev/null +++ b/cmake/addons/depends/windowsstore/CMakeLists.txt @@ -0,0 +1,52 @@ +cmake_minimum_required(VERSION 3.1) +project(kodi-addons-depends-windows) + +list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}) + +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release) +endif() + +include(ExternalProject) + +if(NOT ADDON_DEPENDS_PATH) + message(FATAL_ERROR "ADDON_DEPENDS_PATH (${ADDON_DEPENDS_PATH}) is not a valid target directory.") +else() + file(TO_CMAKE_PATH "${ADDON_DEPENDS_PATH}" ADDON_DEPENDS_PATH) +endif() +get_filename_component(ADDON_DEPENDS_PATH "${ADDON_DEPENDS_PATH}" ABSOLUTE) +list(APPEND CMAKE_PREFIX_PATH ${ADDON_DEPENDS_PATH}) + +if(NOT DEPENDS_TO_BUILD) + set(DEPENDS_TO_BUILD "all") +endif() + +function(add_internal id url inputfile) + externalproject_add(${id} + URL ${url} + PREFIX build/${id} + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND ${CMAKE_COMMAND} + -DINPUTDIR=${PROJECT_BINARY_DIR}/build/${id}/src/${id} + -DINPUTFILE=${inputfile} + -DDESTDIR=${ADDON_DEPENDS_PATH} + -P ${PROJECT_SOURCE_DIR}/Install.cmake + ) +endfunction() + +file(GLOB_RECURSE download_input_files prebuilt/*.txt) +foreach(file ${download_input_files}) + if(NOT file MATCHES install.txt) + file(STRINGS ${file} def) + get_filename_component(dir ${file} DIRECTORY) + string(REPLACE " " ";" def ${def}) + list(GET def 0 id) + + list(FIND DEPENDS_TO_BUILD ${id} idx) + if(idx GREATER -1 OR DEPENDS_TO_BUILD STREQUAL "all") + list(GET def 1 url) + add_internal(${id} ${url} ${dir}/install.txt) + endif() + endif() +endforeach() diff --git a/cmake/addons/depends/windowsstore/Install.cmake b/cmake/addons/depends/windowsstore/Install.cmake new file mode 100644 index 0000000..9a3adbb --- /dev/null +++ b/cmake/addons/depends/windowsstore/Install.cmake @@ -0,0 +1,24 @@ +if(EXISTS "${INPUTFILE}") + # if there's an input file we use it to determine which files to copy where + file(STRINGS ${INPUTFILE} FILES) + string(REPLACE "\n" ";" FILES "${FILES}") + foreach(file ${FILES}) + string(REPLACE " " ";" file "${file}") + list(GET file 0 dir) + list(GET file 1 dest) + list(LENGTH file deflength) + if(deflength GREATER 2) + list(GET file 2 copy) + endif() + file(GLOB files ${INPUTDIR}/${dir}) + foreach(instfile ${files}) + file(COPY ${instfile} DESTINATION ${DESTDIR}/${dest}) + if(copy) + file(COPY ${instfile} DESTINATION ${DESTDIR}/${copy}) + endif() + endforeach() + endforeach() +else() + # otherwise we assume that the content of the extracted archive is already well-formed and can just be copied + file(COPY ${INPUTDIR}/${dir} DESTINATION ${DESTDIR}) +endif() \ No newline at end of file diff --git a/cmake/addons/depends/windowsstore/README b/cmake/addons/depends/windowsstore/README new file mode 100644 index 0000000..67dc594 --- /dev/null +++ b/cmake/addons/depends/windowsstore/README @@ -0,0 +1,19 @@ +KODI WIN32 ADDON DEPENDENCIES +============================= +This directory contains the cmake-based buildsystem for dependencies (currently +only prebuilt) used by one or multiple addons. The buildsystem looks into the +"prebuilt" sub-directory, downloads all the specified dependencies, extracts +them and places them into the "depends" sub-directory. + +To trigger the cmake-based buildsystem the following command must be executed +with being the path to this directory (absolute or relative, allowing for +in-source and out-of-source builds). + + cmake [-G ] + +cmake supports multiple generators, see +http://www.cmake.org/cmake/help/v2.8.8/cmake.html#section_Generators for a list. +For win32 builds one of the "Visual Studio XX" or the "NMake Makefiles" +generators is preferred. For the "NMake Makefiles" generator to work the above +command must be called from an environment prepared for VC++ builds (see +http://msdn.microsoft.com/en-us/library/f2ccy3wt.aspx). diff --git a/cmake/addons/depends/windowsstore/p8-platform/p8-platform.txt b/cmake/addons/depends/windowsstore/p8-platform/p8-platform.txt new file mode 100644 index 0000000..db6f782 --- /dev/null +++ b/cmake/addons/depends/windowsstore/p8-platform/p8-platform.txt @@ -0,0 +1 @@ +p8-platform https://github.com/afedchin/platform.git win10 diff --git a/cmake/addons/depends/windowsstore/prebuilt/README b/cmake/addons/depends/windowsstore/prebuilt/README new file mode 100644 index 0000000..a0c70d6 --- /dev/null +++ b/cmake/addons/depends/windowsstore/prebuilt/README @@ -0,0 +1,21 @@ +KODI WIN32 PREBUILT ADDON DEPENDENCIES +====================================== +This directory contains a file or sub-directory for every prebuilt dependency +used by one of the addons being built. There are two different modes supported. +Both include a file named .txt which must follow the defined format + + +If the archive, which the points at, contains + * only the necessary files and in the proper directory structure (i.e. an + "include" and a "lib" directory) then the file must be put into this + directory and nothing else is needed. + * unnecessary files and/or does not follow the defined directory structure + (i.e. an "include" and a "lib" directory) then the file must be put into a + sub-directory named . Furthermore an additional file called + "install.txt" must be placed in that sub-directory. install.txt contains a + line for every path/directory/file with a destination where it must be copied + to. It must follow the defined format + [] + where must be an existing file, directory or a path containing + wildcards, and the optional must be existing + directories. diff --git a/cmake/installdata/windows/addons.txt b/cmake/installdata/windows/addons.txt index 92bf9b3..a3bdd44 100644 --- a/cmake/installdata/windows/addons.txt +++ b/cmake/installdata/windows/addons.txt @@ -1 +1,3 @@ addons/repository.pvr-win32.xbmc.org/* +project/BuildDependencies/${ARCH}/addons/script.module.pil KEEP_DIR_STRUCTURE addons +project/BuildDependencies/${ARCH}/addons/script.module.pycryptodome KEEP_DIR_STRUCTURE addons diff --git a/cmake/installdata/windows/dlls.txt b/cmake/installdata/windows/dlls.txt index 25c6500..c17bd76 100644 --- a/cmake/installdata/windows/dlls.txt +++ b/cmake/installdata/windows/dlls.txt @@ -1,4 +1,3 @@ -system/*.dll . project/BuildDependencies/${ARCH}/bin/libbluray*.jar . project/BuildDependencies/${ARCH}/bin/*.dll . project/BuildDependencies/mingwlibs/${ARCH}/bin/*.dll . diff --git a/cmake/installdata/windowsstore/addons.txt b/cmake/installdata/windowsstore/addons.txt new file mode 100644 index 0000000..4b8678b --- /dev/null +++ b/cmake/installdata/windowsstore/addons.txt @@ -0,0 +1,3 @@ +addons/repository.pvr-win32.xbmc.org/* +project/BuildDependencies/win10-${ARCH}/addons/* +system/addon-manifest-uwp.xml \ No newline at end of file diff --git a/cmake/installdata/windowsstore/dlls.txt b/cmake/installdata/windowsstore/dlls.txt new file mode 100644 index 0000000..a927b3d --- /dev/null +++ b/cmake/installdata/windowsstore/dlls.txt @@ -0,0 +1,2 @@ +project/BuildDependencies/win10-${ARCH}/bin/*.dll dlls +project/BuildDependencies/mingwlibs/win10-${ARCH}/bin/*.dll dlls diff --git a/cmake/installdata/windowsstore/irss.txt b/cmake/installdata/windowsstore/irss.txt new file mode 100644 index 0000000..6fd8d48 --- /dev/null +++ b/cmake/installdata/windowsstore/irss.txt @@ -0,0 +1,2 @@ +system/IRSSmap.xml +system/X10-Lola-IRSSmap.xml diff --git a/cmake/installdata/windowsstore/python.txt b/cmake/installdata/windowsstore/python.txt new file mode 100644 index 0000000..db57ebc --- /dev/null +++ b/cmake/installdata/windowsstore/python.txt @@ -0,0 +1 @@ +project/BuildDependencies/win10-${ARCH}/bin/Python KEEP_DIR_STRUCTURE system \ No newline at end of file diff --git a/cmake/modules/FindAlsa.cmake b/cmake/modules/FindAlsa.cmake index c99f509..bed4faa 100644 --- a/cmake/modules/FindAlsa.cmake +++ b/cmake/modules/FindAlsa.cmake @@ -33,7 +33,7 @@ find_package_handle_standard_args(Alsa 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) + set(ALSA_DEFINITIONS -DHAS_ALSA=1) if(NOT TARGET ALSA::ALSA) add_library(ALSA::ALSA UNKNOWN IMPORTED) diff --git a/cmake/modules/FindAvahi.cmake b/cmake/modules/FindAvahi.cmake index 77c3e4d..068b292 100644 --- a/cmake/modules/FindAvahi.cmake +++ b/cmake/modules/FindAvahi.cmake @@ -40,21 +40,21 @@ if(AVAHI_FOUND) ${AVAHI_COMMON_INCLUDE_DIR}) set(AVAHI_LIBRARIES ${AVAHI_CLIENT_LIBRARY} ${AVAHI_COMMON_LIBRARY}) - set(AVAHI_DEFINITIONS -DHAVE_LIBAVAHI_CLIENT=1 -DHAVE_LIBAVAHI_COMMON=1) + set(AVAHI_DEFINITIONS -DHAS_AVAHI=1 -DHAS_ZEROCONF=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) + INTERFACE_COMPILE_DEFINITIONS HAS_AVAHI=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_COMPILE_DEFINITIONS HAS_AVAHI=1 INTERFACE_LINK_LIBRARIES Avahi::Avahi) endif() endif() diff --git a/cmake/modules/FindBluray.cmake b/cmake/modules/FindBluray.cmake index 010fdf1..3c29f54 100644 --- a/cmake/modules/FindBluray.cmake +++ b/cmake/modules/FindBluray.cmake @@ -50,6 +50,11 @@ if(BLURAY_FOUND) set(BLURAY_INCLUDE_DIRS ${BLURAY_INCLUDE_DIR}) set(BLURAY_DEFINITIONS -DHAVE_LIBBLURAY=1) + # todo: improve syntax + if (NOT CORE_PLATFORM_NAME_LC STREQUAL windowsstore) + list(APPEND BLURAY_DEFINITIONS -DHAVE_LIBBLURAY_BDJ=1) + endif() + if(NOT TARGET Bluray::Bluray) add_library(Bluray::Bluray UNKNOWN IMPORTED) if(BLURAY_LIBRARY) diff --git a/cmake/modules/FindCurl.cmake b/cmake/modules/FindCurl.cmake index ed4d81f..d0759a6 100644 --- a/cmake/modules/FindCurl.cmake +++ b/cmake/modules/FindCurl.cmake @@ -20,7 +20,7 @@ endif() find_path(CURL_INCLUDE_DIR NAMES curl/curl.h PATHS ${PC_CURL_INCLUDEDIR}) -find_library(CURL_LIBRARY NAMES curl libcurl +find_library(CURL_LIBRARY NAMES curl libcurl libcurl_imp PATHS ${PC_CURL_LIBDIR}) set(CURL_VERSION ${PC_CURL_VERSION}) diff --git a/cmake/modules/FindD3DX11Effects.cmake b/cmake/modules/FindD3DX11Effects.cmake index 3fdf7d7..9b1eb15 100644 --- a/cmake/modules/FindD3DX11Effects.cmake +++ b/cmake/modules/FindD3DX11Effects.cmake @@ -4,23 +4,26 @@ # D3DCOMPILER_DLL - Path to the Direct3D Compiler # FXC - Path to the DirectX Effects Compiler (FXC) -find_file(D3DCOMPILER_DLL - NAMES d3dcompiler_47.dll d3dcompiler_46.dll - PATHS - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Microsoft SDKs\\Windows\\v10.0;InstallationFolder]/Redist/D3D/${SDK_TARGET_ARCH}" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Microsoft SDKs\\Windows\\v8.1;InstallationFolder]/Redist/D3D/${SDK_TARGET_ARCH}" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Microsoft SDKs\\Windows\\v8.0;InstallationFolder]/Redist/D3D/${SDK_TARGET_ARCH}" - "$ENV{WindowsSdkDir}Redist/d3d/${SDK_TARGET_ARCH}" - NO_DEFAULT_PATH) -if(NOT D3DCOMPILER_DLL) - message(WARNING "Could NOT find Direct3D Compiler") +if(NOT CORE_SYSTEM_NAME STREQUAL windowsstore) + find_file(D3DCOMPILER_DLL + NAMES d3dcompiler_47.dll d3dcompiler_46.dll + PATHS + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Microsoft SDKs\\Windows\\v10.0;InstallationFolder]/Redist/D3D/${SDK_TARGET_ARCH}" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Microsoft SDKs\\Windows\\v8.1;InstallationFolder]/Redist/D3D/${SDK_TARGET_ARCH}" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Microsoft SDKs\\Windows\\v8.0;InstallationFolder]/Redist/D3D/${SDK_TARGET_ARCH}" + "$ENV{WindowsSdkDir}Redist/d3d/${SDK_TARGET_ARCH}" + NO_DEFAULT_PATH) + if(NOT D3DCOMPILER_DLL) + message(WARNING "Could NOT find Direct3D Compiler") + endif() + mark_as_advanced(D3DCOMPILER_DLL) + copy_file_to_buildtree(${D3DCOMPILER_DLL} DIRECTORY .) endif() -mark_as_advanced(D3DCOMPILER_DLL) -copy_file_to_buildtree(${D3DCOMPILER_DLL} DIRECTORY .) find_program(FXC fxc PATHS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Microsoft SDKs\\Windows\\v10.0;InstallationFolder]/bin/x86" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Microsoft SDKs\\Windows\\v10.0;InstallationFolder]/bin/[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Microsoft SDKs\\Windows\\v10.0;ProductVersion].0/x86" "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Microsoft SDKs\\Windows\\v8.1;InstallationFolder]/bin/x86" "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Microsoft SDKs\\Windows\\v8.0;InstallationFolder]/bin/x86" "$ENV{WindowsSdkDir}bin/x86") diff --git a/cmake/modules/FindDBus.cmake b/cmake/modules/FindDBus.cmake index 2d64af4..9ea4f8f 100644 --- a/cmake/modules/FindDBus.cmake +++ b/cmake/modules/FindDBus.cmake @@ -38,14 +38,14 @@ find_package_handle_standard_args(DBus 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) + set(DBUS_DEFINITIONS -DHAS_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) + INTERFACE_COMPILE_DEFINITIONS HAS_DBUS=1) endif() endif() diff --git a/cmake/modules/FindEGL.cmake b/cmake/modules/FindEGL.cmake index 93fa530..331ac39 100644 --- a/cmake/modules/FindEGL.cmake +++ b/cmake/modules/FindEGL.cmake @@ -14,14 +14,18 @@ # # EGL::EGL - The EGL library +if(CORE_PLATFORM_NAME_LC STREQUAL rbpi) + set(_brcmprefix brcm) +endif() + if(PKG_CONFIG_FOUND) - pkg_check_modules(PC_EGL egl QUIET) + pkg_check_modules(PC_EGL ${_brcmprefix}egl QUIET) endif() find_path(EGL_INCLUDE_DIR EGL/egl.h PATHS ${PC_EGL_INCLUDEDIR}) -find_library(EGL_LIBRARY NAMES EGL egl +find_library(EGL_LIBRARY NAMES ${_brcmprefix}EGL egl PATHS ${PC_EGL_LIBDIR}) set(EGL_VERSION ${PC_EGL_VERSION}) diff --git a/cmake/modules/FindFFMPEG.cmake b/cmake/modules/FindFFMPEG.cmake index 02c8d28..689cf28 100644 --- a/cmake/modules/FindFFMPEG.cmake +++ b/cmake/modules/FindFFMPEG.cmake @@ -33,14 +33,14 @@ # # required ffmpeg library versions -set(REQUIRED_FFMPEG_VERSION 3.3) -set(_avcodec_ver ">=57.89.100") -set(_avfilter_ver ">=6.82.100") -set(_avformat_ver ">=57.71.100") -set(_avutil_ver ">=55.58.100") -set(_swscale_ver ">=4.6.100") -set(_swresample_ver ">=2.7.100") -set(_postproc_ver ">=54.5.100") +set(REQUIRED_FFMPEG_VERSION 3.4) +set(_avcodec_ver ">=57.107.100") +set(_avfilter_ver ">=6.107.100") +set(_avformat_ver ">=57.83.100") +set(_avutil_ver ">=55.78.100") +set(_swscale_ver ">=4.8.100") +set(_swresample_ver ">=2.9.100") +set(_postproc_ver ">=54.7.100") # Allows building with external ffmpeg not found in system paths, @@ -266,7 +266,7 @@ if(NOT FFMPEG_FOUND) file(WRITE ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/ffmpeg/ffmpeg-link-wrapper "#!/bin/bash -if [[ $@ == *${APP_NAME_LC}.bin* || $@ == *${APP_NAME_LC}.so* || $@ == *${APP_NAME_LC}-test* ]] +if [[ $@ == *${APP_NAME_LC}.bin* || $@ == *${APP_NAME_LC}${APP_BINARY_SUFFIX}* || $@ == *${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` diff --git a/cmake/modules/FindFmt.cmake b/cmake/modules/FindFmt.cmake index 5473ed5..5e47509 100644 --- a/cmake/modules/FindFmt.cmake +++ b/cmake/modules/FindFmt.cmake @@ -12,6 +12,50 @@ # # Fmt::Fmt - The Fmt library +if(ENABLE_INTERNAL_FMT) + include(ExternalProject) + file(STRINGS ${CMAKE_SOURCE_DIR}/tools/depends/target/libfmt/Makefile VER REGEX "^[ ]*VERSION[ ]*=.+$") + string(REGEX REPLACE "^[ ]*VERSION[ ]*=[ ]*" "" FMT_VERSION "${VER}") + + # allow user to override the download URL with a local tarball + # needed for offline build envs + if(FMT_URL) + get_filename_component(FMT_URL "${FMT_URL}" ABSOLUTE) + else() + set(FMT_URL http://mirrors.kodi.tv/build-deps/sources/fmt-${FMT_VERSION}.tar.gz) + endif() + if(VERBOSE) + message(STATUS "FMT_URL: ${FMT_URL}") + endif() + + if(APPLE) + set(EXTRA_ARGS "-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}") + endif() + + set(FMT_LIBRARY ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/libfmt.a) + set(FMT_INCLUDE_DIR ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/include) + externalproject_add(fmt + URL ${FMT_URL} + DOWNLOAD_DIR ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/download + PREFIX ${CORE_BUILD_DIR}/fmt + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR} + -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} + -DFMT_DOC=OFF + -DFMT_TEST=OFF + "${EXTRA_ARGS}" + BUILD_BYPRODUCTS ${FMT_LIBRARY}) + set_target_properties(fmt PROPERTIES FOLDER "External Projects") + + include(FindPackageHandleStandardArgs) + find_package_handle_standard_args(Fmt + REQUIRED_VARS FMT_LIBRARY FMT_INCLUDE_DIR + VERSION_VAR FMT_VERSION) + + set(FMT_LIBRARIES ${FMT_LIBRARY}) + set(FMT_INCLUDE_DIRS ${FMT_INCLUDE_DIR}) + +else() + if(CORE_SYSTEM_NAME STREQUAL windows OR CORE_SYSTEM_NAME STREQUAL windowsstore) # TODO: fix windows fmt package to include fmt-config.cmake and fmt-config-version.cmake set(FMT_VERSION 3.0.1) @@ -55,3 +99,5 @@ if(FMT_FOUND) endif() mark_as_advanced(FMT_INCLUDE_DIR FMT_LIBRARY) + +endif() diff --git a/cmake/modules/FindIMX.cmake b/cmake/modules/FindIMX.cmake deleted file mode 100644 index 3689579..0000000 --- a/cmake/modules/FindIMX.cmake +++ /dev/null @@ -1,38 +0,0 @@ -#.rst: -# FindIMX -# ------- -# Finds the IMX codec -# -# This will will define the following variables:: -# -# IMX_FOUND - system has IMX -# IMX_INCLUDE_DIRS - the IMX include directory -# IMX_DEFINITIONS - the IMX definitions -# IMX_LIBRARIES - the IMX libraries - -if(PKG_CONFIG_FOUND) - pkg_check_modules(IMX fslvpuwrap QUIET) -endif() - -find_path(IMX_INCLUDE_DIR NAMES vpu_wrapper.h - PATH_SUFFIXES imx-mm/vpu - PATHS ${PC_IMX_INCLUDEDIR}) - -find_library(FSLVPUWRAP_LIBRARY NAMES fslvpuwrap - PATHS ${PC_IMX_LIBDIR}) -find_library(VPU_LIBRARY NAMES vpu - PATHS ${PC_IMX_LIBDIR}) -find_library(G2D_LIBRARY NAMES g2d - PATHS ${PC_IMX_LIBDIR}) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(IMX - REQUIRED_VARS IMX_INCLUDE_DIR FSLVPUWRAP_LIBRARY VPU_LIBRARY G2D_LIBRARY) - -if(IMX_FOUND) - set(IMX_INCLUDE_DIRS ${IMX_INCLUDE_DIR}) - set(IMX_LIBRARIES ${FSLVPUWRAP_LIBRARY} ${VPU_LIBRARY} ${G2D_LIBRARY}) - set(IMX_DEFINITIONS -DHAS_IMXVPU=1 -DLINUX -DEGL_API_FB) -endif() - -mark_as_advanced(IMX_INCLUDE_DIR FSLVPUWRAP_LIBRARY VPU_LIBRARY G2D_LIBRARY) diff --git a/cmake/modules/FindIconv.cmake b/cmake/modules/FindIconv.cmake new file mode 100644 index 0000000..8ee01fb --- /dev/null +++ b/cmake/modules/FindIconv.cmake @@ -0,0 +1,44 @@ +#.rst: +# FindICONV +# -------- +# Finds the ICONV library +# +# This will will define the following variables:: +# +# ICONV_FOUND - system has ICONV +# ICONV_INCLUDE_DIRS - the ICONV include directory +# ICONV_LIBRARIES - the ICONV libraries +# +# and the following imported targets:: +# +# ICONV::ICONV - The ICONV library + +find_path(ICONV_INCLUDE_DIR NAMES iconv.h) + +find_library(ICONV_LIBRARY NAMES iconv libiconv c) + +set(CMAKE_REQUIRED_LIBRARIES ${ICONV_LIBRARY}) +check_function_exists(iconv HAVE_ICONV_FUNCTION) +if(NOT HAVE_ICONV_FUNCTION) + check_function_exists(libiconv HAVE_LIBICONV_FUNCTION2) + set(HAVE_ICONV_FUNCTION ${HAVE_LIBICONV_FUNCTION2}) + unset(HAVE_LIBICONV_FUNCTION2) +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Iconv + REQUIRED_VARS ICONV_LIBRARY ICONV_INCLUDE_DIR HAVE_ICONV_FUNCTION) + +if(ICONV_FOUND) + set(ICONV_LIBRARIES ${ICONV_LIBRARY}) + set(ICONV_INCLUDE_DIRS ${ICONV_INCLUDE_DIR}) + + if(NOT TARGET ICONV::ICONV) + add_library(ICONV::ICONV UNKNOWN IMPORTED) + set_target_properties(ICONV::ICONV PROPERTIES + IMPORTED_LOCATION "${ICONV_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${ICONV_INCLUDE_DIR}") + endif() +endif() + +mark_as_advanced(ICONV_INCLUDE_DIR ICONV_LIBRARY HAVE_ICONV_FUNCTION) diff --git a/cmake/modules/FindJsonSchemaBuilder.cmake b/cmake/modules/FindJsonSchemaBuilder.cmake index 9a31dd5..14aa2f5 100644 --- a/cmake/modules/FindJsonSchemaBuilder.cmake +++ b/cmake/modules/FindJsonSchemaBuilder.cmake @@ -12,7 +12,7 @@ if(NOT TARGET JsonSchemaBuilder::JsonSchemaBuilder) add_executable(JsonSchemaBuilder::JsonSchemaBuilder IMPORTED GLOBAL) if(CORE_SYSTEM_NAME STREQUAL windows OR CORE_SYSTEM_NAME STREQUAL windowsstore) set_target_properties(JsonSchemaBuilder::JsonSchemaBuilder PROPERTIES - IMPORTED_LOCATION "${CMAKE_SOURCE_DIR}/project/BuildDependencies/bin/json-rpc/JsonSchemaBuilder") + IMPORTED_LOCATION "${DEPENDENCIES_DIR}/bin/json-rpc/JsonSchemaBuilder") else() set_target_properties(JsonSchemaBuilder::JsonSchemaBuilder PROPERTIES IMPORTED_LOCATION "${NATIVEPREFIX}/bin/JsonSchemaBuilder") diff --git a/cmake/modules/FindLibDvd.cmake b/cmake/modules/FindLibDvd.cmake index 86af89c..5c72826 100644 --- a/cmake/modules/FindLibDvd.cmake +++ b/cmake/modules/FindLibDvd.cmake @@ -1,133 +1,146 @@ -if(NOT WIN32) - if(KODI_DEPENDSBUILD) - 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(KODI_DEPENDSBUILD) + 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(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}") + + set(_linklibs ${DVDREAD_LIBRARY}) if(ENABLE_DVDCSS) - find_library(DVDCSS_LIBRARY NAMES dvdcss libdvdcss PATHS ${PC_DVD_libdvdcss_LIBDIR}) + list(APPEND _linklibs ${DVDCSS_LIBRARY}) 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}") - - 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) + 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() + set(DEPENDS_TARGETS_DIR ${CMAKE_SOURCE_DIR}/tools/depends/target) + foreach(dvdlib ${dvdlibs}) + file(GLOB VERSION_FILE ${DEPENDS_TARGETS_DIR}/${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() - else() - set(dvdlibs libdvdread libdvdnav) - if(ENABLE_DVDCSS) - list(APPEND dvdlibs libdvdcss) + if(${DVDLIB}_URL) + get_filename_component(${DVDLIB}_URL "${${DVDLIB}_URL}" ABSOLUTE) + else() + set(${DVDLIB}_URL ${${dvdlib}_BASE_URL}/archive/${${dvdlib}_VER}.tar.gz) endif() - foreach(dvdlib ${dvdlibs}) - file(GLOB VERSION_FILE ${CMAKE_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}") + if(VERBOSE) + message(STATUS "${DVDLIB}_URL: ${${DVDLIB}_URL}") endif() + endforeach() - if(APPLE) - set(CMAKE_LD_FLAGS "-framework IOKit -framework CoreFoundation") - endif() + 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() - 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() + 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() + elseif(CORE_SYSTEM_NAME STREQUAL windowsstore) + set(LIBDVD_ADDITIONAL_ARGS "-DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}" "-DCMAKE_SYSTEM_VERSION=${CMAKE_SYSTEM_VERSION}") + endif() - if(ENABLE_DVDCSS) + if(ENABLE_DVDCSS) + if(NOT CORE_SYSTEM_NAME MATCHES windows) 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}) + 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") + else() + ExternalProject_Add(dvdcss + URL ${LIBDVDCSS_URL} + DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/project/BuildDependencies/downloads + DOWNLOAD_NAME libdvdcss-${libdvdcss_VER}.tar.gz + CMAKE_ARGS + ${LIBDVD_ADDITIONAL_ARGS} + -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd + ) endif() + set_target_properties(dvdcss PROPERTIES FOLDER "External Projects") + endif() - set(DVDREAD_CFLAGS "-D_XBMC -I${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd/include") - if(ENABLE_DVDCSS) - set(DVDREAD_CFLAGS "${DVDREAD_CFLAGS} -DHAVE_DVDCSS_DVDCSS_H") - endif() + set(DVDREAD_CFLAGS "-D_XBMC -I${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd/include") + if(ENABLE_DVDCSS) + set(DVDREAD_CFLAGS "${DVDREAD_CFLAGS} -DHAVE_DVDCSS_DVDCSS_H") + endif() + if(NOT CORE_SYSTEM_NAME MATCHES windows) 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 @@ -146,74 +159,90 @@ if(NOT WIN32) "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() + DEPENDEES download update patch + DEPENDERS configure + COMMAND PATH=${NATIVEPREFIX}/bin:$ENV{PATH} autoreconf -vif + WORKING_DIRECTORY ) + else() + ExternalProject_Add(dvdread + URL ${LIBDVDREAD_URL} + DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/project/BuildDependencies/downloads + DOWNLOAD_NAME libdvdread-${libdvdread_VER}.tar.gz + CMAKE_ARGS + ${LIBDVD_ADDITIONAL_ARGS} + -DCMAKE_PREFIX_PATH:PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd + -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd + ) + endif() + if(ENABLE_DVDCSS) + add_dependencies(dvdread dvdcss) + endif() - set_target_properties(dvdread PROPERTIES FOLDER "External Projects") + set_target_properties(dvdread PROPERTIES FOLDER "External Projects") - if(ENABLE_DVDCSS) - set(DVDNAV_LIBS -ldvdcss) - endif() + if(ENABLE_DVDCSS) + set(DVDNAV_LIBS -ldvdcss) + endif() + if(NOT CORE_SYSTEM_NAME MATCHES windows) 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 - CONFIGURE_COMMAND ac_cv_path_GIT= /configure - --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}) + DOWNLOAD_NAME libdvdnav-${libdvdnav_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=${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") + else() + set(DVDNAV_LIBRARY ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd/lib/libdvdnav.lib) + ExternalProject_Add(dvdnav + URL ${LIBDVDNAV_URL} + DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/project/BuildDependencies/downloads + DOWNLOAD_NAME libdvdnav-${libdvdnav_VER}.tar.gz + CMAKE_ARGS + ${LIBDVD_ADDITIONAL_ARGS} + -DCMAKE_PREFIX_PATH:PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd + -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd + ) + endif() + add_dependencies(dvdnav dvdread) + set_target_properties(dvdnav PROPERTIES FOLDER "External Projects") - set(_dvdlibs ${DVDREAD_LIBRARY} ${DVDCSS_LIBRARY}) + set(_dvdlibs ${DVDREAD_LIBRARY} ${DVDCSS_LIBRARY}) + if(NOT CORE_SYSTEM_NAME MATCHES windows) # 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}") - - 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) + else() + set(LIBDVD_TARGET_DIR .) + if(CORE_SYSTEM_NAME STREQUAL windowsstore) + set(LIBDVD_TARGET_DIR dlls) endif() -else() - # Dynamically loaded on Windows - find_path(LIBDVD_INCLUDE_DIR dvdcss/dvdcss.h) - - include(FindPackageHandleStandardArgs) - find_package_handle_standard_args(LibDvd REQUIRED_VARS LIBDVD_INCLUDE_DIR) - - if(LIBDVD_FOUND) - set(LIBDVD_INCLUDE_DIRS ${LIBDVD_INCLUDE_DIR}) - - add_custom_target(dvdnav) - set_target_properties(dvdnav PROPERTIES FOLDER "External Projects") + copy_file_to_buildtree(${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd/bin/libdvdnav.dll DIRECTORY ${LIBDVD_TARGET_DIR}) endif() - mark_as_advanced(LIBDVD_INCLUDE_DIR) -endif() + 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() \ No newline at end of file diff --git a/cmake/modules/FindMDNS.cmake b/cmake/modules/FindMDNS.cmake index c001f7b..9294708 100644 --- a/cmake/modules/FindMDNS.cmake +++ b/cmake/modules/FindMDNS.cmake @@ -26,9 +26,9 @@ find_package_handle_standard_args(MDNS if(MDNS_FOUND) set(MDNS_INCLUDE_DIRS ${MDNS_INCLUDE_DIR}) set(MDNS_LIBRARIES ${MDNS_LIBRARY}) - set(MDNS_DEFINITIONS -DHAVE_LIBMDNS=1) + set(MDNS_DEFINITIONS -DHAS_MDNS=1 -DHAS_ZEROCONF=1) if(MDNS_EMBEDDED_INCLUDE_DIR) - list(APPEND MDNS_DEFINITIONS -DHAVE_LIBMDNSEMBEDDED=1) + list(APPEND MDNS_DEFINITIONS -DHAS_MDNS_EMBEDDED=1) endif() if(NOT TARGET MDNS::MDNS) @@ -36,10 +36,10 @@ if(MDNS_FOUND) set_target_properties(MDNS::MDNS PROPERTIES IMPORTED_LOCATION "${MDNS_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${MDNS_INCLUDE_DIR}" - INTERFACE_COMPILE_DEFINITIONS HAVE_LIBMDNS=1) + INTERFACE_COMPILE_DEFINITIONS HAS_MDNS=1) if(MDNS_EMBEDDED_INCLUDE_DIR) set_target_properties(MDNS::MDNS PROPERTIES - INTERFACE_COMPILE_DEFINITIONS HAVE_LIBMDNSEMBEDDED=1) + INTERFACE_COMPILE_DEFINITIONS HAS_MDNS_EMBEDDED=1) endif() endif() endif() diff --git a/cmake/modules/FindMicroHttpd.cmake b/cmake/modules/FindMicroHttpd.cmake index 8eecbc4..232f8e5 100644 --- a/cmake/modules/FindMicroHttpd.cmake +++ b/cmake/modules/FindMicroHttpd.cmake @@ -33,7 +33,7 @@ find_package_handle_standard_args(MicroHttpd if(MICROHTTPD_FOUND) set(MICROHTTPD_LIBRARIES ${MICROHTTPD_LIBRARY}) set(MICROHTTPD_INCLUDE_DIRS ${MICROHTTPD_INCLUDE_DIR}) - set(MICROHTTPD_DEFINITIONS -DHAVE_LIBMICROHTTPD=1) + set(MICROHTTPD_DEFINITIONS -DHAS_WEB_SERVER=1 -DHAS_WEB_INTERFACE=1) if(KODI_DEPENDSBUILD AND NOT WIN32) find_library(GCRYPT_LIBRARY gcrypt) diff --git a/cmake/modules/FindMySqlClient.cmake b/cmake/modules/FindMySqlClient.cmake index 7b48577..50db582 100644 --- a/cmake/modules/FindMySqlClient.cmake +++ b/cmake/modules/FindMySqlClient.cmake @@ -46,7 +46,7 @@ find_package_handle_standard_args(MySqlClient if(MYSQLCLIENT_FOUND) set(MYSQLCLIENT_LIBRARIES ${MYSQLCLIENT_LIBRARY}) set(MYSQLCLIENT_INCLUDE_DIRS ${MYSQLCLIENT_INCLUDE_DIR}) - set(MYSQLCLIENT_DEFINITIONS -DHAVE_MYSQL=1) + set(MYSQLCLIENT_DEFINITIONS -DHAS_MYSQL=1) if(NOT TARGET MySqlClient::MySqlClient) add_library(MySqlClient::MySqlClient UNKNOWN IMPORTED) @@ -62,7 +62,7 @@ if(MYSQLCLIENT_FOUND) endif() set_target_properties(MySqlClient::MySqlClient PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${MYSQLCLIENT_INCLUDE_DIR}" - INTERFACE_COMPILE_DEFINITIONS HAVE_MYSQL=1) + INTERFACE_COMPILE_DEFINITIONS HAS_MYSQL=1) endif() endif() diff --git a/cmake/modules/FindNFS.cmake b/cmake/modules/FindNFS.cmake index 646ee33..b304bf3 100644 --- a/cmake/modules/FindNFS.cmake +++ b/cmake/modules/FindNFS.cmake @@ -41,7 +41,7 @@ endif() if(NFS_FOUND) set(NFS_LIBRARIES ${NFS_LIBRARY}) set(NFS_INCLUDE_DIRS ${NFS_INCLUDE_DIR}) - set(NFS_DEFINITIONS -DHAVE_LIBNFS=1) + set(NFS_DEFINITIONS -DHAS_FILESYSTEM_NFS=1) if(NOT TARGET NFS::NFS) add_library(NFS::NFS UNKNOWN IMPORTED) @@ -51,7 +51,7 @@ if(NFS_FOUND) endif() set_target_properties(NFS::NFS PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${NFS_INCLUDE_DIR}" - INTERFACE_COMPILE_DEFINITIONS HAVE_LIBNFS=1) + INTERFACE_COMPILE_DEFINITIONS HAS_FILESYSTEM_NFS=1) endif() endif() diff --git a/cmake/modules/FindOpenGLES.cmake b/cmake/modules/FindOpenGLES.cmake index 4333a69..fac21bc 100644 --- a/cmake/modules/FindOpenGLES.cmake +++ b/cmake/modules/FindOpenGLES.cmake @@ -10,14 +10,18 @@ # OPENGLES_LIBRARIES - the OpenGLES libraries # OPENGLES_DEFINITIONS - the OpenGLES definitions +if(CORE_PLATFORM_NAME_LC STREQUAL rbpi) + set(_brcmprefix brcm) +endif() + if(PKG_CONFIG_FOUND) - pkg_check_modules(PC_OPENGLES glesv2 QUIET) + pkg_check_modules(PC_OPENGLES ${_brcmprefix}glesv2 QUIET) endif() if(NOT CORE_SYSTEM_NAME STREQUAL ios) find_path(OPENGLES_INCLUDE_DIR GLES2/gl2.h PATHS ${PC_OPENGLES_INCLUDEDIR}) - find_library(OPENGLES_gl_LIBRARY NAMES GLESv2 + find_library(OPENGLES_gl_LIBRARY NAMES ${_brcmprefix}GLESv2 PATHS ${PC_OPENGLES_LIBDIR}) else() find_library(OPENGLES_gl_LIBRARY NAMES OpenGLES @@ -27,14 +31,24 @@ else() set(OPENGLES_INCLUDE_DIR ${OPENGLES_gl_LIBRARY}/Headers) endif() +find_path(OPENGLES3_INCLUDE_DIR GLES3/gl3.h) + include(FindPackageHandleStandardArgs) find_package_handle_standard_args(OpenGLES REQUIRED_VARS OPENGLES_gl_LIBRARY OPENGLES_INCLUDE_DIR) +find_path(OPENGLES3_INCLUDE_DIR GLES3/gl3.h + PATHS ${PC_OPENGLES_INCLUDEDIR}) + if(OPENGLES_FOUND) - set(OPENGLES_INCLUDE_DIRS ${OPENGLES_INCLUDE_DIR}) set(OPENGLES_LIBRARIES ${OPENGLES_gl_LIBRARY}) - set(OPENGLES_DEFINITIONS -DHAVE_LIBGLESV2) + if(OPENGLES3_INCLUDE_DIR) + set(OPENGLES_INCLUDE_DIRS ${OPENGLES_INCLUDE_DIR} ${OPENGLES3_INCLUDE_DIR}) + set(OPENGLES_DEFINITIONS -DHAS_GLES=3) + mark_as_advanced(OPENGLES_INCLUDE_DIR OPENGLES3_INCLUDE_DIR OPENGLES_gl_LIBRARY) + else() + set(OPENGLES_INCLUDE_DIRS ${OPENGLES_INCLUDE_DIR}) + set(OPENGLES_DEFINITIONS -DHAS_GLES=2) + mark_as_advanced(OPENGLES_INCLUDE_DIR OPENGLES_gl_LIBRARY) + endif() endif() - -mark_as_advanced(OPENGLES_INCLUDE_DIR OPENGLES_gl_LIBRARY) diff --git a/cmake/modules/FindOpenGLES3.cmake b/cmake/modules/FindOpenGLES3.cmake deleted file mode 100644 index 394328d..0000000 --- a/cmake/modules/FindOpenGLES3.cmake +++ /dev/null @@ -1,24 +0,0 @@ -#.rst: -# FindOpenGLES3 -# ------------ -# Finds the OpenGLES3 library -# -# This will will define the following variables:: -# -# OPENGLES3_FOUND - system has OpenGLES3 -# OPENGLES3_INCLUDE_DIRS - the OpenGLES3 include directory -# OPENGLES3_DEFINITIONS - the OpenGLES3 definitions - - -find_path(OPENGLES3_INCLUDE_DIR GLES3/gl3.h) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(OpenGLES3 - REQUIRED_VARS OPENGLES3_INCLUDE_DIR) - -if(OPENGLES3_FOUND) - set(OPENGLES3_INCLUDE_DIRS ${OPENGLES3_INCLUDE_DIR}) - set(OPENGLES3_DEFINITIONS -DHAVE_LIBGLESV3) -endif() - -mark_as_advanced(OPENGLES3_INCLUDE_DIR) diff --git a/cmake/modules/FindOpenGl.cmake b/cmake/modules/FindOpenGl.cmake index b8cff79..af1c433 100644 --- a/cmake/modules/FindOpenGl.cmake +++ b/cmake/modules/FindOpenGl.cmake @@ -37,7 +37,7 @@ find_package_handle_standard_args(OpenGl if(OPENGL_FOUND) set(OPENGL_INCLUDE_DIRS ${OPENGL_INCLUDE_DIR}) set(OPENGL_LIBRARIES ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY}) - set(OPENGL_DEFINITIONS -DHAVE_LIBGL=1) + set(OPENGL_DEFINITIONS -DHAS_GL=1) endif() mark_as_advanced(OPENGL_INCLUDE_DIR OPENGL_gl_LIBRARY OPENGL_glu_LIBRARY) diff --git a/cmake/modules/FindPlist.cmake b/cmake/modules/FindPlist.cmake index 862da46..0664c10 100644 --- a/cmake/modules/FindPlist.cmake +++ b/cmake/modules/FindPlist.cmake @@ -41,7 +41,7 @@ endif() if(PLIST_FOUND) set(PLIST_LIBRARIES ${PLIST_LIBRARY}) set(PLIST_INCLUDE_DIRS ${PLIST_INCLUDE_DIR}) - set(PLIST_DEFINITIONS -DHAVE_LIBPLIST=1) + set(PLIST_DEFINITIONS -DHAS_AIRPLAY=1) if(NOT TARGET Plist::Plist) add_library(Plist::Plist UNKNOWN IMPORTED) @@ -51,7 +51,7 @@ if(PLIST_FOUND) endif() set_target_properties(Plist::Plist PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${PLIST_INCLUDE_DIR}" - INTERFACE_COMPILE_DEFINITIONS HAVE_LIBPLIST=1) + INTERFACE_COMPILE_DEFINITIONS HAS_AIRPLAY=1) endif() endif() diff --git a/cmake/modules/FindPulseAudio.cmake b/cmake/modules/FindPulseAudio.cmake index 5761005..2ef7910 100644 --- a/cmake/modules/FindPulseAudio.cmake +++ b/cmake/modules/FindPulseAudio.cmake @@ -21,14 +21,18 @@ endif() if(PKG_CONFIG_FOUND) pkg_check_modules(PC_PULSEAUDIO libpulse>=${PulseAudio_FIND_VERSION} QUIET) pkg_check_modules(PC_PULSEAUDIO_MAINLOOP libpulse-mainloop-glib QUIET) + pkg_check_modules(PC_PULSEAUDIO_SIMPLE libpulse-simple QUIET) endif() -find_path(PULSEAUDIO_INCLUDE_DIR NAMES pulse/pulseaudio.h +find_path(PULSEAUDIO_INCLUDE_DIR NAMES pulse/pulseaudio.h pulse/simple.h PATHS ${PC_PULSEAUDIO_INCLUDEDIR} ${PC_PULSEAUDIO_INCLUDE_DIRS}) find_library(PULSEAUDIO_LIBRARY NAMES pulse libpulse PATHS ${PC_PULSEAUDIO_LIBDIR} ${PC_PULSEAUDIO_LIBRARY_DIRS}) +find_library(PULSEAUDIO_SIMPLE_LIBRARY NAMES pulse-simple libpulse-simple + PATHS ${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}) @@ -42,13 +46,13 @@ endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(PulseAudio - REQUIRED_VARS PULSEAUDIO_LIBRARY PULSEAUDIO_MAINLOOP_LIBRARY PULSEAUDIO_INCLUDE_DIR + REQUIRED_VARS PULSEAUDIO_LIBRARY PULSEAUDIO_MAINLOOP_LIBRARY PULSEAUDIO_SIMPLE_LIBRARY PULSEAUDIO_INCLUDE_DIR VERSION_VAR PULSEAUDIO_VERSION_STRING) if(PULSEAUDIO_FOUND) set(PULSEAUDIO_INCLUDE_DIRS ${PULSEAUDIO_INCLUDE_DIR}) - set(PULSEAUDIO_LIBRARIES ${PULSEAUDIO_LIBRARY} ${PULSEAUDIO_MAINLOOP_LIBRARY}) - set(PULSEAUDIO_DEFINITIONS -DHAVE_LIBPULSE=1) + set(PULSEAUDIO_LIBRARIES ${PULSEAUDIO_LIBRARY} ${PULSEAUDIO_MAINLOOP_LIBRARY} ${PULSEAUDIO_SIMPLE_LIBRARY}) + set(PULSEAUDIO_DEFINITIONS -DHAS_PULSEAUDIO=1) if(NOT TARGET PulseAudio::PulseAudioMainloop) add_library(PulseAudio::PulseAudioMainloop UNKNOWN IMPORTED) @@ -65,4 +69,4 @@ if(PULSEAUDIO_FOUND) endif() endif() -mark_as_advanced(PULSEAUDIO_INCLUDE_DIR PULSEAUDIO_LIBRARY PULSEAUDIO_MAINLOOP_LIBRARY) +mark_as_advanced(PULSEAUDIO_INCLUDE_DIR PULSEAUDIO_LIBRARY PULSEAUDIO_MAINLOOP_LIBRARY PULSEAUDIO_SIMPLE_LIBRARY) diff --git a/cmake/modules/FindRapidJSON.cmake b/cmake/modules/FindRapidJSON.cmake index 3c3dc3f..a21ed0b 100644 --- a/cmake/modules/FindRapidJSON.cmake +++ b/cmake/modules/FindRapidJSON.cmake @@ -10,7 +10,7 @@ # if(ENABLE_INTERNAL_RapidJSON) include(ExternalProject) - file(STRINGS ${CMAKE_SOURCE_DIR}/tools/depends/target/rapidjson/Makefile VER REGEX MATCH "^[ ]*VERSION[ ]*=.+$") + file(STRINGS ${CMAKE_SOURCE_DIR}/tools/depends/target/rapidjson/Makefile VER REGEX "^[ ]*VERSION[ ]*=.+$") string(REGEX REPLACE "^[ ]*VERSION[ ]*=[ ]*" "" RJSON_VER "${VER}") # allow user to override the download URL with a local tarball @@ -36,6 +36,10 @@ if(ENABLE_INTERNAL_RapidJSON) PREFIX ${CORE_BUILD_DIR}/rapidjson CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} + -DRAPIDJSON_BUILD_DOC=OFF + -DRAPIDJSON_BUILD_EXAMPLES=OFF + -DRAPIDJSON_BUILD_TESTS=OFF + -DRAPIDJSON_BUILD_THIRDPARTY_GTEST=OFF "${EXTRA_ARGS}" PATCH_COMMAND patch -p1 < ${CORE_SOURCE_DIR}/tools/depends/target/rapidjson/0001-remove_custom_cxx_flags.patch BUILD_BYPRODUCTS ${RapidJSON_LIBRARY}) diff --git a/cmake/modules/FindSSE.cmake b/cmake/modules/FindSSE.cmake index d001b03..b860dca 100644 --- a/cmake/modules/FindSSE.cmake +++ b/cmake/modules/FindSSE.cmake @@ -40,6 +40,41 @@ if(CMAKE_SYSTEM_NAME MATCHES "Linux") string(COMPARE EQUAL "avx2" "${_SSE_THERE}" _AVX2_TRUE) CHECK_CXX_ACCEPTS_FLAG("-mavx2" _AVX2_OK) endif() +elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") + if(CPU MATCHES "amd64" OR CPU MATCHES "i.86") + exec_program(cat ARGS "/var/run/dmesg.boot | grep Features" 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) + + string(REGEX REPLACE "^.*(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 "Android") if(CPU MATCHES "x86_64" OR CPU MATCHES "i.86") set(_SSE_TRUE TRUE) @@ -94,10 +129,12 @@ elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin") endif() elseif(CMAKE_SYSTEM_NAME MATCHES "Windows") # TODO - set(_SSE_TRUE true) - set(_SSE_OK true) - set(_SSE2_TRUE true) - set(_SSE2_OK true) + if(ARCH STREQUAL win32 OR ARCH STREQUAL x64) + set(_SSE_TRUE true) + set(_SSE_OK true) + set(_SSE2_TRUE true) + set(_SSE2_OK true) + endif() endif() include(FindPackageHandleStandardArgs) diff --git a/cmake/modules/FindSSH.cmake b/cmake/modules/FindSSH.cmake index 538c699..ee65210 100644 --- a/cmake/modules/FindSSH.cmake +++ b/cmake/modules/FindSSH.cmake @@ -33,14 +33,14 @@ find_package_handle_standard_args(SSH if(SSH_FOUND) set(SSH_LIBRARIES ${SSH_LIBRARY}) set(SSH_INCLUDE_DIRS ${SSH_INCLUDE_DIR}) - set(SSH_DEFINITIONS -DHAVE_LIBSSH=1) + set(SSH_DEFINITIONS -DHAS_FILESYSTEM_SFTP=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) + INTERFACE_COMPILE_DEFINITIONS HAS_FILESYSTEM_SFTP=1) endif() endif() diff --git a/cmake/modules/FindShairplay.cmake b/cmake/modules/FindShairplay.cmake index 87d3107..699fb7a 100644 --- a/cmake/modules/FindShairplay.cmake +++ b/cmake/modules/FindShairplay.cmake @@ -46,7 +46,7 @@ endif() if(SHAIRPLAY_FOUND) set(SHAIRPLAY_LIBRARIES ${SHAIRPLAY_LIBRARY}) set(SHAIRPLAY_INCLUDE_DIRS ${SHAIRPLAY_INCLUDE_DIR}) - set(SHAIRPLAY_DEFINITIONS -DHAVE_LIBSHAIRPLAY=1) + set(SHAIRPLAY_DEFINITIONS -DHAS_AIRTUNES=1) if(NOT TARGET Shairplay::Shairplay) add_library(Shairplay::Shairplay UNKNOWN IMPORTED) @@ -56,7 +56,7 @@ if(SHAIRPLAY_FOUND) endif() set_target_properties(Shairplay::Shairplay PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${SHAIRPLAY_INCLUDE_DIR}" - INTERFACE_COMPILE_DEFINITIONS HAVE_LIBSHAIRPLAY=1) + INTERFACE_COMPILE_DEFINITIONS HAS_AIRTUNES=1) endif() endif() diff --git a/cmake/modules/FindSmbClient.cmake b/cmake/modules/FindSmbClient.cmake index 6455cce..9a8b197 100644 --- a/cmake/modules/FindSmbClient.cmake +++ b/cmake/modules/FindSmbClient.cmake @@ -33,14 +33,14 @@ find_package_handle_standard_args(SmbClient if(SMBCLIENT_FOUND) set(SMBCLIENT_LIBRARIES ${SMBCLIENT_LIBRARY}) set(SMBCLIENT_INCLUDE_DIRS ${SMBCLIENT_INCLUDE_DIR}) - set(SMBCLIENT_DEFINITIONS -DHAVE_LIBSMBCLIENT=1) + set(SMBCLIENT_DEFINITIONS -DHAS_FILESYSTEM_SMB=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) + INTERFACE_COMPILE_DEFINITIONS HAS_FILESYSTEM_SMB=1) endif() endif() diff --git a/cmake/modules/FindSndio.cmake b/cmake/modules/FindSndio.cmake index 3dd53d9..5f08acd 100644 --- a/cmake/modules/FindSndio.cmake +++ b/cmake/modules/FindSndio.cmake @@ -25,7 +25,7 @@ find_package_handle_standard_args(Sndio if(SNDIO_FOUND) set(SNDIO_INCLUDE_DIRS ${SNDIO_INCLUDE_DIR}) set(SNDIO_LIBRARIES ${SNDIO_LIBRARY}) - set(SNDIO_DEFINITIONS -DHAVE_SNDIO=1) + set(SNDIO_DEFINITIONS -DHAS_SNDIO=1) if(NOT TARGET Sndio::Sndio) add_library(Sndio::Sndio UNKNOWN IMPORTED) @@ -33,7 +33,7 @@ if(SNDIO_FOUND) IMPORTED_LOCATION "${SNDIO_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${SNDIO_INCLUDE_DIR}") set_target_properties(Sndio::Sndio PROPERTIES - INTERFACE_COMPILE_DEFINITIONS -DHAVE_SNDIO=1) + INTERFACE_COMPILE_DEFINITIONS -DHAS_SNDIO=1) endif() endif() diff --git a/cmake/modules/FindTexturePacker.cmake b/cmake/modules/FindTexturePacker.cmake index aa6fd3a..874a8f6 100644 --- a/cmake/modules/FindTexturePacker.cmake +++ b/cmake/modules/FindTexturePacker.cmake @@ -19,7 +19,7 @@ if(NOT TARGET TexturePacker::TexturePacker) elseif(WIN32) add_executable(TexturePacker::TexturePacker IMPORTED GLOBAL) set_target_properties(TexturePacker::TexturePacker PROPERTIES - IMPORTED_LOCATION "${CMAKE_SOURCE_DIR}/tools/TexturePacker/TexturePacker.exe") + IMPORTED_LOCATION "${DEPENDENCIES_DIR}/tools/TexturePacker/TexturePacker.exe") else() if(WITH_TEXTUREPACKER) get_filename_component(_tppath ${WITH_TEXTUREPACKER} ABSOLUTE) diff --git a/cmake/platform/android/android.cmake b/cmake/platform/android/android.cmake index bfa003b..c857cba 100644 --- a/cmake/platform/android/android.cmake +++ b/cmake/platform/android/android.cmake @@ -1 +1 @@ -set(PLATFORM_REQUIRED_DEPS OpenGLES EGL) +set(PLATFORM_REQUIRED_DEPS OpenGLES EGL Zip) diff --git a/cmake/platform/freebsd/wayland.cmake b/cmake/platform/freebsd/wayland.cmake new file mode 100644 index 0000000..55fbd8a --- /dev/null +++ b/cmake/platform/freebsd/wayland.cmake @@ -0,0 +1,17 @@ +set(PLATFORM_REQUIRED_DEPS EGL Waylandpp LibDRM Xkbcommon) +set(PLATFORM_OPTIONAL_DEPS VAAPI) + +set(WAYLAND_RENDER_SYSTEM "" CACHE STRING "Render system to use with Wayland: \"gl\" or \"gles\"") + +if(WAYLAND_RENDER_SYSTEM STREQUAL "gl") + list(APPEND PLATFORM_REQUIRED_DEPS OpenGl) +elseif(WAYLAND_RENDER_SYSTEM STREQUAL "gles") + list(APPEND PLATFORM_REQUIRED_DEPS OpenGLES) +else() + message(SEND_ERROR "You need to decide whether you want to use GL- or GLES-based rendering in combination with the Wayland windowing system. Please set WAYLAND_RENDER_SYSTEM to either \"gl\" or \"gles\". For normal desktop systems, you will usually want to use \"gl\".") +endif() + +set(PLATFORM_GLOBAL_TARGET_DEPS generate-wayland-extra-protocols) +set(WAYLAND_EXTRA_PROTOCOL_GENERATED_DIR "${CMAKE_CURRENT_BINARY_DIR}") +# for wayland-extra-protocols.hpp +include_directories("${WAYLAND_EXTRA_PROTOCOL_GENERATED_DIR}") diff --git a/cmake/platform/freebsd/x11.cmake b/cmake/platform/freebsd/x11.cmake new file mode 100644 index 0000000..656fd66 --- /dev/null +++ b/cmake/platform/freebsd/x11.cmake @@ -0,0 +1,2 @@ +set(PLATFORM_REQUIRED_DEPS OpenGl EGL X XRandR LibDRM) +set(PLATFORM_OPTIONAL_DEPS VAAPI VDPAU GLX) diff --git a/cmake/platform/linux/gbm.cmake b/cmake/platform/linux/gbm.cmake index 616cefb..6a9165a 100644 --- a/cmake/platform/linux/gbm.cmake +++ b/cmake/platform/linux/gbm.cmake @@ -1,2 +1,2 @@ set(PLATFORM_REQUIRED_DEPS OpenGLES EGL GBM LibDRM) -set(PLATFORM_OPTIONAL_DEPS VAAPI OpenGLES3) +set(PLATFORM_OPTIONAL_DEPS VAAPI) diff --git a/cmake/platform/linux/imx.cmake b/cmake/platform/linux/imx.cmake deleted file mode 100644 index c0c7196..0000000 --- a/cmake/platform/linux/imx.cmake +++ /dev/null @@ -1 +0,0 @@ -set(PLATFORM_REQUIRED_DEPS OpenGLES EGL IMX) diff --git a/cmake/platform/linux/x11.cmake b/cmake/platform/linux/x11.cmake index edea24d..656fd66 100644 --- a/cmake/platform/linux/x11.cmake +++ b/cmake/platform/linux/x11.cmake @@ -1,2 +1,2 @@ -set(PLATFORM_REQUIRED_DEPS OpenGl EGL X XRandR LibDRM GLX) -set(PLATFORM_OPTIONAL_DEPS VAAPI VDPAU) +set(PLATFORM_REQUIRED_DEPS OpenGl EGL X XRandR LibDRM) +set(PLATFORM_OPTIONAL_DEPS VAAPI VDPAU GLX) diff --git a/cmake/platform/windowsstore/defines.txt b/cmake/platform/windowsstore/defines.txt new file mode 100644 index 0000000..e962feb --- /dev/null +++ b/cmake/platform/windowsstore/defines.txt @@ -0,0 +1 @@ +-DTARGET_WINDOWS -DTARGET_WINDOWS_STORE -DNOMINMAX -D_CRT_SECURE_NO_WARNINGS -D_WINSOCKAPI_ \ No newline at end of file diff --git a/cmake/platform/windowsstore/windowsstore.cmake b/cmake/platform/windowsstore/windowsstore.cmake new file mode 100644 index 0000000..266fb3e --- /dev/null +++ b/cmake/platform/windowsstore/windowsstore.cmake @@ -0,0 +1 @@ +set(PLATFORM_REQUIRED_DEPS zlib) diff --git a/cmake/scripts/android/ArchSetup.cmake b/cmake/scripts/android/ArchSetup.cmake index 7b8b466..03056fa 100644 --- a/cmake/scripts/android/ArchSetup.cmake +++ b/cmake/scripts/android/ArchSetup.cmake @@ -6,15 +6,22 @@ endif() set(ARCH_DEFINES -DTARGET_POSIX -DTARGET_LINUX -D_LINUX -DTARGET_ANDROID) set(SYSTEM_DEFINES -D__STDC_CONSTANT_MACROS -D_LARGEFILE64_SOURCE - -D_FILE_OFFSET_BITS=64) -set(PLATFORM_DIR linux) + -D_FILE_OFFSET_BITS=64 -D__USE_FILE_OFFSET64=1) + +# Main cpp +set(CORE_MAIN_SOURCE ${CMAKE_SOURCE_DIR}/xbmc/platform/android/activity/XBMCApp.cpp) + +set(PLATFORM_DIR platform/linux) if(WITH_ARCH) set(ARCH ${WITH_ARCH}) else() if(CPU STREQUAL armeabi-v7a) set(ARCH arm) set(NEON True) - set(NEON_FLAGS "-mfpu=neon -mvectorize-with-neon-quad") + set(NEON_FLAGS "-mfpu=neon") + if(CMAKE_COMPILER_IS_GNUCC AND CMAKE_COMPILER_IS_GNUCXX) + set(NEON_FLAGS "${NEON_FLAGS} -mvectorize-with-neon-quad") + endif() elseif(CPU STREQUAL arm64-v8a) set(ARCH aarch64) set(NEON True) @@ -26,6 +33,9 @@ else() endif() endif() +# Additional SYSTEM_DEFINES +list(APPEND SYSTEM_DEFINES -DHAS_ZEROCONF) + set(ENABLE_X11 OFF CACHE BOOL "" FORCE) set(ENABLE_AML OFF CACHE BOOL "" FORCE) set(ENABLE_OPTICAL OFF CACHE BOOL "" FORCE) diff --git a/cmake/scripts/android/Install.cmake b/cmake/scripts/android/Install.cmake index 46181f7..cc52d51 100644 --- a/cmake/scripts/android/Install.cmake +++ b/cmake/scripts/android/Install.cmake @@ -26,14 +26,38 @@ configure_file(${CMAKE_SOURCE_DIR}/tools/android/packaging/apksign ${CMAKE_BINARY_DIR}/tools/android/packaging/apksign COPYONLY) configure_file(${CMAKE_SOURCE_DIR}/tools/android/packaging/make_symbols.sh ${CMAKE_BINARY_DIR}/tools/android/packaging/make_symbols.sh COPYONLY) +configure_file(${CMAKE_SOURCE_DIR}/tools/android/packaging/build.gradle + ${CMAKE_BINARY_DIR}/tools/android/packaging/build.gradle COPYONLY) +configure_file(${CMAKE_SOURCE_DIR}/tools/android/packaging/gradlew + ${CMAKE_BINARY_DIR}/tools/android/packaging/gradlew COPYONLY) +configure_file(${CMAKE_SOURCE_DIR}/tools/android/packaging/settings.gradle + ${CMAKE_BINARY_DIR}/tools/android/packaging/settings.gradle COPYONLY) +configure_file(${CMAKE_SOURCE_DIR}/tools/android/packaging/gradle/wrapper/gradle-wrapper.jar + ${CMAKE_BINARY_DIR}/tools/android/packaging/gradle/wrapper/gradle-wrapper.jar COPYONLY) +configure_file(${CMAKE_SOURCE_DIR}/tools/android/packaging/gradle/wrapper/gradle-wrapper.properties + ${CMAKE_BINARY_DIR}/tools/android/packaging/gradle/wrapper/gradle-wrapper.properties COPYONLY) file(WRITE ${CMAKE_BINARY_DIR}/tools/depends/Makefile.include "$(PREFIX)/lib/${APP_NAME_LC}/lib${APP_NAME_LC}.so: ;\n") +string(REPLACE "." ";" APP_VERSION_CODE_LIST ${APP_VERSION_CODE}) +list(GET APP_VERSION_CODE_LIST 0 major) +list(GET APP_VERSION_CODE_LIST 1 minor) +list(GET APP_VERSION_CODE_LIST 2 patch) +unset(APP_VERSION_CODE_LIST) +math(EXPR APP_VERSION_CODE_ANDROID "(${major} * 100 + ${minor}) * 1000 + ${patch}") +unset(major) +unset(minor) +if(ARCH STREQUAL aarch64 AND patch LESS 999) + math(EXPR APP_VERSION_CODE_ANDROID "${APP_VERSION_CODE_ANDROID} + 1") +endif() +unset(patch) + set(package_files strings.xml activity_main.xml colors.xml searchable.xml AndroidManifest.xml + build.gradle src/Main.java src/Splash.java src/XBMCBroadcastReceiver.java @@ -124,6 +148,8 @@ foreach(target apk obb apk-unsigned apk-obb apk-obb-unsigned apk-noobb apk-clean CC=${CMAKE_C_COMPILER} CPU=${CPU} ARCH=${ARCH} + HOST=${HOST} + TOOLCHAIN=${TOOLCHAIN} PREFIX=${prefix} DEPENDS_PATH=${DEPENDS_PATH} NDKROOT=${NDKROOT} diff --git a/cmake/scripts/common/AddonHelpers.cmake b/cmake/scripts/common/AddonHelpers.cmake index 2fafe79..c11923e 100644 --- a/cmake/scripts/common/AddonHelpers.cmake +++ b/cmake/scripts/common/AddonHelpers.cmake @@ -52,7 +52,8 @@ macro (build_addon target prefix libs) # Read used headers from addon, needed to identitfy used kodi addon interface headers if(${prefix}_HEADERS) # Add the used header files defined with CMakeLists.txt from addon itself - if(${prefix}_HEADERS MATCHES ${PROJECT_SOURCE_DIR}) + string(FIND "${${prefix}_HEADERS}" "${PROJECT_SOURCE_DIR}" position) + if(position GREATER -1) # include path name already complete list(APPEND USED_SOURCES ${${prefix}_HEADERS}) else() @@ -75,7 +76,8 @@ macro (build_addon target prefix libs) endif() # Add the used source files defined with CMakeLists.txt from addon itself - if(${prefix}_SOURCES MATCHES ${PROJECT_SOURCE_DIR}) + string(FIND "${${prefix}_SOURCES}" "${PROJECT_SOURCE_DIR}" position) + if(position GREATER -1) # include path name already complete list(APPEND USED_SOURCES ${${prefix}_SOURCES}) else() @@ -228,7 +230,9 @@ macro (build_addon target prefix libs) set(CPACK_COMPONENTS_IGNORE_GROUPS 1) list(APPEND CPACK_COMPONENTS_ALL ${target}-${${prefix}_VERSION}) # Pack files together to create an archive - install(DIRECTORY ${target} DESTINATION ./ COMPONENT ${target}-${${prefix}_VERSION} PATTERN "*.xml.in" EXCLUDE) + install(DIRECTORY ${target} DESTINATION ./ + COMPONENT ${target}-${${prefix}_VERSION} + REGEX ".+\\.xml\\.in(clude)?$" EXCLUDE) if(WIN32) if(NOT CPACK_PACKAGE_DIRECTORY) # determine the temporary path @@ -321,7 +325,8 @@ macro (build_addon target prefix libs) if (${prefix}_CUSTOM_BINARY) install(FILES ${LIBRARY_LOCATION} DESTINATION ${CMAKE_INSTALL_LIBDIR}/addons/${target} RENAME ${LIBRARY_FILENAME}) endif() - install(DIRECTORY ${target} DESTINATION ${CMAKE_INSTALL_DATADIR}/addons PATTERN "*.xml.in" EXCLUDE) + install(DIRECTORY ${target} DESTINATION ${CMAKE_INSTALL_DATADIR}/addons + REGEX ".+\\.xml\\.in(clude)?$" EXCLUDE) if(${prefix}_CUSTOM_DATA) install(DIRECTORY ${${prefix}_CUSTOM_DATA} DESTINATION ${CMAKE_INSTALL_DATADIR}/addons/${target}/resources) endif() @@ -348,6 +353,12 @@ macro (build_addon target prefix libs) COMMAND ${CMAKE_COMMAND} -E copy ${LIBRARY_LOCATION} ${${APP_NAME_UC}_BUILD_DIR}/addons/${target}/${LIBRARY_FILENAME}) + if(${prefix}_ADDITIONAL_BINARY) + add_custom_command(TARGET ${target} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + ${${prefix}_ADDITIONAL_BINARY} + ${${APP_NAME_UC}_BUILD_DIR}/addons/${target}) + endif() endif() endmacro() diff --git a/cmake/scripts/common/ArchSetup.cmake b/cmake/scripts/common/ArchSetup.cmake index 357c14c..3b81533 100644 --- a/cmake/scripts/common/ArchSetup.cmake +++ b/cmake/scripts/common/ArchSetup.cmake @@ -11,6 +11,9 @@ # DEP_DEFINES - compiler definitions for system dependencies (e.g. LIRC) # + the results of compiler tests etc. +# workaround a bug in older cmake, where binutils wouldn't be set after deleting CMakeCache.txt +include(CMakeFindBinUtils) + include(CheckCXXSourceCompiles) include(CheckSymbolExists) include(CheckFunctionExists) diff --git a/cmake/scripts/common/GenerateVersionedFiles.cmake b/cmake/scripts/common/GenerateVersionedFiles.cmake index 90b2173..011f495 100644 --- a/cmake/scripts/common/GenerateVersionedFiles.cmake +++ b/cmake/scripts/common/GenerateVersionedFiles.cmake @@ -13,12 +13,11 @@ endfunction() # add-on xml's file(GLOB ADDON_XML_IN_FILE ${CORE_SOURCE_DIR}/addons/*/addon.xml.in) -foreach(loop_var ${ADDON_XML_IN_FILE}) - # prevent 'xbmc.json'; will be obtained from 'xbmc/interfaces/json-rpc/schema/CMakeLists.txt'. - if(loop_var MATCHES "xbmc.json") - continue() - endif() +# remove 'xbmc.json', will be created from 'xbmc/interfaces/json-rpc/schema/CMakeLists.txt' +list(REMOVE_ITEM ADDON_XML_IN_FILE xbmc.json) + +foreach(loop_var ${ADDON_XML_IN_FILE}) list(GET loop_var 0 xml_name) string(REPLACE "/addon.xml.in" "" source_dir ${xml_name}) @@ -35,4 +34,5 @@ foreach(loop_var ${ADDON_XML_IN_FILE}) unset(xml_name) endforeach() + generate_versioned_file(xbmc/CompileInfo.cpp.in ${CORE_BUILD_DIR}/xbmc/CompileInfo.cpp) diff --git a/cmake/scripts/common/HandleDepends.cmake b/cmake/scripts/common/HandleDepends.cmake index 85d2cf4..49e5ac8 100644 --- a/cmake/scripts/common/HandleDepends.cmake +++ b/cmake/scripts/common/HandleDepends.cmake @@ -7,6 +7,10 @@ function(add_addon_depends addon searchpath) set(OUTPUT_DIR ${ADDON_DEPENDS_PATH}) # look for platform-specific dependencies file(GLOB_RECURSE cmake_input_files ${searchpath}/${CORE_SYSTEM_NAME}/*.txt) + # backward compatibility + if(NOT cmake_input_files AND CORE_SYSTEM_NAME STREQUAL windowsstore) + file(GLOB_RECURSE cmake_input_files ${searchpath}/windows/*.txt) + endif() file(GLOB_RECURSE cmake_input_files2 ${searchpath}/common/*.txt) list(APPEND cmake_input_files ${cmake_input_files2}) @@ -67,6 +71,11 @@ function(add_addon_depends addon searchpath) -DCORE_SYSTEM_NAME=${CORE_SYSTEM_NAME} -DENABLE_STATIC=1 -DBUILD_SHARED_LIBS=0) + # windows store args + if (CMAKE_SYSTEM_NAME STREQUAL WindowsStore) + list(APPEND BUILD_ARGS -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME} + -DCMAKE_SYSTEM_VERSION=${CMAKE_SYSTEM_VERSION}) + endif() # if there are no make rules override files available take care of manually passing on ARCH_DEFINES if(NOT CMAKE_USER_MAKE_RULES_OVERRIDE AND NOT CMAKE_USER_MAKE_RULES_OVERRIDE_CXX) # make sure we create strings, not lists @@ -147,6 +156,10 @@ function(add_addon_depends addon searchpath) if(EXISTS ${dir}/${CORE_SYSTEM_NAME}-deps.txt) file(STRINGS ${dir}/${CORE_SYSTEM_NAME}-deps.txt deps) message(STATUS "${id} depends: ${deps}") + # backward compatibility + elseif(CORE_SYSTEM_NAME STREQUAL windowsstore AND EXISTS ${dir}/windows-deps.txt) + file(STRINGS ${dir}/windows-deps.txt deps) + message(STATUS "${id} depends: ${deps}") elseif(EXISTS ${dir}/deps.txt) set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${dir}/deps.txt) file(STRINGS ${dir}/deps.txt deps) diff --git a/cmake/scripts/common/Macros.cmake b/cmake/scripts/common/Macros.cmake index 9f00bb7..d508f87 100644 --- a/cmake/scripts/common/Macros.cmake +++ b/cmake/scripts/common/Macros.cmake @@ -72,11 +72,15 @@ function(core_add_library name) add_library(${name} STATIC ${SOURCES} ${HEADERS} ${OTHERS}) set_target_properties(${name} PROPERTIES PREFIX "") set(core_DEPENDS ${name} ${core_DEPENDS} CACHE STRING "" FORCE) - add_dependencies(${name} libcpluff ffmpeg dvdnav crossguid ${PLATFORM_GLOBAL_TARGET_DEPS}) + set(lib_DEPS libcpluff ffmpeg crossguid ${PLATFORM_GLOBAL_TARGET_DEPS}) + if(NOT CORE_SYSTEM_NAME STREQUAL windowsstore) + list(APPEND lib_DEPS dvdnav) + endif() + add_dependencies(${name} ${lib_DEPS}) set(CORE_LIBRARY ${name} PARENT_SCOPE) # Add precompiled headers to Kodi main libraries - if(CORE_SYSTEM_NAME STREQUAL windows) + if(CORE_SYSTEM_NAME MATCHES windows) add_precompiled_header(${name} pch.h ${CMAKE_SOURCE_DIR}/xbmc/platform/win32/pch.cpp PCH_TARGET kodi) set_language_cxx(${name}) target_link_libraries(${name} PUBLIC effects11) @@ -102,7 +106,11 @@ function(core_add_test_library name) set_target_properties(${name} PROPERTIES PREFIX "" EXCLUDE_FROM_ALL 1 FOLDER "Build Utilities/tests") - add_dependencies(${name} libcpluff ffmpeg dvdnav crossguid) + set(lib_DEPS libcpluff ffmpeg crossguid ${PLATFORM_GLOBAL_TARGET_DEPS}) + if(NOT CORE_SYSTEM_NAME STREQUAL windowsstore) + list(APPEND lib_DEPS dvdnav) + endif() + add_dependencies(${name} ${lib_DEPS}) set(test_archives ${test_archives} ${name} CACHE STRING "" FORCE) endif() foreach(src IN LISTS SOURCES SUPPORTED_SOURCES HEADERS OTHERS) @@ -314,6 +322,7 @@ function(copy_files_from_filelist_to_buildtree pattern) copy_file_to_buildtree(${CMAKE_SOURCE_DIR}/${file} DIRECTORY ${dest} ${DIR_OPTION}) endif() endforeach() + set(DIR_OPTION) endforeach() endforeach() endforeach() @@ -583,7 +592,8 @@ function(core_find_git_rev stamp) else() find_package(Git) if(GIT_FOUND AND EXISTS ${CMAKE_SOURCE_DIR}/.git) - execute_process(COMMAND ${GIT_EXECUTABLE} update-index --ignore-submodules --refresh -q) + execute_process(COMMAND ${GIT_EXECUTABLE} update-index --ignore-submodules -q --refresh + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) execute_process(COMMAND ${GIT_EXECUTABLE} diff-files --ignore-submodules --quiet -- RESULT_VARIABLE status_code WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) @@ -610,7 +620,11 @@ function(core_find_git_rev stamp) string(REPLACE "-" "" DATE ${DATE}) else() string(TIMESTAMP DATE "%Y%m%d" UTC) - set(HASH "nogitfound") + if(EXISTS ${CMAKE_SOURCE_DIR}/VERSION) + file(STRINGS ${CMAKE_SOURCE_DIR}/VERSION HASH LIMIT_INPUT 16) + else() + set(HASH "nogitfound") + endif() endif() cmake_parse_arguments(arg "FULL" "" "" ${ARGN}) if(arg_FULL) @@ -637,6 +651,7 @@ endfunction() # APP_VERSION - the app version (${APP_VERSION_MAJOR}.${APP_VERSION_MINOR}-${APP_VERSION_TAG}) # APP_ADDON_API - the addon API version in the form of 16.9.702 # FILE_VERSION - file version in the form of 16,9,702,0 - Windows only +# JSONRPC_VERSION - the json api version in the form of 8.3.0 # # Set various variables defined in "versions.h" macro(core_find_versions) @@ -651,9 +666,28 @@ macro(core_find_versions) include(CMakeParseArguments) core_file_read_filtered(version_list ${CORE_SOURCE_DIR}/version.txt) - string(REPLACE " " ";" version_list "${version_list}") - cmake_parse_arguments(APP "" "APP_NAME;COMPANY_NAME;WEBSITE;VERSION_MAJOR;VERSION_MINOR;VERSION_TAG;VERSION_CODE;ADDON_API;APP_PACKAGE" "" ${version_list}) - + core_file_read_filtered(json_version ${CORE_SOURCE_DIR}/xbmc/interfaces/json-rpc/schema/version.txt) + string(REGEX REPLACE "([^ ;]*) ([^;]*)" "\\1;\\2" version_list "${version_list};${json_version}") + set(version_props + ADDON_API + APP_NAME + APP_PACKAGE + COMPANY_NAME + JSONRPC_VERSION + PACKAGE_DESCRIPTION + PACKAGE_IDENTITY + PACKAGE_PUBLISHER + VERSION_MAJOR + VERSION_MINOR + VERSION_TAG + VERSION_CODE + WEBSITE + ) + cmake_parse_arguments(APP "" "${version_props}" "" ${version_list}) + + if(NOT ${APP_VERSION_CODE} MATCHES "^[0-9]+\\.[0-9][0-9]?\\.[0-9][0-9]?[0-9]?$") + message(FATAL_ERROR "VERSION_CODE was set to ${APP_VERSION_CODE} in version.txt, but it has to match '^\\d+\\.\\d{1,2}\\.\\d{1,3}$'") + endif() set(APP_NAME ${APP_APP_NAME}) # inconsistency but APP_APP_NAME looks weird string(TOLOWER ${APP_APP_NAME} APP_NAME_LC) string(TOUPPER ${APP_APP_NAME} APP_NAME_UC) @@ -665,6 +699,7 @@ macro(core_find_versions) string(TOLOWER ${APP_VERSION_TAG} APP_VERSION_TAG_LC) endif() string(REPLACE "." "," FILE_VERSION ${APP_ADDON_API}.0) + set(JSONRPC_VERSION ${APP_JSONRPC_VERSION}) # Set defines used in addon.xml.in and read from versions.h to set add-on # version parts automatically @@ -689,6 +724,9 @@ macro(core_find_versions) if(NOT DEFINED APP_VERSION_MAJOR OR NOT DEFINED APP_VERSION_MINOR) message(FATAL_ERROR "Could not determine app version! Make sure that ${CORE_SOURCE_DIR}/version.txt exists") endif() + if(NOT DEFINED JSONRPC_VERSION) + message(FATAL_ERROR "Could not determine json-rpc version! Make sure that ${CORE_SOURCE_DIR}/xbmc/interfaces/json-rpc/schema/version.txt exists") + endif() endmacro() # add-on xml's diff --git a/cmake/scripts/common/Platform.cmake b/cmake/scripts/common/Platform.cmake index b19b7e5..5ac233a 100644 --- a/cmake/scripts/common/Platform.cmake +++ b/cmake/scripts/common/Platform.cmake @@ -2,14 +2,17 @@ if(NOT CORE_SYSTEM_NAME) string(TOLOWER ${CMAKE_SYSTEM_NAME} CORE_SYSTEM_NAME) endif() -if(CORE_SYSTEM_NAME STREQUAL linux) +if(CORE_SYSTEM_NAME STREQUAL linux OR CORE_SYSTEM_NAME STREQUAL freebsd) # Set default CORE_PLATFORM_NAME to X11 # This is overridden by user setting -DCORE_PLATFORM_NAME= set(_DEFAULT_PLATFORM X11) + option(ENABLE_APP_AUTONAME "Enable renaming the binary according to windowing?" ON) else() string(TOLOWER ${CORE_SYSTEM_NAME} _DEFAULT_PLATFORM) endif() +set(APP_BINARY_SUFFIX ".bin") + # # Note: please do not use CORE_PLATFORM_NAME in any checks, # use the normalized to lower case CORE_PLATFORM_NAME_LC (see below) instead @@ -23,10 +26,12 @@ string(TOLOWER ${CORE_PLATFORM_NAME} CORE_PLATFORM_NAME_LC) list(APPEND final_message "Platform: ${CORE_PLATFORM_NAME}") if(EXISTS ${CMAKE_SOURCE_DIR}/cmake/platform/${CORE_SYSTEM_NAME}/${CORE_PLATFORM_NAME_LC}.cmake) include(${CMAKE_SOURCE_DIR}/cmake/platform/${CORE_SYSTEM_NAME}/${CORE_PLATFORM_NAME_LC}.cmake) + if(ENABLE_APP_AUTONAME) + set(APP_BINARY_SUFFIX "-${CORE_PLATFORM_NAME_LC}") + endif() else() file(GLOB _platformnames RELATIVE ${CMAKE_SOURCE_DIR}/cmake/platform/${CORE_SYSTEM_NAME}/ ${CMAKE_SOURCE_DIR}/cmake/platform/${CORE_SYSTEM_NAME}/*.cmake) string(REPLACE ".cmake" " " _platformnames ${_platformnames}) message(FATAL_ERROR "invalid CORE_PLATFORM_NAME: ${CORE_PLATFORM_NAME_LC}\nValid platforms: ${_platformnames}") endif() - diff --git a/cmake/scripts/common/PrepareEnv.cmake b/cmake/scripts/common/PrepareEnv.cmake index 5a6066b..1426148 100644 --- a/cmake/scripts/common/PrepareEnv.cmake +++ b/cmake/scripts/common/PrepareEnv.cmake @@ -40,17 +40,11 @@ file(COPY ${CORE_SOURCE_DIR}/cmake/scripts/common/AddonHelpers.cmake ${CORE_SOURCE_DIR}/cmake/scripts/common/AddOptions.cmake DESTINATION ${APP_LIB_DIR}) -# copy standard add-on include files -file(COPY ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/ - DESTINATION ${APP_INCLUDE_DIR} REGEX ".txt" EXCLUDE) - ### copy all the addon binding header files to include/kodi -# parse addon-bindings.mk to get the list of header files to copy -core_file_read_filtered(bindings ${CORE_SOURCE_DIR}/xbmc/addons/addon-bindings.mk) -foreach(header ${bindings}) - # copy the header file to include/kodi - configure_file(${CORE_SOURCE_DIR}/${header} ${APP_INCLUDE_DIR} COPYONLY) -endforeach() +include(${CORE_SOURCE_DIR}/xbmc/addons/AddonBindings.cmake) +file(COPY ${CORE_ADDON_BINDINGS_FILES} ${CORE_ADDON_BINDINGS_DIRS}/ + DESTINATION ${APP_INCLUDE_DIR} + REGEX ".txt" EXCLUDE) ### processing additional tools required by the platform if(EXISTS ${CORE_SOURCE_DIR}/cmake/scripts/${CORE_SYSTEM_NAME}/tools/) diff --git a/cmake/scripts/freebsd/ArchSetup.cmake b/cmake/scripts/freebsd/ArchSetup.cmake index ef693b0..8ee78fc 100644 --- a/cmake/scripts/freebsd/ArchSetup.cmake +++ b/cmake/scripts/freebsd/ArchSetup.cmake @@ -1,7 +1,7 @@ set(ARCH_DEFINES -D_LINUX -DTARGET_POSIX -DTARGET_FREEBSD) set(SYSTEM_DEFINES -D__STDC_CONSTANT_MACROS -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64) -set(PLATFORM_DIR linux) +set(PLATFORM_DIR platform/linux) set(SYSTEM_LDFLAGS -L/usr/local/lib) if(WITH_ARCH) set(ARCH ${WITH_ARCH}) @@ -14,3 +14,6 @@ else() message(WARNING "unknown CPU: ${CPU}") endif() endif() + +# Additional SYSTEM_DEFINES +list(APPEND SYSTEM_DEFINES -DHAS_LINUX_NETWORK) diff --git a/cmake/scripts/freebsd/ExtraTargets.cmake b/cmake/scripts/freebsd/ExtraTargets.cmake new file mode 100644 index 0000000..66383ab --- /dev/null +++ b/cmake/scripts/freebsd/ExtraTargets.cmake @@ -0,0 +1,29 @@ +# xrandr +if(X_FOUND AND XRANDR_FOUND) + find_package(X QUIET) + find_package(XRandR QUIET) + add_executable(${APP_NAME_LC}-xrandr ${CMAKE_SOURCE_DIR}/xbmc-xrandr.c) + target_link_libraries(${APP_NAME_LC}-xrandr ${SYSTEM_LDFLAGS} ${X_LIBRARIES} m ${XRANDR_LIBRARIES}) +endif() + +# WiiRemote +if(ENABLE_EVENTCLIENTS AND BLUETOOTH_FOUND) + find_package(CWiid QUIET) + if(CWIID_FOUND) + add_subdirectory(${CMAKE_SOURCE_DIR}/tools/EventClients/Clients/WiiRemote build/WiiRemote) + endif() +endif() + +if(CORE_PLATFORM_NAME_LC STREQUAL "wayland") + # This cannot go into wayland.cmake since it requires the Wayland dependencies + # to already be resolved + set(PROTOCOL_XMLS "${WAYLAND_PROTOCOLS_DIR}/unstable/xdg-shell/xdg-shell-unstable-v6.xml" + "${WAYLAND_PROTOCOLS_DIR}/unstable/idle-inhibit/idle-inhibit-unstable-v1.xml") + add_custom_command(OUTPUT "${WAYLAND_EXTRA_PROTOCOL_GENERATED_DIR}/wayland-extra-protocols.hpp" "${WAYLAND_EXTRA_PROTOCOL_GENERATED_DIR}/wayland-extra-protocols.cpp" + COMMAND "${WAYLANDPP_SCANNER}" ${PROTOCOL_XMLS} "${WAYLAND_EXTRA_PROTOCOL_GENERATED_DIR}/wayland-extra-protocols.hpp" "${WAYLAND_EXTRA_PROTOCOL_GENERATED_DIR}/wayland-extra-protocols.cpp" + DEPENDS "${WAYLANDPP_SCANNER}" ${PROTOCOL_XMLS} + COMMENT "Generating wayland-protocols C++ wrappers") + + # Dummy target for dependencies + add_custom_target(generate-wayland-extra-protocols DEPENDS wayland-extra-protocols.hpp) +endif() diff --git a/cmake/scripts/ios/ArchSetup.cmake b/cmake/scripts/ios/ArchSetup.cmake index be12c49..0808eb2 100644 --- a/cmake/scripts/ios/ArchSetup.cmake +++ b/cmake/scripts/ios/ArchSetup.cmake @@ -7,7 +7,7 @@ set(CORE_MAIN_SOURCE ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/XBMCApplicatio set(ARCH_DEFINES -D_LINUX -DTARGET_POSIX -DTARGET_DARWIN -DTARGET_DARWIN_IOS) set(SYSTEM_DEFINES -D_REENTRANT -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D__STDC_CONSTANT_MACROS) -set(PLATFORM_DIR linux) +set(PLATFORM_DIR platform/linux) set(CMAKE_SYSTEM_NAME Darwin) if(WITH_ARCH) set(ARCH ${WITH_ARCH}) @@ -21,6 +21,9 @@ else() endif() endif() +# Additional SYSTEM_DEFINES +list(APPEND SYSTEM_DEFINES -DHAS_LINUX_NETWORK -DHAS_ZEROCONF) + find_package(CXX11 REQUIRED) list(APPEND CMAKE_SYSTEM_PREFIX_PATH ${NATIVEPREFIX}) diff --git a/cmake/scripts/ios/Install.cmake b/cmake/scripts/ios/Install.cmake index fee7368..587b24f 100644 --- a/cmake/scripts/ios/Install.cmake +++ b/cmake/scripts/ios/Install.cmake @@ -4,6 +4,8 @@ set(BUNDLE_RESOURCES ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/Default-568h@2 ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/Default-667h@2x.png ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/Default-736h@3x.png ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/Default-Landscape-736h@3x.png + ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/Default-812h@3x.png + ${CMAKE_SOURCE_DIR}/xbmc/platform/darwin/ios/Default-Landscape-812h@3x.png ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon29x29.png ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon29x29@2x.png ${CMAKE_SOURCE_DIR}/tools/darwin/packaging/media/ios/rounded/AppIcon40x40.png diff --git a/cmake/scripts/linux/ArchSetup.cmake b/cmake/scripts/linux/ArchSetup.cmake index 74018d0..ee69c09 100644 --- a/cmake/scripts/linux/ArchSetup.cmake +++ b/cmake/scripts/linux/ArchSetup.cmake @@ -5,7 +5,7 @@ if(CORE_PLATFORM_NAME_LC STREQUAL rbpi) endif() set(SYSTEM_DEFINES -D__STDC_CONSTANT_MACROS -D_FILE_DEFINED -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64) -set(PLATFORM_DIR linux) +set(PLATFORM_DIR platform/linux) set(CMAKE_SYSTEM_NAME Linux) if(WITH_ARCH) set(ARCH ${WITH_ARCH}) @@ -37,9 +37,32 @@ else() endif() endif() -# Make sure we strip binaries in Release build -if(CMAKE_BUILD_TYPE STREQUAL Release AND CMAKE_COMPILER_IS_GNUCXX) +if((CMAKE_BUILD_TYPE STREQUAL Release OR CMAKE_BUILD_TYPE STREQUAL MinSizeRel) + AND CMAKE_COMPILER_IS_GNUCXX) + # Make sure we strip binaries in Release build set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s") + + # LTO Support, requires cmake >= 3.9 + if(CMAKE_VERSION VERSION_EQUAL 3.9.0 OR CMAKE_VERSION VERSION_GREATER 3.9.0) + option(USE_LTO "Enable link time optimization. Specify an int for number of parallel jobs" OFF) + if(USE_LTO) + include(CheckIPOSupported) + check_ipo_supported(RESULT HAVE_LTO OUTPUT _output) + if(HAVE_LTO) + set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE) + # override flags to enable parallel processing + set(NJOBS 2) + if(USE_LTO MATCHES "^[0-9]+$") + set(NJOBS ${USE_LTO}) + endif() + set(CMAKE_CXX_COMPILE_OPTIONS_IPO -flto=${NJOBS} -fno-fat-lto-objects) + set(CMAKE_C_COMPILE_OPTIONS_IPO -flto=${NJOBS} -fno-fat-lto-objects) + else() + message(WARNING "LTO optimization not supported: ${_output}") + unset(_output) + endif() + endif() + endif() endif() if(KODI_DEPENDSBUILD) @@ -64,6 +87,9 @@ if(HAVE_MKOSTEMP) list(APPEND ARCH_DEFINES "-DHAVE_MKOSTEMP=1" "-D_GNU_SOURCE") endif() +# Additional SYSTEM_DEFINES +list(APPEND SYSTEM_DEFINES -DHAS_LINUX_NETWORK) + # Code Coverage if(CMAKE_BUILD_TYPE STREQUAL Coverage) set(COVERAGE_TEST_BINARY ${APP_NAME_LC}-test) @@ -78,5 +104,8 @@ endif() if(ENABLE_GBM) set(ENABLE_VDPAU OFF CACHE BOOL "Disabling VDPAU" FORCE) - set(ENABLE_VAAPI OFF CACHE BOOL "Disabling VAAPI" FORCE) +endif() + +if(ENABLE_VDPAU) + set(ENABLE_GLX ON CACHE BOOL "Enabling GLX" FORCE) endif() diff --git a/cmake/scripts/linux/Install.cmake b/cmake/scripts/linux/Install.cmake index 7a2705b..d6767bf 100644 --- a/cmake/scripts/linux/Install.cmake +++ b/cmake/scripts/linux/Install.cmake @@ -15,6 +15,7 @@ else() endif() # CMake config +set(APP_BINARY ${APP_NAME_LC}${APP_BINARY_SUFFIX}) set(APP_PREFIX ${prefix}) set(APP_LIB_DIR ${libdir}/${APP_NAME_LC}) set(APP_DATA_DIR ${datarootdir}/${APP_NAME_LC}) @@ -146,17 +147,13 @@ if(NOT WITH_TEXTUREPACKER) endif() # Install kodi-addon-dev headers -install(DIRECTORY ${CMAKE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include/kodi/ +include(${CMAKE_SOURCE_DIR}/xbmc/addons/AddonBindings.cmake) +install(DIRECTORY ${CORE_ADDON_BINDINGS_DIRS}/ DESTINATION ${includedir}/${APP_NAME_LC} COMPONENT kodi-addon-dev REGEX ".txt" EXCLUDE) -install(FILES ${CMAKE_SOURCE_DIR}/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxPacket.h - ${CMAKE_SOURCE_DIR}/xbmc/cores/VideoPlayer/DVDDemuxers/DemuxCrypto.h - ${CMAKE_SOURCE_DIR}/xbmc/cores/AudioEngine/Utils/AEChannelData.h - ${CMAKE_SOURCE_DIR}/xbmc/filesystem/IFileTypes.h - ${CMAKE_SOURCE_DIR}/xbmc/input/ActionIDs.h - ${CMAKE_SOURCE_DIR}/xbmc/input/XBMC_vkeys.h +install(FILES ${CORE_ADDON_BINDINGS_FILES} DESTINATION ${includedir}/${APP_NAME_LC} COMPONENT kodi-addon-dev) @@ -178,7 +175,7 @@ install(FILES ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/scripts/${APP_NAME}Config.cm COMPONENT kodi-addon-dev) if(ENABLE_EVENTCLIENTS) - execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "from distutils.sysconfig import get_python_lib; print get_python_lib(prefix='')" + execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(prefix=''))" OUTPUT_VARIABLE PYTHON_LIB_PATH OUTPUT_STRIP_TRAILING_WHITESPACE) # Install kodi-eventclients-common BT python files install(PROGRAMS ${CMAKE_SOURCE_DIR}/tools/EventClients/lib/python/bt/__init__.py diff --git a/cmake/scripts/linux/clang-check-test.sh.in b/cmake/scripts/linux/clang-check-test.sh.in index 3b30ec1..12e9a0e 100755 --- a/cmake/scripts/linux/clang-check-test.sh.in +++ b/cmake/scripts/linux/clang-check-test.sh.in @@ -12,7 +12,7 @@ source_file=$2 tmpfil=`mktemp` $clangcheck_cmd -p @CMAKE_BINARY_DIR@ -analyze $source_file &> $tmpfil -nerr=`cat $tmpfil | grep -v "warning: /usr/bin/c++: 'linker' input unused" | wc -l` +nerr=`cat $tmpfil | grep -v "warning: .*: 'linker' input unused" | wc -l` if test $nerr -gt 0 then cat $tmpfil diff --git a/cmake/scripts/osx/ArchSetup.cmake b/cmake/scripts/osx/ArchSetup.cmake index 5a1b567..d0c5506 100644 --- a/cmake/scripts/osx/ArchSetup.cmake +++ b/cmake/scripts/osx/ArchSetup.cmake @@ -9,7 +9,7 @@ set(CORE_MAIN_SOURCE ${CMAKE_SOURCE_DIR}/xbmc/platform/posix/main.cpp set(ARCH_DEFINES -D_LINUX -DTARGET_POSIX -DTARGET_DARWIN -DTARGET_DARWIN_OSX) set(SYSTEM_DEFINES -D_REENTRANT -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D__STDC_CONSTANT_MACROS) -set(PLATFORM_DIR linux) +set(PLATFORM_DIR platform/linux) set(CMAKE_SYSTEM_NAME Darwin) if(WITH_ARCH) set(ARCH ${WITH_ARCH}) @@ -22,6 +22,9 @@ else() endif() endif() +# Additional SYSTEM_DEFINES +list(APPEND SYSTEM_DEFINES -DHAS_LINUX_NETWORK -DHAS_SDL -DHAS_ZEROCONF) + find_package(CXX11 REQUIRED) list(APPEND CMAKE_SYSTEM_PREFIX_PATH ${NATIVEPREFIX}) diff --git a/cmake/scripts/windows/ArchSetup.cmake b/cmake/scripts/windows/ArchSetup.cmake index d438b05..8e4f61d 100644 --- a/cmake/scripts/windows/ArchSetup.cmake +++ b/cmake/scripts/windows/ArchSetup.cmake @@ -17,14 +17,15 @@ set(CORE_MAIN_SOURCE ${CMAKE_SOURCE_DIR}/xbmc/platform/win32/WinMain.cpp) # Precompiled headers fail with per target output directory. (needs CMake 3.1) set(PRECOMPILEDHEADER_DIR ${PROJECT_BINARY_DIR}/${CORE_BUILD_CONFIG}/objs) - set(CMAKE_SYSTEM_NAME Windows) -list(APPEND CMAKE_SYSTEM_PREFIX_PATH ${CMAKE_SOURCE_DIR}/project/BuildDependencies/mingwlibs/${ARCH}) -list(APPEND CMAKE_SYSTEM_LIBRARY_PATH ${CMAKE_SOURCE_DIR}/project/BuildDependencies/mingwlibs/${ARCH}/bin) -list(APPEND CMAKE_SYSTEM_PREFIX_PATH ${CMAKE_SOURCE_DIR}/project/BuildDependencies/${ARCH}) -list(APPEND CMAKE_SYSTEM_PREFIX_PATH ${CMAKE_SOURCE_DIR}/project/BuildDependencies) -set(PYTHON_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/project/BuildDependencies/${ARCH}/include/python) +set(DEPS_FOLDER_RELATIVE project/BuildDependencies) +set(DEPENDENCIES_DIR ${CMAKE_SOURCE_DIR}/${DEPS_FOLDER_RELATIVE}/${ARCH}) +set(MINGW_LIBS_DIR ${CMAKE_SOURCE_DIR}/${DEPS_FOLDER_RELATIVE}/mingwlibs/${ARCH}) +list(APPEND CMAKE_SYSTEM_PREFIX_PATH ${MINGW_LIBS_DIR}) +list(APPEND CMAKE_SYSTEM_LIBRARY_PATH ${MINGW_LIBS_DIR}/bin) +list(APPEND CMAKE_SYSTEM_PREFIX_PATH ${DEPENDENCIES_DIR}) +set(PYTHON_INCLUDE_DIR ${DEPENDENCIES_DIR}/include/python) # -------- Compiler options --------- @@ -41,6 +42,9 @@ if(${ARCH} STREQUAL win32) list(APPEND SYSTEM_DEFINES $<$:-D_ITERATOR_DEBUG_LEVEL=0>) endif() +# Additional SYSTEM_DEFINES +list(APPEND SYSTEM_DEFINES -DHAS_IRSERVERSUITE -DHAS_WIN32_NETWORK -DHAS_FILESYSTEM_SMB) + # Make sure /FS is set for Visual Studio in order to prevent simultaneous access to pdb files. if(CMAKE_GENERATOR MATCHES "Visual Studio") set(CMAKE_CXX_FLAGS "/MP /FS ${CMAKE_CXX_FLAGS}") @@ -56,14 +60,7 @@ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH:NO") # For #pragma comment(lib X) # TODO: It would certainly be better to handle these libraries via CMake modules. -if(${ARCH} STREQUAL win32) - link_directories(${CMAKE_SOURCE_DIR}/lib/win32/ffmpeg/bin - ${CMAKE_SOURCE_DIR}/project/BuildDependencies/${ARCH}/lib - ${CMAKE_SOURCE_DIR}/project/BuildDependencies/lib) -else() - link_directories(${CMAKE_SOURCE_DIR}/lib/win32/ffmpeg/bin - ${CMAKE_SOURCE_DIR}/project/BuildDependencies/${ARCH}/lib) -endif() +link_directories(${DEPENDENCIES_DIR}/lib) # Additional libraries list(APPEND DEPLIBS d3d11.lib DInput8.lib DSound.lib winmm.lib Mpr.lib Iphlpapi.lib WS2_32.lib diff --git a/cmake/scripts/windowsstore/ArchSetup.cmake b/cmake/scripts/windowsstore/ArchSetup.cmake new file mode 100644 index 0000000..6c6622c --- /dev/null +++ b/cmake/scripts/windowsstore/ArchSetup.cmake @@ -0,0 +1,121 @@ +# -------- Architecture settings --------- + +check_symbol_exists(_X86_ "Windows.h" _X86_) +check_symbol_exists(_AMD64_ "Windows.h" _AMD64_) +check_symbol_exists(_ARM_ "Windows.h" _ARM_) + +if(_X86_) + set(ARCH win32) + set(SDK_TARGET_ARCH x86) +elseif(_AMD64_) + set(ARCH x64) + set(SDK_TARGET_ARCH x64) +elseif(_ARM_) + set(ARCH arm) + set(SDK_TARGET_ARCH arm) +else() + message(FATAL_ERROR "Unsupported architecture") +endif() + +unset(_X86_) +unset(_AMD64_) +unset(_ARM_) + +# -------- Paths (mainly for find_package) --------- + +set(PLATFORM_DIR platform/win32) +set(CORE_MAIN_SOURCE ${CMAKE_SOURCE_DIR}/xbmc/platform/win10/main.cpp) + +# Precompiled headers fail with per target output directory. (needs CMake 3.1) +set(PRECOMPILEDHEADER_DIR ${PROJECT_BINARY_DIR}/${CORE_BUILD_CONFIG}/objs) + +set(CMAKE_SYSTEM_NAME WindowsStore) +set(CORE_SYSTEM_NAME "windowsstore") +set(PACKAGE_GUID "281d668b-5739-4abd-b3c2-ed1cda572ed2") +set(APP_MANIFEST_NAME package.appxmanifest) +set(DEPS_FOLDER_RELATIVE project/BuildDependencies) + +set(DEPENDENCIES_DIR ${CMAKE_SOURCE_DIR}/${DEPS_FOLDER_RELATIVE}/win10-${ARCH}) +set(MINGW_LIBS_DIR ${CMAKE_SOURCE_DIR}/${DEPS_FOLDER_RELATIVE}/mingwlibs/win10-${ARCH}) + +# mingw libs +list(APPEND CMAKE_SYSTEM_PREFIX_PATH ${MINGW_LIBS_DIR}) +list(APPEND CMAKE_SYSTEM_LIBRARY_PATH ${MINGW_LIBS_DIR}/bin) +# dependencies +list(APPEND CMAKE_SYSTEM_PREFIX_PATH ${DEPENDENCIES_DIR}) +# for python +set(PYTHON_INCLUDE_DIR ${DEPENDENCIES_DIR}/include/python) + + +# -------- Compiler options --------- + +add_options(CXX ALL_BUILDS "/wd\"4996\"") +add_options(CXX ALL_BUILDS "/wd\"4146\"") +add_options(CXX ALL_BUILDS "/wd\"4251\"") +add_options(CXX ALL_BUILDS "/wd\"4668\"") +set(ARCH_DEFINES -D_WINDOWS -DTARGET_WINDOWS -DTARGET_WINDOWS_STORE -DXBMC_EXPORT -DMS_UWP) +if(NOT SDK_TARGET_ARCH STREQUAL arm) + list(APPEND ARCH_DEFINES -D__SSE__ -D__SSE2__) +endif() +set(SYSTEM_DEFINES -DNOMINMAX -DHAS_DX -D__STDC_CONSTANT_MACROS + -DFMT_HEADER_ONLY -DTAGLIB_STATIC -DNPT_CONFIG_ENABLE_LOGGING + -DPLT_HTTP_DEFAULT_USER_AGENT="UPnP/1.0 DLNADOC/1.50 Kodi" + -DPLT_HTTP_DEFAULT_SERVER="UPnP/1.0 DLNADOC/1.50 Kodi" + -DUNICODE -D_UNICODE + $<$:-DD3D_DEBUG_INFO>) + +# Additional SYSTEM_DEFINES +list(APPEND SYSTEM_DEFINES -DHAS_IRSERVERSUITE -DHAS_WIN10_NETWORK) + +# The /MP option enables /FS by default. +set(CMAKE_CXX_FLAGS "/MP ${CMAKE_CXX_FLAGS} /ZW /EHsc /await") +# Google Test needs to use shared version of runtime libraries +set(gtest_force_shared_crt ON CACHE STRING "" FORCE) + + +# -------- Linker options --------- + +# For #pragma comment(lib X) +# TODO: It would certainly be better to handle these libraries via CMake modules. +link_directories(${MINGW_LIBS_DIR}/lib + ${DEPENDENCIES_DIR}/lib) + +list(APPEND DEPLIBS d3d11.lib WS2_32.lib dxguid.lib dloadhelper.lib) +if(ARCH STREQUAL win32 OR ARCH STREQUAL x64) + list(APPEND DEPLIBS DInput8.lib DSound.lib winmm.lib Mpr.lib Iphlpapi.lib PowrProf.lib setupapi.lib dwmapi.lib) +endif() +# NODEFAULTLIB option + +set(_nodefaultlibs_RELEASE libcmt) +set(_nodefaultlibs_DEBUG libcmt msvcrt) +foreach(_lib ${_nodefaultlibs_RELEASE}) + set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /NODEFAULTLIB:\"${_lib}\"") +endforeach() +foreach(_lib ${_nodefaultlibs_DEBUG}) + set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:\"${_lib}\"") +endforeach() + +# Make the Release version create a PDB +set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi") +# Minimize the size or the resulting DLLs +set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF") +# remove warning +set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} /ignore:4264") + + +# -------- Visual Studio options --------- + +if(CMAKE_GENERATOR MATCHES "Visual Studio") + set_property(GLOBAL PROPERTY USE_FOLDERS ON) + + # Generate a batch file that opens Visual Studio with the necessary env variables set. + file(WRITE ${CMAKE_BINARY_DIR}/kodi-sln.bat + "@echo off\n" + "set KODI_HOME=%~dp0\n" + "set PATH=%~dp0\\system\n" + "start %~dp0\\${PROJECT_NAME}.sln") +endif() + +# -------- Build options --------- + +set(ENABLE_OPTICAL OFF CACHE BOOL "" FORCE) diff --git a/cmake/scripts/windowsstore/CFlagOverrides.cmake b/cmake/scripts/windowsstore/CFlagOverrides.cmake new file mode 100644 index 0000000..0cd1c4d --- /dev/null +++ b/cmake/scripts/windowsstore/CFlagOverrides.cmake @@ -0,0 +1,12 @@ +# compiler flags +string(APPEND CMAKE_C_FLAGS_INIT " /D_UNICODE /DUNICODE /MP /DWIN32 /D_WINDOWS /W3 /Zi /DTARGET_WINDOWS") +string(APPEND CMAKE_C_FLAGS_INIT " /DWINAPI_FAMILY=2 /DTARGET_WINDOWS_STORE /D_WINSOCK_DEPRECATED_NO_WARNINGS /D_CRT_NONSTDC_NO_DEPRECATE") +string(APPEND CMAKE_C_FLAGS_DEBUG_INIT " /D_DEBUG /MDd /Ob0 /Od /RTC1 /D_ITERATOR_DEBUG_LEVEL=0") +string(APPEND CMAKE_C_FLAGS_RELEASE_INIT " /MD /Ox /Ob2 /Oi /Ot /Oy /GL /DNDEBUG") +# linker flags +string(APPEND CMAKE_SHARED_LINKER_FLAGS_INIT " /DYNAMICBASE /NXCOMPAT /APPCONTAINER") +# win32 specific flags +if("$ENV{Platform}" STREQUAL X86) + string(APPEND CMAKE_C_FLAGS_INIT " /arch:SSE2") + string(APPEND CMAKE_SHARED_LINKER_FLAGS_INIT " /SAFESEH") +endif() diff --git a/cmake/scripts/windowsstore/CXXFlagOverrides.cmake b/cmake/scripts/windowsstore/CXXFlagOverrides.cmake new file mode 100644 index 0000000..2219af4 --- /dev/null +++ b/cmake/scripts/windowsstore/CXXFlagOverrides.cmake @@ -0,0 +1,12 @@ +# compiler flags +string(APPEND CMAKE_CXX_FLAGS_INIT " /D_UNICODE /DUNICODE /MP /DWIN32 /D_WINDOWS /W3 /GR /Zi /EHsc /DTARGET_WINDOWS") +string(APPEND CMAKE_CXX_FLAGS_INIT " /DWINAPI_FAMILY=2 /DTARGET_WINDOWS_STORE /D_WINSOCK_DEPRECATED_NO_WARNINGS /D_CRT_NONSTDC_NO_DEPRECATE") +string(APPEND CMAKE_CXX_FLAGS_DEBUG_INIT " /D_DEBUG /MDd /Ob0 /Od /RTC1 /D_ITERATOR_DEBUG_LEVEL=0") +string(APPEND CMAKE_CXX_FLAGS_RELEASE_INIT " /MD /Ox /Ob2 /Oi /Ot /Oy /GL /DNDEBUG") +# linker flags +string(APPEND CMAKE_SHARED_LINKER_FLAGS_INIT " /DYNAMICBASE /NXCOMPAT /APPCONTAINER") +# win32 specific flags +if("$ENV{Platform}" STREQUAL X86) + string(APPEND CMAKE_CXX_FLAGS_INIT " /arch:SSE2") + string(APPEND CMAKE_SHARED_LINKER_FLAGS_INIT " /SAFESEH") +endif() diff --git a/cmake/scripts/windowsstore/Install.cmake b/cmake/scripts/windowsstore/Install.cmake new file mode 100644 index 0000000..e69de29 diff --git a/cmake/scripts/windowsstore/Macros.cmake b/cmake/scripts/windowsstore/Macros.cmake new file mode 100644 index 0000000..6e7d1d0 --- /dev/null +++ b/cmake/scripts/windowsstore/Macros.cmake @@ -0,0 +1,181 @@ +function(core_link_library lib wraplib) + message(AUTHOR_WARNING "core_link_library is not compatible with windows.") +endfunction() + +function(find_soname lib) + # Windows uses hardcoded dlls in xbmc/DllPaths_win32.h. + # Therefore the output of this function is unused. +endfunction() + +# Add precompiled header to target +# Arguments: +# target existing target that will be set up to compile with a precompiled header +# pch_header the precompiled header file +# pch_source the precompiled header source file +# Optional Arguments: +# PCH_TARGET build precompiled header as separate target with the given name +# so that the same precompiled header can be used for multiple libraries +# EXCLUDE_SOURCES if not all target sources shall use the precompiled header, +# the relevant files can be listed here +# On return: +# Compiles the pch_source into a precompiled header and adds the header to +# the given target +function(add_precompiled_header target pch_header pch_source) + cmake_parse_arguments(PCH "" "PCH_TARGET" "EXCLUDE_SOURCES" ${ARGN}) + + if(PCH_PCH_TARGET) + set(pch_binary ${PRECOMPILEDHEADER_DIR}/${PCH_PCH_TARGET}.pch) + else() + set(pch_binary ${PRECOMPILEDHEADER_DIR}/${target}.pch) + endif() + + # Set compile options and dependency for sources + get_target_property(sources ${target} SOURCES) + list(REMOVE_ITEM sources ${pch_source}) + foreach(exclude_source IN LISTS PCH_EXCLUDE_SOURCES) + list(REMOVE_ITEM sources ${exclude_source}) + endforeach() + set_source_files_properties(${sources} + PROPERTIES COMPILE_FLAGS "/Yu\"${pch_header}\" /Fp\"${pch_binary}\" /FI\"${pch_header}\"" + OBJECT_DEPENDS "${pch_binary}") + + # Set compile options for precompiled header + if(NOT PCH_PCH_TARGET OR NOT TARGET ${PCH_PCH_TARGET}_pch) + set_source_files_properties(${pch_source} + PROPERTIES COMPILE_FLAGS "/Yc\"${pch_header}\" /Fp\"${pch_binary}\"" + OBJECT_OUTPUTS "${pch_binary}") + endif() + + # Compile precompiled header + if(PCH_PCH_TARGET) + # As own target for usage in multiple libraries + if(NOT TARGET ${PCH_PCH_TARGET}_pch) + add_library(${PCH_PCH_TARGET}_pch STATIC ${pch_source}) + set_target_properties(${PCH_PCH_TARGET}_pch PROPERTIES COMPILE_PDB_NAME vc140 + COMPILE_PDB_OUTPUT_DIRECTORY ${PRECOMPILEDHEADER_DIR} + FOLDER "Build Utilities") + endif() + # From VS2012 onwards, precompiled headers have to be linked against (LNK2011). + target_link_libraries(${target} PUBLIC ${PCH_PCH_TARGET}_pch) + set_target_properties(${target} PROPERTIES COMPILE_PDB_NAME vc140 + COMPILE_PDB_OUTPUT_DIRECTORY ${PRECOMPILEDHEADER_DIR}) + else() + # As part of the target + target_sources(${target} PRIVATE ${pch_source}) + endif() +endfunction() + +macro(winstore_set_assets target) + file(GLOB ASSET_FILES "${CMAKE_SOURCE_DIR}/tools/windows/packaging/uwp/media/*.png") + set_property(SOURCE ${ASSET_FILES} PROPERTY VS_DEPLOYMENT_CONTENT 1) + set_property(SOURCE ${ASSET_FILES} PROPERTY VS_DEPLOYMENT_LOCATION "media") + source_group("media" FILES ${ASSET_FILES}) + set(RESOURCES ${RESOURCES} ${ASSET_FILES} + "${CMAKE_SOURCE_DIR}/tools/windows/packaging/uwp/kodi_temp_key.pfx") + set(LICENSE_FILES + ${CMAKE_SOURCE_DIR}/LICENSE.GPL + ${CMAKE_SOURCE_DIR}/copying.txt + ${CMAKE_SOURCE_DIR}/privacy-policy.txt) + if(EXISTS "${CMAKE_SOURCE_DIR}/known_issues.txt") + list(APPEND LICENSE_FILES ${CMAKE_SOURCE_DIR}/known_issues.txt) + endif() + set_property(SOURCE ${LICENSE_FILES} PROPERTY VS_DEPLOYMENT_CONTENT 1) + list(APPEND RESOURCES ${LICENSE_FILES}) +endmacro() + +macro(winstore_generate_manifest target) + configure_file( + ${CMAKE_SOURCE_DIR}/tools/windows/packaging/uwp/${APP_MANIFEST_NAME}.in + ${CMAKE_CURRENT_BINARY_DIR}/${APP_MANIFEST_NAME} + @ONLY) + set(RESOURCES ${RESOURCES} ${CMAKE_CURRENT_BINARY_DIR}/${APP_MANIFEST_NAME}) +endmacro() + +macro(add_deployment_content_group path link match exclude) + set(_link "") + set(_exclude "") + file(TO_NATIVE_PATH ${path} _path) + file(TO_NATIVE_PATH ${match} _match) + if (NOT "${link}" STREQUAL "") + file(TO_NATIVE_PATH ${link} _link) + set(_link "${_link}\\") + endif() + if(NOT "${exclude}" STREQUAL "") + string(REPLACE "/" "\\" _exclude ${exclude}) + endif() + string(CONCAT UWP_DEPLOYMENT_CONTENT_STR "${UWP_DEPLOYMENT_CONTENT_STR}" + " \n" + " ${_link}%(RecursiveDir)%(FileName)%(Extension)\n" + " true\n" + " \n") +endmacro() + +macro(winstore_append_props target) + # exclude debug dlls from packaging + set(DEBUG_DLLS zlibd.dll freetyped.dll sqlite3d.dll) + foreach(_dll ${DEBUG_DLLS}) + if (DEBUG_DLLS_EXCLUDE) + list(APPEND DEBUG_DLLS_EXCLUDE "\;$(BuildRootPath)/dlls/${_dll}") + else() + list(APPEND DEBUG_DLLS_EXCLUDE "$(BuildRootPath)/dlls/${_dll}") + endif() + string(CONCAT DEBUG_DLLS_LINKAGE_PROPS "${DEBUG_DLLS_LINKAGE_PROPS}" + " \n" + " \n" + " true\n" + " \n" + " \n") + endforeach(_dll DEBUG_DLLS) + + add_deployment_content_group($(BuildRootPath)/dlls "" *.dll "${DEBUG_DLLS_EXCLUDE}") + add_deployment_content_group($(BuildRootPath)/system system **/* "$(BuildRootPath)/**/*.glsl") + add_deployment_content_group($(BuildRootPath)/media media **/* "") + add_deployment_content_group($(BuildRootPath)/userdata userdata **/* "") + add_deployment_content_group($(BuildRootPath)/addons addons **/* "") + add_deployment_content_group($(BinaryAddonsPath) addons **/* "") + + foreach(xbt_file ${XBT_FILES}) + file(RELATIVE_PATH relative ${CMAKE_CURRENT_BINARY_DIR} ${xbt_file}) + file(TO_NATIVE_PATH ${relative} relative) + string(CONCAT XBT_FILE_PROPS "${XBT_FILE_PROPS}" + " \n" + " \n" + " ${relative}\n" + " true\n" + " \n" + " \n") + endforeach() + + set(VCPROJECT_PROPS_FILE "${CMAKE_CURRENT_BINARY_DIR}/${target}.props") + file(TO_NATIVE_PATH ${DEPENDENCIES_DIR} DEPENDENCIES_DIR_NATIVE) + file(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR} CMAKE_CURRENT_BINARY_DIR_NATIVE) + file(TO_NATIVE_PATH ${CMAKE_SOURCE_DIR}/project/Win32BuildSetup/BUILD_WIN32/addons BINARY_ADDONS_DIR_NATIVE) + + file(WRITE ${VCPROJECT_PROPS_FILE} + "\n" + "\n" + " \n" + " \n" + " ${DEPENDENCIES_DIR_NATIVE}\\bin\n" + " ${CMAKE_CURRENT_BINARY_DIR_NATIVE}\n" + " ${BINARY_ADDONS_DIR_NATIVE}\n" + " \n" + "${DEBUG_DLLS_LINKAGE_PROPS}" + "${XBT_FILE_PROPS}" + " \n" + "${UWP_DEPLOYMENT_CONTENT_STR}" + " \n" + " '$(OutputPath)\\PackageLayout\\%(Link)')\" BeforeTargets=\"AssignTargetPaths\">\n" + " \n" + " \n" + " \n" + " \n" + " \n" + "") +endmacro() + +macro(winstore_add_target_properties target) + winstore_set_assets(${target}) + winstore_generate_manifest(${target}) + winstore_append_props(${target}) +endmacro() \ No newline at end of file diff --git a/cmake/scripts/windowsstore/PathSetup.cmake b/cmake/scripts/windowsstore/PathSetup.cmake new file mode 100644 index 0000000..8550616 --- /dev/null +++ b/cmake/scripts/windowsstore/PathSetup.cmake @@ -0,0 +1,34 @@ +if(NOT prefix) + set(prefix ${CMAKE_INSTALL_PREFIX}) +else() + set(CMAKE_INSTALL_PREFIX ${prefix}) +endif() +if(NOT exec_prefix) + set(exec_prefix ${prefix}) +endif() +if(NOT libdir) + set(libdir ${prefix}/lib) +endif() +if(NOT bindir) + set(bindir ${prefix}/bin) +endif() +if(NOT includedir) + set(includedir ${prefix}/include) +endif() +if(NOT datarootdir) + set(datarootdir ${prefix}/share) +endif() +if(NOT datadir) + set(datadir ${datarootdir}) +endif() + +list(APPEND final_message "-- PATH config --") +list(APPEND final_message "Prefix: ${prefix}") +list(APPEND final_message "Libdir: ${libdir}") +list(APPEND final_message "Bindir: ${bindir}") +list(APPEND final_message "Includedir: ${includedir}") +list(APPEND final_message "Datarootdir: ${datarootdir}") +list(APPEND final_message "Datadir: ${datadir}") + +set(PATH_DEFINES -DBIN_INSTALL_PATH=\"${libdir}/kodi\" + -DINSTALL_PATH=\"${datarootdir}/kodi\") diff --git a/cmake/scripts/windowsstore/tools/patch.cmake b/cmake/scripts/windowsstore/tools/patch.cmake new file mode 100644 index 0000000..0a342fa --- /dev/null +++ b/cmake/scripts/windowsstore/tools/patch.cmake @@ -0,0 +1,37 @@ +find_program(PATCH_FOUND NAMES patch patch.exe) +if(PATCH_FOUND) + message(STATUS "patch utility found at ${PATCH_FOUND}") +else() + set(PATCH_ARCHIVE_NAME "patch-2.5.9-7-bin-3") + set(PATCH_ARCHIVE "${PATCH_ARCHIVE_NAME}.zip") + set(PATCH_URL "${KODI_MIRROR}/build-deps/win32/${PATCH_ARCHIVE}") + set(PATCH_DOWNLOAD ${BUILD_DIR}/download/${PATCH_ARCHIVE}) + + # download the archive containing patch.exe + message(STATUS "Downloading patch utility from ${PATCH_URL}...") + file(DOWNLOAD "${PATCH_URL}" "${PATCH_DOWNLOAD}" STATUS PATCH_DL_STATUS LOG PATCH_LOG SHOW_PROGRESS) + list(GET PATCH_DL_STATUS 0 PATCH_RETCODE) + if(NOT PATCH_RETCODE EQUAL 0) + message(FATAL_ERROR "ERROR downloading ${PATCH_URL} - status: ${PATCH_DL_STATUS} log: ${PATCH_LOG}") + endif() + + # extract the archive containing patch.exe + execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzvf ${PATCH_DOWNLOAD} + WORKING_DIRECTORY ${BUILD_DIR}) + + # make sure the extraction worked and that patch.exe is there + set(PATCH_PATH ${BUILD_DIR}/${PATCH_ARCHIVE_NAME}) + set(PATCH_BINARY_PATH ${PATCH_PATH}/bin/patch.exe) + if(NOT EXISTS ${PATCH_PATH} OR NOT EXISTS ${PATCH_BINARY_PATH}) + message(FATAL_ERROR "ERROR extracting patch utility from ${PATCH_PATH}") + endif() + + # copy patch.exe into the output directory + file(INSTALL ${PATCH_BINARY_PATH} DESTINATION ${ADDON_DEPENDS_PATH}/bin) + + # make sure that cmake can find the copied patch.exe + find_program(PATCH_FOUND NAMES patch patch.exe) + if(NOT PATCH_FOUND) + message(FATAL_ERROR "ERROR installing patch utility from ${PATCH_BINARY_PATH} to ${ADDON_DEPENDS_PATH}/bin") + endif() +endif() diff --git a/cmake/treedata/android/subdirs.txt b/cmake/treedata/android/subdirs.txt index 0733201..b56618a 100644 --- a/cmake/treedata/android/subdirs.txt +++ b/cmake/treedata/android/subdirs.txt @@ -1,4 +1,5 @@ -xbmc/linux linuxsupport +xbmc/cores/RetroPlayer/process/android cores/RetroPlayer/process/android +xbmc/platform/linux platform/linux xbmc/input/touch input/touch xbmc/input/touch/generic input/touch/generic xbmc/network/linux network/linux diff --git a/cmake/treedata/common/music.txt b/cmake/treedata/common/music.txt index 71f30e1..29aae7b 100644 --- a/cmake/treedata/common/music.txt +++ b/cmake/treedata/common/music.txt @@ -1,5 +1,6 @@ xbmc/music music xbmc/music/dialogs music/dialogs xbmc/music/infoscanner music/infoscanner +xbmc/music/jobs music/jobs xbmc/music/tags music/tags xbmc/music/windows music/windows diff --git a/cmake/treedata/common/retroplayer.txt b/cmake/treedata/common/retroplayer.txt index ab18c3c..97e27b3 100644 --- a/cmake/treedata/common/retroplayer.txt +++ b/cmake/treedata/common/retroplayer.txt @@ -1,3 +1,7 @@ xbmc/cores/RetroPlayer cores/RetroPlayer xbmc/cores/RetroPlayer/guicontrols cores/RetroPlayer/guicontrols +xbmc/cores/RetroPlayer/process cores/RetroPlayer/process xbmc/cores/RetroPlayer/rendering cores/RetroPlayer/rendering +xbmc/cores/RetroPlayer/rendering/VideoRenderers cores/RetroPlayer/rendering/VideoRenderers +xbmc/cores/RetroPlayer/rendering/VideoShaders cores/RetroPlayer/rendering/VideoShaders +xbmc/cores/RetroPlayer/windows cores/RetroPlayer/windows diff --git a/cmake/treedata/common/subdirs.txt b/cmake/treedata/common/subdirs.txt index ee4e83c..d5412b5 100644 --- a/cmake/treedata/common/subdirs.txt +++ b/cmake/treedata/common/subdirs.txt @@ -1,16 +1,23 @@ xbmc xbmc xbmc/addons addons xbmc/addons/binary-addons addons_binary-addons -xbmc/addons/interfaces addonsBinaryInterfaces -xbmc/addons/interfaces/Addon addonCallbacks_Addon +xbmc/addons/interfaces addons_interfaces +xbmc/addons/interfaces/Addon addons_interfaces_addon xbmc/addons/interfaces/GUI addons_interfaces_gui xbmc/addons/interfaces/GUI/controls addons_interfaces_gui_controls xbmc/addons/interfaces/GUI/dialogs addons_interfaces_gui_dialogs -xbmc/addons/settings addonsSettings +xbmc/addons/kodi-addon-dev-kit/include/kodi addons_kodi-addon-dev-kit_include_kodi +xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance addons_kodi-addon-dev-kit_include_kodi_addon-instance +xbmc/addons/kodi-addon-dev-kit/include/kodi/gui addons_kodi-addon-dev-kit_include_kodi_gui +xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/controls addons_kodi-addon-dev-kit_include_kodi_gui_controls +xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs addons_kodi-addon-dev-kit_include_kodi_gui_dialogs +xbmc/addons/kodi-addon-dev-kit/include/kodi/tools addons_kodi-addon-dev-kit_include_kodi_tools +xbmc/addons/settings addons_settings xbmc/commons commons xbmc/dbwrappers dbwrappers xbmc/dialogs dialogs xbmc/favourites favourites +xbmc/guiinfo guiinfo xbmc/guilib guilib xbmc/input input xbmc/input/joysticks input/joysticks @@ -35,5 +42,6 @@ xbmc/storage storage xbmc/threads threads xbmc/utils utils xbmc/view view +xbmc/weather weather xbmc/windowing windowing xbmc/windows windows diff --git a/cmake/treedata/common/video.txt b/cmake/treedata/common/video.txt index acfb33b..ab53453 100644 --- a/cmake/treedata/common/video.txt +++ b/cmake/treedata/common/video.txt @@ -1,4 +1,5 @@ xbmc/video video xbmc/video/dialogs video/dialogs xbmc/video/jobs video/jobs +xbmc/video/tags video/tags xbmc/video/windows video/windows diff --git a/cmake/treedata/freebsd/subdirs.txt b/cmake/treedata/freebsd/subdirs.txt index df2fa76..f7651ee 100644 --- a/cmake/treedata/freebsd/subdirs.txt +++ b/cmake/treedata/freebsd/subdirs.txt @@ -1,6 +1,5 @@ -xbmc/linux linuxsupport -xbmc/linux/sse4 sse4 -xbmc/input/linux input/linux +xbmc/platform/linux platform/linux +xbmc/platform/linux/input platform/linux/input xbmc/input/touch input/touch xbmc/input/touch/generic input/touch/generic xbmc/network/linux network/linux diff --git a/cmake/treedata/ios/subdirs.txt b/cmake/treedata/ios/subdirs.txt index 4bbeeb1..00f5cf1 100644 --- a/cmake/treedata/ios/subdirs.txt +++ b/cmake/treedata/ios/subdirs.txt @@ -1,4 +1,4 @@ -xbmc/linux linuxsupport +xbmc/platform/linux platform/linux xbmc/input/touch input/touch xbmc/input/touch/generic input/touch/generic xbmc/network/linux network/linux @@ -13,4 +13,5 @@ xbmc/platform/darwin/ios-common platform_ios-common xbmc/filesystem/posix filesystem/posix xbmc/utils/posix utils_posix xbmc/windowing/osx windowing/osx +xbmc/cores/RetroPlayer/process/ios cores/RetroPlayer/process/ios xbmc/cores/VideoPlayer/Process/ios cores/VideoPlayer/Process/ios diff --git a/cmake/treedata/linux/subdirs.txt b/cmake/treedata/linux/subdirs.txt index e301579..b310b53 100644 --- a/cmake/treedata/linux/subdirs.txt +++ b/cmake/treedata/linux/subdirs.txt @@ -1,5 +1,5 @@ -xbmc/linux linuxsupport -xbmc/input/linux input/linux +xbmc/platform/linux platform/linux +xbmc/platform/linux/input platform/linux/input xbmc/input/touch input/touch xbmc/input/touch/generic input/touch/generic xbmc/network/linux network/linux @@ -9,5 +9,6 @@ xbmc/storage/linux storage/linux xbmc/filesystem/posix filesystem/posix xbmc/utils/posix utils_posix xbmc/platform/posix posix +xbmc/cores/RetroPlayer/process/rbpi cores/RetroPlayer/process/rbpi xbmc/cores/VideoPlayer/Process/rbpi cores/VideoPlayer/Process/rbpi xbmc/windowing/linux windowing/linux diff --git a/cmake/treedata/optional/common/X.txt b/cmake/treedata/optional/common/X.txt index 26b8a90..e66ad80 100644 --- a/cmake/treedata/optional/common/X.txt +++ b/cmake/treedata/optional/common/X.txt @@ -1,2 +1,3 @@ xbmc/windowing/X11 windowing/X11 # X +xbmc/cores/RetroPlayer/process/X11 cores/RetroPlayer/process/X11 # X xbmc/cores/VideoPlayer/Process/X11 cores/VideoPlayer/Process/X11 # X diff --git a/cmake/treedata/optional/common/aml.txt b/cmake/treedata/optional/common/aml.txt index db1efd1..3d412d0 100644 --- a/cmake/treedata/optional/common/aml.txt +++ b/cmake/treedata/optional/common/aml.txt @@ -1,2 +1,3 @@ +xbmc/cores/RetroPlayer/process/amlogic cores/RetroPlayer/process/amlogic # AML xbmc/windowing/amlogic windowing/amlogic # AML diff --git a/cmake/treedata/optional/common/gbm.txt b/cmake/treedata/optional/common/gbm.txt index 1adde93..196b323 100644 --- a/cmake/treedata/optional/common/gbm.txt +++ b/cmake/treedata/optional/common/gbm.txt @@ -1 +1,2 @@ -xbmc/windowing/gbm windowing/gbm # GBM +xbmc/cores/RetroPlayer/process/gbm cores/RetroPlayer/process/gbm # GBM +xbmc/windowing/gbm windowing/gbm # GBM \ No newline at end of file diff --git a/cmake/treedata/optional/common/imx.txt b/cmake/treedata/optional/common/imx.txt deleted file mode 100644 index 8c7e60b..0000000 --- a/cmake/treedata/optional/common/imx.txt +++ /dev/null @@ -1 +0,0 @@ -xbmc/windowing/egl windowing/egl # IMX diff --git a/cmake/treedata/optional/common/python.txt b/cmake/treedata/optional/common/python.txt index 4960485..c381a18 100644 --- a/cmake/treedata/optional/common/python.txt +++ b/cmake/treedata/optional/common/python.txt @@ -1,4 +1,4 @@ xbmc/interfaces/legacy interfaces/legacy # PYTHON xbmc/interfaces/legacy/wsgi interfaces/legacy/wsgi # PYTHON xbmc/interfaces/python interfaces/python # PYTHON -xbmc/interfaces/swig build/swig # PYTHON +xbmc/interfaces/swig swig # PYTHON diff --git a/cmake/treedata/optional/common/wayland.txt b/cmake/treedata/optional/common/wayland.txt index 3725fc6..4664b35 100644 --- a/cmake/treedata/optional/common/wayland.txt +++ b/cmake/treedata/optional/common/wayland.txt @@ -1,2 +1,3 @@ xbmc/windowing/wayland windowing/wayland # WAYLANDPP +xbmc/cores/RetroPlayer/process/wayland cores/RetroPlayer/process/wayland # WAYLANDPP xbmc/cores/VideoPlayer/Process/wayland cores/VideoPlayer/Process/wayland # WAYLANDPP \ No newline at end of file diff --git a/cmake/treedata/osx/subdirs.txt b/cmake/treedata/osx/subdirs.txt index a520243..5b1b302 100644 --- a/cmake/treedata/osx/subdirs.txt +++ b/cmake/treedata/osx/subdirs.txt @@ -1,4 +1,4 @@ -xbmc/linux linuxsupport +xbmc/platform/linux platform/linux xbmc/network/linux network/linux xbmc/network/osx network/osx xbmc/peripherals/bus/osx peripherals/bus/osx @@ -10,4 +10,5 @@ xbmc/platform/darwin/osx platform_osx xbmc/filesystem/posix filesystem/posix xbmc/utils/posix utils_posix xbmc/windowing/osx windowing/osx +xbmc/cores/RetroPlayer/process/osx cores/RetroPlayer/process/osx xbmc/cores/VideoPlayer/Process/osx cores/VideoPlayer/Process/osx diff --git a/cmake/treedata/windows/subdirs.txt b/cmake/treedata/windows/subdirs.txt index bdbbe1d..8344320 100644 --- a/cmake/treedata/windows/subdirs.txt +++ b/cmake/treedata/windows/subdirs.txt @@ -12,4 +12,6 @@ xbmc/utils/win32 utils_win32 xbmc/rendering/dx rendering_dx xbmc/threads/platform/win threads_win xbmc/windowing/windows windowing/windows +xbmc/cores/RetroPlayer/process/windows cores/RetroPlayer/process/windows +xbmc/cores/RetroPlayer/rendering/VideoShaders/windows cores/RetroPlayer/rendering/VideoShaders/windows xbmc/cores/VideoPlayer/Process/windows cores/VideoPlayer/Process/windows diff --git a/cmake/treedata/windowsstore/externals.txt b/cmake/treedata/windowsstore/externals.txt new file mode 100644 index 0000000..989677e --- /dev/null +++ b/cmake/treedata/windowsstore/externals.txt @@ -0,0 +1 @@ +lib/win32/Effects11 Effects11 diff --git a/cmake/treedata/windowsstore/subdirs.txt b/cmake/treedata/windowsstore/subdirs.txt new file mode 100644 index 0000000..84150d5 --- /dev/null +++ b/cmake/treedata/windowsstore/subdirs.txt @@ -0,0 +1,16 @@ +xbmc/platform/win10 platform_win10 +xbmc/input/windows input/windows +xbmc/input/touch input/touch +xbmc/input/touch/generic input/touch/generic +xbmc/network/win10 network/win10 +xbmc/network/mdns network/mdns +xbmc/peripherals/bus/win10 peripherals/bus/win10 +xbmc/powermanagement/win10 powermanagement/win10 +xbmc/storage/win10 storage/win10 +xbmc/filesystem/win32 filesystem/win32 +xbmc/filesystem/win10 filesystem/win10 +xbmc/utils/win32 utils_win32 +xbmc/rendering/dx rendering_dx +xbmc/threads/platform/win threads_win +xbmc/windowing/win10 windowing/win10 +xbmc/cores/VideoPlayer/Process/windows cores/VideoPlayer/Process/windows diff --git a/version.txt b/version.txt index d828028..545f436 100644 --- a/version.txt +++ b/version.txt @@ -1,10 +1,12 @@ APP_NAME Kodi -COMPANY_NAME XBMC-Foundation +COMPANY_NAME XBMC Foundation WEBSITE http://kodi.tv VERSION_MAJOR 18 VERSION_MINOR 0 VERSION_TAG ALPHA1 -VERSION_CODE 179701 +VERSION_CODE 17.99.701 ADDON_API 17.9.701 APP_PACKAGE org.xbmc.kodi - +PACKAGE_IDENTITY XBMCFoundation.Kodi +PACKAGE_PUBLISHER C62BD90A-CDD8-477F-96C3-B25992247B97 +PACKAGE_DESCRIPTION Kodi is an open source (GPL) software media center for playing videos, music, pictures, games, and more. diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/AddonBase.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/AddonBase.h index 0c5e617..432a1c3 100644 --- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/AddonBase.h +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/AddonBase.h @@ -160,6 +160,7 @@ typedef struct AddonToKodiFuncTable_Addon // Function addresses used for callbacks from addon to Kodi void (*free_string)(void* kodiBase, char* str); + void (*free_string_array)(void* kodiBase, char** arr, int numElements); char* (*get_addon_path)(void* kodiBase); char* (*get_base_user_path)(void* kodiBase); void (*addon_log_msg)(void* kodiBase, const int loglevel, const char *msg); diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/CMakeLists.txt b/xbmc/addons/kodi-addon-dev-kit/include/kodi/CMakeLists.txt new file mode 100644 index 0000000..80e9275 --- /dev/null +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/CMakeLists.txt @@ -0,0 +1,24 @@ +set(HEADERS AddonBase.h + AudioEngine.h + Filesystem.h + General.h + Network.h + StreamCodec.h + StreamCrypto.h + kodi_game_dll.h + kodi_game_types.h + kodi_vfs_types.h + libKODI_game.h + libKODI_guilib.h + libXBMC_addon.h + libXBMC_pvr.h + versions.h + xbmc_addon_dll.h + xbmc_addon_types.h + xbmc_epg_types.h + xbmc_pvr_dll.h + xbmc_pvr_types.h) + +if(NOT ENABLE_STATIC_LIBS) + core_add_library(addons_kodi-addon-dev-kit_include_kodi) +endif() diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/Filesystem.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/Filesystem.h index b06770c..b089da3 100644 --- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/Filesystem.h +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/Filesystem.h @@ -22,11 +22,16 @@ #include "AddonBase.h" #include +#include #if !defined(_WIN32) #include #if !defined(__stat64) - #define __stat64 stat64 + #if defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) + #define __stat64 stat + #else + #define __stat64 stat64 + #endif #endif #endif #ifdef _WIN32 // windows @@ -110,7 +115,7 @@ extern "C" double (*get_file_download_speed)(void* kodiBase, void* file); void (*close_file)(void* kodiBase, void* file); int (*get_file_chunk_size)(void* kodiBase, void* file); - char* (*get_property)(void* kodiBase, void* file, int type, const char *name); + char** (*get_property_values)(void* kodiBase, void* file, int type, const char *name, int *numValues); void* (*curl_create)(void* kodiBase, const char* url); bool (*curl_add_option)(void* kodiBase, void* file, int type, const char* name, const char* value); @@ -180,16 +185,40 @@ typedef enum OpenFileFlags //============================================================================== /// \ingroup cpp_kodi_vfs_Defs -/// @brief Used CURL message types +/// @brief CURL message types +/// +/// Used on kodi::vfs::CFile::CURLAddOption() /// typedef enum CURLOptiontype { /// Set a general option ADDON_CURL_OPTION_OPTION, + /// Set a protocol option + /// + /// The following names for *ADDON_CURL_OPTION_PROTOCOL* are possible: + /// + /// | Option name | Description + /// |---------------------------:|:---------------------------------------------------------- + /// | accept-charset | Set the "accept-charset" header + /// | acceptencoding or encoding | Set the "accept-encoding" header + /// | active-remote | Set the "active-remote" header + /// | auth | Set the authentication method. Possible values: any, anysafe, digest, ntlm + /// | connection-timeout | Set the connection timeout in seconds + /// | cookie | Set the "cookie" header + /// | customrequest | Set a custom HTTP request like DELETE + /// | noshout | Set to true if kodi detects a stream as shoutcast by mistake. + /// | postdata | Set the post body (value needs to be base64 encoded). (Implicitly sets the request to POST) + /// | referer | Set the "referer" header + /// | user-agent | Set the "user-agent" header + /// | seekable | Set the stream seekable. 1: enable, 0: disable + /// | sslcipherlist | Set list of accepted SSL ciphers. + /// ADDON_CURL_OPTION_PROTOCOL, + /// Set User and password ADDON_CURL_OPTION_CREDENTIALS, + /// Add a Header ADDON_CURL_OPTION_HEADER } CURLOptiontype; @@ -197,7 +226,9 @@ typedef enum CURLOptiontype //============================================================================== /// \ingroup cpp_kodi_vfs_Defs -/// @brief Used CURL message types +/// @brief CURL message types +/// +/// Used on kodi::vfs::CFile::GetPropertyValue() and kodi::vfs::CFile::GetPropertyValues() /// typedef enum FilePropertyTypes { @@ -210,7 +241,9 @@ typedef enum FilePropertyTypes /// Get file content charset ADDON_FILE_PROPERTY_CONTENT_CHARSET, /// Get file mime type - ADDON_FILE_PROPERTY_MIME_TYPE + ADDON_FILE_PROPERTY_MIME_TYPE, + /// Get file effective URL (last one if redirected) + ADDON_FILE_PROPERTY_EFFECTIVE_URL } FilePropertyTypes; //------------------------------------------------------------------------------ @@ -1027,7 +1060,7 @@ namespace vfs /// #include /// ... /// STAT_STRUCTURE statFile; - /// int ret = kodi::vfs::StatFile("special://temp/kodi.log", &statFile); + /// int ret = kodi::vfs::StatFile("special://temp/kodi.log", statFile); /// fprintf(stderr, "deviceId (ID of device containing file) = %u\n" /// "size (total size, in bytes) = %lu\n" /// "accessTime (time of last access) = %lu\n" @@ -1540,22 +1573,51 @@ namespace vfs /// @param[in] name The name of a named property value (e.g. Header) /// @return value of requested property, empty on failure / non-existance /// - const std::string GetProperty(FilePropertyTypes type, const std::string &name) const + const std::string GetPropertyValue(FilePropertyTypes type, const std::string &name) const { if (!m_file) { - kodi::Log(ADDON_LOG_ERROR, "kodi::vfs::CURLCreate(...) needed to call before GetProperty!"); + kodi::Log(ADDON_LOG_ERROR, "kodi::vfs::CURLCreate(...) needed to call before GetPropertyValue!"); + return ""; + } + std::vector values = GetPropertyValues(type, name); + if (values.empty()) { return ""; } - char *res(::kodi::addon::CAddonBase::m_interface->toKodi->kodi_filesystem->get_property( - ::kodi::addon::CAddonBase::m_interface->toKodi->kodiBase, m_file, type, name.c_str())); + return values[0]; + } + //-------------------------------------------------------------------------- + + //========================================================================== + /// + /// @ingroup cpp_kodi_vfs_CFile + /// @brief retrieve file property values + /// + /// @param[in] type The type of the file property values to retrieve the value for + /// @param[in] name The name of the named property (e.g. Header) + /// @return values of requested property, empty vector on failure / non-existance + /// + const std::vector GetPropertyValues(FilePropertyTypes type, const std::string &name) const + { + if (!m_file) + { + kodi::Log(ADDON_LOG_ERROR, "kodi::vfs::CURLCreate(...) needed to call before GetPropertyValues!"); + return std::vector(); + } + int numValues; + char **res(::kodi::addon::CAddonBase::m_interface->toKodi->kodi_filesystem->get_property_values( + ::kodi::addon::CAddonBase::m_interface->toKodi->kodiBase, m_file, type, name.c_str(), &numValues)); if (res) { - std::string strReturn(res); - ::kodi::addon::CAddonBase::m_interface->toKodi->free_string(::kodi::addon::CAddonBase::m_interface->toKodi->kodiBase, res); - return strReturn; + std::vector vecReturn; + for (int i = 0; i < numValues; ++i) + { + vecReturn.emplace_back(res[i]); + } + ::kodi::addon::CAddonBase::m_interface->toKodi->free_string_array(::kodi::addon::CAddonBase::m_interface->toKodi->kodiBase, res, numValues); + return vecReturn; } - return ""; + return std::vector(); } //-------------------------------------------------------------------------- diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/General.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/General.h index f4295ea..22d31f1 100644 --- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/General.h +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/General.h @@ -37,7 +37,7 @@ typedef struct AddonToKodiFuncTable_kodi char* (*get_addon_info)(void* kodiBase, const char* id); bool (*open_settings_dialog)(void* kodiBase); char* (*unknown_to_utf8)(void* kodiBase, const char* source, bool* ret, bool failOnBadChar); - char* (*get_localized_string)(void* kodiBase, long dwCode); + char* (*get_localized_string)(void* kodiBase, long label_id); char* (*get_language)(void* kodiBase, int format, bool region); bool (*queue_notification)(void* kodiBase, int type, const char* header, const char* message, const char* imageFile, unsigned int displayTime, bool withSound, unsigned int messageTime); void (*get_md5)(void* kodiBase, const char* text, char* md5); @@ -46,6 +46,7 @@ typedef struct AddonToKodiFuncTable_kodi void (*get_free_mem)(void* kodiBase, long* free, long* total, bool as_bytes); int (*get_global_idle_time)(void* kodiBase); void (*kodi_version)(void* kodiBase, char** compile_name, int* major, int* minor, char** revision, char** tag, char** tagversion); + char* (*get_current_skin_id)(void* kodiBase); } AddonToKodiFuncTable_kodi; //============================================================================== @@ -619,6 +620,47 @@ inline int GetGlobalIdleTime() } /* namespace kodi */ //------------------------------------------------------------------------------ +//============================================================================== +namespace kodi { +/// +/// \ingroup cpp_kodi +/// @brief Get the currently used skin identification name from Kodi +///----------------------------------------------------------------------- +/// +/// @return The active skin id name as a string +/// +/// +/// @note This is not the full path like 'special://home/addons/MediaCenter', +/// but only 'MediaCenter'. +/// +/// +/// ------------------------------------------------------------------------ +/// +/// **Example:** +/// ~~~~~~~~~~~~~{.cpp} +/// #include +/// .. +/// std::string skinid = kodi::GetCurrentSkinId(); +/// .. +/// ~~~~~~~~~~~~~ +/// +inline std::string GetCurrentSkinId() +{ + AddonToKodiFuncTable_Addon* toKodi = ::kodi::addon::CAddonBase::m_interface->toKodi; + + std::string strReturn; + char* strMsg = toKodi->kodi->get_current_skin_id(toKodi->kodiBase); + if (strMsg != nullptr) + { + if (std::strlen(strMsg)) + strReturn = strMsg; + toKodi->free_string(toKodi->kodiBase, strMsg); + } + return strReturn; +} +} /* namespace kodi */ +//------------------------------------------------------------------------------ + //============================================================================== namespace kodi { /// diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/CMakeLists.txt b/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/CMakeLists.txt new file mode 100644 index 0000000..ba4f889 --- /dev/null +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/CMakeLists.txt @@ -0,0 +1,15 @@ +set(HEADERS AudioDSP.h + AudioDecoder.h + AudioEncoder.h + ImageDecoder.h + Inputstream.h + Peripheral.h + PeripheralUtils.h + Screensaver.h + VFS.h + VideoCodec.h + Visualization.h) + +if(NOT ENABLE_STATIC_LIBS) + core_add_library(addons_kodi-addon-dev-kit_include_kodi_addon-instance) +endif() diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/Inputstream.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/Inputstream.h index 8db17c0..08d01ad 100644 --- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/Inputstream.h +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/Inputstream.h @@ -29,9 +29,9 @@ #include "../StreamCodec.h" #ifdef BUILD_KODI_ADDON -#include "../DVDDemuxPacket.h" +#include "../DemuxPacket.h" #else -#include "cores/VideoPlayer/DVDDemuxers/DVDDemuxPacket.h" +#include "cores/VideoPlayer/Interface/Addon/DemuxPacket.h" #endif namespace kodi { namespace addon { class CInstanceInputStream; }} @@ -41,7 +41,7 @@ extern "C" { /*! * @brief InputStream add-on capabilities. All capabilities are set to "false" as default. */ - typedef struct INPUTSTREAM_CAPABILITIES + struct INPUTSTREAM_CAPABILITIES { enum MASKTYPE: uint32_t { @@ -58,17 +58,20 @@ extern "C" { SUPPORTS_SEEK = (1 << 3), /// supports pause - SUPPORTS_PAUSE = (1 << 4) + SUPPORTS_PAUSE = (1 << 4), + + /// supports interface ITime + SUPPORTS_ITIME = (1 << 5) }; /// set of supported capabilities uint32_t m_mask; - } INPUTSTREAM_CAPABILITIES; + }; /*! * @brief structure of key/value pairs passed to addon on Open() */ - typedef struct INPUTSTREAM + struct INPUTSTREAM { static const unsigned int MAX_INFO_COUNT = 8; @@ -83,22 +86,22 @@ extern "C" { const char *m_libFolder; const char *m_profileFolder; - } INPUTSTREAM; + }; /*! * @brief Array of stream IDs */ - typedef struct INPUTSTREAM_IDS + struct INPUTSTREAM_IDS { static const unsigned int MAX_STREAM_COUNT = 32; unsigned int m_streamCount; unsigned int m_streamIds[MAX_STREAM_COUNT]; - } INPUTSTREAM_IDS; + }; /*! * @brief stream properties */ - typedef struct INPUTSTREAM_INFO + struct INPUTSTREAM_INFO { enum STREAM_TYPE { @@ -130,6 +133,7 @@ extern "C" { }; uint32_t m_flags; + char m_name[256]; /*!< @brief (optinal) name of the stream, \0 for default handling */ char m_codecName[32]; /*!< @brief (required) name of codec according to ffmpeg */ char m_codecInternalName[32]; /*!< @brief (optional) internal name of codec (selectionstream info) */ STREAMCODEC_PROFILE m_codecProfile; /*!< @brief (optional) the profile of the codec */ @@ -153,7 +157,15 @@ extern "C" { unsigned int m_BlockAlign; CRYPTO_INFO m_cryptoInfo; - } INPUTSTREAM_INFO; + }; + + struct INPUTSTREAM_TIMES + { + time_t startTime; + double ptsStart; + double ptsBegin; + double ptsEnd; + }; /*! * @brief Structure to transfer the methods from xbmc_inputstream_dll.h to XBMC @@ -201,6 +213,9 @@ extern "C" { int (__cdecl* get_total_time)(const AddonInstance_InputStream* instance); int (__cdecl* get_time)(const AddonInstance_InputStream* instance); + // ITime + bool(__cdecl* get_times)(const AddonInstance_InputStream* instance, INPUTSTREAM_TIMES *times); + // IPosTime bool (__cdecl* pos_time)(const AddonInstance_InputStream* instance, int ms); @@ -363,6 +378,12 @@ namespace addon */ virtual int GetTime() { return -1; } + /*! + * Get current timing values in PTS scale + * @remarks + */ + virtual bool GetTimes(INPUTSTREAM_TIMES ×) { return false; } + /*! * Positions inputstream to playing time given in ms * @remarks @@ -483,6 +504,8 @@ namespace addon m_instanceData->toAddon.get_total_time = ADDON_GetTotalTime; m_instanceData->toAddon.get_time = ADDON_GetTime; + m_instanceData->toAddon.get_times = ADDON_GetTimes; + m_instanceData->toAddon.pos_time = ADDON_PosTime; m_instanceData->toAddon.can_pause_stream = ADDON_CanPauseStream; @@ -580,6 +603,11 @@ namespace addon return instance->toAddon.addonInstance->GetTime(); } + // ITime + inline static bool ADDON_GetTimes(const AddonInstance_InputStream* instance, INPUTSTREAM_TIMES *times) + { + return instance->toAddon.addonInstance->GetTimes(*times); + } // IPosTime inline static bool ADDON_PosTime(const AddonInstance_InputStream* instance, int ms) diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/Peripheral.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/Peripheral.h index c1a18e0..0dae06c 100644 --- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/Peripheral.h +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/Peripheral.h @@ -212,6 +212,8 @@ extern "C" JOYSTICK_FEATURE_TYPE_MOTOR, JOYSTICK_FEATURE_TYPE_RELPOINTER, JOYSTICK_FEATURE_TYPE_ABSPOINTER, + JOYSTICK_FEATURE_TYPE_WHEEL, + JOYSTICK_FEATURE_TYPE_THROTTLE, } JOYSTICK_FEATURE_TYPE; typedef enum JOYSTICK_FEATURE_PRIMITIVE @@ -233,6 +235,14 @@ extern "C" // Motor JOYSTICK_MOTOR_PRIMITIVE = 0, + // Wheel + JOYSTICK_WHEEL_LEFT = 0, + JOYSTICK_WHEEL_RIGHT = 1, + + // Throttle + JOYSTICK_THROTTLE_UP = 0, + JOYSTICK_THROTTLE_DOWN = 1, + // Maximum number of primitives JOYSTICK_PRIMITIVE_MAX = 4, } JOYSTICK_FEATURE_PRIMITIVE; diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/PeripheralUtils.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/PeripheralUtils.h index ea70b30..3c4cab3 100644 --- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/PeripheralUtils.h +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/PeripheralUtils.h @@ -581,6 +581,9 @@ namespace addon * 3) accelerometer * 4) motor * 5) relative pointer[2] + * 6) absolute pointer + * 7) wheel + * 8) throttle * * [1] All three driver primitives (buttons, hats and axes) have a state that * can be represented using a single scalar value. For this reason, diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/VideoCodec.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/VideoCodec.h index 02d39c6..eb4351e 100644 --- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/VideoCodec.h +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/VideoCodec.h @@ -25,9 +25,9 @@ #include "../StreamCodec.h" #ifdef BUILD_KODI_ADDON -#include "../DVDDemuxPacket.h" +#include "../DemuxPacket.h" #else -#include "cores/VideoPlayer/DVDDemuxers/DVDDemuxPacket.h" +#include "cores/VideoPlayer/Interface/Addon/DemuxPacket.h" #endif namespace kodi { namespace addon { class CInstanceVideoCodec; } } diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/CMakeLists.txt b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/CMakeLists.txt new file mode 100644 index 0000000..91cef7f --- /dev/null +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/CMakeLists.txt @@ -0,0 +1,8 @@ +set(HEADERS General.h + ListItem.h + Window.h + definitions.h) + +if(NOT ENABLE_STATIC_LIBS) + core_add_library(addons_kodi-addon-dev-kit_include_kodi_gui) +endif() diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/controls/CMakeLists.txt b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/controls/CMakeLists.txt new file mode 100644 index 0000000..c7cc1dd --- /dev/null +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/controls/CMakeLists.txt @@ -0,0 +1,16 @@ +set(HEADERS Button.h + Edit.h + FadeLabel.h + Image.h + Label.h + Progress.h + RadioButton.h + Rendering.h + SettingsSlider.h + Slider.h + Spin.h + TextBox.h) + +if(NOT ENABLE_STATIC_LIBS) + core_add_library(addons_kodi-addon-dev-kit_include_kodi_gui_controls) +endif() diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/CMakeLists.txt b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/CMakeLists.txt new file mode 100644 index 0000000..7227343 --- /dev/null +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/dialogs/CMakeLists.txt @@ -0,0 +1,14 @@ +set(HEADERS ContextMenu.h + ExtendedProgress.h + FileBrowser.h + Keyboard.h + Numeric.h + OK.h + Progress.h + Select.h + TextViewer.h + YesNo.h) + +if(NOT ENABLE_STATIC_LIBS) + core_add_library(addons_kodi-addon-dev-kit_include_kodi_gui_dialogs) +endif() diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_game_types.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_game_types.h index da02f6f..d4568e7 100644 --- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_game_types.h +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_game_types.h @@ -170,6 +170,7 @@ typedef enum GAME_INPUT_EVENT_SOURCE { GAME_INPUT_EVENT_DIGITAL_BUTTON, GAME_INPUT_EVENT_ANALOG_BUTTON, + GAME_INPUT_EVENT_AXIS, GAME_INPUT_EVENT_ANALOG_STICK, GAME_INPUT_EVENT_ACCELEROMETER, GAME_INPUT_EVENT_KEY, @@ -299,6 +300,11 @@ typedef struct game_analog_button_event float magnitude; } ATTRIBUTE_PACKED game_analog_button_event; +typedef struct game_axis_event +{ + float position; +} ATTRIBUTE_PACKED game_axis_event; + typedef struct game_analog_stick_event { float x; @@ -347,6 +353,7 @@ typedef struct game_input_event { struct game_digital_button_event digital_button; struct game_analog_button_event analog_button; + struct game_axis_event axis; struct game_analog_stick_event analog_stick; struct game_accelerometer_event accelerometer; struct game_key_event key; diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_addon.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_addon.h index c264578..5ef6bdc 100644 --- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_addon.h +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_addon.h @@ -139,6 +139,7 @@ typedef struct CB_AddOn char* (*GetLocalizedString)(const void* addonData, long dwCode); char* (*GetDVDMenuLanguage)(const void* addonData); void (*FreeString)(const void* addonData, char* str); + void (*FreeStringArray)(const void* addonData, char** arr, int numElements); void* (*OpenFile)(const void* addonData, const char* strFileName, unsigned int flags); void* (*OpenFileForWrite)(const void* addonData, const char* strFileName, bool bOverWrite); @@ -155,7 +156,8 @@ typedef struct CB_AddOn int (*GetFileChunkSize)(const void* addonData, void* file); bool (*FileExists)(const void* addonData, const char *strFileName, bool bUseCache); int (*StatFile)(const void* addonData, const char *strFileName, struct __stat64* buffer); - char *(*GetFileProperty)(const void* addonData, void* file, XFILE::FileProperty type, const char *name); + char *(*GetFilePropertyValue)(const void* addonData, void* file, XFILE::FileProperty type, const char *name); + char **(*GetFilePropertyValues)(const void* addonData, void* file, XFILE::FileProperty type, const char *name, int *numPorperties); bool (*DeleteFile)(const void* addonData, const char *strFileName); bool (*CanOpenDirectory)(const void* addonData, const char* strURL); bool (*CreateDirectory)(const void* addonData, const char *strPath); @@ -299,6 +301,16 @@ namespace ADDON { m_Callbacks->FreeString(m_Handle->addonData, str); } + + /*! + * @brief Free the memory used by arr including its elements + * @param arr The string array to free + * @param numElements The length of the array + */ + void FreeStringArray(char** arr, int numElements) + { + m_Callbacks->FreeStringArray(m_Handle->addonData, arr, numElements); + } /*! * @brief Open the file with filename via XBMC's CFile. Needs to be closed by calling CloseFile() when done. @@ -468,13 +480,26 @@ namespace ADDON /*! * @brief Get a property from an open file. * @param file The file to get an property for - * @param type type of the requested property. - * @param name of the requested property / can be null. + * @param type Type of the requested property. + * @param name Name of the requested property / can be null. * @return The value of the requested property, must be FreeString'ed. */ - char *GetFileProperty(void* file, XFILE::FileProperty type, const char *name) + char *GetFilePropertyValue(void* file, XFILE::FileProperty type, const char *name) + { + return m_Callbacks->GetFilePropertyValue(m_Handle->addonData, file, type, name); + } + + /*! + * @brief Get multiple property values from an open file. + * @param file The file to get the property values for + * @param type Type of the requested property. + * @param name Name of the requested property / can be null. + * @param numValues Number of property values returned. + * @return List of values of the requested property, must be FreeStringArray'ed. + */ + char **GetFilePropertyValues(void* file, XFILE::FileProperty type, const char *name, int *numValues) { - return m_Callbacks->GetFileProperty(m_Handle->addonData, file, type, name); + return m_Callbacks->GetFilePropertyValues(m_Handle->addonData, file, type, name, numValues); } /*! diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/tools/CMakeLists.txt b/xbmc/addons/kodi-addon-dev-kit/include/kodi/tools/CMakeLists.txt new file mode 100644 index 0000000..939585c --- /dev/null +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/tools/CMakeLists.txt @@ -0,0 +1,5 @@ +set(HEADERS DllHelper.h ) + +if(NOT ENABLE_STATIC_LIBS) + core_add_library(addons_kodi-addon-dev-kit_include_kodi_tools) +endif() diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/versions.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/versions.h index 32e6b1a..db8508e 100644 --- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/versions.h +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/versions.h @@ -41,8 +41,8 @@ * overview. */ -#define ADDON_GLOBAL_VERSION_MAIN "1.0.11" -#define ADDON_GLOBAL_VERSION_MAIN_MIN "1.0.11" +#define ADDON_GLOBAL_VERSION_MAIN "1.0.12" +#define ADDON_GLOBAL_VERSION_MAIN_MIN "1.0.12" #define ADDON_GLOBAL_VERSION_MAIN_XML_ID "kodi.binary.global.main" #define ADDON_GLOBAL_VERSION_MAIN_DEPENDS "AddonBase.h" \ "xbmc_addon_dll.h" \ @@ -50,7 +50,7 @@ "libXBMC_addon.h" \ "addon-instance/" -#define ADDON_GLOBAL_VERSION_GENERAL "1.0.2" +#define ADDON_GLOBAL_VERSION_GENERAL "1.0.3" #define ADDON_GLOBAL_VERSION_GENERAL_MIN "1.0.2" #define ADDON_GLOBAL_VERSION_GENERAL_XML_ID "kodi.binary.global.general" #define ADDON_GLOBAL_VERSION_GENERAL_DEPENDS "General.h" @@ -66,8 +66,8 @@ #define ADDON_GLOBAL_VERSION_AUDIOENGINE_XML_ID "kodi.binary.global.audioengine" #define ADDON_GLOBAL_VERSION_AUDIOENGINE_DEPENDS "AudioEngine.h" -#define ADDON_GLOBAL_VERSION_FILESYSTEM "1.0.1" -#define ADDON_GLOBAL_VERSION_FILESYSTEM_MIN "1.0.1" +#define ADDON_GLOBAL_VERSION_FILESYSTEM "1.0.2" +#define ADDON_GLOBAL_VERSION_FILESYSTEM_MIN "1.0.2" #define ADDON_GLOBAL_VERSION_FILESYSTEM_XML_ID "kodi.binary.global.filesystem" #define ADDON_GLOBAL_VERSION_FILESYSTEM_DEPENDS "Filesystem.h" @@ -91,8 +91,8 @@ #define ADDON_INSTANCE_VERSION_AUDIOENCODER_XML_ID "kodi.binary.instance.audioencoder" #define ADDON_INSTANCE_VERSION_AUDIOENCODER_DEPENDS "addon-instance/AudioEncoder.h" -#define ADDON_INSTANCE_VERSION_GAME "1.0.32" -#define ADDON_INSTANCE_VERSION_GAME_MIN "1.0.32" +#define ADDON_INSTANCE_VERSION_GAME "1.0.33" +#define ADDON_INSTANCE_VERSION_GAME_MIN "1.0.33" #define ADDON_INSTANCE_VERSION_GAME_XML_ID "kodi.binary.instance.game" #define ADDON_INSTANCE_VERSION_GAME_DEPENDS "kodi_game_dll.h" \ "kodi_game_types.h" \ @@ -103,19 +103,19 @@ #define ADDON_INSTANCE_VERSION_IMAGEDECODER_XML_ID "kodi.binary.instance.imagedecoder" #define ADDON_INSTANCE_VERSION_IMAGEDECODER_DEPENDS "addon-instance/ImageDecoder.h" -#define ADDON_INSTANCE_VERSION_INPUTSTREAM "2.0.4" -#define ADDON_INSTANCE_VERSION_INPUTSTREAM_MIN "2.0.4" +#define ADDON_INSTANCE_VERSION_INPUTSTREAM "2.0.6" +#define ADDON_INSTANCE_VERSION_INPUTSTREAM_MIN "2.0.6" #define ADDON_INSTANCE_VERSION_INPUTSTREAM_XML_ID "kodi.binary.instance.inputstream" #define ADDON_INSTANCE_VERSION_INPUTSTREAM_DEPENDS "addon-instance/Inputstream.h" -#define ADDON_INSTANCE_VERSION_PERIPHERAL "1.3.4" +#define ADDON_INSTANCE_VERSION_PERIPHERAL "1.3.5" #define ADDON_INSTANCE_VERSION_PERIPHERAL_MIN "1.3.4" #define ADDON_INSTANCE_VERSION_PERIPHERAL_XML_ID "kodi.binary.instance.peripheral" #define ADDON_INSTANCE_VERSION_PERIPHERAL_DEPENDS "addon-instance/Peripheral.h" \ "addon-instance/PeripheralUtils.h" -#define ADDON_INSTANCE_VERSION_PVR "5.7.0" -#define ADDON_INSTANCE_VERSION_PVR_MIN "5.7.0" +#define ADDON_INSTANCE_VERSION_PVR "5.8.0" +#define ADDON_INSTANCE_VERSION_PVR_MIN "5.8.0" #define ADDON_INSTANCE_VERSION_PVR_XML_ID "kodi.binary.instance.pvr" #define ADDON_INSTANCE_VERSION_PVR_DEPENDS "xbmc_pvr_dll.h" \ "xbmc_pvr_types.h" \ diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_epg_types.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_epg_types.h index 7561ff6..1ba12bd 100644 --- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_epg_types.h +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_epg_types.h @@ -61,6 +61,9 @@ /* Set EPGTAG.iGenreType to EPG_GENRE_USE_STRING to transfer genre strings to XBMC */ #define EPG_GENRE_USE_STRING 0x100 +/* Separator to use in strings containing different tokens, for example writers, directors, actors of an event. */ +#define EPG_STRING_TOKEN_SEPARATOR "," + #ifdef __cplusplus extern "C" { #endif @@ -98,15 +101,15 @@ extern "C" { const char * strPlotOutline; /*!< @brief (optional) plot outline */ const char * strPlot; /*!< @brief (optional) plot */ const char * strOriginalTitle; /*!< @brief (optional) originaltitle */ - const char * strCast; /*!< @brief (optional) cast */ - const char * strDirector; /*!< @brief (optional) director */ - const char * strWriter; /*!< @brief (optional) writer */ + const char * strCast; /*!< @brief (optional) cast. Use EPG_STRING_TOKEN_SEPARATOR to separate different persons. */ + const char * strDirector; /*!< @brief (optional) director(s). Use EPG_STRING_TOKEN_SEPARATOR to separate different persons. */ + const char * strWriter; /*!< @brief (optional) writer(s). Use EPG_STRING_TOKEN_SEPARATOR to separate different persons. */ int iYear; /*!< @brief (optional) year */ const char * strIMDBNumber; /*!< @brief (optional) IMDBNumber */ const char * strIconPath; /*!< @brief (optional) icon path */ int iGenreType; /*!< @brief (optional) genre type */ int iGenreSubType; /*!< @brief (optional) genre sub type */ - const char * strGenreDescription; /*!< @brief (optional) genre. Will be used only when iGenreType = EPG_GENRE_USE_STRING */ + const char * strGenreDescription; /*!< @brief (optional) genre. Will be used only when iGenreType == EPG_GENRE_USE_STRING. Use EPG_STRING_TOKEN_SEPARATOR to separate different genres. */ time_t firstAired; /*!< @brief (optional) first aired in UTC */ int iParentalRating; /*!< @brief (optional) parental rating */ int iStarRating; /*!< @brief (optional) star rating */ diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_pvr_dll.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_pvr_dll.h index 019644b..25cacb4 100644 --- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_pvr_dll.h +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_pvr_dll.h @@ -210,14 +210,6 @@ extern "C" */ PVR_ERROR RenameChannel(const PVR_CHANNEL& channel); - /*! - * Move a channel to another channel number on the backend. - * @param channel The channel to move, containing the new channel number. - * @return PVR_ERROR_NO_ERROR if the channel has been moved successfully. - * @remarks Optional, and only used if bSupportsChannelSettings is set to true. Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function. - */ - PVR_ERROR MoveChannel(const PVR_CHANNEL& channel); - /*! * Show the channel settings dialog, if supported by the backend. * @param channel The channel to show the dialog for. @@ -246,7 +238,7 @@ extern "C" /*! * @return The total amount of recordings on the backend or -1 on error. * @param deleted if set return deleted recording (called if bSupportsRecordingsUndelete set to true) - * @remarks Required if bSupportsRecordings is set to true. Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function. + * @remarks Required if bSupportsRecordings is set to true. Return -1 if this add-on won't provide this function. */ int GetRecordingsAmount(bool deleted); @@ -426,12 +418,6 @@ extern "C" */ long long SeekLiveStream(long long iPosition, int iWhence = SEEK_SET); - /*! - * @return The position in the stream that's currently being read. - * @remarks Optional, and only used if bHandlesInputStream is set to true. Return -1 if this add-on won't provide this function. - */ - long long PositionLiveStream(void); - /*! * @return The total length of the stream that's currently being read. * @remarks Optional, and only used if bHandlesInputStream is set to true. Return -1 if this add-on won't provide this function. @@ -519,12 +505,6 @@ extern "C" */ long long SeekRecordedStream(long long iPosition, int iWhence = SEEK_SET); - /*! - * @return The position in the stream that's currently being read. - * @remarks Optional, and only used if bSupportsRecordings is set to true. Return -1 if this add-on won't provide this function. - */ - long long PositionRecordedStream(void); - /*! * @return The total length of the stream that's currently being read. * @remarks Optional, and only used if bSupportsRecordings is set to true. Return -1 if this add-on won't provide this function. @@ -605,25 +585,6 @@ extern "C" */ void SetSpeed(int speed); - /*! - * Get actual playing time from addon. With timeshift enabled this is - * different to live. - * @return time as UTC - */ - time_t GetPlayingTime(); - - /*! - * Get time of oldest packet in timeshift buffer - * @return time as UTC - */ - time_t GetBufferTimeStart(); - - /*! - * Get time of latest packet in timeshift buffer - * @return time as UTC - */ - time_t GetBufferTimeEnd(); - /*! * Get the hostname of the pvr backend server * @return hostname as ip address or alias. If backend does not @@ -699,7 +660,6 @@ extern "C" pClient->toAddon.GetChannels = GetChannels; pClient->toAddon.DeleteChannel = DeleteChannel; pClient->toAddon.RenameChannel = RenameChannel; - pClient->toAddon.MoveChannel = MoveChannel; pClient->toAddon.OpenDialogChannelSettings = OpenDialogChannelSettings; pClient->toAddon.OpenDialogChannelAdd = OpenDialogChannelAdd; @@ -726,7 +686,6 @@ extern "C" pClient->toAddon.CloseLiveStream = CloseLiveStream; pClient->toAddon.ReadLiveStream = ReadLiveStream; pClient->toAddon.SeekLiveStream = SeekLiveStream; - pClient->toAddon.PositionLiveStream = PositionLiveStream; pClient->toAddon.LengthLiveStream = LengthLiveStream; pClient->toAddon.SignalStatus = SignalStatus; pClient->toAddon.GetDescrambleInfo = GetDescrambleInfo; @@ -742,7 +701,6 @@ extern "C" pClient->toAddon.CloseRecordedStream = CloseRecordedStream; pClient->toAddon.ReadRecordedStream = ReadRecordedStream; pClient->toAddon.SeekRecordedStream = SeekRecordedStream; - pClient->toAddon.PositionRecordedStream = PositionRecordedStream; pClient->toAddon.LengthRecordedStream = LengthRecordedStream; pClient->toAddon.DemuxReset = DemuxReset; @@ -750,10 +708,6 @@ extern "C" pClient->toAddon.DemuxFlush = DemuxFlush; pClient->toAddon.DemuxRead = DemuxRead; - pClient->toAddon.GetPlayingTime = GetPlayingTime; - pClient->toAddon.GetBufferTimeStart = GetBufferTimeStart; - pClient->toAddon.GetBufferTimeEnd = GetBufferTimeEnd; - pClient->toAddon.GetBackendHostname = GetBackendHostname; pClient->toAddon.IsTimeshifting = IsTimeshifting; diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_pvr_types.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_pvr_types.h index a7d21ed..623cb03 100644 --- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_pvr_types.h +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_pvr_types.h @@ -40,7 +40,7 @@ * and the add-on should set bHandlesDemuxing to true. */ #ifdef USE_DEMUX -#include "DVDDemuxPacket.h" +#include "DemuxPacket.h" #else struct DemuxPacket; #endif @@ -81,6 +81,7 @@ struct DemuxPacket; #define PVR_STREAM_MAX_PROPERTIES 20 #define PVR_STREAM_PROPERTY_STREAMURL "streamurl" /*!< @brief the URL of the stream that should be played. */ #define PVR_STREAM_PROPERTY_INPUTSTREAMADDON "inputstreamaddon" /*!< @brief the name of the inputstream add-on that should be used by Kodi to play the stream denoted by PVR_STREAM_PROPERTY_STREAMURL. Leave blank to use Kodi's built-in playing capabilities. */ +#define PVR_STREAM_PROPERTY_MIMETYPE "mimetype" /*!< @brief the Mime-Type of the stream that should be played. */ /* using the default avformat's MAX_STREAMS value to be safe */ #define PVR_STREAM_MAX_STREAMS 20 @@ -311,7 +312,7 @@ extern "C" { bool bSupportsTimers; /*!< @brief true if this add-on supports the creation and editing of timers */ bool bSupportsChannelGroups; /*!< @brief true if this add-on supports channel groups */ bool bSupportsChannelScan; /*!< @brief true if this add-on support scanning for new channels on the backend */ - bool bSupportsChannelSettings; /*!< @brief true if this add-on supports the following functions: DeleteChannel, RenameChannel, MoveChannel, DialogChannelSettings and DialogAddChannel */ + bool bSupportsChannelSettings; /*!< @brief true if this add-on supports the following functions: DeleteChannel, RenameChannel, DialogChannelSettings and DialogAddChannel */ bool bHandlesInputStream; /*!< @brief true if this add-on provides an input stream. false if XBMC handles the stream. */ bool bHandlesDemuxing; /*!< @brief true if this add-on demultiplexes packets. */ bool bSupportsRecordingPlayCount; /*!< @brief true if the backend supports play count for recordings. */ @@ -423,6 +424,7 @@ extern "C" { char strGroupName[PVR_ADDON_NAME_STRING_LENGTH]; /*!< @brief (required) name of the channel group to add the channel to */ unsigned int iChannelUniqueId; /*!< @brief (required) unique id of the member */ unsigned int iChannelNumber; /*!< @brief (optional) channel number within the group */ + unsigned int iSubChannelNumber; /*!< @brief (optional) sub channel number within the group (ATSC) */ } ATTRIBUTE_PACKED PVR_CHANNEL_GROUP_MEMBER; /*! @@ -588,14 +590,14 @@ extern "C" { } ATTRIBUTE_PACKED PVR_MENUHOOK_DATA; /*! - * @brief times of playing stream + * @brief times of playing stream (Live TV and recordings) */ typedef struct PVR_STREAM_TIMES { - time_t startTime; /*!< @brief time (UTC) time elapsed refers to. Ideally start of tv show */ - int64_t ptsStart; /*!< @brief pts of startTime */ - int64_t ptsBegin; /*!< @brief erliest pts player can seek back */ - int64_t ptsEnd; /*!< @brief latest pts player can seek forward */ + time_t startTime; /*!< @brief For recordings, this must be zero. For Live TV, this is a reference time in units of time_t (UTC) from which time elapsed starts. Ideally start of tv show, but can be any other value. */ + int64_t ptsStart; /*!< @brief the pts of startTime */ + int64_t ptsBegin; /*!< @brief earliest pts player can seek back. Value is seconds, relative to ptsStart. For recordings, this must be zero. For Live TV, this must be zero if not timeshifting and must point to begin of the timeshift buffer, otherwise. */ + int64_t ptsEnd; /*!< @brief latest pts player can seek forward. Value is seconds, relative to ptsStart. For recordings, this must be the total length in seconds. For Live TV, this must be zero if not timeshifting and must point to end of the timeshift buffer, otherwise. */ } ATTRIBUTE_PACKED PVR_STREAM_TIMES; typedef struct AddonToKodiFuncTable_PVR @@ -676,7 +678,6 @@ extern "C" { void (__cdecl* CloseLiveStream)(void); int (__cdecl* ReadLiveStream)(unsigned char*, unsigned int); long long (__cdecl* SeekLiveStream)(long long, int); - long long (__cdecl* PositionLiveStream)(void); long long (__cdecl* LengthLiveStream)(void); PVR_ERROR (__cdecl* SignalStatus)(PVR_SIGNAL_STATUS&); PVR_ERROR (__cdecl* GetDescrambleInfo)(PVR_DESCRAMBLE_INFO*); @@ -686,7 +687,6 @@ extern "C" { void (__cdecl* CloseRecordedStream)(void); int (__cdecl* ReadRecordedStream)(unsigned char*, unsigned int); long long (__cdecl* SeekRecordedStream)(long long, int); - long long (__cdecl* PositionRecordedStream)(void); long long (__cdecl* LengthRecordedStream)(void); void (__cdecl* DemuxReset)(void); void (__cdecl* DemuxAbort)(void); @@ -697,9 +697,6 @@ extern "C" { bool (__cdecl* CanSeekStream)(void); bool (__cdecl* SeekTime)(double, bool, double*); void (__cdecl* SetSpeed)(int); - time_t (__cdecl* GetPlayingTime)(void); - time_t (__cdecl* GetBufferTimeStart)(void); - time_t (__cdecl* GetBufferTimeEnd)(void); const char* (__cdecl* GetBackendHostname)(void); bool (__cdecl* IsTimeshifting)(void); bool (__cdecl* IsRealTimeStream)(void); diff --git a/xbmc/filesystem/.IFileTypes.h.swp b/xbmc/filesystem/.IFileTypes.h.swp deleted file mode 100644 index 1880359..0000000 Binary files a/xbmc/filesystem/.IFileTypes.h.swp and /dev/null differ diff --git a/xbmc/filesystem/IFileTypes.h b/xbmc/filesystem/IFileTypes.h index d5dd218..a65a178 100644 --- a/xbmc/filesystem/IFileTypes.h +++ b/xbmc/filesystem/IFileTypes.h @@ -78,18 +78,37 @@ typedef enum { enum CURLOPTIONTYPE { CURL_OPTION_OPTION, /**< Set a general option */ - CURL_OPTION_PROTOCOL, /**< Set a protocol option */ + CURL_OPTION_PROTOCOL, /**< Set a protocol option (see below) */ CURL_OPTION_CREDENTIALS,/**< Set User and password */ CURL_OPTION_HEADER /**< Add a Header */ }; +/** + * The following names for CURL_OPTION_PROTOCOL are possible: + * + * accept-charset: Set the "accept-charset" header + * acceptencoding or encoding: Set the "accept-encoding" header + * active-remote: Set the "active-remote" header + * auth: Set the authentication method. Possible values: any, anysafe, digest, ntlm + * connection-timeout: Set the connection timeout in seconds + * cookie: Set the "cookie" header + * customrequest: Set a custom HTTP request like DELETE + * noshout: Set to true if kodi detects a stream as shoutcast by mistake. + * postdata: Set the post body (value needs to be base64 encoded). (Implicitly sets the request to POST) + * referer: Set the "referer" header + * user-agent: Set the "user-agent" header + * seekable: Set the stream seekable. 1: enable, 0: disable + * sslcipherlist: Set list of accepted SSL ciphers. + */ + enum FileProperty { FILE_PROPERTY_RESPONSE_PROTOCOL, /**< Get response protocol line */ FILE_PROPERTY_RESPONSE_HEADER, /**< Get response Header value */ FILE_PROPERTY_CONTENT_TYPE, /**< Get file content-type */ FILE_PROPERTY_CONTENT_CHARSET, /**< Get file content charset */ - FILE_PROPERTY_MIME_TYPE /**< Get file mime type */ + FILE_PROPERTY_MIME_TYPE, /**< Get file mime type */ + FILE_PROPERTY_EFFECTIVE_URL /**< Get effective URL for redirected streams */ }; } diff --git a/xbmc/input/ActionIDs.h b/xbmc/input/ActionIDs.h index b88df78..5db1ffc 100644 --- a/xbmc/input/ActionIDs.h +++ b/xbmc/input/ActionIDs.h @@ -80,7 +80,7 @@ #define ACTION_CALIBRATE_SWAP_ARROWS 47 //!< select next arrow. Can b used in: settingsScreenCalibration.xml windowid=11 #define ACTION_CALIBRATE_RESET 48 //!< reset calibration to defaults. Can b used in: `settingsScreenCalibration.xml` windowid=11/settingsUICalibration.xml windowid=10 #define ACTION_ANALOG_MOVE 49 //!< analog thumbstick move. Can b used in: `slideshow.xml` windowid=2007/settingsScreenCalibration.xml windowid=11/settingsUICalibration.xml windowid=10 - //!< @note see also ACTION_ANALOG_MOVE_X, ACTION_ANALOG_MOVE_Y + //!< @note see also ACTION_ANALOG_MOVE_X_LEFT, ACTION_ANALOG_MOVE_X_RIGHT, ACTION_ANALOG_MOVE_Y_UP, ACTION_ANALOG_MOVE_Y_DOWN #define ACTION_ROTATE_PICTURE_CW 50 //!< rotate current picture clockwise during slideshow. Can be used in slideshow.xml window id=2007 #define ACTION_ROTATE_PICTURE_CCW 51 //!< rotate current picture counterclockwise during slideshow. Can be used in slideshow.xml window id=2007 @@ -102,8 +102,8 @@ #define REMOTE_8 66 #define REMOTE_9 67 -#define ACTION_PLAY 68 //!< Unused at the moment #define ACTION_PLAYER_PROCESS_INFO 69 //!< show player process info (video decoder, pixel format, pvr signal strength and the like +#define ACTION_PLAYER_PROGRAM_SELECT 70 #define ACTION_SMALL_STEP_BACK 76 //!< jumps a few seconds back during playback of movie. Can b used in videoFullScreen.xml window id=2005 #define ACTION_PLAYER_FORWARD 77 //!< FF in current file played. global action, can be used anywhere @@ -228,6 +228,7 @@ #define ACTION_PVR_PLAY_TV 189 #define ACTION_PVR_PLAY_RADIO 190 #define ACTION_PVR_SHOW_TIMER_RULE 191 +#define ACTION_CHANNEL_NUMBER_SEP 192 #define ACTION_TOGGLE_FULLSCREEN 199 //!< switch 2 desktop resolution #define ACTION_TOGGLE_WATCHED 200 //!< Toggle watched status (videos) @@ -274,6 +275,8 @@ #define ACTION_PLAYER_RESET 248 //!< Send a reset command to the active game +#define ACTION_TOGGLE_FONT 249 //!< Toggle font. Used in TextViewer dialog + // Voice actions #define ACTION_VOICE_RECOGNIZE 300 @@ -302,8 +305,10 @@ #define ACTION_GESTURE_END 599 // other, non-gesture actions -#define ACTION_ANALOG_MOVE_X 601 //!< analog thumbstick move, horizontal axis; see ACTION_ANALOG_MOVE -#define ACTION_ANALOG_MOVE_Y 602 //!< analog thumbstick move, vertical axis; see ACTION_ANALOG_MOVE +#define ACTION_ANALOG_MOVE_X_LEFT 601 //!< analog thumbstick move, horizontal axis, left; see ACTION_ANALOG_MOVE +#define ACTION_ANALOG_MOVE_X_RIGHT 602 //!< analog thumbstick move, horizontal axis, right; see ACTION_ANALOG_MOVE +#define ACTION_ANALOG_MOVE_Y_UP 603 //!< analog thumbstick move, vertical axis, up; see ACTION_ANALOG_MOVE +#define ACTION_ANALOG_MOVE_Y_DOWN 604 //!< analog thumbstick move, vertical axis, down; see ACTION_ANALOG_MOVE //@} // The NOOP action can be specified to disable an input event. This is -- cgit v1.2.3