1cmake_minimum_required(VERSION 3.5) 2 3project(WebP C) 4 5# Options for coder / decoder executables. 6option(WEBP_ENABLE_SIMD "Enable any SIMD optimization." ON) 7option(WEBP_BUILD_ANIM_UTILS "Build animation utilities." ON) 8option(WEBP_BUILD_CWEBP "Build the cwebp command line tool." ON) 9option(WEBP_BUILD_DWEBP "Build the dwebp command line tool." ON) 10option(WEBP_BUILD_GIF2WEBP "Build the gif2webp conversion tool." ON) 11option(WEBP_BUILD_IMG2WEBP "Build the img2webp animation tool." ON) 12option(WEBP_BUILD_VWEBP "Build the vwebp viewer tool." ON) 13option(WEBP_BUILD_WEBPINFO "Build the webpinfo command line tool." ON) 14option(WEBP_BUILD_WEBPMUX "Build the webpmux command line tool." ON) 15option(WEBP_BUILD_EXTRAS "Build extras." ON) 16option(WEBP_BUILD_WEBP_JS "Emscripten build of webp.js." OFF) 17option(WEBP_NEAR_LOSSLESS "Enable near-lossless encoding" ON) 18option(WEBP_ENABLE_SWAP_16BIT_CSP "Enable byte swap for 16 bit colorspaces." 19 OFF) 20 21# Option needed for handling Unicode file names on Windows. 22if(WIN32) 23 option(WEBP_UNICODE "Build Unicode executables." ON) 24endif() 25 26if(WEBP_BUILD_WEBP_JS) 27 set(WEBP_ENABLE_SIMD OFF) 28 set(WEBP_BUILD_ANIM_UTILS OFF) 29 set(WEBP_BUILD_CWEBP OFF) 30 set(WEBP_BUILD_DWEBP OFF) 31 set(WEBP_BUILD_GIF2WEBP OFF) 32 set(WEBP_BUILD_IMG2WEBP OFF) 33 set(WEBP_BUILD_VWEBP OFF) 34 set(WEBP_BUILD_WEBPINFO OFF) 35 set(WEBP_BUILD_WEBPMUX OFF) 36 set(WEBP_BUILD_EXTRAS OFF) 37endif() 38 39set(WEBP_DEP_LIBRARIES) 40set(WEBP_DEP_INCLUDE_DIRS) 41 42if(NOT CMAKE_BUILD_TYPE) 43 set(CMAKE_BUILD_TYPE "Release" 44 CACHE "Build type: Release, Debug, MinSizeRel or RelWithDebInfo" STRING 45 FORCE) 46endif() 47 48# Include dependencies. 49include(cmake/deps.cmake) 50include(GNUInstallDirs) 51 52# ############################################################################## 53# Options. 54if(WEBP_ENABLE_SWAP_16BIT_CSP) 55 add_definitions(-DWEBP_SWAP_16BIT_CSP=1) 56endif() 57 58if(WEBP_UNICODE) 59 # Windows recommends setting both UNICODE and _UNICODE. 60 add_definitions(-DUNICODE -D_UNICODE) 61endif() 62 63set(prefix ${CMAKE_INSTALL_PREFIX}) 64set(exec_prefix "\$\{prefix\}") 65set(libdir "\$\{prefix\}/lib") 66set(includedir "\$\{prefix\}/include") 67set(PTHREAD_LIBS ${CMAKE_THREAD_LIBS_INIT}) 68 69# ############################################################################## 70# Android only. 71if(ANDROID) 72 include_directories(${ANDROID_NDK}/sources/android/cpufeatures) 73 add_library(cpufeatures STATIC 74 ${ANDROID_NDK}/sources/android/cpufeatures/cpu-features.c) 75 target_link_libraries(cpufeatures dl) 76 set(WEBP_DEP_LIBRARIES ${WEBP_DEP_LIBRARIES} cpufeatures) 77 set(WEBP_DEP_INCLUDE_DIRS ${WEBP_DEP_INCLUDE_DIRS} 78 ${ANDROID_NDK}/sources/android/cpufeatures) 79 add_definitions(-DHAVE_CPU_FEATURES_H=1) 80 set(HAVE_CPU_FEATURES_H 1) 81else() 82 set(HAVE_CPU_FEATURES_H 0) 83endif() 84 85function(configure_pkg_config FILE) 86 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/${FILE}.in" 87 "${CMAKE_CURRENT_BINARY_DIR}/${FILE}") 88 89 if(HAVE_MATH_LIBRARY) 90 # MSVC doesn't have libm 91 file(READ ${CMAKE_CURRENT_BINARY_DIR}/${FILE} data) 92 string(REPLACE "-lm" "" data ${data}) 93 file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${FILE} ${data}) 94 endif() 95 96 install( 97 FILES "${CMAKE_CURRENT_BINARY_DIR}/${FILE}" 98 DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig 99 ) 100endfunction() 101 102# ############################################################################## 103# WebP source files. Read the Makefile.am to get the source files. 104 105# We expect the Makefiles to define the sources as defined in the first regex. 106# E.g.: libimagedec_la_SOURCES = image_dec.c image_dec.h 107function(parse_Makefile_am FOLDER VAR SRC_REGEX) 108 file(READ ${FOLDER}/Makefile.am MAKEFILE_AM) 109 string(REGEX MATCHALL 110 "${SRC_REGEX}_SOURCES[ ]*\\+?=[ ]+[0-9a-z\\._ ]*" 111 FILES_PER_LINE 112 ${MAKEFILE_AM}) 113 set(SRCS ${${VAR}}) 114 foreach(FILES ${FILES_PER_LINE}) 115 string(FIND ${FILES} "=" OFFSET) 116 math(EXPR OFFSET "${OFFSET} + 2") 117 string(SUBSTRING ${FILES} 118 ${OFFSET} 119 -1 120 FILES) 121 if(FILES) 122 string(REGEX MATCHALL 123 "[0-9a-z\\._]+" 124 FILES 125 ${FILES}) 126 foreach(FILE ${FILES}) 127 list(APPEND SRCS ${FOLDER}/${FILE}) 128 endforeach() 129 endif() 130 endforeach() 131 set(${VAR} ${SRCS} PARENT_SCOPE) 132endfunction() 133 134set(WEBP_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src) 135parse_makefile_am(${WEBP_SRC_DIR}/dec "WEBP_DEC_SRCS" "") 136parse_makefile_am(${WEBP_SRC_DIR}/demux "WEBP_DEMUX_SRCS" "") 137parse_makefile_am(${WEBP_SRC_DIR}/dsp "WEBP_DSP_COMMON_SRCS" "COMMON") 138parse_makefile_am(${WEBP_SRC_DIR}/dsp "WEBP_DSP_ENC_SRCS" "ENC") 139parse_makefile_am(${WEBP_SRC_DIR}/dsp "WEBP_DSP_ENC_SRCS" "dsp_[^ ]*") 140parse_makefile_am(${WEBP_SRC_DIR}/dsp "WEBP_DSP_DEC_SRCS" "decode_[^ ]*") 141parse_makefile_am(${WEBP_SRC_DIR}/enc "WEBP_ENC_SRCS" "") 142parse_makefile_am(${WEBP_SRC_DIR}/utils "WEBP_UTILS_COMMON_SRCS" "COMMON") 143parse_makefile_am(${WEBP_SRC_DIR}/utils "WEBP_UTILS_ENC_SRCS" "ENC") 144parse_makefile_am(${WEBP_SRC_DIR}/utils "WEBP_UTILS_DEC_SRCS" "decode_[^ ]*") 145 146# Remove the files specific to SIMD we don't use. 147foreach(FILE ${WEBP_SIMD_FILES_NOT_TO_INCLUDE}) 148 list(REMOVE_ITEM WEBP_DSP_ENC_SRCS ${FILE}) 149 list(REMOVE_ITEM WEBP_DSP_DEC_SRCS ${FILE}) 150endforeach() 151 152# Generate the config.h file. 153configure_file(${CMAKE_CURRENT_LIST_DIR}/cmake/config.h.in 154 ${CMAKE_CURRENT_BINARY_DIR}/src/webp/config.h) 155add_definitions(-DHAVE_CONFIG_H) 156 157# ############################################################################## 158# Build the webpdecoder library. 159if(MSVC) 160 # avoid security warnings for e.g., fopen() used in the examples. 161 add_definitions(-D_CRT_SECURE_NO_WARNINGS) 162else() 163 add_definitions(-Wall) 164endif() 165include_directories(${WEBP_DEP_INCLUDE_DIRS}) 166add_library(webpdecode OBJECT ${WEBP_DEC_SRCS}) 167target_include_directories(webpdecode 168 PRIVATE ${CMAKE_CURRENT_BINARY_DIR} 169 ${CMAKE_CURRENT_SOURCE_DIR}) 170add_library(webpdspdecode OBJECT ${WEBP_DSP_COMMON_SRCS} ${WEBP_DSP_DEC_SRCS}) 171target_include_directories(webpdspdecode 172 PRIVATE ${CMAKE_CURRENT_BINARY_DIR} 173 ${CMAKE_CURRENT_SOURCE_DIR}) 174add_library(webputilsdecode 175 OBJECT 176 ${WEBP_UTILS_COMMON_SRCS} 177 ${WEBP_UTILS_DEC_SRCS}) 178target_include_directories(webputilsdecode 179 PRIVATE ${CMAKE_CURRENT_BINARY_DIR} 180 ${CMAKE_CURRENT_SOURCE_DIR}) 181add_library(webpdecoder 182 $<TARGET_OBJECTS:webpdecode> 183 $<TARGET_OBJECTS:webpdspdecode> 184 $<TARGET_OBJECTS:webputilsdecode>) 185target_link_libraries(webpdecoder ${WEBP_DEP_LIBRARIES}) 186target_include_directories( 187 webpdecoder 188 PRIVATE ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} 189 INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> 190 $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>) 191set_target_properties( 192 webpdecoder 193 PROPERTIES PUBLIC_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/src/webp/decode.h;\ 194${CMAKE_CURRENT_SOURCE_DIR}/src/webp/types.h") 195 196configure_pkg_config("src/libwebpdecoder.pc") 197 198# Build the webp library. 199add_library(webpencode OBJECT ${WEBP_ENC_SRCS}) 200target_include_directories(webpencode 201 PRIVATE ${CMAKE_CURRENT_BINARY_DIR} 202 ${CMAKE_CURRENT_SOURCE_DIR}) 203add_library(webpdsp 204 OBJECT 205 ${WEBP_DSP_COMMON_SRCS} 206 ${WEBP_DSP_DEC_SRCS} 207 ${WEBP_DSP_ENC_SRCS}) 208target_include_directories(webpdsp 209 PRIVATE ${CMAKE_CURRENT_BINARY_DIR} 210 ${CMAKE_CURRENT_SOURCE_DIR}) 211add_library(webputils 212 OBJECT 213 ${WEBP_UTILS_COMMON_SRCS} 214 ${WEBP_UTILS_DEC_SRCS} 215 ${WEBP_UTILS_ENC_SRCS}) 216target_include_directories(webputils 217 PRIVATE ${CMAKE_CURRENT_BINARY_DIR} 218 ${CMAKE_CURRENT_SOURCE_DIR}) 219add_library(webp 220 $<TARGET_OBJECTS:webpdecode> 221 $<TARGET_OBJECTS:webpdsp> 222 $<TARGET_OBJECTS:webpencode> 223 $<TARGET_OBJECTS:webputils>) 224target_link_libraries(webp ${WEBP_DEP_LIBRARIES}) 225target_include_directories(webp 226 PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} 227 ${CMAKE_CURRENT_BINARY_DIR} 228 PUBLIC $<INSTALL_INTERFACE:include>) 229set_target_properties( 230 webp 231 PROPERTIES PUBLIC_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/src/webp/decode.h;\ 232${CMAKE_CURRENT_SOURCE_DIR}/src/webp/encode.h;\ 233${CMAKE_CURRENT_SOURCE_DIR}/src/webp/types.h") 234 235# Make sure the OBJECT libraries are built with position independent code (it is 236# not ON by default). 237set_target_properties(webpdecode 238 webpdspdecode 239 webputilsdecode 240 webpencode 241 webpdsp 242 webputils 243 PROPERTIES POSITION_INDEPENDENT_CODE ON) 244configure_pkg_config("src/libwebp.pc") 245 246# Build the webp demux library. 247add_library(webpdemux ${WEBP_DEMUX_SRCS}) 248target_link_libraries(webpdemux webp) 249target_include_directories(webpdemux 250 PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} 251 ${CMAKE_CURRENT_BINARY_DIR} 252 PUBLIC $<INSTALL_INTERFACE:include>) 253set_target_properties( 254 webpdemux 255 PROPERTIES PUBLIC_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/src/webp/decode.h;\ 256${CMAKE_CURRENT_SOURCE_DIR}/src/webp/demux.h;\ 257${CMAKE_CURRENT_SOURCE_DIR}/src/webp/mux_types.h;\ 258${CMAKE_CURRENT_SOURCE_DIR}/src/webp/types.h") 259 260configure_pkg_config("src/demux/libwebpdemux.pc") 261 262# Set the version numbers. 263function(parse_version FILE NAME VAR) 264 file(READ ${CMAKE_CURRENT_SOURCE_DIR}/src/${FILE} SOURCE_FILE) 265 string(REGEX MATCH 266 "${NAME}_la_LDFLAGS[^\n]* -version-info [0-9:]+" 267 TMP 268 ${SOURCE_FILE}) 269 string(REGEX MATCH 270 "[0-9:]+" 271 TMP 272 ${TMP}) 273 string(REGEX 274 REPLACE ":" 275 "." 276 VERSION 277 ${TMP}) 278 set(${VAR} "${VERSION}" PARENT_SCOPE) 279endfunction() 280parse_version(Makefile.am webp WEBP_WEBP_SOVERSION) 281set_target_properties(webp 282 PROPERTIES VERSION 283 ${PACKAGE_VERSION} 284 SOVERSION 285 ${WEBP_WEBP_SOVERSION}) 286parse_version(Makefile.am webpdecoder WEBP_DECODER_SOVERSION) 287set_target_properties(webpdecoder 288 PROPERTIES VERSION 289 ${PACKAGE_VERSION} 290 SOVERSION 291 ${WEBP_DECODER_SOVERSION}) 292parse_version(demux/Makefile.am webpdemux WEBP_DEMUX_SOVERSION) 293set_target_properties(webpdemux 294 PROPERTIES VERSION 295 ${PACKAGE_VERSION} 296 SOVERSION 297 ${WEBP_DEMUX_SOVERSION}) 298file(READ ${CMAKE_CURRENT_SOURCE_DIR}/configure.ac CONFIGURE_FILE) 299string(REGEX MATCH 300 "AC_INIT\\([^\n]*\\[[0-9\\.]+\\]" 301 TMP 302 ${CONFIGURE_FILE}) 303string(REGEX MATCH 304 "[0-9\\.]+" 305 PROJECT_VERSION 306 ${TMP}) 307 308# Define the libraries to install. 309set(INSTALLED_LIBRARIES webpdecoder webp webpdemux) 310 311# Deal with SIMD. Change the compile flags for SIMD files we use. 312list(LENGTH WEBP_SIMD_FILES_TO_INCLUDE WEBP_SIMD_FILES_TO_INCLUDE_LENGTH) 313math(EXPR WEBP_SIMD_FILES_TO_INCLUDE_RANGE 314 "${WEBP_SIMD_FILES_TO_INCLUDE_LENGTH}-1") 315 316foreach(I_FILE RANGE ${WEBP_SIMD_FILES_TO_INCLUDE_RANGE}) 317 list(GET WEBP_SIMD_FILES_TO_INCLUDE ${I_FILE} FILE) 318 list(GET WEBP_SIMD_FLAGS_TO_INCLUDE ${I_FILE} SIMD_COMPILE_FLAG) 319 set_source_files_properties(${FILE} 320 PROPERTIES 321 COMPILE_FLAGS 322 ${SIMD_COMPILE_FLAG}) 323endforeach() 324 325if(WEBP_BUILD_GIF2WEBP AND NOT GIF_FOUND) 326 set(WEBP_BUILD_GIF2WEBP OFF) 327endif() 328 329if(WEBP_BUILD_ANIM_UTILS AND NOT GIF_FOUND) 330 set(WEBP_BUILD_ANIM_UTILS OFF) 331endif() 332 333# Build the executables if asked for. 334if(WEBP_BUILD_ANIM_UTILS 335 OR WEBP_BUILD_CWEBP 336 OR WEBP_BUILD_DWEBP 337 OR WEBP_BUILD_GIF2WEBP 338 OR WEBP_BUILD_IMG2WEBP 339 OR WEBP_BUILD_VWEBP) 340 # Example utility library. 341 parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/examples "EXAMPLEUTIL_SRCS" 342 "example_util_[^ ]*") 343 list(APPEND EXAMPLEUTIL_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/examples/stopwatch.h) 344 add_library(exampleutil ${EXAMPLEUTIL_SRCS}) 345 target_include_directories( 346 exampleutil 347 PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>) 348 349 parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/imageio "IMAGEIOUTILS_SRCS" 350 "imageio_util_[^ ]*") 351 add_library(imageioutil ${IMAGEIOUTILS_SRCS}) 352 target_link_libraries(imageioutil webp) 353 354 # Image-decoding utility library. 355 parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/imageio "IMAGEDEC_SRCS" 356 "imagedec_[^ ]*") 357 add_library(imagedec ${IMAGEDEC_SRCS}) 358 target_link_libraries(imagedec 359 imageioutil 360 webpdemux 361 webp 362 ${WEBP_DEP_IMG_LIBRARIES}) 363 364 # Image-encoding utility library. 365 parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/imageio "IMAGEENC_SRCS" 366 "imageenc_[^ ]*") 367 add_library(imageenc ${IMAGEENC_SRCS}) 368 target_link_libraries(imageenc webp) 369 370 set_property(TARGET exampleutil 371 imageioutil 372 imagedec 373 imageenc 374 PROPERTY INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR}/src 375 ${CMAKE_CURRENT_BINARY_DIR}/src) 376endif() 377 378if(WEBP_BUILD_DWEBP) 379 # dwebp 380 parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/examples "DWEBP_SRCS" "dwebp") 381 add_executable(dwebp ${DWEBP_SRCS}) 382 target_link_libraries(dwebp exampleutil imagedec imageenc) 383 target_include_directories(dwebp PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/src) 384 install(TARGETS dwebp RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) 385endif() 386 387if(WEBP_BUILD_CWEBP) 388 # cwebp 389 parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/examples "CWEBP_SRCS" "cwebp") 390 add_executable(cwebp ${CWEBP_SRCS}) 391 target_link_libraries(cwebp exampleutil imagedec webp) 392 target_include_directories(cwebp PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/src) 393 install(TARGETS cwebp RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) 394endif() 395 396if(WEBP_BUILD_GIF2WEBP OR WEBP_BUILD_IMG2WEBP) 397 parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/src/mux "WEBP_MUX_SRCS" "") 398 add_library(libwebpmux ${WEBP_MUX_SRCS}) 399 target_link_libraries(libwebpmux webp) 400 target_include_directories(libwebpmux 401 PRIVATE ${CMAKE_CURRENT_BINARY_DIR} 402 ${CMAKE_CURRENT_SOURCE_DIR}) 403 parse_version(mux/Makefile.am webpmux WEBP_MUX_SOVERSION) 404 set_target_properties(libwebpmux 405 PROPERTIES VERSION 406 ${PACKAGE_VERSION} 407 SOVERSION 408 ${WEBP_MUX_SOVERSION}) 409 set_target_properties(libwebpmux 410 PROPERTIES PUBLIC_HEADER 411 "${CMAKE_CURRENT_SOURCE_DIR}/src/webp/mux.h;\ 412${CMAKE_CURRENT_SOURCE_DIR}/src/webp/mux_types.h;\ 413${CMAKE_CURRENT_SOURCE_DIR}/src/webp/types.h;") 414 set_target_properties(libwebpmux PROPERTIES OUTPUT_NAME webpmux) 415 list(APPEND INSTALLED_LIBRARIES libwebpmux) 416 configure_pkg_config("src/mux/libwebpmux.pc") 417endif() 418 419if(WEBP_BUILD_GIF2WEBP) 420 # gif2webp 421 include_directories(${WEBP_DEP_GIF_INCLUDE_DIRS}) 422 parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/examples "GIF2WEBP_SRCS" 423 "gif2webp") 424 add_executable(gif2webp ${GIF2WEBP_SRCS}) 425 target_link_libraries(gif2webp 426 exampleutil 427 imageioutil 428 webp 429 libwebpmux 430 ${WEBP_DEP_GIF_LIBRARIES}) 431 target_include_directories(gif2webp PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/src) 432 install(TARGETS gif2webp RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) 433endif() 434 435if(WEBP_BUILD_IMG2WEBP) 436 # img2webp 437 include_directories(${WEBP_DEP_IMG_INCLUDE_DIRS}) 438 parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/examples "IMG2WEBP_SRCS" 439 "img2webp") 440 add_executable(img2webp ${IMG2WEBP_SRCS}) 441 target_link_libraries(img2webp 442 exampleutil 443 imagedec 444 imageioutil 445 webp 446 libwebpmux) 447 target_include_directories(img2webp PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/src) 448 install(TARGETS img2webp RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) 449endif() 450 451if(WEBP_BUILD_VWEBP) 452 # vwebp 453 find_package(GLUT) 454 if(GLUT_FOUND) 455 include_directories(${WEBP_DEP_IMG_INCLUDE_DIRS}) 456 parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/examples "VWEBP_SRCS" "vwebp") 457 add_executable(vwebp ${VWEBP_SRCS}) 458 target_link_libraries(vwebp 459 ${OPENGL_LIBRARIES} 460 exampleutil 461 GLUT::GLUT 462 imageioutil 463 webp 464 webpdemux) 465 target_include_directories(vwebp 466 PRIVATE GLUT::GLUT 467 ${CMAKE_CURRENT_BINARY_DIR}/src 468 ${OPENGL_INCLUDE_DIR}) 469 install(TARGETS vwebp RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) 470 if(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin") 471 check_c_compiler_flag("-Wno-deprecated-declarations" HAS_NO_DEPRECATED) 472 if(HAS_NO_DEPRECATED) 473 target_compile_options(vwebp PRIVATE "-Wno-deprecated-declarations") 474 endif() 475 endif() 476 endif() 477endif() 478 479if(WEBP_BUILD_WEBPINFO) 480 # webpinfo 481 include_directories(${WEBP_DEP_IMG_INCLUDE_DIRS}) 482 parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/examples "WEBPINFO_SRCS" 483 "webpinfo") 484 add_executable(webpinfo ${WEBPINFO_SRCS}) 485 target_link_libraries(webpinfo exampleutil imageioutil) 486 target_include_directories(webpinfo PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/src) 487 install(TARGETS webpinfo RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) 488endif() 489 490if(WEBP_BUILD_WEBPMUX) 491 # webpmux 492 parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/examples "WEBPMUX_SRCS" 493 "webpmux") 494 add_executable(webpmux ${WEBPMUX_SRCS}) 495 target_link_libraries(webpmux exampleutil imageioutil libwebpmux webp) 496 target_include_directories(webpmux PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/src) 497 install(TARGETS webpmux RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) 498endif() 499 500if(WEBP_BUILD_EXTRAS) 501 set(EXTRAS_MAKEFILE "${CMAKE_CURRENT_SOURCE_DIR}/extras") 502 parse_makefile_am(${EXTRAS_MAKEFILE} "WEBP_EXTRAS_SRCS" "libwebpextras_la") 503 parse_makefile_am(${EXTRAS_MAKEFILE} "GET_DISTO_SRCS" "get_disto") 504 parse_makefile_am(${EXTRAS_MAKEFILE} "WEBP_QUALITY_SRCS" "webp_quality") 505 parse_makefile_am(${EXTRAS_MAKEFILE} "VWEBP_SDL_SRCS" "vwebp_sdl") 506 507 # get_disto 508 add_executable(get_disto ${GET_DISTO_SRCS}) 509 target_link_libraries(get_disto imagedec) 510 target_include_directories(get_disto 511 PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} 512 ${CMAKE_CURRENT_SOURCE_DIR}/src 513 ${CMAKE_CURRENT_BINARY_DIR}/src) 514 install(TARGETS get_disto RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) 515 516 # webp_quality 517 add_executable(webp_quality ${WEBP_QUALITY_SRCS} ${WEBP_EXTRAS_SRCS}) 518 target_link_libraries(webp_quality exampleutil imagedec) 519 target_include_directories(webp_quality PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) 520 install(TARGETS webp_quality RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) 521 522 # vwebp_sdl 523 find_package(SDL) 524 if(SDL_FOUND) 525 add_executable(vwebp_sdl ${VWEBP_SDL_SRCS}) 526 target_link_libraries(vwebp_sdl ${SDL_LIBRARY} imageioutil webp) 527 target_include_directories(vwebp_sdl 528 PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} 529 ${CMAKE_CURRENT_SOURCE_DIR}/src 530 ${CMAKE_CURRENT_BINARY_DIR} 531 ${CMAKE_CURRENT_BINARY_DIR}/src 532 ${SDL_INCLUDE_DIR}) 533 set(WEBP_HAVE_SDL 1) 534 target_compile_definitions(vwebp_sdl PUBLIC WEBP_HAVE_SDL) 535 install(TARGETS vwebp_sdl RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) 536 endif() 537endif() 538 539if(WEBP_BUILD_WEBP_JS) 540 # JavaScript version 541 add_executable(webp_js ${CMAKE_CURRENT_SOURCE_DIR}/extras/webp_to_sdl.c) 542 target_link_libraries(webp_js webpdecoder SDL) 543 target_include_directories(webp_js PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) 544 set(WEBP_HAVE_SDL 1) 545 set_target_properties( 546 webp_js 547 PROPERTIES LINK_FLAGS 548 "-s EXPORTED_FUNCTIONS='[\"_WebpToSDL\"]' -s INVOKE_RUN=0 \ 549 -s EXTRA_EXPORTED_RUNTIME_METHODS='[\"cwrap\"]'") 550 set_target_properties(webp_js PROPERTIES OUTPUT_NAME webp) 551 target_compile_definitions(webp_js PUBLIC EMSCRIPTEN WEBP_HAVE_SDL) 552 553 # WASM version 554 add_executable(webp_wasm ${CMAKE_CURRENT_SOURCE_DIR}/extras/webp_to_sdl.c) 555 target_link_libraries(webp_wasm webpdecoder SDL) 556 target_include_directories(webp_wasm PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) 557 set_target_properties( 558 webp_wasm 559 PROPERTIES LINK_FLAGS "-s WASM=1 -s 'BINARYEN_METHOD=\"native-wasm\"' \ 560 -s EXPORTED_FUNCTIONS='[\"_WebpToSDL\"]' -s INVOKE_RUN=0 \ 561 -s EXTRA_EXPORTED_RUNTIME_METHODS='[\"cwrap\"]'") 562 target_compile_definitions(webp_wasm PUBLIC EMSCRIPTEN WEBP_HAVE_SDL) 563 564 target_compile_definitions(webpdspdecode PUBLIC EMSCRIPTEN) 565endif() 566 567if(WEBP_BUILD_ANIM_UTILS) 568 # anim_diff 569 include_directories(${WEBP_DEP_IMG_INCLUDE_DIRS} ${WEBP_DEP_GIF_INCLUDE_DIRS}) 570 parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/examples "ANIM_DIFF_SRCS" 571 "anim_diff") 572 add_executable(anim_diff ${ANIM_DIFF_SRCS}) 573 target_link_libraries(anim_diff 574 exampleutil 575 imagedec 576 imageenc 577 imageioutil 578 webp 579 libwebpmux 580 webpdemux 581 ${WEBP_DEP_GIF_LIBRARIES}) 582 target_include_directories(anim_diff PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/src) 583 584 # anim_dump 585 include_directories(${WEBP_DEP_IMG_INCLUDE_DIRS} ${WEBP_DEP_GIF_INCLUDE_DIRS}) 586 parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/examples "ANIM_DUMP_SRCS" 587 "anim_dump") 588 add_executable(anim_dump ${ANIM_DUMP_SRCS}) 589 target_link_libraries(anim_dump 590 exampleutil 591 imagedec 592 imageenc 593 imageioutil 594 webp 595 libwebpmux 596 webpdemux 597 ${WEBP_DEP_GIF_LIBRARIES}) 598 target_include_directories(anim_dump PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/src) 599endif() 600 601# Install the different headers and libraries. 602include(GNUInstallDirs) 603install(TARGETS ${INSTALLED_LIBRARIES} 604 EXPORT ${PROJECT_NAME}Targets 605 PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/webp 606 INCLUDES 607 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} 608 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} 609 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} 610 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) 611set(ConfigPackageLocation ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/cmake/) 612install(EXPORT ${PROJECT_NAME}Targets 613 NAMESPACE ${PROJECT_NAME}:: 614 DESTINATION ${ConfigPackageLocation}) 615 616# Create the CMake version file. 617include(CMakePackageConfigHelpers) 618write_basic_package_version_file( 619 "${CMAKE_CURRENT_BINARY_DIR}/WebPConfigVersion.cmake" 620 VERSION ${PACKAGE_VERSION} 621 COMPATIBILITY AnyNewerVersion) 622 623# Create the Config file. 624include(CMakePackageConfigHelpers) 625configure_package_config_file( 626 ${CMAKE_CURRENT_SOURCE_DIR}/cmake/WebPConfig.cmake.in 627 ${CMAKE_CURRENT_BINARY_DIR}/WebPConfig.cmake 628 INSTALL_DESTINATION 629 ${ConfigPackageLocation}) 630 631# Install the generated CMake files. 632install(FILES "${CMAKE_CURRENT_BINARY_DIR}/WebPConfigVersion.cmake" 633 "${CMAKE_CURRENT_BINARY_DIR}/WebPConfig.cmake" 634 DESTINATION ${ConfigPackageLocation}) 635 636# Install the man pages. 637set(MAN_PAGES 638 cwebp.1 639 dwebp.1 640 gif2webp.1 641 img2webp.1 642 vwebp.1 643 webpmux.1 644 webpinfo.1) 645set(EXEC_BUILDS 646 "CWEBP" 647 "DWEBP" 648 "GIF2WEBP" 649 "IMG2WEBP" 650 "VWEBP" 651 "WEBPMUX" 652 "WEBPINFO") 653list(LENGTH MAN_PAGES MAN_PAGES_LENGTH) 654math(EXPR MAN_PAGES_RANGE "${MAN_PAGES_LENGTH} - 1") 655 656foreach(I_MAN RANGE ${MAN_PAGES_RANGE}) 657 list(GET EXEC_BUILDS ${I_MAN} EXEC_BUILD) 658 if(WEBP_BUILD_${EXEC_BUILD}) 659 list(GET MAN_PAGES ${I_MAN} MAN_PAGE) 660 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/man/${MAN_PAGE} 661 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 662 COMPONENT doc) 663 endif() 664endforeach() 665