diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 18:07:22 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 18:07:22 +0000 |
commit | c04dcc2e7d834218ef2d4194331e383402495ae1 (patch) | |
tree | 7333e38d10d75386e60f336b80c2443c1166031d /cmake/addons/depends | |
parent | Initial commit. (diff) | |
download | kodi-c04dcc2e7d834218ef2d4194331e383402495ae1.tar.xz kodi-c04dcc2e7d834218ef2d4194331e383402495ae1.zip |
Adding upstream version 2:20.4+dfsg.upstream/2%20.4+dfsg
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'cmake/addons/depends')
-rw-r--r-- | cmake/addons/depends/CMakeLists.txt | 41 | ||||
-rw-r--r-- | cmake/addons/depends/README | 35 | ||||
-rw-r--r-- | cmake/addons/depends/windows/CMakeLists.txt | 52 | ||||
-rw-r--r-- | cmake/addons/depends/windows/Install.cmake | 24 | ||||
-rw-r--r-- | cmake/addons/depends/windows/README | 19 | ||||
-rw-r--r-- | cmake/addons/depends/windows/prebuilt/README | 21 |
6 files changed, 192 insertions, 0 deletions
diff --git a/cmake/addons/depends/CMakeLists.txt b/cmake/addons/depends/CMakeLists.txt new file mode 100644 index 0000000..831e0ed --- /dev/null +++ b/cmake/addons/depends/CMakeLists.txt @@ -0,0 +1,41 @@ +cmake_minimum_required(VERSION 3.1) +project(kodi-addons-depends) + +list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}) + +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release) +endif() + +if(NOT CORE_SYSTEM_NAME) + string(TOLOWER ${CMAKE_SYSTEM_NAME} CORE_SYSTEM_NAME) +endif() + +include(ExternalProject) + +if(NOT ADDON_DEPENDS_PATH) + set(ADDON_DEPENDS_PATH ${PROJECT_SOURCE_DIR}/../build/depends) +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 BUILD_DIR) + set(BUILD_DIR "${CMAKE_BINARY_DIR}/build") +else() + file(TO_CMAKE_PATH "${BUILD_DIR}" BUILD_DIR) +endif() +get_filename_component(BUILD_DIR "${BUILD_DIR}" ABSOLUTE) + +## use add_addon_depends to handle the cmake based dependencies +include(${CORE_SOURCE_DIR}/cmake/scripts/common/HandleDepends.cmake) +add_addon_depends(depends "${PROJECT_SOURCE_DIR}") + +## if there's a platform-specific sub-directory containing a CMakeLists.txt, add it to the build as well +if(EXISTS ${PROJECT_SOURCE_DIR}/${CORE_SYSTEM_NAME}/CMakeLists.txt) + message(STATUS "Processing ${CORE_SYSTEM_NAME}") + add_subdirectory(${CORE_SYSTEM_NAME}) +else() + message(STATUS "No platform specific file ${PROJECT_SOURCE_DIR}/${CORE_SYSTEM_NAME}/CMakeLists.txt found") +endif() diff --git a/cmake/addons/depends/README b/cmake/addons/depends/README new file mode 100644 index 0000000..76df284 --- /dev/null +++ b/cmake/addons/depends/README @@ -0,0 +1,35 @@ +KODI ADDON DEPENDENCIES +======================= +This directory contains the cmake-based buildsystem for addon dependencies. It +looks into the "common" and the "<platform>/cmake" sub-directories and parses +all *.txt files recursively. Each dependency must have its own <dependency>.txt +file (either in the main sub-directory or in a separate subdirectory of the main +subdirectory) which must follow one of the defined formats: + * an empty file means that no extra downloads are necessary + * <dependency> + * <dependency> <url> + * <dependency> <git-url> <git-revision> +where + * <dependency> must be identical to the filename + * <url> must be the URL to an archive that is downloaded and extracted. + * <git-url> must be the URL of the git repository containing the + dependency. + * <git-revision> must be a valid git tag/branch/commit in the dependency's git + repository which will be used for the build. + +Reserved filenames (for additional information on how to build a dependency) +are: + * CMakeLists.txt: build instructions for the dependency + * install.txt: instructions on how to install the dependency's built files + * noinstall.txt: no installation step required (content is ignored) + * flags.txt: additional build flags + * flags-<CPU>.txt: additional arch specific platform build flags + * deps.txt: whitespace separated list of dependencies of this dependency + +The buildsystem uses the following depends-related variables (which can be passed +into it when executing cmake with the -D<variable-name>=<value> option) to e.g. +access specific paths: + * DEPENDS_TO_BUILD is a quoted, space delimited list of <dependency>s that + you want to build (default is "all"). + * ADDON_EXTRA_ARGS is a quoted, space delimited list of arguments passed to + all <dependency>s built (eg -DADDON_EXTRA_ARGS="-Darg1=1 -Darg2=2"). diff --git a/cmake/addons/depends/windows/CMakeLists.txt b/cmake/addons/depends/windows/CMakeLists.txt new file mode 100644 index 0000000..c8739c0 --- /dev/null +++ b/cmake/addons/depends/windows/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/windows/Install.cmake b/cmake/addons/depends/windows/Install.cmake new file mode 100644 index 0000000..9a3adbb --- /dev/null +++ b/cmake/addons/depends/windows/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/windows/README b/cmake/addons/depends/windows/README new file mode 100644 index 0000000..67dc594 --- /dev/null +++ b/cmake/addons/depends/windows/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 <path> being the path to this directory (absolute or relative, allowing for +in-source and out-of-source builds). + + cmake <path> [-G <generator>] + +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/windows/prebuilt/README b/cmake/addons/depends/windows/prebuilt/README new file mode 100644 index 0000000..a0c70d6 --- /dev/null +++ b/cmake/addons/depends/windows/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 <library-id>.txt which must follow the defined format + <library-id> <download-url> + +If the archive, which the <download-url> 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 <library-id>. 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 + <source> <destination> [<copy-destination>] + where <source> must be an existing file, directory or a path containing + wildcards, <destination> and the optional <copy-destination> must be existing + directories. |