Unify installing packages in the CI (#3086)

Also:
- test more OSes with installed rav1e and svt-av1
- clean rav1e needed libraries in CMake
diff --git a/.github/actions/setup-linux/action.yml b/.github/actions/setup-linux/action.yml
index 2b9f119..626aadf 100644
--- a/.github/actions/setup-linux/action.yml
+++ b/.github/actions/setup-linux/action.yml
@@ -6,7 +6,7 @@
     default: "OFF"
   codec-dav1d:
     description: "Can take the values: OFF, LOCAL, SYSTEM"
-    edfault: "OFF"
+    default: "OFF"
   codec-rav1e:
     description: "Can take the values: OFF, LOCAL, SYSTEM"
     default: "OFF"
@@ -22,6 +22,9 @@
   gtest:
     description: "Can take the values: OFF, LOCAL, SYSTEM"
     default: "OFF"
+  libjpeg-turbo:
+    description: "Can take the values: OFF, LOCAL, SYSTEM"
+    default: "OFF"
   libxml2:
     description: "Can take the values: OFF, LOCAL, SYSTEM"
     default: "OFF"
@@ -31,48 +34,64 @@
   oldest-cmake:
     description: "Can take the values: true, false"
     default: "false"
+  zlibpng:
+    description: "Can take the values: OFF, LOCAL, SYSTEM"
+    default: "OFF"
 outputs:
   ext-cache-hit:
     value: ${{ steps.cache.outputs.ext-cache-hit }}
 runs:
   using: "composite"
   steps:
-    - name: Install non-library dependencies
-      run: |
-        sudo apt update -y
-        sudo apt install -y imagemagick libjpeg-turbo8-dev libpng-dev
-      shell: bash
     - name: Install libaom library
       if: ${{ inputs.codec-aom == 'SYSTEM' }}
-      run: sudo apt install -y libaom-dev
-      shell: bash
-    - name: Install libdav1d library
-      if: ${{ inputs.codec-dav1d == 'SYSTEM' }}
-      run: sudo apt install -y libdav1d-dev
-      shell: bash
-    - name: Install rav1e library
-      if: ${{ inputs.codec-rav1e == 'SYSTEM' }}
-      run: sudo apt install -y librav1e-dev
-      shell: bash
-    - name: Install SVT-AV1 library
-      if: ${{ inputs.codec-rav1e == 'SYSTEM' }}
-      run: sudo apt install -y libsvtav1enc-dev
-      shell: bash
-    - name: Install libxml2 library
-      if: ${{ inputs.libxml2 == 'SYSTEM' }}
-      run: sudo apt install -y libxml2
-      shell: bash
-    - name: Install libyuv library
-      if: ${{ inputs.libyuv == 'SYSTEM' }}
-      run: sudo apt install -y libyuv-dev
+      run: echo "AVIF_UNIX_LIBRARIES=libaom-dev" >> "$GITHUB_ENV"
       shell: bash
     - name: Set up meson
       if: ${{ inputs.codec-dav1d == 'LOCAL' }}
-      run: sudo apt install -y meson
+      run: echo "AVIF_UNIX_LIBRARIES=${{ env.AVIF_UNIX_LIBRARIES }} meson" >> "$GITHUB_ENV"
+      shell: bash
+    - name: Install libdav1d library
+      if: ${{ inputs.codec-dav1d == 'SYSTEM' }}
+      run: echo "AVIF_UNIX_LIBRARIES=${{ env.AVIF_UNIX_LIBRARIES }} libdav1d-dev" >> "$GITHUB_ENV"
+      shell: bash
+    - name: Install rav1e library
+      if: ${{ inputs.codec-rav1e == 'SYSTEM' }}
+      run: echo "AVIF_UNIX_LIBRARIES=${{ env.AVIF_UNIX_LIBRARIES }} librav1e-dev" >> "$GITHUB_ENV"
+      shell: bash
+    - name: Install SVT-AV1 library
+      if: ${{ inputs.codec-svt == 'SYSTEM' }}
+      run: echo "AVIF_UNIX_LIBRARIES=${{ env.AVIF_UNIX_LIBRARIES }} libsvtav1enc-dev" >> "$GITHUB_ENV"
+      shell: bash
+    - name: Set up tests
+      if: ${{ inputs.gtest != 'OFF' }}
+      run: echo "AVIF_UNIX_LIBRARIES=${{ env.AVIF_UNIX_LIBRARIES }} imagemagick" >> "$GITHUB_ENV"
       shell: bash
     - name: Set up gtest
       if: ${{ inputs.gtest == 'SYSTEM' }}
-      run: sudo apt install -y libgtest-dev
+      run: echo "AVIF_UNIX_LIBRARIES=${{ env.AVIF_UNIX_LIBRARIES }} libgtest-dev" >> "$GITHUB_ENV"
+      shell: bash
+    - name: Install libjpeg-turbo library
+      if: ${{ inputs.libjpeg-turbo == 'SYSTEM' }}
+      run: echo "AVIF_UNIX_LIBRARIES=${{ env.AVIF_UNIX_LIBRARIES }} libjpeg-turbo8-dev" >> "$GITHUB_ENV"
+      shell: bash
+    - name: Install libxml2 library
+      if: ${{ inputs.libxml2 == 'SYSTEM' }}
+      run: echo "AVIF_UNIX_LIBRARIES=${{ env.AVIF_UNIX_LIBRARIES }} libxml2" >> "$GITHUB_ENV"
+      shell: bash
+    - name: Install libyuv library
+      if: ${{ inputs.libyuv == 'SYSTEM' }}
+      run: echo "AVIF_UNIX_LIBRARIES=${{ env.AVIF_UNIX_LIBRARIES }} libyuv-dev" >> "$GITHUB_ENV"
+      shell: bash
+    - name: Install zlibpng library
+      if: ${{ inputs.zlibpng == 'SYSTEM' }}
+      run: echo "AVIF_UNIX_LIBRARIES=${{ env.AVIF_UNIX_LIBRARIES }} libpng-dev" >> "$GITHUB_ENV"
+      shell: bash
+
+    - name: Install libraries
+      run: |
+        sudo apt update -y
+        sudo apt install -y ${{ env.AVIF_UNIX_LIBRARIES }}
       shell: bash
 
     - uses: ./.github/actions/cache
diff --git a/.github/actions/setup-macos/action.yml b/.github/actions/setup-macos/action.yml
index 03ce0d8..d128fde 100644
--- a/.github/actions/setup-macos/action.yml
+++ b/.github/actions/setup-macos/action.yml
@@ -13,48 +13,76 @@
   codec-svt:
     description: "Can take the values: OFF, LOCAL, SYSTEM"
     default: "OFF"
-  gtest:
-    description: "Can take the values: OFF, LOCAL, SYSTEM"
-    default: "OFF"
   extra-cache-key:
     description: "Extra cache key to use in the cache name. Useful when several caches are used in one workflow."
     default: ""
+  gtest:
+    description: "Can take the values: OFF, LOCAL, SYSTEM"
+    default: "OFF"
+  libjpeg-turbo:
+    description: "Can take the values: OFF, LOCAL, SYSTEM"
+    default: "OFF"
+  libxml2:
+    description: "Can take the values: OFF, LOCAL, SYSTEM"
+    default: "OFF"
+  zlibpng:
+    description: "Can take the values: OFF, LOCAL, SYSTEM"
+    default: "OFF"
 outputs:
   ext-cache-hit:
     value: ${{ steps.cache.outputs.ext-cache-hit }}
 runs:
   using: "composite"
   steps:
-    - name: Force update all brew python
-      run: |
-        brew update
-        # GHA messes with links https://github.com/actions/setup-python/issues/577 so we just force replace their installs' with brew's
-        for pkg in $(brew list --formula | grep -E '^python(@[0-9]+\.[0-9]+)?$'); do
-            brew upgrade --force --overwrite "$pkg"
-        done
-        brew cleanup
-      shell: bash
-    - name: Install non-library test dependencies
-      # imagemagick is used in sh tests (not gtest tests) but we assume that no tests are run by the CI
-      # if gtest is off
-      if: ${{ inputs.gtest != 'OFF' }}
-      run: brew install imagemagick
-      shell: bash
     - name: Install AOM library
       if: ${{ inputs.codec-aom == 'SYSTEM' }}
-      run: brew install aom
+      run: echo "AVIF_MAC_LIBRARIES=aom" >> "$GITHUB_ENV"
       shell: bash
     - name: Install dav1d library
       if: ${{ inputs.codec-dav1d == 'SYSTEM' }}
-      run: brew install dav1d
+      run: echo "AVIF_MAC_LIBRARIES=${{ env.AVIF_MAC_LIBRARIES }} dav1d" >> "$GITHUB_ENV"
+      shell: bash
+    - name: Install rav1e library
+      if: ${{ inputs.codec-rav1e == 'SYSTEM' }}
+      run: echo "AVIF_MAC_LIBRARIES=${{ env.AVIF_MAC_LIBRARIES }} rav1e" >> "$GITHUB_ENV"
+      shell: bash
+    - name: Install SVT-AV1 library
+      if: ${{ inputs.codec-svt == 'SYSTEM' }}
+      run: echo "AVIF_MAC_LIBRARIES=${{ env.AVIF_MAC_LIBRARIES }} svt-av1" >> "$GITHUB_ENV"
       shell: bash
     - name: Set up meson
       if: ${{ inputs.codec-dav1d == 'LOCAL' }}
-      run: brew install meson
+      run: echo "AVIF_MAC_LIBRARIES=${{ env.AVIF_MAC_LIBRARIES }} meson" >> "$GITHUB_ENV"
       shell: bash
     - name: Set up gtest
+      # imagemagick is used in sh tests (not gtest tests) but we assume that no tests are run by the CI
+      # if gtest is off
+      if: ${{ inputs.gtest != 'OFF' }}
+      run: echo "AVIF_MAC_LIBRARIES=${{ env.AVIF_MAC_LIBRARIES }} imagemagick" >> "$GITHUB_ENV"
+      shell: bash
+    - name: Set up tests
       if: ${{ inputs.gtest == 'SYSTEM' }}
-      run: brew install googletest
+      run: echo "AVIF_MAC_LIBRARIES=${{ env.AVIF_MAC_LIBRARIES }} googletest" >> "$GITHUB_ENV"
+      shell: bash
+    - name: Set up libjpeg-turbo
+      if: ${{ inputs.libjpeg-turbo == 'SYSTEM' }}
+      run: echo "AVIF_MAC_LIBRARIES=${{ env.AVIF_MAC_LIBRARIES }} libjpeg-turbo" >> "$GITHUB_ENV"
+      shell: bash
+    - name: Set up libxml2
+      if: ${{ inputs.libxml2 == 'SYSTEM' }}
+      run: echo "AVIF_MAC_LIBRARIES=${{ env.AVIF_MAC_LIBRARIES }} libxml2" >> "$GITHUB_ENV"
+      shell: bash
+    - name: Set up zlibpng
+      if: ${{ inputs.zlibpng == 'SYSTEM' }}
+      run: echo "AVIF_MAC_LIBRARIES=${{ env.AVIF_MAC_LIBRARIES }} libpng" >> "$GITHUB_ENV"
+      shell: bash
+
+    - name: Install libraries
+      if: env.AVIF_MAC_LIBRARIES != ''
+      run: |
+        brew update
+        brew cleanup
+        brew install ${{ env.AVIF_MAC_LIBRARIES }}
       shell: bash
 
     - uses: ./.github/actions/cache
diff --git a/.github/actions/setup-windows/action.yml b/.github/actions/setup-windows/action.yml
index f8d2bfb..32897c9 100644
--- a/.github/actions/setup-windows/action.yml
+++ b/.github/actions/setup-windows/action.yml
@@ -45,7 +45,7 @@
 
     - name: Install libaom library
       if: ${{ inputs.codec-aom == 'SYSTEM' }}
-      run: echo "AVIF_WIN_LIBRARIES=${{ env.AVIF_WIN_LIBRARIES }} aom" >> "$GITHUB_ENV"
+      run: echo "AVIF_WIN_LIBRARIES=aom" >> "$GITHUB_ENV"
       shell: bash
     - name: Install libdav1d library
       if: ${{ inputs.codec-dav1d == 'SYSTEM' }}
diff --git a/.github/workflows/ci-c-warnings.yml b/.github/workflows/ci-c-warnings.yml
index 04f794a..0c1c9b3 100644
--- a/.github/workflows/ci-c-warnings.yml
+++ b/.github/workflows/ci-c-warnings.yml
@@ -30,13 +30,16 @@
         with:
           codec-aom: "SYSTEM"
           codec-dav1d: "SYSTEM"
+          libjpeg-turbo: "SYSTEM"
           libyuv: "SYSTEM"
+          zlibpng: "SYSTEM"
       - uses: ./.github/actions/setup-windows
         id: windows_setup
         if: runner.os == 'Windows'
         with:
           codec-aom: "SYSTEM"
           codec-dav1d: "SYSTEM"
+          libjpeg-turbo: "SYSTEM"
           libyuv: "SYSTEM"
           zlibpng: "SYSTEM"
 
diff --git a/.github/workflows/ci-disable-gtest.yml b/.github/workflows/ci-disable-gtest.yml
index 0b98005..ab1a636 100644
--- a/.github/workflows/ci-disable-gtest.yml
+++ b/.github/workflows/ci-disable-gtest.yml
@@ -44,7 +44,9 @@
           codec-rav1e: "LOCAL"
           codec-svt: "LOCAL"
           gcc-version: ${{ matrix.gcc }}
+          libjpeg-turbo: "SYSTEM"
           libyuv: "LOCAL"
+          zlibpng: "SYSTEM"
 
       - name: Prepare libavif (cmake)
         run: >
diff --git a/.github/workflows/ci-fuzztest.yml b/.github/workflows/ci-fuzztest.yml
index 369644f..ffc1570 100644
--- a/.github/workflows/ci-fuzztest.yml
+++ b/.github/workflows/ci-fuzztest.yml
@@ -33,8 +33,10 @@
         with:
           codec-aom: "LOCAL"
           codec-dav1d: "LOCAL"
+          libjpeg-turbo: "SYSTEM"
           libxml2: "LOCAL"
           libyuv: ${{ matrix.libyuv }}
+          zlibpng: "SYSTEM"
 
       - name: Prepare libavif (cmake)
         run: >
diff --git a/.github/workflows/ci-linux-coverage.yml b/.github/workflows/ci-linux-coverage.yml
index 08aefc0..31d6293 100644
--- a/.github/workflows/ci-linux-coverage.yml
+++ b/.github/workflows/ci-linux-coverage.yml
@@ -26,7 +26,9 @@
         with:
           codec-aom: "LOCAL"
           codec-dav1d: "LOCAL"
+          libjpeg-turbo: "SYSTEM"
           libxml2: "LOCAL"
+          zlibpng: "SYSTEM"
 
       - name: Install LLVM
         run:  sudo apt install -y llvm
diff --git a/.github/workflows/ci-linux-golden-tests.yml b/.github/workflows/ci-linux-golden-tests.yml
index 8607538..8a40aa6 100644
--- a/.github/workflows/ci-linux-golden-tests.yml
+++ b/.github/workflows/ci-linux-golden-tests.yml
@@ -33,8 +33,10 @@
           codec-aom: "LOCAL"
           codec-dav1d: "LOCAL"
           gcc-version: ${{ matrix.gcc }}
+          libjpeg-turbo: "SYSTEM"
           libxml2: "LOCAL"
           libyuv: "LOCAL"
+          zlibpng: "SYSTEM"
       - name: Build mp4box
         if: steps.setup.outputs.ext-cache-hit != 'true'
         working-directory: ./ext
diff --git a/.github/workflows/ci-unix-shared-installed.yml b/.github/workflows/ci-unix-shared-installed.yml
index d309091..d5e04d0 100644
--- a/.github/workflows/ci-unix-shared-installed.yml
+++ b/.github/workflows/ci-unix-shared-installed.yml
@@ -40,16 +40,24 @@
         with:
           codec-aom: "SYSTEM"
           codec-dav1d: "SYSTEM"
+          codec-rav1e: "SYSTEM"
+          codec-svt: "SYSTEM"
           gcc-version: ${{ matrix.gcc }}
           gtest: "SYSTEM"
+          libjpeg-turbo: "SYSTEM"
           libyuv: "SYSTEM"
           oldest-cmake: ${{ matrix.oldest-cmake }}
+          zlibpng: "SYSTEM"
       - uses: ./.github/actions/setup-macos
         if: runner.os == 'macOS'
         with:
           codec-aom: "SYSTEM"
           codec-dav1d: "SYSTEM"
+          codec-rav1e: "SYSTEM"
+          codec-svt: "SYSTEM"
           gtest: "SYSTEM"
+          libjpeg-turbo: "SYSTEM"
+          zlibpng: "SYSTEM"
       - name: Disable libyuv on macOS
         # libyuv is not available with brew.
         if: runner.os == 'macOS'
@@ -61,7 +69,8 @@
           -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON
           -DAVIF_CODEC_AOM=SYSTEM
           -DAVIF_CODEC_AOM_DECODE=OFF -DAVIF_CODEC_AOM_ENCODE=ON
-          -DAVIF_CODEC_DAV1D=SYSTEM
+          -DAVIF_CODEC_DAV1D=SYSTEM -DAVIF_CODEC_RAV1E=SYSTEM
+          -DAVIF_CODEC_SVT=SYSTEM
           -DAVIF_BUILD_EXAMPLES=ON -DAVIF_BUILD_APPS=ON
           -DAVIF_BUILD_TESTS=ON -DAVIF_GTEST=SYSTEM
           -DAVIF_BUILD_GDK_PIXBUF=ON -DCMAKE_INSTALL_PREFIX=./build/install
diff --git a/.github/workflows/ci-unix-shared-local.yml b/.github/workflows/ci-unix-shared-local.yml
index 9121a5a..7361440 100644
--- a/.github/workflows/ci-unix-shared-local.yml
+++ b/.github/workflows/ci-unix-shared-local.yml
@@ -36,13 +36,17 @@
           codec-aom: "LOCAL"
           codec-dav1d: "LOCAL"
           gcc-version: ${{ matrix.gcc }}
+          libjpeg-turbo: "SYSTEM"
           libxml2: "LOCAL"
           libyuv: ${{ matrix.libyuv }}
+          zlibpng: "SYSTEM"
       - uses: ./.github/actions/setup-macos
         if: runner.os == 'macOS'
         with:
           codec-aom: "LOCAL"
           codec-dav1d: "LOCAL"
+          libjpeg-turbo: "SYSTEM"
+          zlibpng: "SYSTEM"
 
       - name: Prepare libavif (cmake)
         run: >
diff --git a/.github/workflows/ci-unix-static-av2.yml b/.github/workflows/ci-unix-static-av2.yml
index 7f676ca..c4e37ad 100644
--- a/.github/workflows/ci-unix-static-av2.yml
+++ b/.github/workflows/ci-unix-static-av2.yml
@@ -38,7 +38,9 @@
           codec-svt: ${{ matrix.also-enable-av1-codecs }}
           extra-cache-key: ${{ matrix.also-enable-av1-codecs }}
           gcc-version: ${{ matrix.gcc }}
+          libjpeg-turbo: "SYSTEM"
           libyuv: "LOCAL"
+          zlibpng: "SYSTEM"
 
       - name: Prepare libavif (cmake)
         # CMake 4.0.0 removed compatibility with CMake < 3.5. Add
diff --git a/.github/workflows/ci-unix-static-sanitized.yml b/.github/workflows/ci-unix-static-sanitized.yml
index 4fdb930..f38ec95 100644
--- a/.github/workflows/ci-unix-static-sanitized.yml
+++ b/.github/workflows/ci-unix-static-sanitized.yml
@@ -34,8 +34,10 @@
         with:
           codec-aom: "LOCAL"
           codec-dav1d: "LOCAL"
-          libyuv: "LOCAL"
           extra-cache-key: ${{ matrix.sanitizer }}
+          libjpeg-turbo: "SYSTEM"
+          libyuv: "LOCAL"
+          zlibpng: "SYSTEM"
       - uses: ./.github/actions/setup-macos
         if: runner.os == 'macOS'
         id: setup_macos
@@ -43,6 +45,9 @@
           codec-aom: "LOCAL"
           codec-dav1d: "LOCAL"
           extra-cache-key: ${{ matrix.sanitizer }}
+          libjpeg-turbo: "SYSTEM"
+          libyuv: "LOCAL"
+          zlibpng: "SYSTEM"
       - id: cache-hit
         run: echo "hit=${{ (runner.os == 'Linux' && steps.setup_linux.outputs.ext-cache-hit == 'true') || (runner.os == 'macOS' && steps.setup_macos.outputs.ext-cache-hit == 'true') }}" >> "$GITHUB_OUTPUT"
 
diff --git a/.github/workflows/ci-unix-static.yml b/.github/workflows/ci-unix-static.yml
index 6b3a4c7..0722b92 100644
--- a/.github/workflows/ci-unix-static.yml
+++ b/.github/workflows/ci-unix-static.yml
@@ -40,8 +40,10 @@
           codec-rav1e: "LOCAL"
           codec-svt: "LOCAL"
           gcc-version: ${{ matrix.gcc }}
+          libjpeg-turbo: "SYSTEM"
           libxml2: "LOCAL"
           libyuv: "LOCAL"
+          zlibpng: "SYSTEM"
       - uses: ./.github/actions/setup-macos
         if: runner.os == 'macOS'
         with:
@@ -49,6 +51,8 @@
           codec-dav1d: "LOCAL"
           codec-rav1e: "LOCAL"
           extra-cache-key: ${{ matrix.build-type }}
+          libjpeg-turbo: "SYSTEM"
+          zlibpng: "SYSTEM"
 
       - name: Prepare libavif (cmake)
         run: >
diff --git a/.github/workflows/ci-windows-installed.yml b/.github/workflows/ci-windows-installed.yml
index d83bdb6..955e795 100644
--- a/.github/workflows/ci-windows-installed.yml
+++ b/.github/workflows/ci-windows-installed.yml
@@ -30,6 +30,7 @@
           codec-aom: "SYSTEM"
           codec-dav1d: "SYSTEM"
           codec-rav1e: "SYSTEM"
+          codec-svt: "SYSTEM"
           extra-cache-key: ${{ matrix.compiler }}
           libjpeg-turbo: "SYSTEM"
           libxml2: "SYSTEM"
@@ -51,7 +52,7 @@
           cmake ${{ steps.setup.outputs.vcpkg-cmake-config }} -G Ninja -S . -B build
           -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF
           -DAVIF_CODEC_AOM=SYSTEM -DAVIF_CODEC_DAV1D=SYSTEM
-          -DAVIF_CODEC_RAV1E=SYSTEM
+          -DAVIF_CODEC_RAV1E=SYSTEM -DAVIF_CODEC_SVT=SYSTEM
           -DAVIF_JPEG=SYSTEM -DAVIF_LIBXML2=SYSTEM
           -DAVIF_LIBYUV=SYSTEM -DAVIF_ZLIBPNG=SYSTEM
           -DAVIF_BUILD_EXAMPLES=ON -DAVIF_BUILD_APPS=ON
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ceff4a7..4a07fc3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -483,16 +483,6 @@
     target_compile_definitions(avif_obj PRIVATE -DAVIF_CODEC_RAV1E=1)
     target_sources(avif_obj PRIVATE src/codec_rav1e.c)
 
-    # Unfortunately, rav1e requires a few more libraries
-    # first check that RAV1E_LIBRARIES hasn't been populated by the LocalRav1e module
-    if(NOT RAV1E_LIBRARIES)
-        if(WIN32)
-            target_link_libraries(rav1e::rav1e INTERFACE ntdll.lib userenv.lib ws2_32.lib bcrypt.lib)
-        elseif(UNIX AND NOT APPLE)
-            target_link_libraries(rav1e::rav1e INTERFACE ${CMAKE_DL_LIBS}) # for backtrace
-        endif()
-    endif()
-
     avif_target_link_library(rav1e::rav1e)
 
     message(STATUS "libavif: Codec enabled: rav1e (encode)")
diff --git a/cmake/Modules/Findrav1e.cmake b/cmake/Modules/Findrav1e.cmake
index f844624..d855754 100644
--- a/cmake/Modules/Findrav1e.cmake
+++ b/cmake/Modules/Findrav1e.cmake
@@ -61,9 +61,8 @@
             rav1e::rav1e PROPERTIES IMPORTED_LOCATION "${RAV1E_LIBRARY}" IMPORTED_IMPLIB "${RAV1E_LIBRARY}" IMPORTED_SONAME rav1e
         )
         target_include_directories(rav1e::rav1e INTERFACE ${RAV1E_INCLUDE_DIR})
-        # The following is copied from the main CMakeLists.txt.
         if(WIN32)
-            target_link_libraries(rav1e::rav1e INTERFACE ntdll.lib userenv.lib ws2_32.lib bcrypt.lib)
+            target_link_libraries(rav1e::rav1e INTERFACE ntdll userenv ws2_32 bcrypt)
         elseif(UNIX AND NOT APPLE)
             target_link_libraries(rav1e::rav1e INTERFACE ${CMAKE_DL_LIBS}) # for backtrace
         endif()
diff --git a/cmake/Modules/LocalRav1e.cmake b/cmake/Modules/LocalRav1e.cmake
index 641b36f..f219262 100644
--- a/cmake/Modules/LocalRav1e.cmake
+++ b/cmake/Modules/LocalRav1e.cmake
@@ -105,6 +105,9 @@
     add_library(rav1e::rav1e STATIC IMPORTED)
     add_dependencies(rav1e::rav1e rav1e)
     target_link_libraries(rav1e::rav1e INTERFACE "${Rust_CARGO_TARGET_LINK_NATIVE_LIBS}")
+    if(UNIX AND NOT APPLE)
+        target_link_libraries(rav1e::rav1e INTERFACE ${CMAKE_DL_LIBS}) # for backtrace
+    endif()
     target_link_options(rav1e::rav1e INTERFACE "${Rust_CARGO_TARGET_LINK_OPTIONS}")
     set_target_properties(rav1e::rav1e PROPERTIES IMPORTED_LOCATION "${RAV1E_LIB_FILENAME}" AVIF_LOCAL ON FOLDER "ext/rav1e")
     target_include_directories(rav1e::rav1e INTERFACE "${RAV1E_INCLUDE_DIR}")