aboutsummaryrefslogtreecommitdiff
path: root/cmake/FindLIBVLC.cmake
blob: e396a9f6ca8187843976f3104e5a173b95e43382 (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
# CMake module to search for LIBVLC (VLC library)
# Authors: Rohit Yadav <rohityadav89@gmail.com>
#          Harald Sitter <apachelogger@ubuntu.com>
#          Alexander Grund <git@grundis.de>
#
# If it's found it defines the following targets:
#   - libvlc::libvlc 
#   - libvlc::plugin 

if(NOT WIN32)
    find_package(PkgConfig REQUIRED)
    pkg_check_modules(PC_LIBVLC libvlc QUIET)
    set(LIBVLC_DEFINITIONS ${PC_LIBVLC_CFLAGS_OTHER})

    pkg_check_modules(PC_VLCPLUGIN vlc-plugin QUIET)
    set(VLCPLUGIN_DEFINITIONS ${PC_VLCPLUGIN_CFLAGS_OTHER})

    pkg_get_variable(PC_VLCPLUGIN_PLUGINS_PATH vlc-plugin pluginsdir)
    set(VLCPLUGIN_CODEC_INSTALL_PATH ${PC_VLCPLUGIN_PLUGINS_PATH}/codec)
else()
    set(LIBVLC_DEFINITIONS)
    # FIXME: Is "_FILE_OFFSET_BITS=64" correct for Windows?
    set(VLCPLUGIN_DEFINITIONS
        -D__PLUGIN__
        -D_FILE_OFFSET_BITS=64
        -D_REENTRANT
        -D_THREAD_SAFE
    )
    # FIXME: Put the proper install path here
    set(VLCPLUGIN_CODEC_INSTALL_PATH "C:/Program Files/VideoLAN/VLC/plugins/codec")
endif()

foreach(lib libvlc vlcplugin)
    string(TOUPPER ${lib} upperLib)
    if(lib STREQUAL "vlcplugin")
        set(headerFile vlc_common.h)
        set(suffixes vlc/plugins include/vlc/plugins)
    else()
        set(headerFile vlc/libvlc.h)
        set(suffixes )
    endif()
    find_path(${upperLib}_INCLUDE_DIR ${headerFile}
	    HINTS ${PC_${upperLib}_INCLUDEDIR} ${PC_${upperLib}_INCLUDE_DIRS} $ENV{LIBVLC_INCLUDE_PATH}
        PATH_SUFFIXES include ${suffixes}
        NO_DEFAULT_PATH
    )
    find_path(${upperLib}_INCLUDE_DIR ${headerFile}
        PATHS $ENV{LIB_DIR}
              C:/msys/local #mingw
        PATH_SUFFIXES include ${suffixes}
    )
endforeach()

foreach(lib vlc vlccore)
    string(TOUPPER ${lib} upperLib)
    find_library(LIB${upperLib}_LIBRARY ${lib} lib${lib}
        HINTS ${PC_LIBVLC_LIBDIR} ${PC_LIBVLC_LIBRARY_DIRS} $ENV{LIBVLC_LIBRARY_PATH}
        PATH_SUFFIXES lib
        NO_DEFAULT_PATH
    )
    find_library(LIB${upperLib}_LIBRARY ${lib} lib${lib}
        PATHS $ENV{LIB_DIR}
              C:/msys/local #mingw
        PATH_SUFFIXES lib
    )
endforeach()

if(LIBVLC_INCLUDE_DIR)
    set(vlcVersionFile ${LIBVLC_INCLUDE_DIR}/vlc/libvlc_version.h)
    if(EXISTS ${vlcVersionFile})
        file(STRINGS ${vlcVersionFile} versionStrings REGEX "#[ \t]*define[ \t]+LIBVLC_VERSION_(MAJOR|MINOR|REVISION|EXTRA)[ \t]+\\(?[0-9]+\\)?")
        if(NOT versionStrings)
            message(FATAL_ERROR "Could not read version from ${vlcVersionFile}")
        endif()
        foreach(item MAJOR MINOR REVISION EXTRA)
            string(REGEX REPLACE "#[ \t]*define[ \t]+LIBVLC_VERSION_${item}[ \t]+\\(?([0-9]+)\\)?" "\\1" LIBVLC_VERSION_${item} ${versionStrings})
        endforeach()
        set(LIBVLC_VERSION ${LIBVLC_VERSION_MAJOR}.${LIBVLC_VERSION_MINOR}.${LIBVLC_VERSION_REVISION}.${LIBVLC_VERSION_EXTRA})
    endif()
endif()

include(FindPackageHandleStandardArgs)

find_package_handle_standard_args(LIBVLC
    REQUIRED_VARS LIBVLC_INCLUDE_DIR VLCPLUGIN_INCLUDE_DIR LIBVLC_LIBRARY LIBVLCCORE_LIBRARY
    VERSION_VAR LIBVLC_VERSION
)

if(LIBVLC_FOUND)
    add_library(libvlc_libvlc INTERFACE)
    target_compile_definitions(libvlc_libvlc INTERFACE ${LIBVLC_DEFINITIONS})
    target_include_directories(libvlc_libvlc INTERFACE ${LIBVLC_INCLUDE_DIR})
    target_link_libraries(libvlc_libvlc INTERFACE ${LIBVLC_LIBRARY})
    
    add_library(libvlc_plugin INTERFACE)
    target_include_directories(libvlc_plugin INTERFACE ${LIBVLC_INCLUDE_DIR} ${VLCPLUGIN_INCLUDE_DIR})
    target_compile_definitions(libvlc_plugin INTERFACE ${VLCPLUGIN_DEFINITIONS})
    target_link_libraries(libvlc_plugin INTERFACE ${LIBVLCCORE_LIBRARY})

    add_library(libvlc::libvlc ALIAS libvlc_libvlc)
    add_library(libvlc::plugin ALIAS libvlc_plugin)
endif()