Merge pull request #5117 from MartijnKaijser/14.0a2
[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 DEPENDS_PATH)
22   set(DEPENDS_PATH "${CMAKE_BINARY_DIR}/addons")
23 else()
24   file(TO_CMAKE_PATH "${DEPENDS_PATH}" DEPENDS_PATH)
25 endif()
26 # xbmc-config.cmake.in (further down) expects a "prefix" variable
27 get_filename_component(prefix "${DEPENDS_PATH}" ABSOLUTE)
28
29 #make sure CMAKE_PREFIX_PATH is set
30 if(NOT CMAKE_PREFIX_PATH)
31   set(CMAKE_PREFIX_PATH "${DEPENDS_PATH}")
32 else()
33   file(TO_CMAKE_PATH "${CMAKE_PREFIX_PATH}" CMAKE_PREFIX_PATH)
34   list(APPEND CMAKE_PREFIX_PATH "${DEPENDS_PATH}")
35 endif()
36
37 if(NOT CMAKE_INSTALL_PREFIX)
38   set(CMAKE_INSTALL_PREFIX ${prefix})
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 # 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}")
68   endforeach()
69 endif()
70
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")
74 endif()
75
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})
81 endif()
82
83 set(XBMC_INCLUDE_DIR ${DEPENDS_PATH}/include/xbmc)
84 if(NOT EXISTS "${XBMC_INCLUDE_DIR}/")
85   file(MAKE_DIRECTORY ${XBMC_INCLUDE_DIR})
86 endif()
87
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})
92
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})
103 endforeach()
104
105
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})
112   list(GET def 0 id)
113   list(GET def 1 url)
114   list(GET def 2 revision)
115
116   # make sure the output directory is clean
117   if(EXISTS "${CMAKE_INSTALL_PREFIX}/${id}")
118     file(REMOVE_RECURSE "${CMAKE_INSTALL_PREFIX}/${id}/")
119   endif()
120
121   # add the addon as an external project for automatic building
122   externalproject_add(${id}
123                       GIT_REPOSITORY ${url}/${id}
124                       GIT_TAG ${revision}
125                       INSTALL_DIR "${CMAKE_INSTALL_PREFIX}"
126                       CMAKE_ARGS ${BUILD_ARGS}
127                      )
128 endforeach()