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