File: FindFFmpeg.cmake

package info (click to toggle)
ffmpegthumbnailer 2.3.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 908 kB
  • sloc: cpp: 11,154; ansic: 76; sh: 37; makefile: 12
file content (158 lines) | stat: -rw-r--r-- 5,698 bytes parent folder | download
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
include(FindPackageHandleStandardArgs)

find_package(PkgConfig)
pkg_check_modules(AVCODEC libavcodec)
pkg_check_modules(AVFORMAT libavformat)
pkg_check_modules(AVUTIL libavutil)
pkg_check_modules(AVFILTER libavfilter)

find_package_handle_standard_args(FFmpeg
    FOUND_VAR FFmpeg_FOUND
    REQUIRED_VARS AVCODEC_FOUND AVFORMAT_FOUND AVUTIL_FOUND AVFILTER_FOUND
)

FIND_LIBRARY(AVCODEC_LIBRARY_PATH
    NAMES ${AVCODEC_LIBRARIES}
    PATHS ${AVCODEC_LIBRARY_DIRS}
)
if (NOT AVCODEC_LIBRARY_PATH)
    message(FATAL_ERROR "Could not determine full avcodec library path")
endif ()

FIND_LIBRARY(AVFORMAT_LIBRARY_PATH
    NAMES ${AVFORMAT_LIBRARIES}
    PATHS ${AVFORMAT_LIBRARY_DIRS}
)
if (NOT AVFORMAT_LIBRARY_PATH)
    message(FATAL_ERROR "Could not determine full avformat library path")
endif ()

FIND_LIBRARY(AVFILTER_LIBRARY_PATH
    NAMES ${AVFILTER_LIBRARIES}
    PATHS ${AVFILTER_LIBRARY_DIRS}
)
if (NOT AVFILTER_LIBRARY_PATH)
    message(FATAL_ERROR "Could not determine full avfilter library path")
endif ()

FIND_LIBRARY(AVUTIL_LIBRARY_PATH
    NAMES ${AVUTIL_LIBRARIES}
    PATHS ${AVUTIL_LIBRARY_DIRS}
)
if (NOT AVUTIL_LIBRARY_PATH)
    message(FATAL_ERROR "Could not determine full avutil library path")
endif ()

mark_as_advanced(
    AVFORMAT_LIBRARY_PATH
    AVUTIL_LIBRARY_PATH
    AVCODEC_LIBRARY_PATH
    AVFILTER_LIBRARY_PATH
)

# Determine if we need static linking
set(FFMPEG_USE_STATIC_LIBS ${ENABLE_FULL_STATIC})

message(STATUS "FFmpeg found: ${FFmpeg_FOUND}")
message(STATUS "  avcodec:  ${AVCODEC_LIBRARY_PATH}")
message(STATUS "  avformat: ${AVFORMAT_LIBRARY_PATH}")
message(STATUS "  avfilter: ${AVFILTER_LIBRARY_PATH}")
message(STATUS "  avutil:   ${AVUTIL_LIBRARY_PATH}")
message(STATUS "  static:   ${FFMPEG_USE_STATIC_LIBS}")

if(FFmpeg_FOUND AND NOT TARGET FFmpeg::avformat)
    add_library(FFmpeg::avformat UNKNOWN IMPORTED)
    set_target_properties(FFmpeg::avformat PROPERTIES
        IMPORTED_LINK_INTERFACE_LANGUAGES "C"
        INTERFACE_INCLUDE_DIRECTORIES "${AVFORMAT_INCLUDE_DIRS}"
        INTERFACE_COMPILE_DEFINITIONS __STDC_CONSTANT_MACROS
        INTERFACE_COMPILE_OPTIONS "${AVFORMAT_CFLAGS_OTHER}"
        IMPORTED_LOCATION ${AVFORMAT_LIBRARY_PATH}
    )

    # Use _STATIC_LIBRARIES and _STATIC_LIBRARY_DIRS for static builds
    if(FFMPEG_USE_STATIC_LIBS)
        set_property(TARGET FFmpeg::avformat APPEND PROPERTY
            INTERFACE_LINK_DIRECTORIES "${AVFORMAT_STATIC_LIBRARY_DIRS}")
        set_property(TARGET FFmpeg::avformat APPEND PROPERTY
            INTERFACE_LINK_LIBRARIES "${AVFORMAT_STATIC_LIBRARIES}")
    endif()
endif()

if(FFmpeg_FOUND AND NOT TARGET FFmpeg::avutil)
    add_library(FFmpeg::avutil UNKNOWN IMPORTED)
    set_target_properties(FFmpeg::avutil PROPERTIES
        IMPORTED_LINK_INTERFACE_LANGUAGES "C"
        INTERFACE_INCLUDE_DIRECTORIES "${AVUTIL_INCLUDE_DIRS}"
        INTERFACE_COMPILE_DEFINITIONS __STDC_CONSTANT_MACROS
        INTERFACE_COMPILE_OPTIONS "${AVUTIL_CFLAGS_OTHER}"
        IMPORTED_LOCATION ${AVUTIL_LIBRARY_PATH}
    )

    if(FFMPEG_USE_STATIC_LIBS)
        set_property(TARGET FFmpeg::avutil APPEND PROPERTY
            INTERFACE_LINK_DIRECTORIES "${AVUTIL_STATIC_LIBRARY_DIRS}")
        set_property(TARGET FFmpeg::avutil APPEND PROPERTY
            INTERFACE_LINK_LIBRARIES "${AVUTIL_STATIC_LIBRARIES}")
    endif()
endif()

if(FFmpeg_FOUND AND NOT TARGET FFmpeg::avcodec)
    add_library(FFmpeg::avcodec UNKNOWN IMPORTED)
    set_target_properties(FFmpeg::avcodec PROPERTIES
        IMPORTED_LINK_INTERFACE_LANGUAGES "C"
        INTERFACE_INCLUDE_DIRECTORIES "${AVCODEC_INCLUDE_DIRS}"
        INTERFACE_COMPILE_DEFINITIONS __STDC_CONSTANT_MACROS
        INTERFACE_COMPILE_OPTIONS "${AVCODEC_CFLAGS_OTHER}"
        IMPORTED_LOCATION ${AVCODEC_LIBRARY_PATH}
    )

    if(FFMPEG_USE_STATIC_LIBS)
        set_property(TARGET FFmpeg::avcodec APPEND PROPERTY
            INTERFACE_LINK_DIRECTORIES "${AVCODEC_STATIC_LIBRARY_DIRS}")
        set_property(TARGET FFmpeg::avcodec APPEND PROPERTY
            INTERFACE_LINK_LIBRARIES "${AVCODEC_STATIC_LIBRARIES}")

        if(APPLE)
            set_property(TARGET FFmpeg::avcodec APPEND PROPERTY
                INTERFACE_LINK_LIBRARIES
                    "-framework CoreVideo"
                    "-framework Security"
                    "-framework CoreFoundation"
                    "-framework VideoToolbox"
                    "-framework AudioToolbox")
        endif()
    endif()
endif()

if(FFmpeg_FOUND AND NOT TARGET FFmpeg::avfilter)
    add_library(FFmpeg::avfilter UNKNOWN IMPORTED)
    set_target_properties(FFmpeg::avfilter PROPERTIES
        IMPORTED_LINK_INTERFACE_LANGUAGES "C"
        INTERFACE_INCLUDE_DIRECTORIES "${AVFILTER_INCLUDE_DIRS}"
        INTERFACE_COMPILE_DEFINITIONS __STDC_CONSTANT_MACROS
        INTERFACE_COMPILE_OPTIONS "${AVFILTER_CFLAGS_OTHER}"
        IMPORTED_LOCATION ${AVFILTER_LIBRARY_PATH}
    )

    if(FFMPEG_USE_STATIC_LIBS)
        set_property(TARGET FFmpeg::avfilter APPEND PROPERTY
            INTERFACE_LINK_DIRECTORIES "${AVFILTER_STATIC_LIBRARY_DIRS}")
        set_property(TARGET FFmpeg::avfilter APPEND PROPERTY
            INTERFACE_LINK_LIBRARIES "${AVFILTER_STATIC_LIBRARIES}")

        if(APPLE)
            set_property(TARGET FFmpeg::avfilter APPEND PROPERTY
                INTERFACE_LINK_LIBRARIES
                    "-framework CoreImage"
                    "-framework CoreGraphics"
                    "-framework OpenGL"
                    "-framework Foundation"
                    "-framework AppKit"
            )
        endif()
    endif()
endif()

find_package(Threads)
set_property(TARGET FFmpeg::avutil APPEND PROPERTY INTERFACE_LINK_LIBRARIES Threads::Threads)