SDL_image: cmake: configure external subprojects in different directory

From 06d74f915bf6a4279e1804a6fc53737d383c5299 Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Wed, 2 Apr 2025 18:41:48 +0200
Subject: [PATCH] cmake: configure external subprojects in different directory

(This avoids in-tree builds of external projects when doing in-tree SDL builds)
---
 CMakeLists.txt | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0d75249d..73a0ff61 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -413,11 +413,11 @@ if(SDLIMAGE_ZLIB)
         # disable build of zlib example programs:
         set(ZLIB_BUILD_EXAMPLES OFF CACHE BOOL "zlib examples" FORCE)
         sdl_check_project_in_subfolder(external/zlib zlib SDLIMAGE_VENDORED)
-        add_subdirectory(external/zlib EXCLUDE_FROM_ALL)
+        add_subdirectory(external/zlib external/zlib-build EXCLUDE_FROM_ALL)
         register_license(zlib external/zlib/LICENSE)
-        set(ZLIB_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/external/zlib;${CMAKE_CURRENT_BINARY_DIR}/external/zlib")
+        set(ZLIB_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/external/zlib;${CMAKE_CURRENT_BINARY_DIR}/external/zlib-build")
         # ZLIB_INCLUDE_DIR variable is used by vendored libpng
-        set(ZLIB_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/external/zlib;${CMAKE_CURRENT_BINARY_DIR}/external/zlib" CACHE STRING "path of zlib, passed to libpng" FORCE)
+        set(ZLIB_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/external/zlib;${CMAKE_CURRENT_BINARY_DIR}/external/zlib-build" CACHE STRING "path of zlib, passed to libpng" FORCE)
         # ZLIB_LIBRARY variable is used by vendored libpng
         if(SDLIMAGE_ZLIB_SHARED)
             set(ZLIB_LIBRARY zlib)
@@ -447,7 +447,7 @@ if(SDLIMAGE_DAV1D)
     if(SDLIMAGE_DAV1D_VENDORED)
         message(STATUS "${PROJECT_NAME}: Using vendored dav1d")
         set(BUILD_SHARED_LIBS ${SDLIMAGE_DAV1D_SHARED})
-        add_subdirectory(external/dav1d EXCLUDE_FROM_ALL)
+        add_subdirectory(external/dav1d external/dav1d-build EXCLUDE_FROM_ALL)
         register_license(dav1d external/dav1d/COPYING)
         if(DAV1D_ASM AND (SDL_CPU_X64 OR SDL_CPU_X86))
             enable_language(ASM_NASM)
@@ -486,7 +486,7 @@ if(SDLIMAGE_AOM)
         elseif(SDL_CPU_ARM64)
           set(AOM_TARGET_CPU "aarch64")
         endif()
-        add_subdirectory(external/aom EXCLUDE_FROM_ALL)
+        add_subdirectory(external/aom external/aom-build EXCLUDE_FROM_ALL)
         register_license(aom external/aom/LICENSE)
         set(AOM_LIBRARY aom)
         if(SDLIMAGE_AOM_SHARED OR NOT SDLIMAGE_BUILD_SHARED_LIBS)
@@ -515,7 +515,7 @@ if(SDLIMAGE_AVIF)
         set(LIBAVIF_WITH_SHARPYUV_SDLIMAGE ${SDLIMAGE_WEBP} CACHE BOOL "Build libavif with sharpyuv support (re-use sharpyuv built by libwebp)" FORCE)
         set(BUILD_SHARED_LIBS ${SDLIMAGE_AVIF_SHARED})
         set(AOM_LIBRARIES "aom" CACHE STRING "aom libraries" FORCE)
-        add_subdirectory(external/libavif EXCLUDE_FROM_ALL)
+        add_subdirectory(external/libavif external/libavif-build EXCLUDE_FROM_ALL)
         register_license(avif external/libavif/LICENSE)
         if(SDLIMAGE_AVIF_SHARED OR NOT SDLIMAGE_BUILD_SHARED_LIBS)
             list(APPEND INSTALL_EXTRA_TARGETS avif)
@@ -597,7 +597,7 @@ if(SDLIMAGE_JPG)
             message(STATUS "${PROJECT_NAME}: Using vendored libjpeg")
             sdl_check_project_in_subfolder(external/jpeg libjpeg SDLIMAGE_VENDORED)
             set(BUILD_SHARED_LIBS ${SDLIMAGE_JPG_SHARED})
-            add_subdirectory(external/jpeg EXCLUDE_FROM_ALL)
+            add_subdirectory(external/jpeg external/jpeg-build EXCLUDE_FROM_ALL)
             register_license(jpeg external/jpeg/COPYING)
             if(SDLIMAGE_JPG_SHARED OR NOT SDLIMAGE_BUILD_SHARED_LIBS)
                 list(APPEND INSTALL_EXTRA_TARGETS jpeg)
@@ -673,7 +673,7 @@ if(SDLIMAGE_JXL)
         set(JPEGXL_FORCE_SYSTEM_HWY OFF CACHE BOOL "libjxl highway option" FORCE)
         sdl_check_project_in_subfolder(external/libjxl libjxl SDLIMAGE_VENDORED)
         set(BUILD_SHARED_LIBS ${SDLIMAGE_JXL_SHARED})
-        add_subdirectory(external/libjxl EXCLUDE_FROM_ALL)
+        add_subdirectory(external/libjxl external/libjxl-build EXCLUDE_FROM_ALL)
         register_license(jxl external/libjxl/LICENSE)
         if(SDLIMAGE_JXL_SHARED)
             set(jxl_lib jxl)
@@ -758,7 +758,7 @@ if(SDLIMAGE_PNG)
             set(PNG_TESTS OFF CACHE BOOL "Build PNG Tests" FORCE)
             set(SKIP_INSTALL_EXPORT TRUE)
             sdl_check_project_in_subfolder(external/libpng libpng SDLIMAGE_VENDORED)
-            add_subdirectory(external/libpng EXCLUDE_FROM_ALL)
+            add_subdirectory(external/libpng external/libpng-build EXCLUDE_FROM_ALL)
             register_license(zlib external/libpng/LICENSE)
             if(SDLIMAGE_PNG_SHARED)
                 set(PNG_LIBRARY png_shared)
@@ -885,7 +885,7 @@ if(SDLIMAGE_TIF)
             set(WEBP_LIBRARY "")
             sdl_check_project_in_subfolder(external/libtiff libtiff SDLIMAGE_VENDORED)
             set(BUILD_SHARED_LIBS ${SDLIMAGE_TIF_SHARED})
-            add_subdirectory(external/libtiff EXCLUDE_FROM_ALL)
+            add_subdirectory(external/libtiff external/libtiff-build EXCLUDE_FROM_ALL)
             register_license(tiff external/libtiff/LICENSE.md)
             add_library(TIFF::TIFF ALIAS tiff)
             set(SDLIMAGE_TIF_TARGET "TIFF::tiff")
@@ -952,7 +952,7 @@ if(SDLIMAGE_WEBP)
         message(STATUS "${PROJECT_NAME}: Using vendored libwebp")
         sdl_check_project_in_subfolder(external/libwebp libwebp SDLIMAGE_VENDORED)
         set(BUILD_SHARED_LIBS ${SDLIMAGE_WEBP_SHARED})
-        add_subdirectory(external/libwebp EXCLUDE_FROM_ALL)
+        add_subdirectory(external/libwebp external/libwebp-build EXCLUDE_FROM_ALL)
         register_license(webp external/libwebp/COPYING)
         target_include_directories(${sdl3_image_target_name} PRIVATE external/libwebp/src)
         add_library(WebP::webp ALIAS webp)