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