diff options
Diffstat (limited to 'project/cmake/addons/depends/windows')
7 files changed, 138 insertions, 0 deletions
diff --git a/project/cmake/addons/depends/windows/CMakeLists.txt b/project/cmake/addons/depends/windows/CMakeLists.txt new file mode 100644 index 0000000..4480f1e --- /dev/null +++ b/project/cmake/addons/depends/windows/CMakeLists.txt | |||
| @@ -0,0 +1,55 @@ | |||
| 1 | project(kodi-addons-depends-windows) | ||
| 2 | |||
| 3 | cmake_minimum_required(VERSION 2.8) | ||
| 4 | |||
| 5 | list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}) | ||
| 6 | |||
| 7 | if(NOT CMAKE_BUILD_TYPE) | ||
| 8 | set(CMAKE_BUILD_TYPE Release) | ||
| 9 | endif() | ||
| 10 | |||
| 11 | include(ExternalProject) | ||
| 12 | |||
| 13 | if(NOT DEPENDS_PATH) | ||
| 14 | message(FATAL_ERROR "DEPENDS_PATH (${DEPENDS_PATH}) is not a valid target directory.") | ||
| 15 | else() | ||
| 16 | file(TO_CMAKE_PATH "${DEPENDS_PATH}" DEPENDS_PATH) | ||
| 17 | endif() | ||
| 18 | get_filename_component(DEPENDS_PATH "${DEPENDS_PATH}" ABSOLUTE) | ||
| 19 | list(APPEND CMAKE_PREFIX_PATH ${DEPENDS_PATH}) | ||
| 20 | |||
| 21 | if(NOT DEPENDS_TO_BUILD) | ||
| 22 | set(DEPENDS_TO_BUILD "all") | ||
| 23 | endif() | ||
| 24 | |||
| 25 | function(add_internal id url inputfile) | ||
| 26 | externalproject_add(${id} | ||
| 27 | URL ${url} | ||
| 28 | PREFIX build/${id} | ||
| 29 | CONFIGURE_COMMAND "" | ||
| 30 | BUILD_COMMAND "" | ||
| 31 | INSTALL_COMMAND ${CMAKE_COMMAND} | ||
| 32 | -DINPUTDIR=${PROJECT_BINARY_DIR}/build/${id}/src/${id} | ||
| 33 | -DINPUTFILE=${inputfile} | ||
| 34 | -DDESTDIR=${DEPENDS_PATH} | ||
| 35 | -P ${PROJECT_SOURCE_DIR}/install.cmake | ||
| 36 | ) | ||
| 37 | endfunction() | ||
| 38 | |||
| 39 | #find_package(7Zip REQUIRED) | ||
| 40 | |||
| 41 | file(GLOB_RECURSE download_input_files prebuilt/*.txt) | ||
| 42 | foreach(file ${download_input_files}) | ||
| 43 | if(NOT file MATCHES install.txt) | ||
| 44 | file(STRINGS ${file} def) | ||
| 45 | get_filename_component(dir ${file} PATH) | ||
| 46 | separate_arguments(def) | ||
| 47 | list(GET def 0 id) | ||
| 48 | |||
| 49 | list(FIND DEPENDS_TO_BUILD ${id} idx) | ||
| 50 | if(idx GREATER -1 OR DEPENDS_TO_BUILD STREQUAL "all") | ||
| 51 | list(GET def 1 url) | ||
| 52 | add_internal(${id} ${url} ${dir}/install.txt) | ||
| 53 | endif() | ||
| 54 | endif() | ||
| 55 | endforeach() | ||
diff --git a/project/cmake/addons/depends/windows/Find7Zip.cmake b/project/cmake/addons/depends/windows/Find7Zip.cmake new file mode 100644 index 0000000..82b0902 --- /dev/null +++ b/project/cmake/addons/depends/windows/Find7Zip.cmake | |||
| @@ -0,0 +1,7 @@ | |||
| 1 | find_program(7ZIP_EXECUTABLE NAMES 7z.exe | ||
| 2 | HINTS PATHS "c:/Program Files/7-Zip") | ||
| 3 | |||
| 4 | include(FindPackageHandleStandardArgs) | ||
| 5 | find_package_handle_standard_args(7Zip DEFAULT_MSG 7ZIP_EXECUTABLE) | ||
| 6 | |||
| 7 | mark_as_advanced(7ZIP_EXECUTABLE) | ||
diff --git a/project/cmake/addons/depends/windows/README b/project/cmake/addons/depends/windows/README new file mode 100644 index 0000000..67dc594 --- /dev/null +++ b/project/cmake/addons/depends/windows/README | |||
| @@ -0,0 +1,19 @@ | |||
| 1 | KODI WIN32 ADDON DEPENDENCIES | ||
| 2 | ============================= | ||
| 3 | This directory contains the cmake-based buildsystem for dependencies (currently | ||
| 4 | only prebuilt) used by one or multiple addons. The buildsystem looks into the | ||
| 5 | "prebuilt" sub-directory, downloads all the specified dependencies, extracts | ||
| 6 | them and places them into the "depends" sub-directory. | ||
| 7 | |||
| 8 | To trigger the cmake-based buildsystem the following command must be executed | ||
| 9 | with <path> being the path to this directory (absolute or relative, allowing for | ||
| 10 | in-source and out-of-source builds). | ||
| 11 | |||
| 12 | cmake <path> [-G <generator>] | ||
| 13 | |||
| 14 | cmake supports multiple generators, see | ||
| 15 | http://www.cmake.org/cmake/help/v2.8.8/cmake.html#section_Generators for a list. | ||
| 16 | For win32 builds one of the "Visual Studio XX" or the "NMake Makefiles" | ||
| 17 | generators is preferred. For the "NMake Makefiles" generator to work the above | ||
| 18 | command must be called from an environment prepared for VC++ builds (see | ||
| 19 | http://msdn.microsoft.com/en-us/library/f2ccy3wt.aspx). | ||
diff --git a/project/cmake/addons/depends/windows/extract-7z.cmake b/project/cmake/addons/depends/windows/extract-7z.cmake new file mode 100644 index 0000000..95a2672 --- /dev/null +++ b/project/cmake/addons/depends/windows/extract-7z.cmake | |||
| @@ -0,0 +1,10 @@ | |||
| 1 | get_filename_component(file ${URL} NAME) | ||
| 2 | file(DOWNLOAD ${URL} ${DEST}/${file}) | ||
| 3 | execute_process(COMMAND ${7ZIP_EXECUTABLE} -y x ${DEST}/${file} | ||
| 4 | WORKING_DIRECTORY ${DESTDIR}) | ||
| 5 | if(${file} MATCHES .tar) | ||
| 6 | string(REPLACE ".7z" "" tarball ${file}) | ||
| 7 | string(REPLACE ".lzma" "" tarball ${file}) | ||
| 8 | execute_process(COMMAND ${7ZIP_EXECUTABLE} -y x ${DESTDIR}/${tarball} | ||
| 9 | WORKING_DIRECTORY ${DESTDIR}) | ||
| 10 | endif() | ||
diff --git a/project/cmake/addons/depends/windows/extract-direct.cmake b/project/cmake/addons/depends/windows/extract-direct.cmake new file mode 100644 index 0000000..13cb74f --- /dev/null +++ b/project/cmake/addons/depends/windows/extract-direct.cmake | |||
| @@ -0,0 +1,2 @@ | |||
| 1 | get_filename_component(file ${URL} NAME) | ||
| 2 | file(DOWNLOAD ${URL} ${DEST}/${file}) | ||
diff --git a/project/cmake/addons/depends/windows/install.cmake b/project/cmake/addons/depends/windows/install.cmake new file mode 100644 index 0000000..9a3adbb --- /dev/null +++ b/project/cmake/addons/depends/windows/install.cmake | |||
| @@ -0,0 +1,24 @@ | |||
| 1 | if(EXISTS "${INPUTFILE}") | ||
| 2 | # if there's an input file we use it to determine which files to copy where | ||
| 3 | file(STRINGS ${INPUTFILE} FILES) | ||
| 4 | string(REPLACE "\n" ";" FILES "${FILES}") | ||
| 5 | foreach(file ${FILES}) | ||
| 6 | string(REPLACE " " ";" file "${file}") | ||
| 7 | list(GET file 0 dir) | ||
| 8 | list(GET file 1 dest) | ||
| 9 | list(LENGTH file deflength) | ||
| 10 | if(deflength GREATER 2) | ||
| 11 | list(GET file 2 copy) | ||
| 12 | endif() | ||
| 13 | file(GLOB files ${INPUTDIR}/${dir}) | ||
| 14 | foreach(instfile ${files}) | ||
| 15 | file(COPY ${instfile} DESTINATION ${DESTDIR}/${dest}) | ||
| 16 | if(copy) | ||
| 17 | file(COPY ${instfile} DESTINATION ${DESTDIR}/${copy}) | ||
| 18 | endif() | ||
| 19 | endforeach() | ||
| 20 | endforeach() | ||
| 21 | else() | ||
| 22 | # otherwise we assume that the content of the extracted archive is already well-formed and can just be copied | ||
| 23 | file(COPY ${INPUTDIR}/${dir} DESTINATION ${DESTDIR}) | ||
| 24 | endif() \ No newline at end of file | ||
diff --git a/project/cmake/addons/depends/windows/prebuilt/README b/project/cmake/addons/depends/windows/prebuilt/README new file mode 100644 index 0000000..a0c70d6 --- /dev/null +++ b/project/cmake/addons/depends/windows/prebuilt/README | |||
| @@ -0,0 +1,21 @@ | |||
| 1 | KODI WIN32 PREBUILT ADDON DEPENDENCIES | ||
| 2 | ====================================== | ||
| 3 | This directory contains a file or sub-directory for every prebuilt dependency | ||
| 4 | used by one of the addons being built. There are two different modes supported. | ||
| 5 | Both include a file named <library-id>.txt which must follow the defined format | ||
| 6 | <library-id> <download-url> | ||
| 7 | |||
| 8 | If the archive, which the <download-url> points at, contains | ||
| 9 | * only the necessary files and in the proper directory structure (i.e. an | ||
| 10 | "include" and a "lib" directory) then the file must be put into this | ||
| 11 | directory and nothing else is needed. | ||
| 12 | * unnecessary files and/or does not follow the defined directory structure | ||
| 13 | (i.e. an "include" and a "lib" directory) then the file must be put into a | ||
| 14 | sub-directory named <library-id>. Furthermore an additional file called | ||
| 15 | "install.txt" must be placed in that sub-directory. install.txt contains a | ||
| 16 | line for every path/directory/file with a destination where it must be copied | ||
| 17 | to. It must follow the defined format | ||
| 18 | <source> <destination> [<copy-destination>] | ||
| 19 | where <source> must be an existing file, directory or a path containing | ||
| 20 | wildcards, <destination> and the optional <copy-destination> must be existing | ||
| 21 | directories. | ||
