Merge pull request #25883 from CrystalP/fix-slowscan
[xbmc.git] / cmake / modules / FindLibDvdNav.cmake
blob503f559e103eaf4b1162094da43b407fb2449361
1 #.rst:
2 # FindLibDvdNav
3 # ----------
4 # Finds the dvdnav library
6 # This will define the following target:
8 #   LibDvdNav::LibDvdNav   - The LibDvdNav library
10 if(NOT TARGET LibDvdNav::LibDvdNav)
12   find_package(LibDvdRead MODULE REQUIRED)
14   include(cmake/scripts/common/ModuleHelpers.cmake)
16   set(MODULE_LC libdvdnav)
18   # We require this due to the odd nature of github URL's compared to our other tarball
19   # mirror system. If User sets LIBDVDNAV_URL or libdvdnav_URL, allow get_filename_component in SETUP_BUILD_VARS
20   if(LIBDVDNAV_URL OR ${MODULE_LC}_URL)
21     if(${MODULE_LC}_URL)
22       set(LIBDVDNAV_URL ${${MODULE_LC}_URL})
23     endif()
24     set(LIBDVDNAV_URL_PROVIDED TRUE)
25   endif()
27   SETUP_BUILD_VARS()
29   if(NOT LIBDVDNAV_URL_PROVIDED)
30     # override LIBDVDNAV_URL due to tar naming when retrieved from github release
31     set(LIBDVDNAV_URL ${LIBDVDNAV_BASE_URL}/archive/${LIBDVDNAV_VER}.tar.gz)
32   endif()
34   set(LIBDVDNAV_VERSION ${${MODULE}_VER})
36   set(HOST_ARCH ${ARCH})
37   if(CORE_SYSTEM_NAME STREQUAL android)
38     if(ARCH STREQUAL arm)
39       set(HOST_ARCH arm-linux-androideabi)
40     elseif(ARCH STREQUAL i486-linux)
41       set(HOST_ARCH i686-linux-android)
42     elseif()
43       set(HOST_ARCH ${ARCH}-linux-android)
44     endif()
45   elseif(CORE_SYSTEM_NAME STREQUAL windowsstore)
46     set(LIBDVD_ADDITIONAL_ARGS "-DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}" "-DCMAKE_SYSTEM_VERSION=${CMAKE_SYSTEM_VERSION}")
47   endif()
49   string(APPEND LIBDVDNAV_CFLAGS "-D_XBMC")
51   if(APPLE)
52     set(LIBDVDNAV_LDFLAGS "-framework CoreFoundation")
53     string(APPEND LIBDVDNAV_CFLAGS " -D__DARWIN__")
54     if(NOT CORE_SYSTEM_NAME STREQUAL darwin_embedded)
55       string(APPEND LIBDVDNAV_LDFLAGS " -framework IOKit")
56     endif()
57   endif()
59   if(CORE_SYSTEM_NAME MATCHES windows)
60     set(CMAKE_ARGS -DDUMMY_DEFINE=ON
61                    ${LIBDVD_ADDITIONAL_ARGS})
62   else()
64     # INTERFACE_INCLUDE_DIRECTORIES may have multiple paths. We need to separate these
65     # individually to then set the -I argument correctly with each path
66     get_target_property(_interface_include_dirs LibDvdRead::LibDvdRead INTERFACE_INCLUDE_DIRECTORIES)
67     foreach(_interface_include_dir ${_interface_include_dirs})
68       string(APPEND LIBDVDNAV_CFLAGS " -I${_interface_include_dir}")
69     endforeach()
71     if(TARGET LibDvdCSS::LibDvdCSS)
72       string(APPEND LIBDVDNAV_CFLAGS " -I$<TARGET_PROPERTY:LibDvdCSS::LibDvdCSS,INTERFACE_INCLUDE_DIRECTORIES> $<$<TARGET_EXISTS:LibDvdCSS::LibDvdCSS>:-D$<TARGET_PROPERTY:LibDvdCSS::LibDvdCSS,INTERFACE_COMPILE_DEFINITIONS>>")
73     endif()
75     find_program(AUTORECONF autoreconf REQUIRED)
76     if (CMAKE_HOST_SYSTEM_NAME MATCHES "(Free|Net|Open)BSD")
77       find_program(MAKE_EXECUTABLE gmake)
78     endif()
79     find_program(MAKE_EXECUTABLE make REQUIRED)
81     set(CONFIGURE_COMMAND ${AUTORECONF} -vif
82                   COMMAND ac_cv_path_GIT= ./configure
83                           --target=${HOST_ARCH}
84                           --host=${HOST_ARCH}
85                           --enable-static
86                           --disable-shared
87                           --with-pic
88                           --prefix=${DEPENDS_PATH}
89                           --libdir=${DEPENDS_PATH}/lib
90                           "CC=${CMAKE_C_COMPILER}"
91                           "CFLAGS=${CMAKE_C_FLAGS} ${LIBDVDNAV_CFLAGS}"
92                           "LDFLAGS=${CMAKE_EXE_LINKER_FLAGS} ${LIBDVDNAV_LDFLAGS}"
93                           "PKG_CONFIG_PATH=${DEPENDS_PATH}/lib/pkgconfig")
95     set(BUILD_COMMAND ${MAKE_EXECUTABLE})
96     set(INSTALL_COMMAND ${MAKE_EXECUTABLE} install)
97     set(BUILD_IN_SOURCE 1)
98   endif()
100   BUILD_DEP_TARGET()
102   add_dependencies(libdvdnav LibDvdRead::LibDvdRead)
104   include(FindPackageHandleStandardArgs)
105   find_package_handle_standard_args(LibDvdNav
106                                     REQUIRED_VARS LIBDVDNAV_LIBRARY LIBDVDNAV_INCLUDE_DIR
107                                     VERSION_VAR LIBDVDNAV_VERSION)
109   if(LibDvdNav_FOUND)
110     add_library(LibDvdNav::LibDvdNav UNKNOWN IMPORTED)
111     set_target_properties(LibDvdNav::LibDvdNav PROPERTIES
112                                                IMPORTED_LOCATION "${LIBDVDNAV_LIBRARY}"
113                                                INTERFACE_LINK_LIBRARIES LibDvdRead::LibDvdRead
114                                                INTERFACE_INCLUDE_DIRECTORIES "${LIBDVDNAV_INCLUDE_DIR}")
116     add_dependencies(LibDvdNav::LibDvdNav libdvdnav)
117   else()
118     if(LibDvdNav_FIND_REQUIRED)
119       message(FATAL_ERROR "Libdvdnav not found")
120     endif()
121   endif()
122 endif()