summaryrefslogtreecommitdiffstats
path: root/cmake/modules/FindLibDvdCSS.cmake
blob: 38c55382d05a38e9ac64aece1e6e86762a03c809 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#.rst:
# FindLibDvdCSS
# ----------
# Finds the libdvdcss library
#
# This will define the following variables::
#
# LIBDVDCSS_FOUND - system has LibDvdCSS
# LIBDVDCSS_INCLUDE_DIRS - the LibDvdCSS include directory
# LIBDVDCSS_LIBRARIES - the LibDvdCSS libraries
#
# and the following imported targets::
#
#   LibDvdCSS::LibDvdCSS   - The LibDvdCSS library

if(ENABLE_DVDCSS)
  include(cmake/scripts/common/ModuleHelpers.cmake)

  set(MODULE_LC libdvdcss)

  # We require this due to the odd nature of github URL's compared to our other tarball
  # mirror system. If User sets LIBDVDCSS_URL or libdvdcss_URL, allow get_filename_component in SETUP_BUILD_VARS
  if(LIBDVDCSS_URL OR ${MODULE_LC}_URL)
    if(${MODULE_LC}_URL)
      set(LIBDVDCSS_URL ${${MODULE_LC}_URL})
    endif()
    set(LIBDVDCSS_URL_PROVIDED TRUE)
  endif()

  SETUP_BUILD_VARS()

  if(NOT LIBDVDCSS_URL_PROVIDED)
    # override LIBDVDCSS_URL_PROVIDED due to tar naming when retrieved from github release
    set(LIBDVDCSS_URL ${LIBDVDCSS_BASE_URL}/archive/${LIBDVDCSS_VER}.tar.gz)
  endif()

  set(LIBDVDCSS_VERSION ${${MODULE}_VER})

  set(HOST_ARCH ${ARCH})
  if(CORE_SYSTEM_NAME STREQUAL android)
    if(ARCH STREQUAL arm)
      set(HOST_ARCH arm-linux-androideabi)
    elseif(ARCH STREQUAL aarch64)
      set(HOST_ARCH aarch64-linux-android)
    elseif(ARCH STREQUAL i486-linux)
      set(HOST_ARCH i686-linux-android)
    elseif(ARCH STREQUAL x86_64)
      set(HOST_ARCH x86_64-linux-android)
    endif()
  elseif(CORE_SYSTEM_NAME STREQUAL windowsstore)
    set(LIBDVD_ADDITIONAL_ARGS "-DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}" "-DCMAKE_SYSTEM_VERSION=${CMAKE_SYSTEM_VERSION}")
    set(${MODULE}_CXX_FLAGS "/Zc:twoPhase-")
  endif()

  if(APPLE)
    set(LIBDVDCSS_FLAGS " -framework CoreFoundation")
    if(NOT CORE_SYSTEM_NAME STREQUAL darwin_embedded)
      string(APPEND LIBDVDCSS_FLAGS " -framework IOKit")
    endif()
  endif()

  if(CORE_SYSTEM_NAME MATCHES windows)
    set(CMAKE_ARGS -DDUMMY_DEFINE=ON
                   ${LIBDVD_ADDITIONAL_ARGS})
  else()
    find_program(AUTORECONF autoreconf REQUIRED)
    find_program(MAKE_EXECUTABLE make REQUIRED)

    set(CONFIGURE_COMMAND ${AUTORECONF} -vif
                  COMMAND ac_cv_path_GIT= ./configure
                          --target=${HOST_ARCH}
                          --host=${HOST_ARCH}
                          --disable-doc
                          --enable-static
                          --disable-shared
                          --with-pic
                          --prefix=${DEPENDS_PATH}
                          --libdir=${DEPENDS_PATH}/lib
                          "CC=${CMAKE_C_COMPILER}"
                          "CFLAGS=${CMAKE_C_FLAGS}"
                          "LDFLAGS=${CMAKE_EXE_LINKER_FLAGS} ${LIBDVDCSS_FLAGS}")
    set(BUILD_COMMAND ${MAKE_EXECUTABLE})
    set(INSTALL_COMMAND ${MAKE_EXECUTABLE} install)
    set(BUILD_IN_SOURCE 1)
  endif()

  BUILD_DEP_TARGET()

endif()

include(SelectLibraryConfigurations)
select_library_configurations(LibDvdCSS)

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(LibDvdCSS
                                  REQUIRED_VARS LIBDVDCSS_LIBRARY LIBDVDCSS_INCLUDE_DIR
                                  VERSION_VAR LIBDVDCSS_VERSION)

if(LIBDVDCSS_FOUND)
  set(LIBDVDCSS_INCLUDE_DIRS ${LIBDVDCSS_INCLUDE_DIR})
  set(LIBDVDCSS_LIBRARIES ${LIBDVDCSS_LIBRARY})
  set(LIBDVDCSS_DEFINITIONS -DHAVE_DVDCSS_DVDCSS_H)

  if(NOT TARGET LibDvdCSS::LibDvdCSS)
    add_library(LibDvdCSS::LibDvdCSS UNKNOWN IMPORTED)

    set_target_properties(LibDvdCSS::LibDvdCSS PROPERTIES
                                               IMPORTED_LOCATION "${LIBDVDCSS_LIBRARY}"
                                               INTERFACE_COMPILE_DEFINITIONS "${LIBDVDCSS_DEFINITIONS}"
                                               INTERFACE_INCLUDE_DIRECTORIES "${LIBDVDCSS_INCLUDE_DIR}")

    if(TARGET libdvdcss)
      add_dependencies(LibDvdCSS::LibDvdCSS libdvdcss)
    endif()
  endif()

else()
  if(LIBDVDCSS_FIND_REQUIRED)
    message(FATAL_ERROR "Libdvdcss not found. Possibly remove ENABLE_DVDCSS.")
  endif()
endif()

mark_as_advanced(LIBDVDCSS_INCLUDE_DIR LIBDVDCSS_LIBRARY)