Only find_package some dependencies if not set locally. (#1382)
Locally set libyuv, libsharpyuv, zlib, PNG, JPEG could be overriden by find_package
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e27e198..2d6c258 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -84,6 +84,10 @@
set(AVIF_LIBRARY_SUFFIX "${CMAKE_STATIC_LIBRARY_SUFFIX}")
endif()
+set(AVIF_PLATFORM_DEFINITIONS)
+set(AVIF_PLATFORM_INCLUDES)
+set(AVIF_PLATFORM_LIBRARIES)
+
# ---------------------------------------------------------------------------------------
# This insanity is for people embedding libavif or making fully static or Windows builds.
# Any proper unix environment should ignore these entire following blocks.
@@ -144,10 +148,40 @@
endif()
if(BUILD_SHARED_LIBS)
# Fix "libyuv.so: undefined reference to `jpeg_read_raw_data'" errors.
- find_package(JPEG REQUIRED)
+ if(NOT AVIF_LOCAL_JPEG)
+ find_package(JPEG REQUIRED)
+ endif()
set(LIBYUV_LIBRARY ${LIBYUV_LIBRARY} ${JPEG_LIBRARY})
endif()
+ set(libyuv_FOUND TRUE)
+ message(STATUS "libavif: local libyuv found; libyuv-based fast paths enabled.")
+else(AVIF_LOCAL_LIBYUV)
+ find_package(libyuv QUIET) # not required
+ if(libyuv_FOUND)
+ # libyuv 1755 exposed all of the I*Matrix() functions, which libavif relies on.
+ # libyuv 1774 exposed ScalePlane_12 function, which libavif can use for some additional optimizations.
+ # libyuv 1813 added the I*ToARGBMatrixFilter() functions, which libavif can use with the bilinear filter.
+ if(NOT LIBYUV_VERSION)
+ message(STATUS "libavif: libyuv found, but version unknown; libyuv-based fast paths disabled.")
+ unset(libyuv_FOUND)
+ elseif(LIBYUV_VERSION LESS 1755)
+ message(STATUS "libavif: libyuv (${LIBYUV_VERSION}) found, but is too old; libyuv-based fast paths disabled.")
+ unset(libyuv_FOUND)
+ else()
+ message(STATUS "libavif: libyuv (${LIBYUV_VERSION}) found; libyuv-based fast paths enabled.")
+ if(LIBYUV_VERSION LESS 1813)
+ message(STATUS "libavif: some libyuv optimizations require at least version 1813 to work.")
+ endif()
+ endif()
+ else()
+ message(STATUS "libavif: libyuv not found; libyuv-based fast paths disabled.")
+ endif()
endif()
+if(libyuv_FOUND)
+ set(AVIF_PLATFORM_DEFINITIONS ${AVIF_PLATFORM_DEFINITIONS} -DAVIF_LIBYUV_ENABLED=1)
+ set(AVIF_PLATFORM_INCLUDES ${AVIF_PLATFORM_INCLUDES} ${LIBYUV_INCLUDE_DIR})
+ set(AVIF_PLATFORM_LIBRARIES ${AVIF_PLATFORM_LIBRARIES} ${LIBYUV_LIBRARY})
+endif(libyuv_FOUND)
option(AVIF_LOCAL_LIBSHARPYUV "Build libsharpyuv by providing your own copy inside the ext subdir." OFF)
if(AVIF_LOCAL_LIBSHARPYUV)
set(LIB_FILENAME "${CMAKE_CURRENT_SOURCE_DIR}/ext/libwebp/build/libsharpyuv${AVIF_LIBRARY_SUFFIX}")
@@ -162,7 +196,18 @@
set(LIBSHARPYUV_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ext/libwebp" PARENT_SCOPE)
set(LIBSHARPYUV_LIBRARY ${LIB_FILENAME} PARENT_SCOPE)
endif()
+ set(libsharpyuv_FOUND TRUE)
+else(AVIF_LOCAL_LIBSHARPYUV)
+ find_package(libsharpyuv QUIET) # not required
endif()
+if(libsharpyuv_FOUND)
+ message(STATUS "libavif: libsharpyuv found; sharp rgb to yuv conversion enabled.")
+ set(AVIF_PLATFORM_DEFINITIONS ${AVIF_PLATFORM_DEFINITIONS} -DAVIF_LIBSHARPYUV_ENABLED=1)
+ set(AVIF_PLATFORM_INCLUDES ${AVIF_PLATFORM_INCLUDES} ${LIBSHARPYUV_INCLUDE_DIR})
+ set(AVIF_PLATFORM_LIBRARIES ${AVIF_PLATFORM_LIBRARIES} ${LIBSHARPYUV_LIBRARY})
+else(libsharpyuv_FOUND)
+ message(STATUS "libavif: libsharpyuv not found")
+endif(libsharpyuv_FOUND)
# ---------------------------------------------------------------------------------------
# Enable all warnings
@@ -243,47 +288,12 @@
# /usr/local/include.
set(CMAKE_FIND_FRAMEWORK LAST)
-set(AVIF_PLATFORM_DEFINITIONS)
-set(AVIF_PLATFORM_INCLUDES)
-set(AVIF_PLATFORM_LIBRARIES)
if(UNIX)
# Find out if we have threading available
set(CMAKE_THREAD_PREFER_PTHREADS ON)
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads)
- set(AVIF_PLATFORM_LIBRARIES m Threads::Threads)
-endif()
-
-find_package(libyuv QUIET) # not required
-if(libyuv_FOUND)
- # libyuv 1755 exposed all of the I*Matrix() functions, which libavif relies on.
- # libyuv 1774 exposed ScalePlane_12 function, which libavif can use for some additional optimizations.
- # libyuv 1813 added the I*ToARGBMatrixFilter() functions, which libavif can use with the bilinear filter.
- if(NOT LIBYUV_VERSION)
- message(STATUS "libavif: libyuv found, but version unknown; libyuv-based fast paths disabled.")
- elseif(LIBYUV_VERSION LESS 1755)
- message(STATUS "libavif: libyuv (${LIBYUV_VERSION}) found, but is too old; libyuv-based fast paths disabled.")
- else()
- message(STATUS "libavif: libyuv (${LIBYUV_VERSION}) found; libyuv-based fast paths enabled.")
- if(LIBYUV_VERSION LESS 1813)
- message(STATUS "libavif: some libyuv optimizations require at least version 1813 to work.")
- endif()
- set(AVIF_PLATFORM_DEFINITIONS ${AVIF_PLATFORM_DEFINITIONS} -DAVIF_LIBYUV_ENABLED=1)
- set(AVIF_PLATFORM_INCLUDES ${AVIF_PLATFORM_INCLUDES} ${LIBYUV_INCLUDE_DIR})
- set(AVIF_PLATFORM_LIBRARIES ${AVIF_PLATFORM_LIBRARIES} ${LIBYUV_LIBRARY})
- endif()
-else()
- message(STATUS "libavif: libyuv not found; libyuv-based fast paths disabled.")
-endif()
-
-find_package(libsharpyuv QUIET) # not required
-if(libsharpyuv_FOUND)
- message(STATUS "libavif: libsharpyuv found; sharp rgb to yuv conversion enabled.")
- set(AVIF_PLATFORM_DEFINITIONS ${AVIF_PLATFORM_DEFINITIONS} -DAVIF_LIBSHARPYUV_ENABLED=1)
- set(AVIF_PLATFORM_INCLUDES ${AVIF_PLATFORM_INCLUDES} ${LIBSHARPYUV_INCLUDE_DIR})
- set(AVIF_PLATFORM_LIBRARIES ${AVIF_PLATFORM_LIBRARIES} ${LIBSHARPYUV_LIBRARY})
-else()
- message(STATUS "libavif: libsharpyuv not found")
+ set(AVIF_PLATFORM_LIBRARIES ${AVIF_PLATFORM_LIBRARIES} m Threads::Threads)
endif()
set(AVIF_CODEC_DEFINITIONS)
@@ -567,9 +577,13 @@
)
if(AVIF_BUILD_APPS OR (AVIF_BUILD_TESTS AND AVIF_ENABLE_GTEST))
- find_package(ZLIB REQUIRED)
- find_package(PNG 1.6.32 REQUIRED) # 1.6.32 or above for png_get_eXIf_1()/png_set_eXIf_1() and iTXt (for XMP).
- find_package(JPEG REQUIRED)
+ if(NOT AVIF_LOCAL_ZLIBPNG)
+ find_package(ZLIB REQUIRED)
+ find_package(PNG 1.6.32 REQUIRED) # 1.6.32 or above for png_get_eXIf_1()/png_set_eXIf_1() and iTXt (for XMP).
+ endif()
+ if(NOT AVIF_LOCAL_JPEG)
+ find_package(JPEG REQUIRED)
+ endif()
add_library(
avif_apps STATIC apps/shared/avifexif.c apps/shared/avifjpeg.c apps/shared/iccjpeg.c apps/shared/avifpng.c