File: LocalLibyuv.cmake

package info (click to toggle)
libavif 1.3.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 20,956 kB
  • sloc: ansic: 29,303; cpp: 13,260; sh: 1,145; xml: 1,040; java: 307; makefile: 51
file content (79 lines) | stat: -rw-r--r-- 3,106 bytes parent folder | download | duplicates (2)
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
set(AVIF_LIBYUV_TAG "4db2af62dab48895226be6b52737247e898ebe36")

set(AVIF_LIBYUV_BUILD_DIR "${AVIF_SOURCE_DIR}/ext/libyuv/build")
# If ${ANDROID_ABI} is set, look for the library under that subdirectory.
if(DEFINED ANDROID_ABI)
    set(AVIF_LIBYUV_BUILD_DIR "${AVIF_LIBYUV_BUILD_DIR}/${ANDROID_ABI}")
endif()
set(LIB_FILENAME "${AVIF_LIBYUV_BUILD_DIR}/${AVIF_LIBRARY_PREFIX}yuv${CMAKE_STATIC_LIBRARY_SUFFIX}")

if(EXISTS "${LIB_FILENAME}")
    message(STATUS "libavif(AVIF_LIBYUV=LOCAL): compiled library found at ${LIB_FILENAME}")
    set(LIBYUV_INCLUDE_DIR "${AVIF_SOURCE_DIR}/ext/libyuv/include")

    add_library(yuv::yuv STATIC IMPORTED GLOBAL)
    set_target_properties(yuv::yuv PROPERTIES IMPORTED_LOCATION "${LIB_FILENAME}" AVIF_LOCAL ON)
    target_include_directories(yuv::yuv INTERFACE "${LIBYUV_INCLUDE_DIR}")
    set_target_properties(yuv::yuv PROPERTIES FOLDER "ext/libyuv")
else()
    message(STATUS "libavif(AVIF_LIBYUV=LOCAL): compiled library not found at ${LIB_FILENAME}; using FetchContent")
    if(EXISTS "${AVIF_SOURCE_DIR}/ext/libyuv")
        message(STATUS "libavif(AVIF_LIBYUV=LOCAL): ext/libyuv found; using as FetchContent SOURCE_DIR")
        set(FETCHCONTENT_SOURCE_DIR_LIBYUV "${AVIF_SOURCE_DIR}/ext/libyuv")
        message(CHECK_START "libavif(AVIF_LIBYUV=LOCAL): configuring libyuv")
    else()
        message(CHECK_START "libavif(AVIF_LIBYUV=LOCAL): fetching and configuring libyuv")
    endif()

    set(LIBYUV_BINARY_DIR "${FETCHCONTENT_BASE_DIR}/libyuv-build")
    if(ANDROID_ABI)
        set(LIBYUV_BINARY_DIR "${LIBYUV_BINARY_DIR}/${ANDROID_ABI}")
    endif()

    # unset JPEG_FOUND so that libyuv does not find it
    set(JPEG_FOUND_ORIG ${JPEG_FOUND})
    unset(JPEG_FOUND CACHE)
    set(CMAKE_DISABLE_FIND_PACKAGE_JPEG TRUE)

    FetchContent_Declare(
        libyuv
        GIT_REPOSITORY "https://chromium.googlesource.com/libyuv/libyuv"
        BINARY_DIR "${LIBYUV_BINARY_DIR}"
        GIT_TAG "${AVIF_LIBYUV_TAG}"
        UPDATE_COMMAND ""
    )

    avif_fetchcontent_populate_cmake(libyuv)

    set(JPEG_FOUND ${JPEG_FOUND_ORIG})
    unset(JPEG_FOUND_ORIG CACHE)
    set(CMAKE_DISABLE_FIND_PACKAGE_JPEG FALSE)

    set_target_properties(yuv PROPERTIES AVIF_LOCAL ON POSITION_INDEPENDENT_CODE ON)

    add_library(yuv::yuv ALIAS yuv)

    set(LIBYUV_INCLUDE_DIR "${libyuv_SOURCE_DIR}/include")

    target_include_directories(yuv INTERFACE ${LIBYUV_INCLUDE_DIR})

    if(EXISTS "${AVIF_SOURCE_DIR}/ext/libyuv")
        set_target_properties(yuv PROPERTIES FOLDER "ext/libyuv")
    endif()

    message(CHECK_PASS "complete")
endif()

set(libyuv_FOUND ON)

set(LIBYUV_VERSION_H "${LIBYUV_INCLUDE_DIR}/libyuv/version.h")
if(EXISTS ${LIBYUV_VERSION_H})
    # message(STATUS "Reading: ${LIBYUV_VERSION_H}")
    file(READ ${LIBYUV_VERSION_H} LIBYUV_VERSION_H_CONTENTS)
    string(REGEX MATCH "#define LIBYUV_VERSION ([0-9]+)" _ ${LIBYUV_VERSION_H_CONTENTS})
    set(LIBYUV_VERSION ${CMAKE_MATCH_1})
    # message(STATUS "libyuv version detected: ${LIBYUV_VERSION}")
endif()
if(NOT LIBYUV_VERSION)
    message(STATUS "libyuv version detection failed.")
endif()