3 cmake_minimum_required(VERSION 2.8)
5 list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR})
7 if(NOT CMAKE_BUILD_TYPE)
8 set(CMAKE_BUILD_TYPE Release)
11 include(ExternalProject)
13 ### setup all the necessary paths
15 set(XBMCROOT ${PROJECT_SOURCE_DIR}/../../..)
17 file(TO_CMAKE_PATH "${XBMCROOT}" XBMCROOT)
19 get_filename_component(XBMCROOT "${XBMCROOT}" ABSOLUTE)
23 set(DEPENDS_PATH "${PROJECT_SOURCE_DIR}/output/depends")
25 file(TO_CMAKE_PATH "${DEPENDS_PATH}" DEPENDS_PATH)
28 # make sure CMAKE_PREFIX_PATH is set
29 if(NOT CMAKE_PREFIX_PATH)
30 set(CMAKE_PREFIX_PATH "${DEPENDS_PATH}")
32 file(TO_CMAKE_PATH "${CMAKE_PREFIX_PATH}" CMAKE_PREFIX_PATH)
33 list(APPEND CMAKE_PREFIX_PATH "${DEPENDS_PATH}")
37 if(NOT CMAKE_INSTALL_PREFIX)
38 set(CMAKE_INSTALL_PREFIX "${PROJECT_SOURCE_DIR}/output/addons")
40 list(APPEND CMAKE_PREFIX_PATH ${CMAKE_INSTALL_PREFIX})
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)
50 # needed for project installing
51 list(APPEND BUILD_ARGS -DPACKAGE_ZIP=1)
52 MESSAGE("package zip specified")
55 if(CMAKE_TOOLCHAIN_FILE)
56 list(APPEND BUILD_ARGS -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE})
57 MESSAGE("toolchain specified")
58 MESSAGE(${BUILD_ARGS})
61 if(NOT ADDONS_TO_BUILD)
62 set(ADDONS_TO_BUILD "all")
64 message(STATUS "Building following addons: ${ADDONS_TO_BUILD}")
65 separate_arguments(ADDONS_TO_BUILD)
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)
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)
75 # include xbmc-prepare-env.cmake which contains the logic to install the addon header bindings etc
76 include(xbmc-prepare-env)
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})
87 list(GET def 2 revision)
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}/")
96 # add the addon as an external project for automatic building
97 externalproject_add(${id}
100 INSTALL_DIR "${CMAKE_INSTALL_PREFIX}"
101 CMAKE_ARGS ${BUILD_ARGS}