From 709ec152dfee669a992416e6769ff621cadd8ac7 Mon Sep 17 00:00:00 2001 From: Vincent Rabaud Date: Fri, 26 May 2023 00:14:05 +0200 Subject: [PATCH] Do not find_package image libraries if not needed. This can be tested by running: cmake ../ -DWEBP_BUILD_ANIM_UTILS=OFF -DWEBP_BUILD_CWEBP=OFF -DWEBP_BUILD_DWEBP=OFF -DWEBP_BUILD_GIF2WEBP=OFF -DWEBP_BUILD_IMG2WEBP=OFF -DWEBP_BUILD_EXTRAS=OFF Bug: webp:612 Change-Id: Ie06d8f0535676d6d31ff0047ff7a6c026e16118e --- CMakeLists.txt | 10 ++++++ cmake/deps.cmake | 80 +++++++++++++++++++++++++----------------------- 2 files changed, 51 insertions(+), 39 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a396e304..47a197d7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -99,6 +99,16 @@ if(NOT CMAKE_BUILD_TYPE) endif() # Include dependencies. +if(WEBP_BUILD_ANIM_UTILS + OR WEBP_BUILD_CWEBP + OR WEBP_BUILD_DWEBP + OR WEBP_BUILD_EXTRAS + OR WEBP_BUILD_GIF2WEBP + OR WEBP_BUILD_IMG2WEBP) + set(WEBP_FIND_IMG_LIBS TRUE) +else() + set(WEBP_FIND_IMG_LIBS FALSE) +endif() include(cmake/deps.cmake) include(GNUInstallDirs) diff --git a/cmake/deps.cmake b/cmake/deps.cmake index 67641117..0760ba92 100644 --- a/cmake/deps.cmake +++ b/cmake/deps.cmake @@ -74,53 +74,55 @@ endif() # Find the standard image libraries. set(WEBP_DEP_IMG_LIBRARIES) set(WEBP_DEP_IMG_INCLUDE_DIRS) -foreach(I_LIB PNG JPEG TIFF) - # Disable tiff when compiling in static mode as it is failing on Ubuntu. - if(WEBP_LINK_STATIC AND ${I_LIB} STREQUAL "TIFF") - message(STATUS "TIFF is disabled when statically linking.") - continue() +if(WEBP_FIND_IMG_LIBS) + foreach(I_LIB PNG JPEG TIFF) + # Disable tiff when compiling in static mode as it is failing on Ubuntu. + if(WEBP_LINK_STATIC AND ${I_LIB} STREQUAL "TIFF") + message(STATUS "TIFF is disabled when statically linking.") + continue() + endif() + find_package(${I_LIB}) + set(WEBP_HAVE_${I_LIB} ${${I_LIB}_FOUND}) + if(${I_LIB}_FOUND) + list(APPEND WEBP_DEP_IMG_LIBRARIES ${${I_LIB}_LIBRARIES}) + list(APPEND WEBP_DEP_IMG_INCLUDE_DIRS ${${I_LIB}_INCLUDE_DIR} + ${${I_LIB}_INCLUDE_DIRS}) + endif() + endforeach() + if(WEBP_DEP_IMG_INCLUDE_DIRS) + list(REMOVE_DUPLICATES WEBP_DEP_IMG_INCLUDE_DIRS) endif() - find_package(${I_LIB}) - set(WEBP_HAVE_${I_LIB} ${${I_LIB}_FOUND}) - if(${I_LIB}_FOUND) - list(APPEND WEBP_DEP_IMG_LIBRARIES ${${I_LIB}_LIBRARIES}) - list(APPEND WEBP_DEP_IMG_INCLUDE_DIRS ${${I_LIB}_INCLUDE_DIR} - ${${I_LIB}_INCLUDE_DIRS}) - endif() -endforeach() -if(WEBP_DEP_IMG_INCLUDE_DIRS) - list(REMOVE_DUPLICATES WEBP_DEP_IMG_INCLUDE_DIRS) -endif() -# GIF detection, gifdec isn't part of the imageio lib. -include(CMakePushCheckState) -set(WEBP_DEP_GIF_LIBRARIES) -set(WEBP_DEP_GIF_INCLUDE_DIRS) -find_package(GIF) -set(WEBP_HAVE_GIF ${GIF_FOUND}) -if(GIF_FOUND) - # GIF find_package only locates the header and library, it doesn't fail - # compile tests when detecting the version, but falls back to 3 (as of at - # least cmake 3.7.2). Make sure the library links to avoid incorrect detection - # when cross compiling. - cmake_push_check_state() - set(CMAKE_REQUIRED_LIBRARIES ${GIF_LIBRARIES}) - set(CMAKE_REQUIRED_INCLUDES ${GIF_INCLUDE_DIR}) - check_c_source_compiles( - " + # GIF detection, gifdec isn't part of the imageio lib. + include(CMakePushCheckState) + set(WEBP_DEP_GIF_LIBRARIES) + set(WEBP_DEP_GIF_INCLUDE_DIRS) + find_package(GIF) + set(WEBP_HAVE_GIF ${GIF_FOUND}) + if(GIF_FOUND) + # GIF find_package only locates the header and library, it doesn't fail + # compile tests when detecting the version, but falls back to 3 (as of at + # least cmake 3.7.2). Make sure the library links to avoid incorrect + # detection when cross compiling. + cmake_push_check_state() + set(CMAKE_REQUIRED_LIBRARIES ${GIF_LIBRARIES}) + set(CMAKE_REQUIRED_INCLUDES ${GIF_INCLUDE_DIR}) + check_c_source_compiles( + " #include int main(void) { (void)DGifOpenFileHandle; return 0; } " - GIF_COMPILES) - cmake_pop_check_state() - if(GIF_COMPILES) - list(APPEND WEBP_DEP_GIF_LIBRARIES ${GIF_LIBRARIES}) - list(APPEND WEBP_DEP_GIF_INCLUDE_DIRS ${GIF_INCLUDE_DIR}) - else() - unset(GIF_FOUND) + GIF_COMPILES) + cmake_pop_check_state() + if(GIF_COMPILES) + list(APPEND WEBP_DEP_GIF_LIBRARIES ${GIF_LIBRARIES}) + list(APPEND WEBP_DEP_GIF_INCLUDE_DIRS ${GIF_INCLUDE_DIR}) + else() + unset(GIF_FOUND) + endif() endif() endif()