summaryrefslogtreecommitdiffstats
path: root/cmake/modules/FindLibDvd.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/modules/FindLibDvd.cmake')
-rw-r--r--cmake/modules/FindLibDvd.cmake219
1 files changed, 219 insertions, 0 deletions
diff --git a/cmake/modules/FindLibDvd.cmake b/cmake/modules/FindLibDvd.cmake
new file mode 100644
index 0000000..eeb416c
--- /dev/null
+++ b/cmake/modules/FindLibDvd.cmake
@@ -0,0 +1,219 @@
1if(NOT WIN32)
2 if(KODI_DEPENDSBUILD)
3 set(_dvdlibs dvdread dvdnav)
4 set(_handlevars LIBDVD_INCLUDE_DIRS DVDREAD_LIBRARY DVDNAV_LIBRARY)
5 if(ENABLE_DVDCSS)
6 list(APPEND _dvdlibs libdvdcss)
7 list(APPEND _handlevars DVDCSS_LIBRARY)
8 endif()
9
10 if(PKG_CONFIG_FOUND)
11 pkg_check_modules(PC_DVD ${_dvdlibs} QUIET)
12 endif()
13
14 find_path(LIBDVD_INCLUDE_DIRS dvdnav/dvdnav.h PATHS ${PC_DVD_INCLUDE_DIRS})
15 find_library(DVDREAD_LIBRARY NAMES dvdread libdvdread PATHS ${PC_DVD_dvdread_LIBDIR})
16 find_library(DVDNAV_LIBRARY NAMES dvdnav libdvdnav PATHS ${PC_DVD_dvdnav_LIBDIR})
17 if(ENABLE_DVDCSS)
18 find_library(DVDCSS_LIBRARY NAMES dvdcss libdvdcss PATHS ${PC_DVD_libdvdcss_LIBDIR})
19 endif()
20
21 include(FindPackageHandleStandardArgs)
22 find_package_handle_standard_args(LibDvd REQUIRED_VARS ${_handlevars})
23 if(LIBDVD_FOUND)
24 add_library(dvdnav UNKNOWN IMPORTED)
25 set_target_properties(dvdnav PROPERTIES
26 FOLDER "External Projects"
27 IMPORTED_LOCATION "${DVDNAV_LIBRARY}")
28
29 add_library(dvdread UNKNOWN IMPORTED)
30 set_target_properties(dvdread PROPERTIES
31 FOLDER "External Projects"
32 IMPORTED_LOCATION "${DVDREAD_LIBRARY}")
33 add_library(dvdcss UNKNOWN IMPORTED)
34 set_target_properties(dvdcss PROPERTIES
35 FOLDER "External Projects"
36 IMPORTED_LOCATION "${DVDCSS_LIBRARY}")
37
38 set(_linklibs ${DVDREAD_LIBRARY})
39 if(ENABLE_DVDCSS)
40 list(APPEND _linklibs ${DVDCSS_LIBRARY})
41 endif()
42 core_link_library(${DVDNAV_LIBRARY} system/players/VideoPlayer/libdvdnav dvdnav archives "${_linklibs}")
43 set(LIBDVD_LIBRARIES ${DVDNAV_LIBRARY})
44 mark_as_advanced(LIBDVD_INCLUDE_DIRS LIBDVD_LIBRARIES)
45 endif()
46 else()
47 set(dvdlibs libdvdread libdvdnav)
48 if(ENABLE_DVDCSS)
49 list(APPEND dvdlibs libdvdcss)
50 endif()
51 foreach(dvdlib ${dvdlibs})
52 file(GLOB VERSION_FILE ${CMAKE_SOURCE_DIR}/tools/depends/target/${dvdlib}/DVD*-VERSION)
53 file(STRINGS ${VERSION_FILE} VER)
54 string(REGEX MATCH "VERSION=[^ ]*$.*" ${dvdlib}_VER "${VER}")
55 list(GET ${dvdlib}_VER 0 ${dvdlib}_VER)
56 string(SUBSTRING "${${dvdlib}_VER}" 8 -1 ${dvdlib}_VER)
57 string(REGEX MATCH "BASE_URL=([^ ]*)" ${dvdlib}_BASE_URL "${VER}")
58 list(GET ${dvdlib}_BASE_URL 0 ${dvdlib}_BASE_URL)
59 string(SUBSTRING "${${dvdlib}_BASE_URL}" 9 -1 ${dvdlib}_BASE_URL)
60 string(TOUPPER ${dvdlib} DVDLIB)
61
62 # allow user to override the download URL with a local tarball
63 # needed for offline build envs
64 # allow upper and lowercase var name
65 if(${dvdlib}_URL)
66 set(${DVDLIB}_URL ${${dvdlib}_URL})
67 endif()
68 if(${DVDLIB}_URL)
69 get_filename_component(${DVDLIB}_URL "${${DVDLIB}_URL}" ABSOLUTE)
70 else()
71 set(${DVDLIB}_URL ${${dvdlib}_BASE_URL}/archive/${${dvdlib}_VER}.tar.gz)
72 endif()
73 if(VERBOSE)
74 message(STATUS "${DVDLIB}_URL: ${${DVDLIB}_URL}")
75 endif()
76 endforeach()
77
78 set(DVDREAD_CFLAGS "${DVDREAD_CFLAGS} -I${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd/include")
79 if(CMAKE_CROSSCOMPILING)
80 set(EXTRA_FLAGS "CC=${CMAKE_C_COMPILER}")
81 endif()
82
83 if(APPLE)
84 set(CMAKE_LD_FLAGS "-framework IOKit -framework CoreFoundation")
85 endif()
86
87 set(HOST_ARCH ${ARCH})
88 if(CORE_SYSTEM_NAME STREQUAL android)
89 if(ARCH STREQUAL arm)
90 set(HOST_ARCH arm-linux-androideabi)
91 elseif(ARCH STREQUAL aarch64)
92 set(HOST_ARCH aarch64-linux-android)
93 elseif(ARCH STREQUAL i486-linux)
94 set(HOST_ARCH i686-linux-android)
95 endif()
96 endif()
97
98 if(ENABLE_DVDCSS)
99 set(DVDCSS_LIBRARY ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd/lib/libdvdcss.a)
100 ExternalProject_Add(dvdcss URL ${LIBDVDCSS_URL}
101 DOWNLOAD_NAME libdvdcss-${libdvdcss_VER}.tar.gz
102 DOWNLOAD_DIR ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/download
103 PREFIX ${CORE_BUILD_DIR}/libdvd
104 CONFIGURE_COMMAND ac_cv_path_GIT= <SOURCE_DIR>/configure
105 --target=${HOST_ARCH}
106 --host=${HOST_ARCH}
107 --disable-doc
108 --enable-static
109 --disable-shared
110 --with-pic
111 --prefix=<INSTALL_DIR>
112 --libdir=<INSTALL_DIR>/lib
113 "${EXTRA_FLAGS}"
114 "CFLAGS=${CMAKE_C_FLAGS} ${DVDREAD_CFLAGS}"
115 "LDFLAGS=${CMAKE_LD_FLAGS}"
116 BUILD_BYPRODUCTS ${DVDCSS_LIBRARY})
117 ExternalProject_Add_Step(dvdcss autoreconf
118 DEPENDEES download update patch
119 DEPENDERS configure
120 COMMAND PATH=${NATIVEPREFIX}/bin:$ENV{PATH} autoreconf -vif
121 WORKING_DIRECTORY <SOURCE_DIR>)
122
123 set_target_properties(dvdcss PROPERTIES FOLDER "External Projects")
124 endif()
125
126 set(DVDREAD_CFLAGS "-D_XBMC -I${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd/include")
127 if(ENABLE_DVDCSS)
128 set(DVDREAD_CFLAGS "${DVDREAD_CFLAGS} -DHAVE_DVDCSS_DVDCSS_H")
129 endif()
130
131 set(DVDREAD_LIBRARY ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd/lib/libdvdread.a)
132 ExternalProject_Add(dvdread URL ${LIBDVDREAD_URL}
133 DOWNLOAD_NAME libdvdread-${libdvdread_VER}.tar.gz
134 DOWNLOAD_DIR ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/download
135 PREFIX ${CORE_BUILD_DIR}/libdvd
136 CONFIGURE_COMMAND ac_cv_path_GIT= <SOURCE_DIR>/configure
137 --target=${HOST_ARCH}
138 --host=${HOST_ARCH}
139 --enable-static
140 --disable-shared
141 --with-pic
142 --prefix=<INSTALL_DIR>
143 --libdir=<INSTALL_DIR>/lib
144 "${EXTRA_FLAGS}"
145 "CFLAGS=${CMAKE_C_FLAGS} ${DVDREAD_CFLAGS}"
146 "LDFLAGS=${CMAKE_LD_FLAGS}"
147 BUILD_BYPRODUCTS ${DVDREAD_LIBRARY})
148 ExternalProject_Add_Step(dvdread autoreconf
149 DEPENDEES download update patch
150 DEPENDERS configure
151 COMMAND PATH=${NATIVEPREFIX}/bin:$ENV{PATH} autoreconf -vif
152 WORKING_DIRECTORY <SOURCE_DIR>)
153 if(ENABLE_DVDCSS)
154 add_dependencies(dvdread dvdcss)
155 endif()
156
157 set_target_properties(dvdread PROPERTIES FOLDER "External Projects")
158
159 if(ENABLE_DVDCSS)
160 set(DVDNAV_LIBS -ldvdcss)
161 endif()
162
163 set(DVDNAV_LIBRARY ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd/lib/libdvdnav.a)
164 ExternalProject_Add(dvdnav URL ${LIBDVDNAV_URL}
165 DOWNLOAD_NAME libdvdnav-${libdvdnav_VER}.tar.gz
166 DOWNLOAD_DIR ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/download
167 PREFIX ${CORE_BUILD_DIR}/libdvd
168 CONFIGURE_COMMAND ac_cv_path_GIT= <SOURCE_DIR>/configure
169 --target=${HOST_ARCH}
170 --host=${HOST_ARCH}
171 --enable-static
172 --disable-shared
173 --with-pic
174 --prefix=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd
175 --libdir=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd/lib
176 "${EXTRA_FLAGS}"
177 "LDFLAGS=${CMAKE_LD_FLAGS} -L${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd/lib"
178 "CFLAGS=${CMAKE_C_FLAGS} ${DVDREAD_CFLAGS}"
179 "DVDREAD_CFLAGS=${DVDREAD_CFLAGS}"
180 "DVDREAD_LIBS=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd/lib/libdvdread.la"
181 "LIBS=${DVDNAV_LIBS}"
182 BUILD_BYPRODUCTS ${DVDNAV_LIBRARY})
183 ExternalProject_Add_Step(dvdnav autoreconf
184 DEPENDEES download update patch
185 DEPENDERS configure
186 COMMAND PATH=${NATIVEPREFIX}/bin:$ENV{PATH} autoreconf -vif
187 WORKING_DIRECTORY <SOURCE_DIR>)
188 add_dependencies(dvdnav dvdread)
189 set_target_properties(dvdnav PROPERTIES FOLDER "External Projects")
190
191 set(_dvdlibs ${DVDREAD_LIBRARY} ${DVDCSS_LIBRARY})
192 # link a shared dvdnav library that includes the whole archives of dvdread and dvdcss as well
193 # the quotes around _dvdlibs are on purpose, since we want to pass a list to the function that will be unpacked automatically
194 core_link_library(${DVDNAV_LIBRARY} system/players/VideoPlayer/libdvdnav dvdnav archives "${_dvdlibs}")
195
196 set(LIBDVD_INCLUDE_DIRS ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/libdvd/include)
197 set(LIBDVD_LIBRARIES ${DVDNAV_LIBRARY} ${DVDREAD_LIBRARY})
198 if(ENABLE_DVDCSS)
199 list(APPEND LIBDVD_LIBRARIES ${DVDCSS_LIBRARY})
200 endif()
201 set(LIBDVD_LIBRARIES ${LIBDVD_LIBRARIES} CACHE STRING "libdvd libraries" FORCE)
202 set(LIBDVD_FOUND 1 CACHE BOOL "libdvd found" FORCE)
203 endif()
204else()
205 # Dynamically loaded on Windows
206 find_path(LIBDVD_INCLUDE_DIR dvdcss/dvdcss.h PATHS ${CMAKE_SOURCE_DIR}/lib/libdvd/include)
207
208 include(FindPackageHandleStandardArgs)
209 find_package_handle_standard_args(LibDvd REQUIRED_VARS LIBDVD_INCLUDE_DIR)
210
211 if(LIBDVD_FOUND)
212 set(LIBDVD_INCLUDE_DIRS ${LIBDVD_INCLUDE_DIR})
213
214 add_custom_target(dvdnav)
215 set_target_properties(dvdnav PROPERTIES FOLDER "External Projects")
216 endif()
217
218 mark_as_advanced(LIBDVD_INCLUDE_DIR)
219endif()