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
This commit is contained in:
Vincent Rabaud 2023-05-26 00:14:05 +02:00
parent 8dd80ef814
commit 709ec152df
2 changed files with 51 additions and 39 deletions

View File

@ -99,6 +99,16 @@ if(NOT CMAKE_BUILD_TYPE)
endif() endif()
# Include dependencies. # 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(cmake/deps.cmake)
include(GNUInstallDirs) include(GNUInstallDirs)

View File

@ -74,53 +74,55 @@ endif()
# Find the standard image libraries. # Find the standard image libraries.
set(WEBP_DEP_IMG_LIBRARIES) set(WEBP_DEP_IMG_LIBRARIES)
set(WEBP_DEP_IMG_INCLUDE_DIRS) set(WEBP_DEP_IMG_INCLUDE_DIRS)
foreach(I_LIB PNG JPEG TIFF) if(WEBP_FIND_IMG_LIBS)
# Disable tiff when compiling in static mode as it is failing on Ubuntu. foreach(I_LIB PNG JPEG TIFF)
if(WEBP_LINK_STATIC AND ${I_LIB} STREQUAL "TIFF") # Disable tiff when compiling in static mode as it is failing on Ubuntu.
message(STATUS "TIFF is disabled when statically linking.") if(WEBP_LINK_STATIC AND ${I_LIB} STREQUAL "TIFF")
continue() 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() 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. # GIF detection, gifdec isn't part of the imageio lib.
include(CMakePushCheckState) include(CMakePushCheckState)
set(WEBP_DEP_GIF_LIBRARIES) set(WEBP_DEP_GIF_LIBRARIES)
set(WEBP_DEP_GIF_INCLUDE_DIRS) set(WEBP_DEP_GIF_INCLUDE_DIRS)
find_package(GIF) find_package(GIF)
set(WEBP_HAVE_GIF ${GIF_FOUND}) set(WEBP_HAVE_GIF ${GIF_FOUND})
if(GIF_FOUND) if(GIF_FOUND)
# GIF find_package only locates the header and library, it doesn't fail # 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 # 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 # least cmake 3.7.2). Make sure the library links to avoid incorrect
# when cross compiling. # detection when cross compiling.
cmake_push_check_state() cmake_push_check_state()
set(CMAKE_REQUIRED_LIBRARIES ${GIF_LIBRARIES}) set(CMAKE_REQUIRED_LIBRARIES ${GIF_LIBRARIES})
set(CMAKE_REQUIRED_INCLUDES ${GIF_INCLUDE_DIR}) set(CMAKE_REQUIRED_INCLUDES ${GIF_INCLUDE_DIR})
check_c_source_compiles( check_c_source_compiles(
" "
#include <gif_lib.h> #include <gif_lib.h>
int main(void) { int main(void) {
(void)DGifOpenFileHandle; (void)DGifOpenFileHandle;
return 0; return 0;
} }
" "
GIF_COMPILES) GIF_COMPILES)
cmake_pop_check_state() cmake_pop_check_state()
if(GIF_COMPILES) if(GIF_COMPILES)
list(APPEND WEBP_DEP_GIF_LIBRARIES ${GIF_LIBRARIES}) list(APPEND WEBP_DEP_GIF_LIBRARIES ${GIF_LIBRARIES})
list(APPEND WEBP_DEP_GIF_INCLUDE_DIRS ${GIF_INCLUDE_DIR}) list(APPEND WEBP_DEP_GIF_INCLUDE_DIRS ${GIF_INCLUDE_DIR})
else() else()
unset(GIF_FOUND) unset(GIF_FOUND)
endif()
endif() endif()
endif() endif()