Merge pull request #5014 from Montellese/binary_addons
[vuplus_xbmc] / project / cmake / addons / CMakeLists.txt
1 project(xbmc-addons)
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 ### setup all the necessary paths
14 if(NOT XBMCROOT)
15   set(XBMCROOT ${PROJECT_SOURCE_DIR}/../../..)
16 else()
17   file(TO_CMAKE_PATH "${XBMCROOT}" XBMCROOT)
18 endif()
19 get_filename_component(XBMCROOT "${XBMCROOT}" ABSOLUTE)
20
21 if(NOT WIN32)
22   if(NOT DEPENDS_PATH)
23     set(DEPENDS_PATH "${PROJECT_SOURCE_DIR}/output/depends")
24   else()
25     file(TO_CMAKE_PATH "${DEPENDS_PATH}" DEPENDS_PATH)
26   endif()
27
28   # make sure CMAKE_PREFIX_PATH is set
29   if(NOT CMAKE_PREFIX_PATH)
30     set(CMAKE_PREFIX_PATH "${DEPENDS_PATH}")
31   else()
32     file(TO_CMAKE_PATH "${CMAKE_PREFIX_PATH}" CMAKE_PREFIX_PATH)
33     list(APPEND CMAKE_PREFIX_PATH "${DEPENDS_PATH}")
34   endif()
35 endif()
36
37 if(NOT CMAKE_INSTALL_PREFIX)
38   set(CMAKE_INSTALL_PREFIX "${PROJECT_SOURCE_DIR}/output/addons")
39 endif()
40 list(APPEND CMAKE_PREFIX_PATH ${CMAKE_INSTALL_PREFIX})
41
42 set(BUILD_ARGS -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
43                -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
44                -DCMAKE_BUILD_TYPE=Release
45                -DCMAKE_USER_MAKE_RULES_OVERRIDE=${CMAKE_USER_MAKE_RULES_OVERRIDE}
46                -DCMAKE_USER_MAKE_RULES_OVERRIDE_CXX=${CMAKE_USER_MAKE_RULES_OVERRIDE_CXX}
47                -DBUILD_SHARED_LIBS=1)
48
49 if(PACKAGE_ZIP)
50   # needed for project installing
51   list(APPEND BUILD_ARGS -DPACKAGE_ZIP=1)
52   MESSAGE("package zip specified")
53 endif()
54
55 if(CMAKE_TOOLCHAIN_FILE)
56   list(APPEND BUILD_ARGS -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE})
57   MESSAGE("toolchain specified")
58   MESSAGE(${BUILD_ARGS})
59 endif()
60
61 if(NOT ADDONS_TO_BUILD)
62   set(ADDONS_TO_BUILD "all")
63 else()
64   message(STATUS "Building following addons: ${ADDONS_TO_BUILD}")
65   separate_arguments(ADDONS_TO_BUILD)
66 endif()
67
68 if(NOT WIN32)
69   # copy the xbmc-prepare-env.cmake script to the depends path so that we can include it
70   file(COPY ${XBMCROOT}/project/cmake/scripts/common/xbmc-prepare-env.cmake DESTINATION ${DEPENDS_PATH}/lib/xbmc)
71
72   # add the location of xbmc-prepare-env.cmake to CMAKE_MODULE_PATH so that it is found
73   list(APPEND CMAKE_MODULE_PATH ${DEPENDS_PATH}/lib/xbmc)
74
75   # include xbmc-prepare-env.cmake which contains the logic to install the addon header bindings etc
76   include(xbmc-prepare-env)
77 endif()
78
79 ### get and build all the binary addons
80 # look for all the addons to be built
81 file(GLOB addons ${PROJECT_SOURCE_DIR}/addons/*.txt)
82 foreach(addon ${addons})
83   file(STRINGS ${addon} def)
84   string(REPLACE " " ";" def ${def})
85   list(GET def 0 id)
86   list(GET def 1 url)
87   list(GET def 2 revision)
88
89   list(FIND ADDONS_TO_BUILD ${id} idx)
90   if(idx GREATER -1 OR ADDONS_TO_BUILD STREQUAL "all")
91     # make sure the output directory is clean
92     if(EXISTS "${CMAKE_INSTALL_PREFIX}/${id}")
93       file(REMOVE_RECURSE "${CMAKE_INSTALL_PREFIX}/${id}/")
94     endif()
95
96     # add the addon as an external project for automatic building
97     externalproject_add(${id}
98                       GIT_REPOSITORY ${url}
99                       GIT_TAG ${revision}
100                       INSTALL_DIR "${CMAKE_INSTALL_PREFIX}"
101                       CMAKE_ARGS ${BUILD_ARGS}
102                      )
103   endif()
104 endforeach()