CMakeLists.txt work around zlib/CMakeLists.txt bug
Put an include_directories() call with the source directory of ext/zlib
before add_subdirectory(ext/zlib) to work around a zlib/CMakeLists.txt
bug fixed by https://github.com/madler/zlib/pull/818.
The parent project's include directories at the time of an
add_subdirectory() call are used by the child project, so the order of
include_directories() and add_subdirectory() is important.
diff --git a/CMakeLists.txt b/CMakeLists.txt
index d98a43a..3d20d24 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -89,12 +89,19 @@
# Any proper unix environment should ignore these entire following blocks.
option(AVIF_LOCAL_ZLIBPNG "Build zlib and libpng by providing your own copy inside the ext subdir." OFF)
if(AVIF_LOCAL_ZLIBPNG)
- add_subdirectory(ext/zlib)
# Put the value of ZLIB_INCLUDE_DIR in the cache. This works around cmake behavior that has been updated by
# cmake policy CMP0102 in cmake 3.17. Remove the CACHE workaround when we require cmake 3.17 or later. See
# https://gitlab.kitware.com/cmake/cmake/-/issues/21343.
set(ZLIB_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ext/zlib" CACHE PATH "zlib include dir")
- include_directories(${ZLIB_INCLUDE_DIR} "${CMAKE_CURRENT_BINARY_DIR}/ext/zlib")
+ # This include_directories() call must be before add_subdirectory(ext/zlib) to work around the
+ # zlib/CMakeLists.txt bug fixed by https://github.com/madler/zlib/pull/818.
+ include_directories(${ZLIB_INCLUDE_DIR})
+ add_subdirectory(ext/zlib)
+ # This include_directories() call and the previous include_directories() call provide the zlib
+ # include directories for add_subdirectory(ext/libpng). Because we set PNG_BUILD_ZLIB,
+ # libpng/CMakeLists.txt won't call find_package(ZLIB REQUIRED) and will see an empty
+ # ${ZLIB_INCLUDE_DIRS}.
+ include_directories("${CMAKE_CURRENT_BINARY_DIR}/ext/zlib")
set(CMAKE_DEBUG_POSTFIX "")
# This is the only way I could avoid libpng going crazy if it found awk.exe, seems benign otherwise