1 project(xbmc-addons-depends)
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 if(NOT CORE_SYSTEM_NAME)
12 string(TOLOWER ${CMAKE_SYSTEM_NAME} CORE_SYSTEM_NAME)
15 include(ExternalProject)
17 if(NOT CMAKE_INSTALL_PREFIX)
18 set(CMAKE_INSTALL_PREFIX ${PROJECT_SOURCE_DIR}/../output/depends)
20 file(TO_CMAKE_PATH "${CMAKE_INSTALL_PREFIX}" CMAKE_INSTALL_PREFIX)
22 get_filename_component(CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" ABSOLUTE)
23 list(APPEND CMAKE_PREFIX_PATH ${CMAKE_INSTALL_PREFIX})
25 ## handle dependencies with a cmake based buildsystem which need to be downloaded, built and installed
26 file(GLOB_RECURSE cmake_input_files ${CORE_SYSTEM_NAME}/cmake/*.txt)
27 file(GLOB_RECURSE cmake_input_files2 common/*.txt)
28 list(APPEND cmake_input_files ${cmake_input_files2})
29 foreach(file ${cmake_input_files})
30 if(NOT (file MATCHES CMakeLists.txt OR
31 file MATCHES install.txt OR
32 file MATCHES noinstall.txt OR
33 file MATCHES flags.txt OR
34 file MATCHES deps.txt))
35 message(STATUS "Processing ${file}")
36 file(STRINGS ${file} def)
37 string(REPLACE " " ";" def ${def})
38 list(LENGTH def deflength)
39 get_filename_component(dir ${file} PATH)
41 # get the id and url of the dependency
43 if(NOT "${def}" STREQUAL "")
44 # read the id and the url from the file
46 if(deflength GREATER 1)
48 message(STATUS "${id} url: ${url}")
51 # read the id from the filename
52 get_filename_component(id ${file} NAME_WE)
55 # check if there are any library specific flags that need to be passed on
56 if(EXISTS ${dir}/flags.txt})
57 file(STRINGS ${dir}/flags.txt extraflags)
58 message(STATUS "${id} extraflags: ${extraflags}")
61 set(BUILD_ARGS -DCMAKE_PREFIX_PATH=${CMAKE_INSTALL_PREFIX}
62 -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
63 -DCMAKE_USER_MAKE_RULES_OVERRIDE=${CMAKE_USER_MAKE_RULES_OVERRIDE}
64 -DCMAKE_USER_MAKE_RULES_OVERRIDE_CXX=${CMAKE_USER_MAKE_RULES_OVERRIDE_CXX}
65 -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
66 -DARCH_DEFINES=${ARCH_DEFINES}
71 if(CMAKE_TOOLCHAIN_FILE)
72 list(APPEND BUILD_ARGS -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE})
73 MESSAGE("toolchain specified")
74 MESSAGE(${BUILD_ARGS})
77 # if there's a CMakeLists.txt use it to prepare the build
78 if(EXISTS ${dir}/CMakeLists.txt)
79 set(PATCH_COMMAND ${CMAKE_COMMAND} -E copy
81 ${CMAKE_BINARY_DIR}/build/${id}/src/${id})
86 # if there's an install.txt use it to properly install the built files
87 if(EXISTS ${dir}/install.txt)
88 set(INSTALL_COMMAND INSTALL_COMMAND ${CMAKE_COMMAND}
89 -DINPUTDIR=${CMAKE_BINARY_DIR}/build/${id}/src/${id}-build/
90 -DINPUTFILE=${dir}/install.txt
91 -DDESTDIR=${CMAKE_INSTALL_PREFIX}
94 -P ${PROJECT_SOURCE_DIR}/install.cmake)
95 elseif(EXISTS ${dir}/noinstall.txt)
96 set(INSTALL_COMMAND INSTALL_COMMAND "")
98 set(INSTALL_COMMAND "")
101 # check if there's a deps.txt containing dependencies on other libraries
102 if(EXISTS ${dir}/deps.txt})
103 file(STRINGS ${dir}/deps.txt deps)
104 message(STATUS "${id} dependencies: ${deps}")
105 set(DEPENDS_COMMAND DEPENDS ${deps})
107 set(DEPENDS_COMMAND "")
110 # prepare the setup of the call to externalproject_add()
111 set(EXTERNALPROJECT_SETUP PREFIX build/${id}
112 CMAKE_ARGS ${BUILD_ARGS}
113 PATCH_COMMAND ${PATCH_COMMAND}
115 "${DEPENDS_COMMAND}")
117 # if there's an url defined we need to pass that to externalproject_add()
118 if(DEFINED url AND NOT "${url}" STREQUAL "")
119 # check if there's a third parameter in the file
120 if(deflength GREATER 2)
121 # the third parameter is considered as a revision of a git repository
122 list(GET def 2 revision)
124 externalproject_add(${id}
125 GIT_REPOSITORY ${url}
127 "${EXTERNALPROJECT_SETUP}"
130 externalproject_add(${id}
132 "${EXTERNALPROJECT_SETUP}"
136 externalproject_add(${id}
138 "${EXTERNALPROJECT_SETUP}"
144 ## if there's a platform-specific sub-directory containing a CMakeLists.txt, add it to the build as well
145 if(EXISTS ${PROJECT_SOURCE_DIR}/${CORE_SYSTEM_NAME}/CMakeLists.txt)
146 message(STATUS "Processing ${CORE_SYSTEM_NAME}")
147 add_subdirectory(${CORE_SYSTEM_NAME})
149 message(FATAL_ERROR "CORE_SYSTEM_NAME: ${PROJECT_SOURCE_DIR}/${CORE_SYSTEM_NAME}/CMakeLists.txt")