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)
22 set(DEPENDS_PATH "${CMAKE_BINARY_DIR}/addons")
24 file(TO_CMAKE_PATH "${DEPENDS_PATH}" DEPENDS_PATH)
26 # xbmc-config.cmake.in (further down) expects a "prefix" variable
27 get_filename_component(prefix "${DEPENDS_PATH}" ABSOLUTE)
29 #make sure CMAKE_PREFIX_PATH is set
30 if(NOT CMAKE_PREFIX_PATH)
31 set(CMAKE_PREFIX_PATH "${DEPENDS_PATH}")
33 file(TO_CMAKE_PATH "${CMAKE_PREFIX_PATH}" CMAKE_PREFIX_PATH)
34 list(APPEND CMAKE_PREFIX_PATH "${DEPENDS_PATH}")
37 if(NOT CMAKE_INSTALL_PREFIX)
38 set(CMAKE_INSTALL_PREFIX ${prefix})
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 # parse version.txt to get the version info
62 if (EXISTS "${XBMCROOT}/version.txt")
63 file(STRINGS "${XBMCROOT}/version.txt" versions)
64 foreach (version ${versions})
65 string(REGEX MATCH "^[^ ]+" version_name ${version})
66 string(REPLACE "${version_name} " "" version_value ${version})
67 set(APP_${version_name} "${version_value}")
71 # bail if we can't parse versions
72 if (NOT DEFINED APP_VERSION_MAJOR OR NOT DEFINED APP_VERSION_MINOR)
73 message(FATAL_ERROR "Could not determine app version! make sure that ${XBMCROOT}/version.txt exists")
76 ### copy all the addon binding header files to include/xbmc
77 # make sure include/xbmc exists and is empty
78 set(XBMC_LIB_DIR ${DEPENDS_PATH}/lib/xbmc)
79 if(NOT EXISTS "${XBMC_LIB_DIR}/")
80 file(MAKE_DIRECTORY ${XBMC_LIB_DIR})
83 set(XBMC_INCLUDE_DIR ${DEPENDS_PATH}/include/xbmc)
84 if(NOT EXISTS "${XBMC_INCLUDE_DIR}/")
85 file(MAKE_DIRECTORY ${XBMC_INCLUDE_DIR})
88 # generate the proper xbmc-config.cmake file
89 configure_file(${XBMCROOT}/project/cmake/xbmc-config.cmake.in ${XBMC_LIB_DIR}/xbmc-config.cmake @ONLY)
90 # copy cmake helpers to lib/xbmc
91 file(COPY ${XBMCROOT}/project/cmake/xbmc-addon-helpers.cmake ${XBMCROOT}/project/cmake/AddOptions.cmake DESTINATION ${XBMC_LIB_DIR})
93 ### copy all the addon binding header files to include/xbmc
94 # parse addon-bindings.mk to get the list of header files to copy
95 file(STRINGS ${XBMCROOT}/xbmc/addons/addon-bindings.mk bindings)
96 string(REPLACE "\n" ";" bindings "${bindings}")
97 foreach(binding ${bindings})
98 string(REPLACE " =" ";" binding "${binding}")
99 string(REPLACE "+=" ";" binding "${binding}")
100 list(GET binding 1 header)
101 # copy the header file to include/xbmc
102 file(COPY ${XBMCROOT}/${header} DESTINATION ${XBMC_INCLUDE_DIR})
106 ### get and build all the binary addons
107 # look for all the addons to be built
108 file(GLOB addons ${PROJECT_SOURCE_DIR}/addons/*.txt)
109 foreach(addon ${addons})
110 file(STRINGS ${addon} def)
111 string(REPLACE " " ";" def ${def})
114 list(GET def 2 revision)
116 # make sure the output directory is clean
117 if(EXISTS "${CMAKE_INSTALL_PREFIX}/${id}")
118 file(REMOVE_RECURSE "${CMAKE_INSTALL_PREFIX}/${id}/")
121 # add the addon as an external project for automatic building
122 externalproject_add(${id}
123 GIT_REPOSITORY ${url}/${id}
125 INSTALL_DIR "${CMAKE_INSTALL_PREFIX}"
126 CMAKE_ARGS ${BUILD_ARGS}