1# CMakeLists.txt 2 3# Copyright (C) 2007,2009-2017 Glenn Randers-Pehrson 4# Written by Christian Ehrlicher, 2007 5# Revised by Roger Lowman, 2009-2010 6# Revised by Clifford Yapp, 2011-2012 7# Revised by Roger Leigh, 2016 8# Revised by Andreas Franek, 2016 9 10# This code is released under the libpng license. 11# For conditions of distribution and use, see the disclaimer 12# and license in png.h 13 14cmake_minimum_required(VERSION 3.0.2) 15cmake_policy(VERSION 3.0.2) 16 17# Set MacOSX @rpath usage globally. 18if (POLICY CMP0020) 19 cmake_policy(SET CMP0020 NEW) 20endif(POLICY CMP0020) 21if (POLICY CMP0042) 22 cmake_policy(SET CMP0042 NEW) 23endif(POLICY CMP0042) 24# Use new variable expansion policy. 25if (POLICY CMP0053) 26 cmake_policy(SET CMP0053 NEW) 27endif(POLICY CMP0053) 28if (POLICY CMP0054) 29 cmake_policy(SET CMP0054 NEW) 30endif(POLICY CMP0054) 31 32set(CMAKE_CONFIGURATION_TYPES "Release;Debug;MinSizeRel;RelWithDebInfo") 33 34project(libpng ASM C) 35enable_testing() 36 37set(PNGLIB_MAJOR 1) 38set(PNGLIB_MINOR 6) 39set(PNGLIB_RELEASE 34) 40set(PNGLIB_NAME libpng${PNGLIB_MAJOR}${PNGLIB_MINOR}) 41set(PNGLIB_VERSION ${PNGLIB_MAJOR}.${PNGLIB_MINOR}.${PNGLIB_RELEASE}) 42 43include(GNUInstallDirs) 44 45# needed packages 46 47#Allow users to specify location of Zlib, 48# Useful if zlib is being built alongside this as a sub-project 49option(PNG_BUILD_ZLIB "Custom zlib Location, else find_package is used" OFF) 50 51IF(NOT PNG_BUILD_ZLIB) 52 find_package(ZLIB REQUIRED) 53 include_directories(${ZLIB_INCLUDE_DIR}) 54ENDIF(NOT PNG_BUILD_ZLIB) 55 56if(NOT WIN32) 57 find_library(M_LIBRARY 58 NAMES m 59 PATHS /usr/lib /usr/local/lib 60 ) 61 if(NOT M_LIBRARY) 62 message(STATUS "math lib 'libm' not found; floating point support disabled") 63 endif() 64else() 65 # not needed on windows 66 set(M_LIBRARY "") 67endif() 68 69# COMMAND LINE OPTIONS 70option(PNG_SHARED "Build shared lib" ON) 71option(PNG_STATIC "Build static lib" ON) 72option(PNG_TESTS "Build libpng tests" ON) 73 74# Many more configuration options could be added here 75option(PNG_FRAMEWORK "Build OS X framework" OFF) 76option(PNG_DEBUG "Build with debug output" OFF) 77option(PNGARG "Disable ANSI-C prototypes" OFF) 78 79option(PNG_HARDWARE_OPTIMIZATIONS "Enable Hardware Optimizations" ON) 80 81 82set(PNG_PREFIX "" CACHE STRING "Prefix to add to the API function names") 83set(DFA_XTRA "" CACHE FILEPATH "File containing extra configuration settings") 84 85if(PNG_HARDWARE_OPTIMIZATIONS) 86# set definitions and sources for arm 87if(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm" OR 88 CMAKE_SYSTEM_PROCESSOR MATCHES "^aarch64") 89 set(PNG_ARM_NEON_POSSIBLE_VALUES check on off) 90 set(PNG_ARM_NEON "check" CACHE STRING "Enable ARM NEON optimizations: 91 check: (default) use internal checking code; 92 off: disable the optimizations; 93 on: turn on unconditionally.") 94 set_property(CACHE PNG_ARM_NEON PROPERTY STRINGS 95 ${PNG_ARM_NEON_POSSIBLE_VALUES}) 96 list(FIND PNG_ARM_NEON_POSSIBLE_VALUES ${PNG_ARM_NEON} index) 97 if(index EQUAL -1) 98 message(FATAL_ERROR 99 " PNG_ARM_NEON must be one of [${PNG_ARM_NEON_POSSIBLE_VALUES}]") 100 elseif(NOT ${PNG_ARM_NEON} STREQUAL "no") 101 set(libpng_arm_sources 102 arm/arm_init.c 103 arm/filter_neon.S 104 arm/filter_neon_intrinsics.c) 105 106 if(${PNG_ARM_NEON} STREQUAL "on") 107 add_definitions(-DPNG_ARM_NEON_OPT=2) 108 elseif(${PNG_ARM_NEON} STREQUAL "check") 109 add_definitions(-DPNG_ARM_NEON_CHECK_SUPPORTED) 110 endif() 111 else() 112 add_definitions(-DPNG_ARM_NEON_OPT=0) 113 endif() 114endif() 115 116# set definitions and sources for powerpc 117if(CMAKE_SYSTEM_PROCESSOR MATCHES "^powerpc*" OR 118 CMAKE_SYSTEM_PROCESSOR MATCHES "^ppc64*" ) 119 set(PNG_POWERPC_VSX_POSSIBLE_VALUES on off) 120 set(PNG_POWERPC_VSX "on" CACHE STRING "Enable POWERPC VSX optimizations: 121 off: disable the optimizations.") 122 set_property(CACHE PNG_POWERPC_VSX PROPERTY STRINGS 123 ${PNG_POWERPC_VSX_POSSIBLE_VALUES}) 124 list(FIND PNG_POWERPC_VSX_POSSIBLE_VALUES ${PNG_POWERPC_VSX} index) 125 if(index EQUAL -1) 126 message(FATAL_ERROR 127 " PNG_POWERPC_VSX must be one of [${PNG_POWERPC_VSX_POSSIBLE_VALUES}]") 128 elseif(NOT ${PNG_POWERPC_VSX} STREQUAL "no") 129 set(libpng_powerpc_sources 130 powerpc/powerpc_init.c 131 powerpc/filter_vsx_intrinsics.c) 132 if(${PNG_POWERPC_VSX} STREQUAL "on") 133 add_definitions(-DPNG_POWERPC_VSX_OPT=2) 134 endif() 135 else() 136 add_definitions(-DPNG_POWERPC_VSX_OPT=0) 137 endif() 138endif() 139 140# set definitions and sources for intel 141if(CMAKE_SYSTEM_PROCESSOR MATCHES "^i?86" OR 142 CMAKE_SYSTEM_PROCESSOR MATCHES "^x86_64*" ) 143 set(PNG_INTEL_SSE_POSSIBLE_VALUES on off) 144 set(PNG_INTEL_SSE "on" CACHE STRING "Enable INTEL_SSE optimizations: 145 off: disable the optimizations") 146 set_property(CACHE PNG_INTEL_SSE PROPERTY STRINGS 147 ${PNG_INTEL_SSE_POSSIBLE_VALUES}) 148 list(FIND PNG_INTEL_SSE_POSSIBLE_VALUES ${PNG_INTEL_SSE} index) 149 if(index EQUAL -1) 150 message(FATAL_ERROR 151 " PNG_INTEL_SSE must be one of [${PNG_INTEL_SSE_POSSIBLE_VALUES}]") 152 elseif(NOT ${PNG_INTEL_SSE} STREQUAL "no") 153 set(libpng_intel_sources 154 intel/intel_init.c 155 intel/filter_sse2_intrinsics.c) 156 if(${PNG_INTEL_SSE} STREQUAL "on") 157 add_definitions(-DPNG_INTEL_SSE_OPT=1) 158 endif() 159 else() 160 add_definitions(-DPNG_INTEL_SSE_OPT=0) 161 endif() 162endif() 163 164# set definitions and sources for MIPS 165if(CMAKE_SYSTEM_PROCESSOR MATCHES "mipsel*" OR 166 CMAKE_SYSTEM_PROCESSOR MATCHES "mips64el*" ) 167 set(PNG_MIPS_MSA_POSSIBLE_VALUES on off) 168 set(PNG_MIPS_MSA "on" CACHE STRING "Enable MIPS_MSA optimizations: 169 off: disable the optimizations") 170 set_property(CACHE PNG_MIPS_MSA PROPERTY STRINGS 171 ${PNG_MIPS_MSA_POSSIBLE_VALUES}) 172 list(FIND PNG_MIPS_MSA_POSSIBLE_VALUES ${PNG_MIPS_MSA} index) 173 if(index EQUAL -1) 174 message(FATAL_ERROR 175 " PNG_MIPS_MSA must be one of [${PNG_MIPS_MSA_POSSIBLE_VALUES}]") 176 elseif(NOT ${PNG_MIPS_MSA} STREQUAL "no") 177 set(libpng_mips_sources 178 mips/mips_init.c 179 mips/filter_msa_intrinsics.c) 180 if(${PNG_MIPS_MSA} STREQUAL "on") 181 add_definitions(-DPNG_MIPS_MSA_OPT=2) 182 endif() 183 else() 184 add_definitions(-DPNG_MIPS_MSA_OPT=0) 185 endif() 186endif() 187endif(PNG_HARDWARE_OPTIMIZATIONS) 188 189# SET LIBNAME 190set(PNG_LIB_NAME png${PNGLIB_MAJOR}${PNGLIB_MINOR}) 191 192# to distinguish between debug and release lib 193set(CMAKE_DEBUG_POSTFIX "d") 194 195include(CheckCSourceCompiles) 196option(ld-version-script "Enable linker version script" ON) 197if(ld-version-script AND NOT APPLE) 198 # Check if LD supports linker scripts. 199 file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/conftest.map" "VERS_1 { 200 global: sym; 201 local: *; 202}; 203 204VERS_2 { 205 global: sym2; 206 main; 207} VERS_1; 208") 209 set(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS}) 210 set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS} "-Wl,--version-script='${CMAKE_CURRENT_BINARY_DIR}/conftest.map'") 211 check_c_source_compiles("void sym(void) {} 212void sym2(void) {} 213int main(void) {return 0;} 214" HAVE_LD_VERSION_SCRIPT) 215 if(NOT HAVE_LD_VERSION_SCRIPT) 216 set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE} "-Wl,-M -Wl,${CMAKE_CURRENT_BINARY_DIR}/conftest.map") 217 check_c_source_compiles("void sym(void) {} 218void sym2(void) {} 219int main(void) {return 0;} 220" HAVE_SOLARIS_LD_VERSION_SCRIPT) 221 endif() 222 set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE}) 223 file(REMOVE "${CMAKE_CURRENT_BINARY_DIR}/conftest.map") 224endif() 225 226# Find symbol prefix. Likely obsolete and unnecessary with recent 227# toolchains (it's not done in many other projects). 228function(symbol_prefix) 229 set(SYMBOL_PREFIX) 230 231 execute_process(COMMAND "${CMAKE_C_COMPILER}" "-E" "-" 232 INPUT_FILE /dev/null 233 OUTPUT_VARIABLE OUT 234 RESULT_VARIABLE STATUS) 235 236 if(CPP_FAIL) 237 message(WARNING "Failed to run the C preprocessor") 238 endif() 239 240 string(REPLACE "\n" ";" OUT "${OUT}") 241 foreach(line ${OUT}) 242 string(REGEX MATCH "^PREFIX=" found_match "${line}") 243 if(found_match) 244 STRING(REGEX REPLACE "^PREFIX=(.*\)" "\\1" prefix "${line}") 245 string(REGEX MATCH "__USER_LABEL_PREFIX__" found_match "${prefix}") 246 if(found_match) 247 STRING(REGEX REPLACE "(.*)__USER_LABEL_PREFIX__(.*)" "\\1\\2" prefix "${prefix}") 248 endif() 249 set(SYMBOL_PREFIX "${prefix}") 250 endif() 251 endforeach() 252 253 message(STATUS "Symbol prefix: ${SYMBOL_PREFIX}") 254 set(SYMBOL_PREFIX "${SYMBOL_PREFIX}" PARENT_SCOPE) 255endfunction() 256 257if(UNIX) 258 symbol_prefix() 259endif() 260 261find_program(AWK NAMES gawk awk) 262 263include_directories(${CMAKE_CURRENT_BINARY_DIR}) 264 265if(NOT AWK OR ANDROID) 266 # No awk available to generate sources; use pre-built pnglibconf.h 267 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.h.prebuilt 268 ${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h) 269 add_custom_target(genfiles) # Dummy 270else() 271 include(CMakeParseArguments) 272 # Generate .chk from .out with awk 273 # generate_chk(INPUT inputfile OUTPUT outputfile [DEPENDS dep1 [dep2...]]) 274 function(generate_chk) 275 set(options) 276 set(oneValueArgs INPUT OUTPUT) 277 set(multiValueArgs DEPENDS) 278 cmake_parse_arguments(_GC "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) 279 if (NOT _GC_INPUT) 280 message(FATAL_ERROR "Invalid arguments. generate_out requires input.") 281 endif() 282 if (NOT _GC_OUTPUT) 283 message(FATAL_ERROR "Invalid arguments. generate_out requires output.") 284 endif() 285 286 add_custom_command(OUTPUT "${_GC_OUTPUT}" 287 COMMAND "${CMAKE_COMMAND}" 288 "-DINPUT=${_GC_INPUT}" 289 "-DOUTPUT=${_GC_OUTPUT}" 290 -P "${CMAKE_CURRENT_BINARY_DIR}/scripts/genchk.cmake" 291 DEPENDS "${_GC_INPUT}" ${_GC_DEPENDS} 292 WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") 293 endfunction() 294 295 # Generate .out from .c with awk 296 # generate_out(INPUT inputfile OUTPUT outputfile [DEPENDS dep1 [dep2...]]) 297 function(generate_out) 298 set(options) 299 set(oneValueArgs INPUT OUTPUT) 300 set(multiValueArgs DEPENDS) 301 cmake_parse_arguments(_GO "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) 302 if (NOT _GO_INPUT) 303 message(FATAL_ERROR "Invalid arguments. generate_out requires input.") 304 endif() 305 if (NOT _GO_OUTPUT) 306 message(FATAL_ERROR "Invalid arguments. generate_out requires output.") 307 endif() 308 309 add_custom_command(OUTPUT "${_GO_OUTPUT}" 310 COMMAND "${CMAKE_COMMAND}" 311 "-DINPUT=${_GO_INPUT}" 312 "-DOUTPUT=${_GO_OUTPUT}" 313 -P "${CMAKE_CURRENT_BINARY_DIR}/scripts/genout.cmake" 314 DEPENDS "${_GO_INPUT}" ${_GO_DEPENDS} 315 WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") 316 endfunction() 317 318 # Generate specific source file with awk 319 # generate_source(OUTPUT outputfile [DEPENDS dep1 [dep2...]]) 320 function(generate_source) 321 set(options) 322 set(oneValueArgs OUTPUT) 323 set(multiValueArgs DEPENDS) 324 cmake_parse_arguments(_GSO "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) 325 if (NOT _GSO_OUTPUT) 326 message(FATAL_ERROR "Invalid arguments. generate_source requires output.") 327 endif() 328 329 add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${_GSO_OUTPUT}" 330 COMMAND "${CMAKE_COMMAND}" 331 "-DOUTPUT=${_GSO_OUTPUT}" 332 -P "${CMAKE_CURRENT_BINARY_DIR}/scripts/gensrc.cmake" 333 DEPENDS ${_GSO_DEPENDS} 334 WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") 335 endfunction() 336 337 # Copy file 338 function(generate_copy source destination) 339 add_custom_command(OUTPUT "${destination}" 340 COMMAND "${CMAKE_COMMAND}" -E remove "${destination}" 341 COMMAND "${CMAKE_COMMAND}" -E copy "${source}" 342 "${destination}" 343 DEPENDS "${source}") 344 endfunction() 345 346 # Generate scripts/pnglibconf.h 347 generate_source(OUTPUT "scripts/pnglibconf.c" 348 DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.dfa" 349 "${CMAKE_CURRENT_SOURCE_DIR}/scripts/options.awk" 350 "${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h") 351 352 # Generate pnglibconf.c 353 generate_source(OUTPUT "pnglibconf.c" 354 DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.dfa" 355 "${CMAKE_CURRENT_SOURCE_DIR}/scripts/options.awk" 356 "${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h") 357 358 if(PNG_PREFIX) 359 set(PNGLIBCONF_H_EXTRA_DEPENDS 360 "${CMAKE_CURRENT_BINARY_DIR}/scripts/prefix.out" 361 "${CMAKE_CURRENT_SOURCE_DIR}/scripts/macro.lst") 362 set(PNGPREFIX_H_EXTRA_DEPENDS 363 "${CMAKE_CURRENT_BINARY_DIR}/scripts/intprefix.out") 364 endif() 365 366 generate_out(INPUT "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.c" 367 OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out") 368 369 # Generate pnglibconf.h 370 generate_source(OUTPUT "pnglibconf.h" 371 DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out" 372 ${PNGLIBCONF_H_EXTRA_DEPENDS}) 373 374 generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/intprefix.c" 375 OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/intprefix.out" 376 DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h") 377 378 generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/prefix.c" 379 OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/prefix.out" 380 DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/png.h" 381 "${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h" 382 "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out") 383 384 # Generate pngprefix.h 385 generate_source(OUTPUT "pngprefix.h" 386 DEPENDS ${PNGPREFIX_H_EXTRA_DEPENDS}) 387 388 generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/sym.c" 389 OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/sym.out" 390 DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h") 391 392 generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/symbols.c" 393 OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.out" 394 DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/png.h" 395 "${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h" 396 "${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.h.prebuilt") 397 398 generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/vers.c" 399 OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/vers.out" 400 DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/png.h" 401 "${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h" 402 "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h") 403 404 generate_chk(INPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.out" 405 OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.chk" 406 DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/scripts/checksym.awk" 407 "${CMAKE_CURRENT_SOURCE_DIR}/scripts/symbols.def") 408 409 add_custom_target(symbol-check DEPENDS 410 "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.chk") 411 412 generate_copy("${CMAKE_CURRENT_BINARY_DIR}/scripts/sym.out" 413 "${CMAKE_CURRENT_BINARY_DIR}/libpng.sym") 414 generate_copy("${CMAKE_CURRENT_BINARY_DIR}/scripts/vers.out" 415 "${CMAKE_CURRENT_BINARY_DIR}/libpng.vers") 416 417 add_custom_target(genvers DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/libpng.vers") 418 add_custom_target(gensym DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/libpng.sym") 419 420 add_custom_target("genprebuilt" 421 COMMAND "${CMAKE_COMMAND}" 422 "-DOUTPUT=scripts/pnglibconf.h.prebuilt" 423 -P "${CMAKE_CURRENT_BINARY_DIR}/scripts/gensrc.cmake" 424 WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") 425 426 # A single target handles generation of all generated files. If 427 # they are dependend upon separately by multiple targets, this 428 # confuses parallel make (it would require a separate top-level 429 # target for each file to track the dependencies properly). 430 add_custom_target(genfiles DEPENDS 431 "${CMAKE_CURRENT_BINARY_DIR}/libpng.sym" 432 "${CMAKE_CURRENT_BINARY_DIR}/libpng.vers" 433 "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.c" 434 "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h" 435 "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out" 436 "${CMAKE_CURRENT_BINARY_DIR}/pngprefix.h" 437 "${CMAKE_CURRENT_BINARY_DIR}/scripts/intprefix.out" 438 "${CMAKE_CURRENT_BINARY_DIR}/scripts/pnglibconf.c" 439 "${CMAKE_CURRENT_BINARY_DIR}/scripts/prefix.out" 440 "${CMAKE_CURRENT_BINARY_DIR}/scripts/sym.out" 441 "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.chk" 442 "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.out" 443 "${CMAKE_CURRENT_BINARY_DIR}/scripts/vers.out") 444endif(NOT AWK OR ANDROID) 445 446# OUR SOURCES 447set(libpng_public_hdrs 448 png.h 449 pngconf.h 450 "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h" 451) 452set(libpng_private_hdrs 453 pngpriv.h 454 pngdebug.h 455 pnginfo.h 456 pngstruct.h 457) 458if(AWK AND NOT ANDROID) 459 list(APPEND libpng_private_hdrs "${CMAKE_CURRENT_BINARY_DIR}/pngprefix.h") 460endif() 461set(libpng_sources 462 ${libpng_public_hdrs} 463 ${libpng_private_hdrs} 464 png.c 465 pngerror.c 466 pngget.c 467 pngmem.c 468 pngpread.c 469 pngread.c 470 pngrio.c 471 pngrtran.c 472 pngrutil.c 473 pngset.c 474 pngtrans.c 475 pngwio.c 476 pngwrite.c 477 pngwtran.c 478 pngwutil.c 479 ${libpng_arm_sources} 480 ${libpng_intel_sources} 481 ${libpng_mips_sources} 482 ${libpng_powerpc_sources} 483) 484set(pngtest_sources 485 pngtest.c 486) 487set(pngvalid_sources 488 contrib/libtests/pngvalid.c 489) 490set(pngstest_sources 491 contrib/libtests/pngstest.c 492) 493set(pngunknown_sources 494 contrib/libtests/pngunknown.c 495) 496set(pngimage_sources 497 contrib/libtests/pngimage.c 498) 499set(pngfix_sources 500 contrib/tools/pngfix.c 501) 502set(png_fix_itxt_sources 503 contrib/tools/png-fix-itxt.c 504) 505 506if(MSVC) 507 add_definitions(-D_CRT_SECURE_NO_DEPRECATE) 508endif(MSVC) 509 510if(PNG_DEBUG) 511 add_definitions(-DPNG_DEBUG) 512endif() 513 514# NOW BUILD OUR TARGET 515include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${ZLIB_INCLUDE_DIR}) 516 517unset(PNG_LIB_TARGETS) 518 519if(PNG_SHARED) 520 add_library(png SHARED ${libpng_sources}) 521 set(PNG_LIB_TARGETS png) 522 set_target_properties(png PROPERTIES OUTPUT_NAME ${PNG_LIB_NAME}) 523 add_dependencies(png genfiles) 524 if(MSVC) 525 # msvc does not append 'lib' - do it here to have consistent name 526 set_target_properties(png PROPERTIES PREFIX "lib") 527 set_target_properties(png PROPERTIES IMPORT_PREFIX "lib") 528 endif() 529 target_link_libraries(png ${ZLIB_LIBRARY} ${M_LIBRARY}) 530 531 if(UNIX AND AWK) 532 if(HAVE_LD_VERSION_SCRIPT) 533 set_target_properties(png PROPERTIES LINK_FLAGS 534 "-Wl,--version-script='${CMAKE_CURRENT_BINARY_DIR}/libpng.vers'") 535 elseif(HAVE_SOLARIS_LD_VERSION_SCRIPT) 536 set_target_properties(png PROPERTIES LINK_FLAGS 537 "-Wl,-M -Wl,'${CMAKE_CURRENT_BINARY_DIR}/libpng.vers'") 538 endif() 539 endif() 540endif() 541 542if(PNG_STATIC) 543 # does not work without changing name 544 set(PNG_LIB_NAME_STATIC png_static) 545 add_library(png_static STATIC ${libpng_sources}) 546 add_dependencies(png_static genfiles) 547 # MSVC doesn't use a different file extension for shared vs. static 548 # libs. We are able to change OUTPUT_NAME to remove the _static 549 # for all other platforms. 550 if(NOT MSVC) 551 set_target_properties(png_static PROPERTIES 552 OUTPUT_NAME "${PNG_LIB_NAME}" 553 CLEAN_DIRECT_OUTPUT 1) 554 else() 555 set_target_properties(png_static PROPERTIES 556 OUTPUT_NAME "${PNG_LIB_NAME}_static" 557 CLEAN_DIRECT_OUTPUT 1) 558 endif() 559 list(APPEND PNG_LIB_TARGETS png_static) 560 if(MSVC) 561 # msvc does not append 'lib' - do it here to have consistent name 562 set_target_properties(png_static PROPERTIES PREFIX "lib") 563 endif() 564 target_link_libraries(png_static ${ZLIB_LIBRARY} ${M_LIBRARY}) 565endif() 566 567if(PNG_FRAMEWORK) 568 set(PNG_LIB_NAME_FRAMEWORK png_framework) 569 add_library(png_framework SHARED ${libpng_sources}) 570 add_dependencies(png_framework genfiles) 571 list(APPEND PNG_LIB_TARGETS png_framework) 572 set_target_properties(png_framework PROPERTIES 573 FRAMEWORK TRUE 574 FRAMEWORK_VERSION ${PNGLIB_VERSION} 575 MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${PNGLIB_MAJOR}.${PNGLIB_MINOR} 576 MACOSX_FRAMEWORK_BUNDLE_VERSION ${PNGLIB_VERSION} 577 MACOSX_FRAMEWORK_IDENTIFIER org.libpng.libpng 578 XCODE_ATTRIBUTE_INSTALL_PATH "@rpath" 579 PUBLIC_HEADER "${libpng_public_hdrs}" 580 OUTPUT_NAME png) 581 target_link_libraries(png_framework ${ZLIB_LIBRARY} ${M_LIBRARY}) 582endif() 583 584if(NOT PNG_LIB_TARGETS) 585 message(SEND_ERROR 586 "No library variant selected to build. " 587 "Please enable at least one of the following options: " 588 " PNG_STATIC, PNG_SHARED, PNG_FRAMEWORK") 589endif() 590 591if(PNG_SHARED AND WIN32) 592 set_target_properties(png PROPERTIES DEFINE_SYMBOL PNG_BUILD_DLL) 593endif() 594 595function(png_add_test) 596 set(options) 597 set(oneValueArgs NAME COMMAND) 598 set(multiValueArgs OPTIONS FILES) 599 cmake_parse_arguments(_PAT "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) 600 601 if (NOT _PAT_NAME) 602 message(FATAL_ERROR "Invalid arguments. png_add_test requires name.") 603 endif() 604 if (NOT _PAT_COMMAND) 605 message(FATAL_ERROR "Invalid arguments. png_add_test requires command.") 606 endif() 607 608 set(TEST_OPTIONS "${_PAT_OPTIONS}") 609 set(TEST_FILES "${_PAT_FILES}") 610 611 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/scripts/test.cmake.in" 612 "${CMAKE_CURRENT_BINARY_DIR}/tests/${_PAT_NAME}.cmake" @ONLY) 613 if(CMAKE_MAJOR_VERSION GREATER 2) # have generator expressions 614 add_test(NAME "${_PAT_NAME}" 615 COMMAND "${CMAKE_COMMAND}" 616 "-DLIBPNG=$<TARGET_FILE:png>" 617 "-DTEST_COMMAND=$<TARGET_FILE:${_PAT_COMMAND}>" 618 -P "${CMAKE_CURRENT_BINARY_DIR}/tests/${_PAT_NAME}.cmake") 619 else() # old 2.x add_test; limited and won't work well on Windows 620 # Note LIBPNG is a dummy value as there are no generator expressions 621 add_test("${_PAT_NAME}" "${CMAKE_COMMAND}" 622 "-DLIBPNG=${CMAKE_CURRENT_BINARY_DIR}/libpng.so" 623 "-DTEST_COMMAND=./${_PAT_COMMAND}" 624 -P "${CMAKE_CURRENT_BINARY_DIR}/tests/${_PAT_NAME}.cmake") 625 endif() 626endfunction() 627 628if(PNG_TESTS AND PNG_SHARED) 629 # Find test PNG files by globbing, but sort lists to ensure 630 # consistency between different filesystems. 631 file(GLOB PNGSUITE_PNGS "${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/*.png") 632 list(SORT PNGSUITE_PNGS) 633 file(GLOB TEST_PNGS "${CMAKE_CURRENT_SOURCE_DIR}/contrib/testpngs/*.png") 634 list(SORT TEST_PNGS) 635 636 set(PNGTEST_PNG "${CMAKE_CURRENT_SOURCE_DIR}/pngtest.png") 637 638 add_executable(pngtest ${pngtest_sources}) 639 target_link_libraries(pngtest png) 640 641 png_add_test(NAME pngtest COMMAND pngtest FILES "${PNGTEST_PNG}") 642 643 add_executable(pngvalid ${pngvalid_sources}) 644 target_link_libraries(pngvalid png) 645 646 png_add_test(NAME pngvalid-gamma-16-to-8 647 COMMAND pngvalid OPTIONS --gamma-16-to-8) 648 png_add_test(NAME pngvalid-gamma-alpha-mode 649 COMMAND pngvalid OPTIONS --gamma-alpha-mode) 650 png_add_test(NAME pngvalid-gamma-background 651 COMMAND pngvalid OPTIONS --gamma-background) 652 png_add_test(NAME pngvalid-gamma-expand16-alpha-mode 653 COMMAND pngvalid OPTIONS --gamma-alpha-mode --expand16) 654 png_add_test(NAME pngvalid-gamma-expand16-background 655 COMMAND pngvalid OPTIONS --gamma-background --expand16) 656 png_add_test(NAME pngvalid-gamma-expand16-transform 657 COMMAND pngvalid OPTIONS --gamma-transform --expand16) 658 png_add_test(NAME pngvalid-gamma-sbit 659 COMMAND pngvalid OPTIONS --gamma-sbit) 660 png_add_test(NAME pngvalid-gamma-threshold 661 COMMAND pngvalid OPTIONS --gamma-threshold) 662 png_add_test(NAME pngvalid-gamma-transform 663 COMMAND pngvalid OPTIONS --gamma-transform) 664 png_add_test(NAME pngvalid-progressive-interlace-standard 665 COMMAND pngvalid OPTIONS --standard --progressive-read --interlace) 666 png_add_test(NAME pngvalid-progressive-size 667 COMMAND pngvalid OPTIONS --size --progressive-read) 668 png_add_test(NAME pngvalid-progressive-standard 669 COMMAND pngvalid OPTIONS --standard --progressive-read) 670 png_add_test(NAME pngvalid-standard 671 COMMAND pngvalid OPTIONS --standard) 672 png_add_test(NAME pngvalid-transform 673 COMMAND pngvalid OPTIONS --transform) 674 675 add_executable(pngstest ${pngstest_sources}) 676 target_link_libraries(pngstest png) 677 678 foreach(gamma_type 1.8 linear none sRGB) 679 foreach(alpha_type none alpha) 680 set(PNGSTEST_FILES) 681 foreach(test_png ${TEST_PNGS}) 682 string(REGEX MATCH ".*-linear[-.].*" TEST_PNG_LINEAR "${test_png}") 683 string(REGEX MATCH ".*-sRGB[-.].*" TEST_PNG_SRGB "${test_png}") 684 string(REGEX MATCH ".*-1.8[-.].*" TEST_PNG_G18 "${test_png}") 685 string(REGEX MATCH ".*-alpha-.*" TEST_PNG_ALPHA "${test_png}") 686 687 set(TEST_PNG_VALID TRUE) 688 689 if(TEST_PNG_ALPHA) 690 if (NOT "${alpha_type}" STREQUAL "alpha") 691 set(TEST_PNG_VALID FALSE) 692 endif() 693 else() 694 if ("${alpha_type}" STREQUAL "alpha") 695 set(TEST_PNG_VALID FALSE) 696 endif() 697 endif() 698 699 if(TEST_PNG_LINEAR) 700 if(NOT "${gamma_type}" STREQUAL "linear") 701 set(TEST_PNG_VALID FALSE) 702 endif() 703 elseif(TEST_PNG_SRGB) 704 if(NOT "${gamma_type}" STREQUAL "sRGB") 705 set(TEST_PNG_VALID FALSE) 706 endif() 707 elseif(TEST_PNG_G18) 708 if(NOT "${gamma_type}" STREQUAL "1.8") 709 set(TEST_PNG_VALID FALSE) 710 endif() 711 else() 712 if(NOT "${gamma_type}" STREQUAL "none") 713 set(TEST_PNG_VALID FALSE) 714 endif() 715 endif() 716 717 if(TEST_PNG_VALID) 718 list(APPEND PNGSTEST_FILES "${test_png}") 719 endif() 720 endforeach() 721 # Should already be sorted, but sort anyway to be certain. 722 list(SORT PNGSTEST_FILES) 723 png_add_test(NAME pngstest-${gamma_type}-${alpha_type} 724 COMMAND pngstest 725 OPTIONS --tmpfile "${gamma_type}-${alpha_type}-" --log 726 FILES ${PNGSTEST_FILES}) 727 endforeach() 728 endforeach() 729 730 add_executable(pngunknown ${pngunknown_sources}) 731 target_link_libraries(pngunknown png) 732 733 png_add_test(NAME pngunknown-discard COMMAND pngunknown OPTIONS --strict default=discard FILES "${PNGTEST_PNG}") 734 png_add_test(NAME pngunknown-IDAT COMMAND pngunknown OPTIONS --strict default=discard IDAT=save FILES "${PNGTEST_PNG}") 735 png_add_test(NAME pngunknown-if-safe COMMAND pngunknown OPTIONS --strict default=if-safe FILES "${PNGTEST_PNG}") 736 png_add_test(NAME pngunknown-sAPI COMMAND pngunknown OPTIONS --strict bKGD=save cHRM=save gAMA=save all=discard iCCP=save sBIT=save sRGB=save FILES "${PNGTEST_PNG}") 737 png_add_test(NAME pngunknown-save COMMAND pngunknown OPTIONS --strict default=save FILES "${PNGTEST_PNG}") 738 png_add_test(NAME pngunknown-sTER COMMAND pngunknown OPTIONS --strict sTER=if-safe FILES "${PNGTEST_PNG}") 739 png_add_test(NAME pngunknown-vpAg COMMAND pngunknown OPTIONS --strict vpAg=if-safe FILES "${PNGTEST_PNG}") 740 741 add_executable(pngimage ${pngimage_sources}) 742 target_link_libraries(pngimage png) 743 744 png_add_test(NAME pngimage-quick COMMAND pngimage OPTIONS --list-combos --log FILES ${PNGSUITE_PNGS}) 745 png_add_test(NAME pngimage-full COMMAND pngimage OPTIONS --exhaustive --list-combos --log FILES ${PNGSUITE_PNGS}) 746endif() 747 748if(PNG_SHARED) 749 add_executable(pngfix ${pngfix_sources}) 750 target_link_libraries(pngfix png) 751 set(PNG_BIN_TARGETS pngfix) 752 753 add_executable(png-fix-itxt ${png_fix_itxt_sources}) 754 target_link_libraries(png-fix-itxt ${ZLIB_LIBRARY} ${M_LIBRARY}) 755 list(APPEND PNG_BIN_TARGETS png-fix-itxt) 756endif() 757 758# Set a variable with CMake code which: 759# Creates a symlink from src to dest (if possible) or alternatively 760# copies if different. 761include(CMakeParseArguments) 762 763function(CREATE_SYMLINK DEST_FILE) 764 765 cmake_parse_arguments(S "" "FILE;TARGET" "" ${ARGN}) 766 767 if(NOT S_TARGET AND NOT S_FILE) 768 message(FATAL_ERROR "Specify either a TARGET or a FILE for CREATE_SYMLINK to link to.") 769 endif(NOT S_TARGET AND NOT S_FILE) 770 771 if(S_TARGET AND S_FILE) 772 message(FATAL_ERROR "CREATE_SYMLINK called with both source file ${S_FILE} and build target ${S_TARGET} arguments - can only handle 1 type per call.") 773 endif(S_TARGET AND S_FILE) 774 775 if(S_FILE) 776 # If we don't need to symlink something that's coming from a build target, 777 # we can go ahead and symlink/copy at configure time. 778 779 if(CMAKE_HOST_WIN32 AND NOT CYGWIN AND NOT MSYS) 780 execute_process( 781 COMMAND "${CMAKE_COMMAND}" -E copy_if_different ${S_FILE} ${DEST_FILE} 782 WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" 783 ) 784 else(CMAKE_HOST_WIN32 AND NOT CYGWIN AND NOT MSYS) 785 execute_process( 786 COMMAND ${CMAKE_COMMAND} -E create_symlink ${S_FILE} ${DEST_FILE} 787 WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" 788 ) 789 endif(CMAKE_HOST_WIN32 AND NOT CYGWIN AND NOT MSYS) 790 endif(S_FILE) 791 792 if(S_TARGET) 793 # We need to use generator expressions, which can be a bit tricky, so for 794 # simplicity make the symlink a POST_BUILD step and use the TARGET 795 # signature of add_custom_command. 796 797 if(CMAKE_HOST_WIN32 AND NOT CYGWIN AND NOT MSYS) 798 add_custom_command(TARGET ${S_TARGET} POST_BUILD 799 COMMAND "${CMAKE_COMMAND}" -E copy_if_different $<TARGET_LINKER_FILE_NAME:${S_TARGET}> $<TARGET_LINKER_FILE_DIR:${S_TARGET}>/${DEST_FILE} 800 ) 801 else(CMAKE_HOST_WIN32 AND NOT CYGWIN AND NOT MSYS) 802 add_custom_command(TARGET ${S_TARGET} POST_BUILD 803 COMMAND "${CMAKE_COMMAND}" -E create_symlink $<TARGET_LINKER_FILE_NAME:${S_TARGET}> $<TARGET_LINKER_FILE_DIR:${S_TARGET}>/${DEST_FILE} 804 ) 805 endif(CMAKE_HOST_WIN32 AND NOT CYGWIN AND NOT MSYS) 806 807 endif(S_TARGET) 808 809endfunction() 810 811# Create source generation scripts. 812configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/genchk.cmake.in 813 ${CMAKE_CURRENT_BINARY_DIR}/scripts/genchk.cmake @ONLY) 814configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/genout.cmake.in 815 ${CMAKE_CURRENT_BINARY_DIR}/scripts/genout.cmake @ONLY) 816configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/gensrc.cmake.in 817 ${CMAKE_CURRENT_BINARY_DIR}/scripts/gensrc.cmake @ONLY) 818 819 820# libpng is a library so default to 'lib' 821if(NOT DEFINED CMAKE_INSTALL_LIBDIR) 822 set(CMAKE_INSTALL_LIBDIR lib) 823endif(NOT DEFINED CMAKE_INSTALL_LIBDIR) 824 825# CREATE PKGCONFIG FILES 826# we use the same files like ./configure, so we have to set its vars 827# Only do this on Windows for Cygwin - the files don't make much sense outside 828# a UNIX look alike 829if(NOT WIN32 OR CYGWIN OR MINGW) 830 set(prefix ${CMAKE_INSTALL_PREFIX}) 831 set(exec_prefix ${CMAKE_INSTALL_PREFIX}) 832 set(libdir ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}) 833 set(includedir ${CMAKE_INSTALL_PREFIX}/include) 834 set(LIBS "-lz -lm") 835 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libpng.pc.in 836 ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}.pc @ONLY) 837 CREATE_SYMLINK(libpng.pc FILE ${PNGLIB_NAME}.pc) 838 839 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libpng-config.in 840 ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config @ONLY) 841 CREATE_SYMLINK(libpng-config FILE ${PNGLIB_NAME}-config) 842endif(NOT WIN32 OR CYGWIN OR MINGW) 843 844# SET UP LINKS 845if(PNG_SHARED) 846 set_target_properties(png PROPERTIES 847# VERSION 16.${PNGLIB_RELEASE}.1.6.34 848 VERSION 16.${PNGLIB_RELEASE}.0 849 SOVERSION 16 850 CLEAN_DIRECT_OUTPUT 1) 851endif() 852 853# If CMake > 2.4.x, we set a variable used below to export 854# targets to an export file. 855# TODO: Use VERSION_GREATER after our cmake_minimum_required >= 2.6.2 856if(CMAKE_MAJOR_VERSION GREATER 1 AND CMAKE_MINOR_VERSION GREATER 4) 857 set(PNG_EXPORT_RULE EXPORT libpng) 858elseif(CMAKE_MAJOR_VERSION GREATER 2) # future proof 859 set(PNG_EXPORT_RULE EXPORT libpng) 860endif() 861 862# INSTALL 863if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL ) 864 install(TARGETS ${PNG_LIB_TARGETS} 865 ${PNG_EXPORT_RULE} 866 RUNTIME DESTINATION bin 867 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} 868 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} 869 FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR}) 870 871 if(PNG_SHARED) 872 # Create a symlink for libpng.dll.a => libpng16.dll.a on Cygwin 873 if(CYGWIN OR MINGW) 874 CREATE_SYMLINK(libpng${CMAKE_IMPORT_LIBRARY_SUFFIX} TARGET png) 875 install(FILES $<TARGET_LINKER_FILE_DIR:png>/libpng${CMAKE_IMPORT_LIBRARY_SUFFIX} DESTINATION ${CMAKE_INSTALL_LIBDIR}) 876 endif(CYGWIN OR MINGW) 877 878 if(NOT WIN32) 879 CREATE_SYMLINK(libpng${CMAKE_SHARED_LIBRARY_SUFFIX} TARGET png) 880 install(FILES $<TARGET_LINKER_FILE_DIR:png>/libpng${CMAKE_SHARED_LIBRARY_SUFFIX} DESTINATION ${CMAKE_INSTALL_LIBDIR}) 881 endif(NOT WIN32) 882 endif(PNG_SHARED) 883 884 if(PNG_STATIC) 885 if(NOT WIN32 OR CYGWIN OR MINGW) 886 CREATE_SYMLINK( libpng${CMAKE_STATIC_LIBRARY_SUFFIX} TARGET png_static) 887 install(FILES $<TARGET_LINKER_FILE_DIR:png_static>/libpng${CMAKE_STATIC_LIBRARY_SUFFIX} DESTINATION ${CMAKE_INSTALL_LIBDIR}) 888 endif(NOT WIN32 OR CYGWIN OR MINGW) 889 endif() 890endif() 891 892if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL ) 893 install(FILES ${libpng_public_hdrs} DESTINATION include) 894 install(FILES ${libpng_public_hdrs} DESTINATION include/${PNGLIB_NAME}) 895endif() 896if(NOT SKIP_INSTALL_EXECUTABLES AND NOT SKIP_INSTALL_ALL ) 897 if(NOT WIN32 OR CYGWIN OR MINGW) 898 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng-config DESTINATION bin) 899 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config 900 DESTINATION bin) 901 endif(NOT WIN32 OR CYGWIN OR MINGW) 902endif() 903 904if(NOT SKIP_INSTALL_PROGRAMS AND NOT SKIP_INSTALL_ALL ) 905 install(TARGETS ${PNG_BIN_TARGETS} 906 RUNTIME DESTINATION bin) 907endif() 908 909if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL ) 910 # Install man pages 911 if(NOT PNG_MAN_DIR) 912 set(PNG_MAN_DIR "share/man") 913 endif() 914 install(FILES libpng.3 libpngpf.3 DESTINATION ${PNG_MAN_DIR}/man3) 915 install(FILES png.5 DESTINATION ${PNG_MAN_DIR}/man5) 916 # Install pkg-config files 917 if(NOT CMAKE_HOST_WIN32 OR CYGWIN OR MINGW) 918 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng.pc 919 DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) 920 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng-config 921 DESTINATION bin) 922 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}.pc 923 DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) 924 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config 925 DESTINATION bin) 926 endif(NOT CMAKE_HOST_WIN32 OR CYGWIN OR MINGW) 927endif() 928 929# On versions of CMake that support it, create an export file CMake 930# users can include() to import our targets 931if(PNG_EXPORT_RULE AND NOT SKIP_INSTALL_EXPORT AND NOT SKIP_INSTALL_ALL ) 932 install(EXPORT libpng DESTINATION lib/libpng FILE lib${PNG_LIB_NAME}.cmake) 933endif() 934 935# what's with libpng-manual.txt and all the extra files? 936 937# UNINSTALL 938# do we need this? 939 940# DIST 941# do we need this? 942 943# to create msvc import lib for mingw compiled shared lib 944# pexports libpng.dll > libpng.def 945# lib /def:libpng.def /machine:x86 946