| # Copyright (c) 2021 Google LLC. |
| # |
| # Use of this source code is governed by a BSD-style license |
| # that can be found in the LICENSE file in the root of the source |
| # tree. An additional intellectual property rights grant can be found |
| # in the file PATENTS. All contributing project authors may |
| # be found in the AUTHORS file in the root of the source tree. |
| |
| # Generate the config.h to compile with specific intrinsics / libs. |
| |
| # Check for compiler options. |
| include(CheckCSourceCompiles) |
| check_c_source_compiles( |
| " |
| int main(void) { |
| (void)__builtin_bswap16(0); |
| return 0; |
| } |
| " |
| HAVE_BUILTIN_BSWAP16) |
| check_c_source_compiles( |
| " |
| int main(void) { |
| (void)__builtin_bswap32(0); |
| return 0; |
| } |
| " |
| HAVE_BUILTIN_BSWAP32) |
| check_c_source_compiles( |
| " |
| int main(void) { |
| (void)__builtin_bswap64(0); |
| return 0; |
| } |
| " |
| HAVE_BUILTIN_BSWAP64) |
| |
| # Check for libraries. |
| if(WEBP_USE_THREAD) |
| find_package(Threads) |
| if(Threads_FOUND) |
| # work around cmake bug on QNX (https://cmake.org/Bug/view.php?id=11333) |
| if(CMAKE_USE_PTHREADS_INIT AND NOT CMAKE_SYSTEM_NAME STREQUAL "QNX") |
| set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread") |
| endif() |
| list(APPEND WEBP_DEP_LIBRARIES Threads::Threads) |
| endif() |
| set(WEBP_USE_THREAD ${Threads_FOUND}) |
| endif() |
| |
| # TODO: this seems unused, check with autotools. |
| set(LT_OBJDIR ".libs/") |
| |
| # Only useful for vwebp, so useless for now. |
| find_package(OpenGL) |
| set(WEBP_HAVE_GL ${OPENGL_FOUND}) |
| |
| # Check if we need to link to the C math library. We do not look for it as it is |
| # not found when cross-compiling, while it is here. |
| check_c_source_compiles( |
| " |
| #include <math.h> |
| int main(int argc, char** argv) { |
| return (int)pow(argc, 2.5); |
| } |
| " |
| HAVE_MATH_LIBRARY) |
| if(NOT HAVE_MATH_LIBRARY) |
| message(STATUS "Adding -lm flag.") |
| list(APPEND SHARPYUV_DEP_LIBRARIES m) |
| list(APPEND WEBP_DEP_LIBRARIES m) |
| endif() |
| |
| # Find the standard image libraries. |
| set(WEBP_DEP_IMG_LIBRARIES) |
| set(WEBP_DEP_IMG_INCLUDE_DIRS) |
| 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() |
| |
| # 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 <gif_lib.h> |
| 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) |
| endif() |
| endif() |
| endif() |
| |
| # Check for specific headers. |
| include(CheckIncludeFiles) |
| check_include_files(GLUT/glut.h HAVE_GLUT_GLUT_H) |
| check_include_files(GL/glut.h HAVE_GL_GLUT_H) |
| check_include_files(OpenGL/glut.h HAVE_OPENGL_GLUT_H) |
| check_include_files(shlwapi.h HAVE_SHLWAPI_H) |
| check_include_files(unistd.h HAVE_UNISTD_H) |
| check_include_files(wincodec.h HAVE_WINCODEC_H) |
| check_include_files(windows.h HAVE_WINDOWS_H) |
| |
| # Windows specifics |
| if(HAVE_WINCODEC_H) |
| list(APPEND WEBP_DEP_LIBRARIES shlwapi ole32 windowscodecs) |
| endif() |
| |
| # Check for SIMD extensions. |
| include(${CMAKE_CURRENT_LIST_DIR}/cpu.cmake) |
| |
| # Define extra info. |
| set(PACKAGE ${PROJECT_NAME}) |
| set(PACKAGE_NAME ${PROJECT_NAME}) |
| |
| # Read from configure.ac. |
| file(READ ${CMAKE_CURRENT_SOURCE_DIR}/configure.ac CONFIGURE_AC) |
| string(REGEX MATCHALL "\\[([0-9a-z\\.:/]*)\\]" CONFIGURE_AC_PACKAGE_INFO |
| ${CONFIGURE_AC}) |
| function(strip_bracket VAR) |
| string(LENGTH ${${VAR}} TMP_LEN) |
| math(EXPR TMP_LEN ${TMP_LEN}-2) |
| string(SUBSTRING ${${VAR}} 1 ${TMP_LEN} TMP_SUB) |
| set(${VAR} ${TMP_SUB} PARENT_SCOPE) |
| endfunction() |
| |
| list(GET CONFIGURE_AC_PACKAGE_INFO 1 PACKAGE_VERSION) |
| strip_bracket(PACKAGE_VERSION) |
| list(GET CONFIGURE_AC_PACKAGE_INFO 2 PACKAGE_BUGREPORT) |
| strip_bracket(PACKAGE_BUGREPORT) |
| list(GET CONFIGURE_AC_PACKAGE_INFO 3 PACKAGE_URL) |
| strip_bracket(PACKAGE_URL) |
| |
| # Build more info. |
| set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}") |
| set(PACKAGE_TARNAME ${PACKAGE_NAME}) |
| set(VERSION ${PACKAGE_VERSION}) |