1# Copyright (c) 2021 Google LLC. 2# 3# Use of this source code is governed by a BSD-style license 4# that can be found in the LICENSE file in the root of the source 5# tree. An additional intellectual property rights grant can be found 6# in the file PATENTS. All contributing project authors may 7# be found in the AUTHORS file in the root of the source tree. 8 9# Generate the config.h to compile with specific intrinsics / libs. 10 11# Check for compiler options. 12include(CheckCSourceCompiles) 13check_c_source_compiles( 14 " 15 int main(void) { 16 (void)__builtin_bswap16(0); 17 return 0; 18 } 19 " 20 HAVE_BUILTIN_BSWAP16) 21check_c_source_compiles( 22 " 23 int main(void) { 24 (void)__builtin_bswap32(0); 25 return 0; 26 } 27 " 28 HAVE_BUILTIN_BSWAP32) 29check_c_source_compiles( 30 " 31 int main(void) { 32 (void)__builtin_bswap64(0); 33 return 0; 34 } 35 " 36 HAVE_BUILTIN_BSWAP64) 37 38# Check for libraries. 39if(WEBP_USE_THREAD) 40 find_package(Threads) 41 if(Threads_FOUND) 42 # work around cmake bug on QNX (https://cmake.org/Bug/view.php?id=11333) 43 if(CMAKE_USE_PTHREADS_INIT AND NOT CMAKE_SYSTEM_NAME STREQUAL "QNX") 44 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread") 45 endif() 46 list(APPEND WEBP_DEP_LIBRARIES Threads::Threads) 47 endif() 48 set(WEBP_USE_THREAD ${Threads_FOUND}) 49endif() 50 51# TODO: this seems unused, check with autotools. 52set(LT_OBJDIR ".libs/") 53 54# Only useful for vwebp, so useless for now. 55find_package(OpenGL) 56set(WEBP_HAVE_GL ${OPENGL_FOUND}) 57 58# Check if we need to link to the C math library. We do not look for it as it is 59# not found when cross-compiling, while it is here. 60check_c_source_compiles( 61 " 62 #include <math.h> 63 int main(int argc, char** argv) { 64 return (int)pow(argc, 2.5); 65 } 66 " 67 HAVE_MATH_LIBRARY) 68if(NOT HAVE_MATH_LIBRARY) 69 message(STATUS "Adding -lm flag.") 70 list(APPEND SHARPYUV_DEP_LIBRARIES m) 71 list(APPEND WEBP_DEP_LIBRARIES m) 72endif() 73 74# Find the standard image libraries. 75set(WEBP_DEP_IMG_LIBRARIES) 76set(WEBP_DEP_IMG_INCLUDE_DIRS) 77if(WEBP_FIND_IMG_LIBS) 78 foreach(I_LIB PNG JPEG TIFF) 79 # Disable tiff when compiling in static mode as it is failing on Ubuntu. 80 if(WEBP_LINK_STATIC AND ${I_LIB} STREQUAL "TIFF") 81 message(STATUS "TIFF is disabled when statically linking.") 82 continue() 83 endif() 84 find_package(${I_LIB}) 85 set(WEBP_HAVE_${I_LIB} ${${I_LIB}_FOUND}) 86 if(${I_LIB}_FOUND) 87 list(APPEND WEBP_DEP_IMG_LIBRARIES ${${I_LIB}_LIBRARIES}) 88 list(APPEND WEBP_DEP_IMG_INCLUDE_DIRS ${${I_LIB}_INCLUDE_DIR} 89 ${${I_LIB}_INCLUDE_DIRS}) 90 endif() 91 endforeach() 92 if(WEBP_DEP_IMG_INCLUDE_DIRS) 93 list(REMOVE_DUPLICATES WEBP_DEP_IMG_INCLUDE_DIRS) 94 endif() 95 96 # GIF detection, gifdec isn't part of the imageio lib. 97 include(CMakePushCheckState) 98 set(WEBP_DEP_GIF_LIBRARIES) 99 set(WEBP_DEP_GIF_INCLUDE_DIRS) 100 find_package(GIF) 101 set(WEBP_HAVE_GIF ${GIF_FOUND}) 102 if(GIF_FOUND) 103 # GIF find_package only locates the header and library, it doesn't fail 104 # compile tests when detecting the version, but falls back to 3 (as of at 105 # least cmake 3.7.2). Make sure the library links to avoid incorrect 106 # detection when cross compiling. 107 cmake_push_check_state() 108 set(CMAKE_REQUIRED_LIBRARIES ${GIF_LIBRARIES}) 109 set(CMAKE_REQUIRED_INCLUDES ${GIF_INCLUDE_DIR}) 110 check_c_source_compiles( 111 " 112 #include <gif_lib.h> 113 int main(void) { 114 (void)DGifOpenFileHandle; 115 return 0; 116 } 117 " 118 GIF_COMPILES) 119 cmake_pop_check_state() 120 if(GIF_COMPILES) 121 list(APPEND WEBP_DEP_GIF_LIBRARIES ${GIF_LIBRARIES}) 122 list(APPEND WEBP_DEP_GIF_INCLUDE_DIRS ${GIF_INCLUDE_DIR}) 123 else() 124 unset(GIF_FOUND) 125 endif() 126 endif() 127endif() 128 129# Check for specific headers. 130include(CheckIncludeFiles) 131check_include_files(GLUT/glut.h HAVE_GLUT_GLUT_H) 132check_include_files(GL/glut.h HAVE_GL_GLUT_H) 133check_include_files(OpenGL/glut.h HAVE_OPENGL_GLUT_H) 134check_include_files(shlwapi.h HAVE_SHLWAPI_H) 135check_include_files(unistd.h HAVE_UNISTD_H) 136check_include_files(wincodec.h HAVE_WINCODEC_H) 137check_include_files(windows.h HAVE_WINDOWS_H) 138 139# Windows specifics 140if(HAVE_WINCODEC_H) 141 list(APPEND WEBP_DEP_LIBRARIES shlwapi ole32 windowscodecs) 142endif() 143 144# Check for SIMD extensions. 145include(${CMAKE_CURRENT_LIST_DIR}/cpu.cmake) 146 147# Define extra info. 148set(PACKAGE ${PROJECT_NAME}) 149set(PACKAGE_NAME ${PROJECT_NAME}) 150 151# Read from configure.ac. 152file(READ ${CMAKE_CURRENT_SOURCE_DIR}/configure.ac CONFIGURE_AC) 153string(REGEX MATCHALL "\\[([0-9a-z\\.:/]*)\\]" CONFIGURE_AC_PACKAGE_INFO 154 ${CONFIGURE_AC}) 155function(strip_bracket VAR) 156 string(LENGTH ${${VAR}} TMP_LEN) 157 math(EXPR TMP_LEN ${TMP_LEN}-2) 158 string(SUBSTRING ${${VAR}} 1 ${TMP_LEN} TMP_SUB) 159 set(${VAR} ${TMP_SUB} PARENT_SCOPE) 160endfunction() 161 162list(GET CONFIGURE_AC_PACKAGE_INFO 1 PACKAGE_VERSION) 163strip_bracket(PACKAGE_VERSION) 164list(GET CONFIGURE_AC_PACKAGE_INFO 2 PACKAGE_BUGREPORT) 165strip_bracket(PACKAGE_BUGREPORT) 166list(GET CONFIGURE_AC_PACKAGE_INFO 3 PACKAGE_URL) 167strip_bracket(PACKAGE_URL) 168 169# Build more info. 170set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}") 171set(PACKAGE_TARNAME ${PACKAGE_NAME}) 172set(VERSION ${PACKAGE_VERSION}) 173