go-libwebp

Experimental translation from libwebp to Go source.
Log | Files | Refs | README | LICENSE

CMakeLists.txt (32704B)


      1 #  Copyright (c) 2020 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 if(APPLE)
     10   cmake_minimum_required(VERSION 3.17)
     11 else()
     12   cmake_minimum_required(VERSION 3.16)
     13 endif()
     14 
     15 project(WebP C)
     16 
     17 # Options for coder / decoder executables.
     18 if(BUILD_SHARED_LIBS)
     19   set(WEBP_LINK_STATIC_DEFAULT OFF)
     20 else()
     21   set(WEBP_LINK_STATIC_DEFAULT ON)
     22 endif()
     23 option(WEBP_LINK_STATIC
     24        "Link using static libraries. If OFF, use dynamic libraries."
     25        ${WEBP_LINK_STATIC_DEFAULT})
     26 if(NOT EMSCRIPTEN)
     27   # Disable SIMD on Emscripten by default, as it's a new unstable Wasm feature.
     28   # Users can still explicitly opt-in to make a SIMD-enabled build.
     29   set(WEBP_ENABLE_SIMD_DEFAULT ON)
     30 endif()
     31 option(WEBP_ENABLE_SIMD "Enable any SIMD optimization."
     32        ${WEBP_ENABLE_SIMD_DEFAULT})
     33 option(WEBP_BUILD_ANIM_UTILS "Build animation utilities." ON)
     34 option(WEBP_BUILD_CWEBP "Build the cwebp command line tool." ON)
     35 option(WEBP_BUILD_DWEBP "Build the dwebp command line tool." ON)
     36 option(WEBP_BUILD_GIF2WEBP "Build the gif2webp conversion tool." ON)
     37 option(WEBP_BUILD_IMG2WEBP "Build the img2webp animation tool." ON)
     38 option(WEBP_BUILD_VWEBP "Build the vwebp viewer tool." ON)
     39 option(WEBP_BUILD_WEBPINFO "Build the webpinfo command line tool." ON)
     40 option(WEBP_BUILD_LIBWEBPMUX "Build the libwebpmux library." ON)
     41 option(WEBP_BUILD_WEBPMUX "Build the webpmux command line tool." ON)
     42 option(WEBP_BUILD_EXTRAS "Build extras." ON)
     43 option(WEBP_BUILD_WEBP_JS "Emscripten build of webp.js." OFF)
     44 option(WEBP_BUILD_FUZZTEST "Build the fuzztest tests." OFF)
     45 option(WEBP_USE_THREAD "Enable threading support" ON)
     46 option(WEBP_NEAR_LOSSLESS "Enable near-lossless encoding" ON)
     47 option(WEBP_ENABLE_SWAP_16BIT_CSP "Enable byte swap for 16 bit colorspaces."
     48        OFF)
     49 set(WEBP_BITTRACE "0" CACHE STRING "Bit trace mode (0=none, 1=bit, 2=bytes)")
     50 set_property(CACHE WEBP_BITTRACE PROPERTY STRINGS 0 1 2)
     51 option(WEBP_ENABLE_WUNUSED_RESULT "Add [[nodiscard]] to some functions. \
     52        CMake must be at least 3.21 to force C23" OFF)
     53 
     54 if(WEBP_LINK_STATIC)
     55   if(WIN32)
     56     set(CMAKE_FIND_LIBRARY_SUFFIXES .lib .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
     57   else()
     58     set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
     59   endif()
     60   set(CMAKE_POSITION_INDEPENDENT_CODE ON)
     61   # vwebp does not compile on Ubuntu with static libraries so disabling it for
     62   # now.
     63   set(WEBP_BUILD_VWEBP OFF)
     64 endif()
     65 
     66 # Option needed for handling Unicode file names on Windows.
     67 if(WIN32)
     68   option(WEBP_UNICODE "Build Unicode executables." ON)
     69 endif()
     70 
     71 if(WEBP_BUILD_WEBP_JS)
     72   set(WEBP_BUILD_ANIM_UTILS OFF)
     73   set(WEBP_BUILD_CWEBP OFF)
     74   set(WEBP_BUILD_DWEBP OFF)
     75   set(WEBP_BUILD_GIF2WEBP OFF)
     76   set(WEBP_BUILD_IMG2WEBP OFF)
     77   set(WEBP_BUILD_VWEBP OFF)
     78   set(WEBP_BUILD_WEBPINFO OFF)
     79   set(WEBP_BUILD_WEBPMUX OFF)
     80   set(WEBP_BUILD_EXTRAS OFF)
     81   set(WEBP_USE_THREAD OFF)
     82 
     83   if(WEBP_ENABLE_SIMD)
     84     message(NOTICE
     85             "wasm2js does not support SIMD, disabling webp.js generation.")
     86   endif()
     87 
     88   if(NOT EMSCRIPTEN_VERSION)
     89     message(
     90       WARNING
     91         "EMSCRIPTEN_VERSION not detected!\n"
     92         "WEBP_BUILD_WEBP_JS is only supported with emcmake/emmake.\n"
     93         "The build may fail if those tools are not used. See webp_js/README.md."
     94     )
     95   endif()
     96 endif()
     97 
     98 set(SHARPYUV_DEP_LIBRARIES)
     99 set(SHARPYUV_DEP_INCLUDE_DIRS)
    100 set(WEBP_DEP_LIBRARIES)
    101 set(WEBP_DEP_INCLUDE_DIRS)
    102 
    103 if(NOT CMAKE_BUILD_TYPE)
    104   set(CMAKE_BUILD_TYPE "Release"
    105       CACHE STRING "Build type: Release, Debug, MinSizeRel or RelWithDebInfo"
    106             FORCE)
    107 endif()
    108 
    109 # Include dependencies.
    110 if(WEBP_BUILD_ANIM_UTILS
    111    OR WEBP_BUILD_CWEBP
    112    OR WEBP_BUILD_DWEBP
    113    OR WEBP_BUILD_EXTRAS
    114    OR WEBP_BUILD_GIF2WEBP
    115    OR WEBP_BUILD_IMG2WEBP)
    116   set(WEBP_FIND_IMG_LIBS TRUE)
    117 else()
    118   set(WEBP_FIND_IMG_LIBS FALSE)
    119 endif()
    120 include(cmake/deps.cmake)
    121 include(GNUInstallDirs)
    122 
    123 if(BUILD_SHARED_LIBS AND NOT DEFINED CMAKE_INSTALL_RPATH)
    124   # Set the rpath to match autoconf/libtool behavior. Note this must be set
    125   # before target creation.
    126   set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}")
    127 endif()
    128 
    129 # ##############################################################################
    130 # Options.
    131 if(WEBP_ENABLE_SWAP_16BIT_CSP)
    132   add_definitions(-DWEBP_SWAP_16BIT_CSP=1)
    133 endif()
    134 
    135 if(NOT WEBP_BITTRACE STREQUAL "0")
    136   add_definitions(-DBITTRACE=${WEBP_BITTRACE})
    137 endif()
    138 
    139 if(WEBP_UNICODE)
    140   # Windows recommends setting both UNICODE and _UNICODE.
    141   add_definitions(-DUNICODE -D_UNICODE)
    142 endif()
    143 
    144 if(WIN32 AND BUILD_SHARED_LIBS)
    145   add_definitions(-DWEBP_DLL)
    146 endif()
    147 
    148 # pkg-config variables used by *.pc.in.
    149 set(prefix ${CMAKE_INSTALL_PREFIX})
    150 set(exec_prefix "\${prefix}")
    151 if(IS_ABSOLUTE "${CMAKE_INSTALL_LIBDIR}")
    152   set(libdir "${CMAKE_INSTALL_LIBDIR}")
    153 else()
    154   set(libdir "\${exec_prefix}/${CMAKE_INSTALL_LIBDIR}")
    155 endif()
    156 if(IS_ABSOLUTE "${CMAKE_INSTALL_INCLUDEDIR}")
    157   set(includedir "${CMAKE_INSTALL_INCLUDEDIR}")
    158 else()
    159   set(includedir "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}")
    160 endif()
    161 set(PTHREAD_LIBS ${CMAKE_THREAD_LIBS_INIT})
    162 set(INSTALLED_LIBRARIES)
    163 
    164 if(MSVC)
    165   # match the naming convention used by nmake
    166   set(webp_libname_prefix "lib")
    167   set(CMAKE_SHARED_LIBRARY_PREFIX "${webp_libname_prefix}")
    168   set(CMAKE_IMPORT_LIBRARY_PREFIX "${webp_libname_prefix}")
    169   set(CMAKE_STATIC_LIBRARY_PREFIX "${webp_libname_prefix}")
    170 endif()
    171 
    172 if(NOT WIN32)
    173   set(CMAKE_C_VISIBILITY_PRESET hidden)
    174 endif()
    175 
    176 if(WEBP_ENABLE_WUNUSED_RESULT)
    177   if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.21.0)
    178     set(CMAKE_C_STANDARD 23)
    179   else()
    180     unset(CMAKE_C_STANDARD)
    181     add_compile_options($<$<COMPILE_LANGUAGE:C>:-std=gnu2x>)
    182   endif()
    183   add_compile_options(-Wunused-result)
    184   add_definitions(-DWEBP_ENABLE_NODISCARD=1)
    185 endif()
    186 
    187 # ##############################################################################
    188 # Android only.
    189 if(ANDROID)
    190   include_directories(${ANDROID_NDK}/sources/android/cpufeatures)
    191   add_library(cpufeatures-webp STATIC
    192               ${ANDROID_NDK}/sources/android/cpufeatures/cpu-features.c)
    193   list(APPEND INSTALLED_LIBRARIES cpufeatures-webp)
    194   target_link_libraries(cpufeatures-webp dl)
    195   set(SHARPYUV_DEP_LIBRARIES ${SHARPYUV_DEP_LIBRARIES} cpufeatures-webp)
    196   set(WEBP_DEP_LIBRARIES ${WEBP_DEP_LIBRARIES} cpufeatures-webp)
    197   set(cpufeatures_include_dir ${ANDROID_NDK}/sources/android/cpufeatures)
    198   set(SHARPYUV_DEP_INCLUDE_DIRS ${SHARPYUV_DEP_INCLUDE_DIRS}
    199                                 ${cpufeatures_include_dir})
    200   set(WEBP_DEP_INCLUDE_DIRS ${WEBP_DEP_INCLUDE_DIRS} ${cpufeatures_include_dir})
    201   add_definitions(-DHAVE_CPU_FEATURES_H=1)
    202   set(HAVE_CPU_FEATURES_H 1)
    203 else()
    204   set(HAVE_CPU_FEATURES_H 0)
    205 endif()
    206 
    207 function(configure_pkg_config FILE)
    208   configure_file("${CMAKE_CURRENT_SOURCE_DIR}/${FILE}.in"
    209                  "${CMAKE_CURRENT_BINARY_DIR}/${FILE}" @ONLY)
    210 
    211   if(HAVE_MATH_LIBRARY)
    212     # MSVC doesn't have libm
    213     file(READ ${CMAKE_CURRENT_BINARY_DIR}/${FILE} data)
    214     string(REPLACE "-lm" "" data ${data})
    215     file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${FILE} ${data})
    216   endif()
    217 
    218   install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${FILE}"
    219           DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
    220 endfunction()
    221 
    222 # ##############################################################################
    223 # WebP source files. Read the Makefile.am to get the source files.
    224 
    225 # We expect the Makefiles to define the sources as defined in the first regex.
    226 # E.g.: libimagedec_la_SOURCES  = image_dec.c image_dec.h
    227 function(parse_Makefile_am FOLDER VAR SRC_REGEX)
    228   file(READ ${FOLDER}/Makefile.am MAKEFILE_AM)
    229   string(REGEX MATCHALL "${SRC_REGEX}_SOURCES[ ]*\\+?=[ ]+[0-9a-z\\._ ]*"
    230                FILES_PER_LINE ${MAKEFILE_AM})
    231   set(SRCS ${${VAR}})
    232   foreach(FILES ${FILES_PER_LINE})
    233     string(FIND ${FILES} "=" OFFSET)
    234     math(EXPR OFFSET "${OFFSET} + 2")
    235     string(SUBSTRING ${FILES} ${OFFSET} -1 FILES)
    236     if(FILES)
    237       string(REGEX MATCHALL "[0-9a-z\\._]+" FILES ${FILES})
    238       foreach(FILE ${FILES})
    239         list(APPEND SRCS ${FOLDER}/${FILE})
    240       endforeach()
    241     endif()
    242   endforeach()
    243   set(${VAR} ${SRCS} PARENT_SCOPE)
    244 endfunction()
    245 
    246 set(WEBP_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src)
    247 parse_makefile_am(${WEBP_SRC_DIR}/dec "WEBP_DEC_SRCS" "")
    248 parse_makefile_am(${WEBP_SRC_DIR}/demux "WEBP_DEMUX_SRCS" "")
    249 parse_makefile_am(${WEBP_SRC_DIR}/dsp "WEBP_DSP_COMMON_SRCS" "COMMON")
    250 parse_makefile_am(${WEBP_SRC_DIR}/dsp "WEBP_DSP_ENC_SRCS" "ENC")
    251 parse_makefile_am(${WEBP_SRC_DIR}/dsp "WEBP_DSP_ENC_SRCS" "dsp_[^ ]*")
    252 parse_makefile_am(${WEBP_SRC_DIR}/dsp "WEBP_DSP_DEC_SRCS" "decode_[^ ]*")
    253 parse_makefile_am(${WEBP_SRC_DIR}/enc "WEBP_ENC_SRCS" "")
    254 parse_makefile_am(${WEBP_SRC_DIR}/utils "WEBP_UTILS_COMMON_SRCS" "COMMON")
    255 parse_makefile_am(${WEBP_SRC_DIR}/utils "WEBP_UTILS_ENC_SRCS" "ENC")
    256 parse_makefile_am(${WEBP_SRC_DIR}/utils "WEBP_UTILS_DEC_SRCS" "decode_[^ ]*")
    257 
    258 # Remove the files specific to SIMD we don't use.
    259 foreach(FILE ${WEBP_SIMD_FILES_NOT_TO_INCLUDE})
    260   list(REMOVE_ITEM WEBP_DSP_ENC_SRCS ${FILE})
    261   list(REMOVE_ITEM WEBP_DSP_DEC_SRCS ${FILE})
    262 endforeach()
    263 
    264 # Generate the config.h file.
    265 configure_file(${CMAKE_CURRENT_LIST_DIR}/cmake/config.h.in
    266                ${CMAKE_CURRENT_BINARY_DIR}/src/webp/config.h @ONLY)
    267 add_definitions(-DHAVE_CONFIG_H)
    268 
    269 # Set the version numbers.
    270 macro(set_version FILE TARGET_NAME NAME_IN_MAKEFILE)
    271   file(READ ${CMAKE_CURRENT_SOURCE_DIR}/${FILE} SOURCE_FILE)
    272   string(REGEX MATCH
    273                "${NAME_IN_MAKEFILE}_la_LDFLAGS[^\n]* -version-info [0-9:]+" TMP
    274                ${SOURCE_FILE})
    275   string(REGEX MATCH "[0-9:]+" TMP ${TMP})
    276   string(REGEX REPLACE ":" " " LT_VERSION ${TMP})
    277 
    278   # See the libtool docs for more information:
    279   # https://www.gnu.org/software/libtool/manual/libtool.html#Updating-version-info
    280   #
    281   # c=<current>, a=<age>, r=<revision>
    282   #
    283   # libtool generates a .so file as .so.[c-a].a.r, while -version-info c:r:a is
    284   # passed to libtool.
    285   #
    286   # We set FULL = [c-a].a.r and MAJOR = [c-a].
    287   separate_arguments(LT_VERSION)
    288   list(GET LT_VERSION 0 LT_CURRENT)
    289   list(GET LT_VERSION 1 LT_REVISION)
    290   list(GET LT_VERSION 2 LT_AGE)
    291   math(EXPR LT_CURRENT_MINUS_AGE "${LT_CURRENT} - ${LT_AGE}")
    292 
    293   set_target_properties(
    294     ${TARGET_NAME}
    295     PROPERTIES VERSION ${LT_CURRENT_MINUS_AGE}.${LT_AGE}.${LT_REVISION}
    296                SOVERSION ${LT_CURRENT_MINUS_AGE})
    297   if(APPLE)
    298     # For compatibility, set MACHO_COMPATIBILITY_VERSION and
    299     # MACHO_CURRENT_VERSION to match libtool. These properties were introduced
    300     # in 3.17:
    301     # https://cmake.org/cmake/help/latest/prop_tgt/MACHO_COMPATIBILITY_VERSION.html
    302     math(EXPR LIBWEBP_MACHO_COMPATIBILITY_VERSION "${LT_CURRENT} + 1")
    303     set_target_properties(
    304       ${TARGET_NAME}
    305       PROPERTIES MACHO_COMPATIBILITY_VERSION
    306                  ${LIBWEBP_MACHO_COMPATIBILITY_VERSION}
    307                  MACHO_CURRENT_VERSION
    308                  ${LIBWEBP_MACHO_COMPATIBILITY_VERSION}.${LT_REVISION})
    309   endif()
    310 endmacro()
    311 
    312 # ##############################################################################
    313 # Build the webpdecoder library.
    314 
    315 # Creates a source file with an unused stub function in $CMAKE_BINARY_DIR and
    316 # adds it to the specified target. Currently used only with Xcode.
    317 #
    318 # See also:
    319 # https://cmake.org/cmake/help/v3.18/command/add_library.html#object-libraries
    320 # "Some native build systems (such as Xcode) may not like targets that have only
    321 # object files, so consider adding at least one real source file to any target
    322 # that references $<TARGET_OBJECTS:objlib>."
    323 function(libwebp_add_stub_file TARGET)
    324   set(stub_source_dir "${CMAKE_BINARY_DIR}")
    325   set(stub_source_file "${stub_source_dir}/libwebp_${TARGET}_stub.c")
    326   set(stub_source_code
    327       "// Generated file. DO NOT EDIT!\n"
    328       "// C source file created for target ${TARGET}.\n"
    329       "void libwebp_${TARGET}_stub_function(void)\;\n"
    330       "void libwebp_${TARGET}_stub_function(void) {}\n")
    331   file(WRITE "${stub_source_file}" ${stub_source_code})
    332 
    333   target_sources(${TARGET} PRIVATE ${stub_source_file})
    334 endfunction()
    335 
    336 parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/sharpyuv "WEBP_SHARPYUV_SRCS" "")
    337 add_library(sharpyuv ${WEBP_SHARPYUV_SRCS})
    338 target_link_libraries(sharpyuv ${SHARPYUV_DEP_LIBRARIES})
    339 set_version(sharpyuv/Makefile.am sharpyuv sharpyuv)
    340 target_include_directories(
    341   sharpyuv PRIVATE ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}
    342                    ${CMAKE_CURRENT_SOURCE_DIR}/src)
    343 set_target_properties(
    344   sharpyuv
    345   PROPERTIES PUBLIC_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/sharpyuv/sharpyuv.h;\
    346 ${CMAKE_CURRENT_SOURCE_DIR}/sharpyuv/sharpyuv_csp.h")
    347 configure_pkg_config("sharpyuv/libsharpyuv.pc")
    348 install(
    349   TARGETS sharpyuv
    350   EXPORT ${PROJECT_NAME}Targets
    351   PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/webp/sharpyuv
    352   INCLUDES
    353   DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
    354   ${CMAKE_INSTALL_INCLUDEDIR}/webp
    355   ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
    356   LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    357   RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
    358 
    359 if(MSVC)
    360   # avoid security warnings for e.g., fopen() used in the examples.
    361   add_definitions(-D_CRT_SECURE_NO_WARNINGS)
    362 else()
    363   add_compile_options(-Wall)
    364 endif()
    365 include_directories(${WEBP_DEP_INCLUDE_DIRS})
    366 add_library(webpdecode OBJECT ${WEBP_DEC_SRCS})
    367 target_include_directories(webpdecode PRIVATE ${CMAKE_CURRENT_BINARY_DIR}
    368                                               ${CMAKE_CURRENT_SOURCE_DIR})
    369 add_library(webpdspdecode OBJECT ${WEBP_DSP_COMMON_SRCS} ${WEBP_DSP_DEC_SRCS})
    370 target_include_directories(webpdspdecode PRIVATE ${CMAKE_CURRENT_BINARY_DIR}
    371                                                  ${CMAKE_CURRENT_SOURCE_DIR})
    372 add_library(webputilsdecode OBJECT ${WEBP_UTILS_COMMON_SRCS}
    373                                    ${WEBP_UTILS_DEC_SRCS})
    374 target_include_directories(webputilsdecode PRIVATE ${CMAKE_CURRENT_BINARY_DIR}
    375                                                    ${CMAKE_CURRENT_SOURCE_DIR})
    376 add_library(
    377   webpdecoder $<TARGET_OBJECTS:webpdecode> $<TARGET_OBJECTS:webpdspdecode>
    378               $<TARGET_OBJECTS:webputilsdecode>)
    379 if(XCODE)
    380   libwebp_add_stub_file(webpdecoder)
    381 endif()
    382 target_link_libraries(webpdecoder ${WEBP_DEP_LIBRARIES})
    383 target_include_directories(
    384   webpdecoder
    385   PRIVATE ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}
    386   INTERFACE
    387     "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR};${CMAKE_CURRENT_BINARY_DIR}>"
    388     $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
    389 set_target_properties(
    390   webpdecoder
    391   PROPERTIES PUBLIC_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/src/webp/decode.h;\
    392 ${CMAKE_CURRENT_SOURCE_DIR}/src/webp/types.h")
    393 
    394 configure_pkg_config("src/libwebpdecoder.pc")
    395 
    396 # Build the webp library.
    397 add_library(webpencode OBJECT ${WEBP_ENC_SRCS})
    398 target_include_directories(
    399   webpencode PRIVATE ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}
    400                      ${CMAKE_CURRENT_SOURCE_DIR}/src)
    401 add_library(webpdsp OBJECT ${WEBP_DSP_COMMON_SRCS} ${WEBP_DSP_DEC_SRCS}
    402                            ${WEBP_DSP_ENC_SRCS})
    403 target_include_directories(webpdsp PRIVATE ${CMAKE_CURRENT_BINARY_DIR}
    404                                            ${CMAKE_CURRENT_SOURCE_DIR})
    405 add_library(webputils OBJECT ${WEBP_UTILS_COMMON_SRCS} ${WEBP_UTILS_DEC_SRCS}
    406                              ${WEBP_UTILS_ENC_SRCS})
    407 target_include_directories(webputils PRIVATE ${CMAKE_CURRENT_BINARY_DIR}
    408                                              ${CMAKE_CURRENT_SOURCE_DIR})
    409 add_library(webp $<TARGET_OBJECTS:webpdecode> $<TARGET_OBJECTS:webpdsp>
    410                  $<TARGET_OBJECTS:webpencode> $<TARGET_OBJECTS:webputils>)
    411 target_link_libraries(webp sharpyuv)
    412 if(XCODE)
    413   libwebp_add_stub_file(webp)
    414 endif()
    415 target_link_libraries(webp ${WEBP_DEP_LIBRARIES})
    416 target_include_directories(
    417   webp PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}
    418   PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
    419          $<INSTALL_INTERFACE:include>)
    420 set_target_properties(
    421   webp
    422   PROPERTIES PUBLIC_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/src/webp/decode.h;\
    423 ${CMAKE_CURRENT_SOURCE_DIR}/src/webp/encode.h;\
    424 ${CMAKE_CURRENT_SOURCE_DIR}/src/webp/types.h")
    425 
    426 # Make sure the OBJECT libraries are built with position independent code (it is
    427 # not ON by default).
    428 set_target_properties(webpdecode webpdspdecode webputilsdecode webpencode
    429                       webpdsp webputils PROPERTIES POSITION_INDEPENDENT_CODE ON)
    430 configure_pkg_config("src/libwebp.pc")
    431 
    432 # Build the webp demux library.
    433 add_library(webpdemux ${WEBP_DEMUX_SRCS})
    434 target_link_libraries(webpdemux webp)
    435 target_include_directories(
    436   webpdemux PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}
    437   PUBLIC $<INSTALL_INTERFACE:include>)
    438 set_target_properties(
    439   webpdemux
    440   PROPERTIES
    441     PUBLIC_HEADER
    442     "${CMAKE_CURRENT_SOURCE_DIR}/src/webp/decode.h;\
    443 ${CMAKE_CURRENT_SOURCE_DIR}/src/webp/demux.h;\
    444 ${CMAKE_CURRENT_SOURCE_DIR}/src/webp/mux_types.h;\
    445 ${CMAKE_CURRENT_SOURCE_DIR}/src/webp/types.h")
    446 
    447 configure_pkg_config("src/demux/libwebpdemux.pc")
    448 
    449 set_version(src/Makefile.am webp webp)
    450 set_version(src/Makefile.am webpdecoder webpdecoder)
    451 set_version(src/demux/Makefile.am webpdemux webpdemux)
    452 file(READ ${CMAKE_CURRENT_SOURCE_DIR}/configure.ac CONFIGURE_FILE)
    453 string(REGEX MATCH "AC_INIT\\([^\n]*\\[[0-9\\.]+\\]" TMP ${CONFIGURE_FILE})
    454 string(REGEX MATCH "[0-9\\.]+" PROJECT_VERSION ${TMP})
    455 
    456 # Define the libraries to install.
    457 list(APPEND INSTALLED_LIBRARIES webpdecoder webp webpdemux)
    458 
    459 # Deal with SIMD. Change the compile flags for SIMD files we use.
    460 list(LENGTH WEBP_SIMD_FILES_TO_INCLUDE WEBP_SIMD_FILES_TO_INCLUDE_LENGTH)
    461 math(EXPR WEBP_SIMD_FILES_TO_INCLUDE_RANGE
    462      "${WEBP_SIMD_FILES_TO_INCLUDE_LENGTH}-1")
    463 
    464 foreach(I_FILE RANGE ${WEBP_SIMD_FILES_TO_INCLUDE_RANGE})
    465   list(GET WEBP_SIMD_FILES_TO_INCLUDE ${I_FILE} FILE)
    466   list(GET WEBP_SIMD_FLAGS_TO_INCLUDE ${I_FILE} SIMD_COMPILE_FLAG)
    467   set_source_files_properties(${FILE} PROPERTIES COMPILE_FLAGS
    468                                                  ${SIMD_COMPILE_FLAG})
    469 endforeach()
    470 
    471 if(NOT WEBP_BUILD_LIBWEBPMUX)
    472   set(WEBP_BUILD_GIF2WEBP OFF)
    473   set(WEBP_BUILD_IMG2WEBP OFF)
    474   set(WEBP_BUILD_WEBPMUX OFF)
    475 endif()
    476 
    477 if(WEBP_BUILD_GIF2WEBP AND NOT GIF_FOUND)
    478   set(WEBP_BUILD_GIF2WEBP OFF)
    479 endif()
    480 
    481 if(WEBP_BUILD_ANIM_UTILS AND NOT GIF_FOUND)
    482   set(WEBP_BUILD_ANIM_UTILS OFF)
    483 endif()
    484 
    485 # Build the executables if asked for.
    486 if(WEBP_BUILD_ANIM_UTILS
    487    OR WEBP_BUILD_CWEBP
    488    OR WEBP_BUILD_DWEBP
    489    OR WEBP_BUILD_EXTRAS
    490    OR WEBP_BUILD_FUZZTEST
    491    OR WEBP_BUILD_GIF2WEBP
    492    OR WEBP_BUILD_IMG2WEBP
    493    OR WEBP_BUILD_VWEBP
    494    OR WEBP_BUILD_WEBPMUX
    495    OR WEBP_BUILD_WEBPINFO)
    496   # Example utility library.
    497   parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/examples "EXAMPLEUTIL_SRCS"
    498                     "example_util_[^ ]*")
    499   list(APPEND EXAMPLEUTIL_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/examples/stopwatch.h)
    500   add_library(exampleutil STATIC ${EXAMPLEUTIL_SRCS})
    501   target_include_directories(
    502     exampleutil PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>)
    503 
    504   parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/imageio "IMAGEIOUTILS_SRCS"
    505                     "imageio_util_[^ ]*")
    506   add_library(imageioutil STATIC ${IMAGEIOUTILS_SRCS})
    507   target_link_libraries(imageioutil webp)
    508   target_link_libraries(exampleutil imageioutil)
    509 
    510   # Image-decoding utility library.
    511   parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/imageio "IMAGEDEC_SRCS"
    512                     "imagedec_[^ ]*")
    513   add_library(imagedec STATIC ${IMAGEDEC_SRCS})
    514   target_link_libraries(imagedec imageioutil webpdemux webp
    515                         ${WEBP_DEP_IMG_LIBRARIES})
    516 
    517   # Image-encoding utility library.
    518   parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/imageio "IMAGEENC_SRCS"
    519                     "imageenc_[^ ]*")
    520   add_library(imageenc STATIC ${IMAGEENC_SRCS})
    521   target_link_libraries(imageenc imageioutil webp)
    522 
    523   set_property(
    524     TARGET exampleutil imageioutil imagedec imageenc
    525     PROPERTY INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR}/src
    526              ${CMAKE_CURRENT_BINARY_DIR}/src)
    527   target_include_directories(imagedec PRIVATE ${WEBP_DEP_IMG_INCLUDE_DIRS})
    528   target_include_directories(imageenc PRIVATE ${WEBP_DEP_IMG_INCLUDE_DIRS})
    529 endif()
    530 
    531 if(WEBP_BUILD_DWEBP)
    532   # dwebp
    533   parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/examples "DWEBP_SRCS" "dwebp")
    534   add_executable(dwebp ${DWEBP_SRCS})
    535   target_link_libraries(dwebp exampleutil imagedec imageenc)
    536   target_include_directories(dwebp PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/src)
    537   install(TARGETS dwebp RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
    538 endif()
    539 
    540 if(WEBP_BUILD_CWEBP)
    541   # cwebp
    542   parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/examples "CWEBP_SRCS" "cwebp")
    543   add_executable(cwebp ${CWEBP_SRCS})
    544   target_link_libraries(cwebp exampleutil imagedec webp)
    545   target_include_directories(cwebp PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/src
    546                                            ${CMAKE_CURRENT_SOURCE_DIR})
    547   install(TARGETS cwebp RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
    548 endif()
    549 
    550 if(WEBP_BUILD_LIBWEBPMUX)
    551   parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/src/mux "WEBP_MUX_SRCS" "")
    552   add_library(libwebpmux ${WEBP_MUX_SRCS})
    553   target_link_libraries(libwebpmux webp)
    554   target_include_directories(libwebpmux PRIVATE ${CMAKE_CURRENT_BINARY_DIR}
    555                                                 ${CMAKE_CURRENT_SOURCE_DIR})
    556   set_version(src/mux/Makefile.am libwebpmux webpmux)
    557   set_target_properties(
    558     libwebpmux
    559     PROPERTIES PUBLIC_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/src/webp/mux.h;\
    560 ${CMAKE_CURRENT_SOURCE_DIR}/src/webp/mux_types.h;\
    561 ${CMAKE_CURRENT_SOURCE_DIR}/src/webp/types.h;")
    562   set_target_properties(libwebpmux PROPERTIES OUTPUT_NAME webpmux)
    563   list(APPEND INSTALLED_LIBRARIES libwebpmux)
    564   configure_pkg_config("src/mux/libwebpmux.pc")
    565 endif()
    566 
    567 if(WEBP_BUILD_GIF2WEBP)
    568   # gif2webp
    569   include_directories(${WEBP_DEP_GIF_INCLUDE_DIRS})
    570   parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/examples "GIF2WEBP_SRCS"
    571                     "gif2webp")
    572   add_executable(gif2webp ${GIF2WEBP_SRCS})
    573   target_link_libraries(gif2webp exampleutil imageioutil webp libwebpmux
    574                         ${WEBP_DEP_GIF_LIBRARIES})
    575   target_include_directories(gif2webp PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/src
    576                                               ${CMAKE_CURRENT_SOURCE_DIR})
    577   install(TARGETS gif2webp RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
    578 endif()
    579 
    580 if(WEBP_BUILD_IMG2WEBP)
    581   # img2webp
    582   include_directories(${WEBP_DEP_IMG_INCLUDE_DIRS})
    583   parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/examples "IMG2WEBP_SRCS"
    584                     "img2webp")
    585   add_executable(img2webp ${IMG2WEBP_SRCS})
    586   target_link_libraries(img2webp exampleutil imagedec imageioutil webp
    587                         libwebpmux)
    588   target_include_directories(img2webp PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/src
    589                                               ${CMAKE_CURRENT_SOURCE_DIR})
    590   install(TARGETS img2webp RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
    591 endif()
    592 
    593 if(WEBP_BUILD_VWEBP)
    594   # vwebp
    595   find_package(GLUT)
    596   if(GLUT_FOUND)
    597     include_directories(${WEBP_DEP_IMG_INCLUDE_DIRS})
    598     parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/examples "VWEBP_SRCS" "vwebp")
    599     add_executable(vwebp ${VWEBP_SRCS})
    600     target_link_libraries(
    601       vwebp
    602       ${OPENGL_LIBRARIES}
    603       exampleutil
    604       GLUT::GLUT
    605       imageioutil
    606       webp
    607       webpdemux)
    608     target_include_directories(
    609       vwebp PRIVATE ${GLUT_INCLUDE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/src
    610                     ${OPENGL_INCLUDE_DIR})
    611     install(TARGETS vwebp RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
    612     if(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
    613       check_c_compiler_flag("-Wno-deprecated-declarations" HAS_NO_DEPRECATED)
    614       if(HAS_NO_DEPRECATED)
    615         target_compile_options(vwebp PRIVATE "-Wno-deprecated-declarations")
    616       endif()
    617     endif()
    618   endif()
    619 endif()
    620 
    621 if(WEBP_BUILD_WEBPINFO)
    622   # webpinfo
    623   include_directories(${WEBP_DEP_IMG_INCLUDE_DIRS})
    624   parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/examples "WEBPINFO_SRCS"
    625                     "webpinfo")
    626   add_executable(webpinfo ${WEBPINFO_SRCS})
    627   target_link_libraries(webpinfo exampleutil imageioutil)
    628   target_include_directories(webpinfo PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/src
    629                                               ${CMAKE_CURRENT_SOURCE_DIR}/src)
    630   install(TARGETS webpinfo RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
    631 endif()
    632 
    633 if(WEBP_BUILD_WEBPMUX)
    634   # webpmux
    635   parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/examples "WEBPMUX_SRCS"
    636                     "webpmux")
    637   add_executable(webpmux ${WEBPMUX_SRCS})
    638   target_link_libraries(webpmux exampleutil imageioutil libwebpmux webp)
    639   target_include_directories(webpmux PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/src)
    640   install(TARGETS webpmux RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
    641 endif()
    642 
    643 if(WEBP_BUILD_EXTRAS)
    644   set(EXTRAS_MAKEFILE "${CMAKE_CURRENT_SOURCE_DIR}/extras")
    645   parse_makefile_am(${EXTRAS_MAKEFILE} "WEBP_EXTRAS_SRCS" "libwebpextras_la")
    646   parse_makefile_am(${EXTRAS_MAKEFILE} "GET_DISTO_SRCS" "get_disto")
    647   parse_makefile_am(${EXTRAS_MAKEFILE} "WEBP_QUALITY_SRCS" "webp_quality")
    648   parse_makefile_am(${EXTRAS_MAKEFILE} "VWEBP_SDL_SRCS" "vwebp_sdl")
    649 
    650   # libextras
    651   add_library(extras STATIC ${WEBP_EXTRAS_SRCS})
    652   target_include_directories(
    653     extras PRIVATE ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}
    654                    ${CMAKE_CURRENT_SOURCE_DIR}/src)
    655 
    656   # get_disto
    657   add_executable(get_disto ${GET_DISTO_SRCS})
    658   target_link_libraries(get_disto imagedec)
    659   target_include_directories(get_disto PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
    660                                                ${CMAKE_CURRENT_BINARY_DIR}/src)
    661 
    662   # webp_quality
    663   add_executable(webp_quality ${WEBP_QUALITY_SRCS})
    664   target_link_libraries(webp_quality exampleutil imagedec extras)
    665   target_include_directories(webp_quality PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
    666                                                   ${CMAKE_CURRENT_BINARY_DIR})
    667 
    668   # vwebp_sdl
    669   find_package(SDL2 QUIET)
    670   if(WEBP_BUILD_VWEBP AND SDL2_FOUND)
    671     add_executable(vwebp_sdl ${VWEBP_SDL_SRCS})
    672     target_link_libraries(vwebp_sdl ${SDL2_LIBRARIES} imageioutil webp)
    673     target_include_directories(
    674       vwebp_sdl PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}
    675                         ${CMAKE_CURRENT_BINARY_DIR}/src ${SDL2_INCLUDE_DIRS})
    676     set(WEBP_HAVE_SDL 1)
    677     target_compile_definitions(vwebp_sdl PUBLIC WEBP_HAVE_SDL)
    678 
    679     set(CMAKE_REQUIRED_INCLUDES "${SDL2_INCLUDE_DIRS}")
    680     check_c_source_compiles(
    681       "
    682         #define SDL_MAIN_HANDLED
    683         #include \"SDL.h\"
    684         int main(void) {
    685           return 0;
    686         }
    687       "
    688       HAVE_JUST_SDL_H)
    689     set(CMAKE_REQUIRED_INCLUDES)
    690     if(HAVE_JUST_SDL_H)
    691       target_compile_definitions(vwebp_sdl PRIVATE WEBP_HAVE_JUST_SDL_H)
    692     endif()
    693   endif()
    694 endif()
    695 
    696 if(WEBP_BUILD_WEBP_JS)
    697   # The default stack size changed from 5MB to 64KB in 3.1.27. See
    698   # https://crbug.com/webp/614.
    699   if(EMSCRIPTEN_VERSION VERSION_GREATER_EQUAL "3.1.27")
    700     # TOTAL_STACK size was renamed to STACK_SIZE in 3.1.27. The old name was
    701     # kept for compatibility, but prefer the new one in case it is removed in
    702     # the future.
    703     set(emscripten_stack_size "-sSTACK_SIZE=5MB")
    704   else()
    705     set(emscripten_stack_size "-sTOTAL_STACK=5MB")
    706   endif()
    707   find_package(SDL2 REQUIRED)
    708   # wasm2js does not support SIMD.
    709   if(NOT WEBP_ENABLE_SIMD)
    710     # JavaScript version
    711     add_executable(webp_js ${CMAKE_CURRENT_SOURCE_DIR}/extras/webp_to_sdl.c)
    712     target_link_libraries(webp_js webpdecoder SDL2)
    713     target_include_directories(webp_js PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
    714     set(WEBP_HAVE_SDL 1)
    715     set_target_properties(
    716       webp_js
    717       PROPERTIES
    718         # Emscripten puts -sUSE_SDL2=1 in this variable, though it's needed at
    719         # compile time to ensure the headers are downloaded.
    720         COMPILE_OPTIONS "${SDL2_LIBRARIES}"
    721         LINK_FLAGS
    722         "-sWASM=0 ${emscripten_stack_size} \
    723          -sEXPORTED_FUNCTIONS=_WebPToSDL -sINVOKE_RUN=0 \
    724          -sEXPORTED_RUNTIME_METHODS=cwrap ${SDL2_LIBRARIES} \
    725          -sALLOW_MEMORY_GROWTH")
    726     set_target_properties(webp_js PROPERTIES OUTPUT_NAME webp)
    727     target_compile_definitions(webp_js PUBLIC EMSCRIPTEN WEBP_HAVE_SDL)
    728   endif()
    729 
    730   # WASM version
    731   add_executable(webp_wasm ${CMAKE_CURRENT_SOURCE_DIR}/extras/webp_to_sdl.c)
    732   target_link_libraries(webp_wasm webpdecoder SDL2)
    733   target_include_directories(webp_wasm PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
    734   set_target_properties(
    735     webp_wasm
    736     PROPERTIES
    737       # Emscripten puts -sUSE_SDL2=1 in this variable, though it's needed at
    738       # compile time to ensure the headers are downloaded.
    739       COMPILE_OPTIONS "${SDL2_LIBRARIES}"
    740       LINK_FLAGS
    741       "-sWASM=1 ${emscripten_stack_size} \
    742        -sEXPORTED_FUNCTIONS=_WebPToSDL -sINVOKE_RUN=0 \
    743        -sEXPORTED_RUNTIME_METHODS=cwrap ${SDL2_LIBRARIES} \
    744        -sALLOW_MEMORY_GROWTH")
    745   target_compile_definitions(webp_wasm PUBLIC EMSCRIPTEN WEBP_HAVE_SDL)
    746 
    747   target_compile_definitions(webpdspdecode PUBLIC EMSCRIPTEN)
    748 endif()
    749 
    750 if(WEBP_BUILD_ANIM_UTILS)
    751   # anim_diff
    752   include_directories(${WEBP_DEP_IMG_INCLUDE_DIRS} ${WEBP_DEP_GIF_INCLUDE_DIRS})
    753   parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/examples "ANIM_DIFF_SRCS"
    754                     "anim_diff")
    755   add_executable(anim_diff ${ANIM_DIFF_SRCS})
    756   target_link_libraries(
    757     anim_diff
    758     exampleutil
    759     imagedec
    760     imageenc
    761     imageioutil
    762     webp
    763     webpdemux
    764     ${WEBP_DEP_GIF_LIBRARIES})
    765   target_include_directories(anim_diff PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/src)
    766 
    767   # anim_dump
    768   include_directories(${WEBP_DEP_IMG_INCLUDE_DIRS} ${WEBP_DEP_GIF_INCLUDE_DIRS})
    769   parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/examples "ANIM_DUMP_SRCS"
    770                     "anim_dump")
    771   add_executable(anim_dump ${ANIM_DUMP_SRCS})
    772   target_link_libraries(
    773     anim_dump
    774     exampleutil
    775     imagedec
    776     imageenc
    777     imageioutil
    778     webp
    779     webpdemux
    780     ${WEBP_DEP_GIF_LIBRARIES})
    781   target_include_directories(anim_dump PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/src)
    782 endif()
    783 
    784 if(WEBP_BUILD_FUZZTEST)
    785   add_subdirectory(tests/fuzzer)
    786 endif()
    787 
    788 # Install the different headers and libraries.
    789 install(
    790   TARGETS ${INSTALLED_LIBRARIES}
    791   EXPORT ${PROJECT_NAME}Targets
    792   PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/webp
    793   INCLUDES
    794   DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
    795   ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
    796   LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    797   RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
    798 set(ConfigPackageLocation ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/cmake/)
    799 install(EXPORT ${PROJECT_NAME}Targets NAMESPACE ${PROJECT_NAME}::
    800         DESTINATION ${ConfigPackageLocation})
    801 
    802 # Create the CMake version file.
    803 include(CMakePackageConfigHelpers)
    804 write_basic_package_version_file(
    805   "${CMAKE_CURRENT_BINARY_DIR}/WebPConfigVersion.cmake"
    806   VERSION ${PACKAGE_VERSION} COMPATIBILITY AnyNewerVersion)
    807 
    808 # Create the Config file.
    809 include(CMakePackageConfigHelpers)
    810 # Fix libwebpmux reference. The target name libwebpmux is used for compatibility
    811 # purposes, but the library mentioned in WebPConfig.cmake should be the
    812 # unprefixed version. Note string(...) can be replaced with list(TRANSFORM ...)
    813 # if cmake_minimum_required is >= 3.12.
    814 string(REGEX REPLACE "libwebpmux" "webpmux" INSTALLED_LIBRARIES
    815                      "${INSTALLED_LIBRARIES}")
    816 
    817 if(MSVC)
    818   # For compatibility with nmake, MSVC builds use a custom prefix (lib) that
    819   # needs to be included in the library name.
    820   string(REGEX REPLACE "[A-Za-z0-9_]+" "${CMAKE_STATIC_LIBRARY_PREFIX}\\0"
    821                        INSTALLED_LIBRARIES "${INSTALLED_LIBRARIES}")
    822 endif()
    823 
    824 configure_package_config_file(
    825   ${CMAKE_CURRENT_SOURCE_DIR}/cmake/WebPConfig.cmake.in
    826   ${CMAKE_CURRENT_BINARY_DIR}/WebPConfig.cmake
    827   INSTALL_DESTINATION ${ConfigPackageLocation}
    828   PATH_VARS CMAKE_INSTALL_INCLUDEDIR)
    829 
    830 # Install the generated CMake files.
    831 install(FILES "${CMAKE_CURRENT_BINARY_DIR}/WebPConfigVersion.cmake"
    832               "${CMAKE_CURRENT_BINARY_DIR}/WebPConfig.cmake"
    833         DESTINATION ${ConfigPackageLocation})
    834 
    835 # Install the man pages.
    836 set(MAN_PAGES
    837     cwebp.1
    838     dwebp.1
    839     gif2webp.1
    840     img2webp.1
    841     vwebp.1
    842     webpmux.1
    843     webpinfo.1)
    844 set(EXEC_BUILDS
    845     "CWEBP"
    846     "DWEBP"
    847     "GIF2WEBP"
    848     "IMG2WEBP"
    849     "VWEBP"
    850     "WEBPMUX"
    851     "WEBPINFO")
    852 list(LENGTH MAN_PAGES MAN_PAGES_LENGTH)
    853 math(EXPR MAN_PAGES_RANGE "${MAN_PAGES_LENGTH} - 1")
    854 
    855 foreach(I_MAN RANGE ${MAN_PAGES_RANGE})
    856   list(GET EXEC_BUILDS ${I_MAN} EXEC_BUILD)
    857   if(WEBP_BUILD_${EXEC_BUILD})
    858     list(GET MAN_PAGES ${I_MAN} MAN_PAGE)
    859     install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/man/${MAN_PAGE}
    860             DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 COMPONENT doc)
    861   endif()
    862 endforeach()