1diff --git a/CMakeLists.txt b/CMakeLists.txt 2index 8652564b6..639554ad8 100644 3--- a/CMakeLists.txt 4+++ b/CMakeLists.txt 5@@ -1,1162 +1,26 @@ 6+cmake_minimum_required(VERSION 3.16.5) 7 8-# CMakeLists.txt - CMake lists for libpng 9-# 10-# Copyright (c) 2018-2024 Cosmin Truta. 11-# Copyright (c) 2007-2018 Glenn Randers-Pehrson. 12-# Originally written by Christian Ehrlicher, 2007. 13-# 14-# Use, modification and distribution are subject to 15-# the same licensing terms and conditions as libpng. 16-# Please see the copyright notice in png.h or visit 17-# http://libpng.org/pub/png/src/libpng-LICENSE.txt 18-# 19-# For copyright and licensing purposes, please see 20-# the accompanying file scripts/cmake/AUTHORS.md 21-# 22-# SPDX-License-Identifier: libpng-2.0 23+set(LibpngInc "${PROJECT_SOURCE_DIR}/third_party/libpng") 24+set(LibpngSrc "${PROJECT_SOURCE_DIR}/third_party/libpng") 25 26-cmake_minimum_required(VERSION 3.6) 27- 28-set(PNGLIB_MAJOR 1) 29-set(PNGLIB_MINOR 6) 30-set(PNGLIB_REVISION 44) 31-set(PNGLIB_SUBREVISION 0) 32-#set(PNGLIB_SUBREVISION "git") 33-set(PNGLIB_VERSION ${PNGLIB_MAJOR}.${PNGLIB_MINOR}.${PNGLIB_REVISION}) 34-set(PNGLIB_ABI_VERSION ${PNGLIB_MAJOR}${PNGLIB_MINOR}) 35-set(PNGLIB_SHARED_VERSION ${PNGLIB_ABI_VERSION}.${PNGLIB_REVISION}.${PNGLIB_SUBREVISION}) 36- 37-project(libpng 38- VERSION ${PNGLIB_VERSION} 39- LANGUAGES C ASM) 40- 41-if(POLICY CMP0074) 42- # Allow find_package() to use the ZLIB_ROOT variable, if available. 43- cmake_policy(SET CMP0074 NEW) 44-endif() 45- 46-include(CheckCSourceCompiles) 47-include(GNUInstallDirs) 48- 49-# Allow the users to specify an application-specific API prefix for libpng 50-# vendoring purposes. A standard libpng build should have no such prefix. 51-set(PNG_PREFIX "" 52- CACHE STRING "Prefix to prepend to the API function names") 53- 54-# Allow the users to override the postfix appended to debug library file names. 55-# Previously, we used to set CMAKE_DEBUG_POSTFIX globally. That variable should 56-# not be cached, however, because doing so would affect all projects processed 57-# after libpng, in unexpected and undesirable ways. 58-set(PNG_DEBUG_POSTFIX "d" 59- CACHE STRING "Postfix to append to library file names under the Debug configuration") 60- 61-# Allow the users to import their own extra configuration settings. 62-set(DFA_XTRA "" 63- CACHE FILEPATH "File containing extra configuration settings") 64- 65-# Allow the users to switch on/off various library build types. 66-option(PNG_SHARED "Build libpng as a shared library" ON) 67-option(PNG_STATIC "Build libpng as a static library" ON) 68-if(APPLE) 69- option(PNG_FRAMEWORK "Build libpng as a framework bundle" ON) 70-endif() 71- 72-# Allow the users to switch on/off the auxiliary build and test artifacts. 73-# These artifacts are NOT part of libpng proper, and are subject to change 74-# at any time. 75-option(PNG_TESTS "Build the libpng tests" ON) 76- 77-# Same as above, but for the third-party tools. 78-# Although these tools are targetted at development environments only, 79-# the users are allowed to override the option to build by default. 80-if (ANDROID OR IOS) 81- option(PNG_TOOLS "Build the libpng tools" OFF) 82-else() 83- option(PNG_TOOLS "Build the libpng tools" ON) 84-endif() 85- 86-# Maintain backwards compatibility with the deprecated option PNG_EXECUTABLES. 87-option(PNG_EXECUTABLES "[Deprecated; please use PNG_TOOLS]" ON) 88-if(NOT PNG_EXECUTABLES) 89- message(DEPRECATION "The option PNG_EXECUTABLES has been deprecated in favour of PNG_TOOLS") 90- if(PNG_TOOLS) 91- message(AUTHOR_WARNING 92- "Setting PNG_TOOLS to ${PNG_EXECUTABLES}, to stay compatible with PNG_EXECUTABLES") 93- set(PNG_TOOLS "${PNG_EXECUTABLES}") 94- endif() 95-endif() 96- 97-# Allow the users to configure various compilation options. 98-option(PNG_DEBUG "Enable debug output" OFF) 99-option(PNG_HARDWARE_OPTIMIZATIONS "Enable hardware optimizations" ON) 100- 101-# Initialize and show the target architecture variable PNG_TARGET_ARCHITECTURE. 102-# 103-# NOTE: 104-# On macOS, CMake sets CMAKE_SYSTEM_PROCESSOR to either "x86_64" or "arm64", 105-# based upon the OS architecture, not the target architecture. As such, we need 106-# to check CMAKE_OSX_ARCHITECTURES to identify which hardware-specific flags to 107-# enable. Note that this will fail if you attempt to build a universal binary 108-# in a single CMake invocation. 109-if (APPLE AND CMAKE_OSX_ARCHITECTURES) 110- string(TOLOWER "${CMAKE_OSX_ARCHITECTURES}" PNG_TARGET_ARCHITECTURE) 111-else() 112- string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" PNG_TARGET_ARCHITECTURE) 113-endif() 114-message(STATUS "Building for target architecture: ${PNG_TARGET_ARCHITECTURE}") 115- 116-# Allow the users to specify a custom location of zlib. 117-# This option is deprecated, and no longer needed with CMake 3.12 and newer. 118-# Under the CMake policy CMP0074, if zlib is being built alongside libpng as a 119-# subproject, its location can be passed on to CMake via the ZLIB_ROOT variable. 120-option(PNG_BUILD_ZLIB "Custom zlib location, else find_package is used" OFF) 121-if(NOT PNG_BUILD_ZLIB) 122- find_package(ZLIB REQUIRED) 123-elseif(POLICY CMP0074) 124- if("x${ZLIB_ROOT}" STREQUAL "x") 125- message(DEPRECATION 126- "The option PNG_BUILD_ZLIB has been deprecated; please use ZLIB_ROOT instead") 127- else() 128- message(SEND_ERROR 129- "The option PNG_BUILD_ZLIB=${PNG_BUILD_ZLIB} and " 130- "the variable ZLIB_ROOT=\"${ZLIB_ROOT}\" are mutually exclusive") 131- endif() 132-endif() 133- 134-if(UNIX AND NOT APPLE AND NOT BEOS AND NOT HAIKU AND NOT EMSCRIPTEN) 135- find_library(M_LIBRARY m) 136- if(M_LIBRARY) 137- set(M_LIBRARY m) 138- else() 139- set(M_LIBRARY "") 140- endif() 141-else() 142- # libm is not available or not needed. 143-endif() 144- 145-if(PNG_HARDWARE_OPTIMIZATIONS) 146- 147-# Set definitions and sources for ARM. 148-if(PNG_TARGET_ARCHITECTURE MATCHES "^(arm|aarch)") 149- if(PNG_TARGET_ARCHITECTURE MATCHES "^(arm64|aarch64)") 150- set(PNG_ARM_NEON_POSSIBLE_VALUES on off) 151- set(PNG_ARM_NEON "on" 152- CACHE STRING "Enable ARM NEON optimizations: on|off; on is default") 153- else() 154- set(PNG_ARM_NEON_POSSIBLE_VALUES check on off) 155- set(PNG_ARM_NEON "off" 156- CACHE STRING "Enable ARM NEON optimizations: check|on|off; off is default") 157- endif() 158- set_property(CACHE PNG_ARM_NEON 159- PROPERTY STRINGS ${PNG_ARM_NEON_POSSIBLE_VALUES}) 160- list(FIND PNG_ARM_NEON_POSSIBLE_VALUES ${PNG_ARM_NEON} index) 161- if(index EQUAL -1) 162- message(FATAL_ERROR "PNG_ARM_NEON must be one of [${PNG_ARM_NEON_POSSIBLE_VALUES}]") 163- elseif(NOT PNG_ARM_NEON STREQUAL "off") 164- set(libpng_arm_sources 165- arm/arm_init.c 166- arm/filter_neon_intrinsics.c 167- arm/palette_neon_intrinsics.c) 168- if(PNG_ARM_NEON STREQUAL "on") 169- add_definitions(-DPNG_ARM_NEON_OPT=2) 170- elseif(PNG_ARM_NEON STREQUAL "check") 171- add_definitions(-DPNG_ARM_NEON_CHECK_SUPPORTED) 172- endif() 173- else() 174- add_definitions(-DPNG_ARM_NEON_OPT=0) 175- endif() 176-endif() 177- 178-# Set definitions and sources for PowerPC. 179-if(PNG_TARGET_ARCHITECTURE MATCHES "^(powerpc|ppc64)") 180- set(PNG_POWERPC_VSX_POSSIBLE_VALUES on off) 181- set(PNG_POWERPC_VSX "on" 182- CACHE STRING "Enable POWERPC VSX optimizations: on|off; on is default") 183- set_property(CACHE PNG_POWERPC_VSX 184- PROPERTY STRINGS ${PNG_POWERPC_VSX_POSSIBLE_VALUES}) 185- list(FIND PNG_POWERPC_VSX_POSSIBLE_VALUES ${PNG_POWERPC_VSX} index) 186- if(index EQUAL -1) 187- message(FATAL_ERROR "PNG_POWERPC_VSX must be one of [${PNG_POWERPC_VSX_POSSIBLE_VALUES}]") 188- elseif(NOT PNG_POWERPC_VSX STREQUAL "off") 189- set(libpng_powerpc_sources 190- powerpc/powerpc_init.c 191- powerpc/filter_vsx_intrinsics.c) 192- if(PNG_POWERPC_VSX STREQUAL "on") 193- add_definitions(-DPNG_POWERPC_VSX_OPT=2) 194- endif() 195- else() 196- add_definitions(-DPNG_POWERPC_VSX_OPT=0) 197- endif() 198-endif() 199- 200-# Set definitions and sources for Intel. 201-if(PNG_TARGET_ARCHITECTURE MATCHES "^(i[3-6]86|x86|amd64)") 202- set(PNG_INTEL_SSE_POSSIBLE_VALUES on off) 203- set(PNG_INTEL_SSE "on" 204- CACHE STRING "Enable INTEL_SSE optimizations: on|off; on is default") 205- set_property(CACHE PNG_INTEL_SSE 206- PROPERTY STRINGS ${PNG_INTEL_SSE_POSSIBLE_VALUES}) 207- list(FIND PNG_INTEL_SSE_POSSIBLE_VALUES ${PNG_INTEL_SSE} index) 208- if(index EQUAL -1) 209- message(FATAL_ERROR "PNG_INTEL_SSE must be one of [${PNG_INTEL_SSE_POSSIBLE_VALUES}]") 210- elseif(NOT PNG_INTEL_SSE STREQUAL "off") 211- set(libpng_intel_sources 212- intel/intel_init.c 213- intel/filter_sse2_intrinsics.c) 214- if(PNG_INTEL_SSE STREQUAL "on") 215- add_definitions(-DPNG_INTEL_SSE_OPT=1) 216- endif() 217- else() 218- add_definitions(-DPNG_INTEL_SSE_OPT=0) 219- endif() 220-endif() 221- 222-# Set definitions and sources for MIPS. 223-if(PNG_TARGET_ARCHITECTURE MATCHES "^(mipsel|mips64el)") 224- set(PNG_MIPS_MSA_POSSIBLE_VALUES on off) 225- set(PNG_MIPS_MSA "on" 226- CACHE STRING "Enable MIPS_MSA optimizations: on|off; on is default") 227- set_property(CACHE PNG_MIPS_MSA 228- PROPERTY STRINGS ${PNG_MIPS_MSA_POSSIBLE_VALUES}) 229- list(FIND PNG_MIPS_MSA_POSSIBLE_VALUES ${PNG_MIPS_MSA} index_msa) 230- if(index_msa EQUAL -1) 231- message(FATAL_ERROR "PNG_MIPS_MSA must be one of [${PNG_MIPS_MSA_POSSIBLE_VALUES}]") 232- endif() 233- 234- set(PNG_MIPS_MMI_POSSIBLE_VALUES on off) 235- set(PNG_MIPS_MMI "on" 236- CACHE STRING "Enable MIPS_MMI optimizations: on|off; on is default") 237- set_property(CACHE PNG_MIPS_MMI 238- PROPERTY STRINGS ${PNG_MIPS_MMI_POSSIBLE_VALUES}) 239- list(FIND PNG_MIPS_MMI_POSSIBLE_VALUES ${PNG_MIPS_MMI} index_mmi) 240- if(index_mmi EQUAL -1) 241- message(FATAL_ERROR "PNG_MIPS_MMI must be one of [${PNG_MIPS_MMI_POSSIBLE_VALUES}]") 242- endif() 243- 244- if(PNG_MIPS_MSA STREQUAL "on" AND PNG_MIPS_MMI STREQUAL "on") 245- set(libpng_mips_sources 246- mips/mips_init.c 247- mips/filter_msa_intrinsics.c 248- mips/filter_mmi_inline_assembly.c) 249- add_definitions(-DPNG_MIPS_MSA_OPT=2) 250- add_definitions(-DPNG_MIPS_MMI_OPT=1) 251- elseif(PNG_MIPS_MSA STREQUAL "on") 252- set(libpng_mips_sources 253- mips/mips_init.c 254- mips/filter_msa_intrinsics.c) 255- add_definitions(-DPNG_MIPS_MSA_OPT=2) 256- add_definitions(-DPNG_MIPS_MMI_OPT=0) 257- elseif(PNG_MIPS_MMI STREQUAL "on") 258- set(libpng_mips_sources 259- mips/mips_init.c 260- mips/filter_mmi_inline_assembly.c) 261- add_definitions(-DPNG_MIPS_MSA_OPT=0) 262- add_definitions(-DPNG_MIPS_MMI_OPT=1) 263- else() 264- add_definitions(-DPNG_MIPS_MSA_OPT=0) 265- add_definitions(-DPNG_MIPS_MMI_OPT=0) 266- endif() 267-endif() 268- 269-# Set definitions and sources for LoongArch. 270-if(PNG_TARGET_ARCHITECTURE MATCHES "^(loongarch)") 271- include(CheckCCompilerFlag) 272- set(PNG_LOONGARCH_LSX_POSSIBLE_VALUES on off) 273- set(PNG_LOONGARCH_LSX "on" 274- CACHE STRING "Enable LOONGARCH_LSX optimizations: on|off; on is default") 275- set_property(CACHE PNG_LOONGARCH_LSX 276- PROPERTY STRINGS ${PNG_LOONGARCH_LSX_POSSIBLE_VALUES}) 277- list(FIND PNG_LOONGARCH_LSX_POSSIBLE_VALUES ${PNG_LOONGARCH_LSX} index) 278- if(index EQUAL -1) 279- message(FATAL_ERROR "PNG_LOONGARCH_LSX must be one of [${PNG_LOONGARCH_LSX_POSSIBLE_VALUES}]") 280- elseif(NOT PNG_LOONGARCH_LSX STREQUAL "off") 281- CHECK_C_COMPILER_FLAG("-mlsx" COMPILER_SUPPORTS_LSX) 282- if(COMPILER_SUPPORTS_LSX) 283- set(libpng_loongarch_sources 284- loongarch/loongarch_lsx_init.c 285- loongarch/filter_lsx_intrinsics.c) 286- set_source_files_properties(${libpng_loongarch_sources} 287- PROPERTIES 288- COMPILE_FLAGS "-mlsx") 289- add_definitions(-DPNG_LOONGARCH_LSX_OPT=1) 290- else() 291- message(FATAL_ERROR "Compiler does not support -mlsx option") 292- endif() 293- else() 294- add_definitions(-DPNG_LOONGARCH_LSX_OPT=0) 295- endif() 296-endif() 297- 298-else(PNG_HARDWARE_OPTIMIZATIONS) 299- 300-# Set definitions and sources for ARM. 301-if(PNG_TARGET_ARCHITECTURE MATCHES "^(arm|aarch)") 302- add_definitions(-DPNG_ARM_NEON_OPT=0) 303-endif() 304- 305-# Set definitions and sources for PowerPC. 306-if(PNG_TARGET_ARCHITECTURE MATCHES "^(powerpc|ppc64)") 307- add_definitions(-DPNG_POWERPC_VSX_OPT=0) 308-endif() 309- 310-# Set definitions and sources for Intel. 311-if(PNG_TARGET_ARCHITECTURE MATCHES "^(i[3-6]86|x86|amd64)") 312- add_definitions(-DPNG_INTEL_SSE_OPT=0) 313-endif() 314- 315-# Set definitions and sources for MIPS. 316-if(PNG_TARGET_ARCHITECTURE MATCHES "^(mipsel|mips64el)") 317- add_definitions(-DPNG_MIPS_MSA_OPT=0) 318-endif() 319- 320-# Set definitions and sources for LoongArch. 321-if(PNG_TARGET_ARCHITECTURE MATCHES "^(loongarch)") 322- add_definitions(-DPNG_LOONGARCH_LSX_OPT=0) 323-endif() 324- 325-endif(PNG_HARDWARE_OPTIMIZATIONS) 326- 327-option(ld-version-script "Enable linker version script" ON) 328-if(ld-version-script AND NOT ANDROID AND NOT APPLE) 329- # Check if LD supports linker scripts. 330- file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/conftest.map" " 331-VERS_1 { global: sym1; local: *; }; 332-VERS_2 { global: sym2; main; } VERS_1; 333-") 334- set(_SAVED_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS}) 335- if(NOT CMAKE_HOST_SOLARIS) 336- # Avoid using CMAKE_SHARED_LIBRARY_C_FLAGS in version script checks on 337- # Solaris, because of an incompatibility with the Solaris link editor. 338- list(APPEND CMAKE_REQUIRED_FLAGS ${CMAKE_SHARED_LIBRARY_C_FLAGS}) 339- endif() 340- list(APPEND CMAKE_REQUIRED_FLAGS "-Wl,--version-script='${CMAKE_CURRENT_BINARY_DIR}/conftest.map'") 341- check_c_source_compiles(" 342-void sym1(void) {} 343-void sym2(void) {} 344-int main(void) { return 0; } 345-" HAVE_LD_VERSION_SCRIPT) 346- if(NOT HAVE_LD_VERSION_SCRIPT) 347- set(CMAKE_REQUIRED_FLAGS ${_SAVED_CMAKE_REQUIRED_FLAGS}) 348- if(NOT CMAKE_HOST_SOLARIS) 349- # Again, avoid using CMAKE_SHARED_LIBRARY_C_FLAGS in version script 350- # checks on Solaris. 351- list(APPEND CMAKE_REQUIRED_FLAGS ${CMAKE_SHARED_LIBRARY_C_FLAGS}) 352- endif() 353- list(APPEND CMAKE_REQUIRED_FLAGS "-Wl,-M -Wl,${CMAKE_CURRENT_BINARY_DIR}/conftest.map") 354- check_c_source_compiles(" 355-void sym1(void) {} 356-void sym2(void) {} 357-int main(void) { return 0; } 358-" HAVE_SOLARIS_LD_VERSION_SCRIPT) 359- endif() 360- set(CMAKE_REQUIRED_FLAGS ${_SAVED_CMAKE_REQUIRED_FLAGS}) 361- file(REMOVE "${CMAKE_CURRENT_BINARY_DIR}/conftest.map") 362-endif() 363- 364-# Find an AWK language processor. 365-# Start with specific AWK implementations like gawk and nawk, which are 366-# known to work with our scripts, then fall back to the system awk. 367-find_program(AWK NAMES gawk nawk awk) 368-if(AWK) 369- message(STATUS "Found AWK program: ${AWK}") 370-else() 371- message(STATUS "Could not find an AWK-compatible program") 372-endif() 373- 374-if(NOT AWK OR ANDROID OR IOS) 375- # No awk available to generate sources; use pre-built pnglibconf.h 376- configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.h.prebuilt 377- ${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h) 378- add_custom_target(png_genfiles) 379-else() 380- # Copy the awk scripts, converting their line endings to Unix (LF) 381- configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/checksym.awk 382- ${CMAKE_CURRENT_BINARY_DIR}/scripts/checksym.awk 383- @ONLY 384- NEWLINE_STYLE LF) 385- configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/options.awk 386- ${CMAKE_CURRENT_BINARY_DIR}/scripts/options.awk 387- @ONLY 388- NEWLINE_STYLE LF) 389- configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/dfn.awk 390- ${CMAKE_CURRENT_BINARY_DIR}/scripts/dfn.awk 391- @ONLY 392- NEWLINE_STYLE LF) 393- 394- # Generate .chk from .out with awk: 395- # generate_chk(INPUT inputfile OUTPUT outputfile [DEPENDS dep1 [dep2...]]) 396- function(generate_chk) 397- set(options) 398- set(oneValueArgs INPUT OUTPUT) 399- set(multiValueArgs DEPENDS) 400- cmake_parse_arguments(_GC "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) 401- if(NOT _GC_INPUT) 402- message(FATAL_ERROR "generate_chk: Missing INPUT argument") 403- endif() 404- if(NOT _GC_OUTPUT) 405- message(FATAL_ERROR "generate_chk: Missing OUTPUT argument") 406- endif() 407- 408- add_custom_command(OUTPUT "${_GC_OUTPUT}" 409- COMMAND "${CMAKE_COMMAND}" 410- "-DINPUT=${_GC_INPUT}" 411- "-DOUTPUT=${_GC_OUTPUT}" 412- -P "${CMAKE_CURRENT_BINARY_DIR}/scripts/cmake/genchk.cmake" 413- DEPENDS "${_GC_INPUT}" ${_GC_DEPENDS} 414- WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") 415- endfunction() 416- 417- # Generate .out from .c with awk 418- # generate_out(INPUT inputfile OUTPUT outputfile [DEPENDS dep1 [dep2...]]) 419- function(generate_out) 420- set(options) 421- set(oneValueArgs INPUT OUTPUT) 422- set(multiValueArgs DEPENDS) 423- cmake_parse_arguments(_GO "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) 424- if(NOT _GO_INPUT) 425- message(FATAL_ERROR "generate_out: Missing INPUT argument") 426- endif() 427- if(NOT _GO_OUTPUT) 428- message(FATAL_ERROR "generate_out: Missing OUTPUT argument") 429- endif() 430- 431- add_custom_command(OUTPUT "${_GO_OUTPUT}" 432- COMMAND "${CMAKE_COMMAND}" 433- "-DINPUT=${_GO_INPUT}" 434- "-DOUTPUT=${_GO_OUTPUT}" 435- -P "${CMAKE_CURRENT_BINARY_DIR}/scripts/cmake/genout.cmake" 436- DEPENDS "${_GO_INPUT}" ${_GO_DEPENDS} 437- WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") 438- endfunction() 439- 440- # Generate specific source file with awk 441- # generate_source(OUTPUT outputfile [DEPENDS dep1 [dep2...]]) 442- function(generate_source) 443- set(options) 444- set(oneValueArgs OUTPUT) 445- set(multiValueArgs DEPENDS) 446- cmake_parse_arguments(_GSO "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) 447- if(NOT _GSO_OUTPUT) 448- message(FATAL_ERROR "generate_source: Missing OUTPUT argument") 449- endif() 450- 451- add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${_GSO_OUTPUT}" 452- COMMAND "${CMAKE_COMMAND}" 453- "-DOUTPUT=${_GSO_OUTPUT}" 454- -P "${CMAKE_CURRENT_BINARY_DIR}/scripts/cmake/gensrc.cmake" 455- DEPENDS ${_GSO_DEPENDS} 456- WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") 457- endfunction() 458- 459- # Copy file 460- # generate_copy(INPUT inputfile OUTPUT outputfile [DEPENDS dep1 [dep2...]]) 461- function(generate_copy) 462- set(options) 463- set(oneValueArgs INPUT OUTPUT) 464- set(multiValueArgs DEPENDS) 465- cmake_parse_arguments(_GCO "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) 466- if(NOT _GCO_INPUT) 467- message(FATAL_ERROR "generate_copy: Missing INPUT argument") 468- endif() 469- if(NOT _GCO_OUTPUT) 470- message(FATAL_ERROR "generate_copy: Missing OUTPUT argument") 471- endif() 472- 473- add_custom_command(OUTPUT "${_GCO_OUTPUT}" 474- COMMAND "${CMAKE_COMMAND}" 475- -E remove "${_GCO_OUTPUT}" 476- COMMAND "${CMAKE_COMMAND}" 477- -E copy "${_GCO_INPUT}" "${_GCO_OUTPUT}" 478- DEPENDS "${source}" ${_GCO_DEPENDS}) 479- endfunction() 480- 481- # Generate scripts/pnglibconf.h 482- generate_source(OUTPUT "scripts/pnglibconf.c" 483- DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.dfa" 484- "${CMAKE_CURRENT_BINARY_DIR}/scripts/options.awk" 485- "${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h") 486- add_custom_target(png_scripts_pnglibconf_c 487- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/pnglibconf.c") 488- 489- # Generate pnglibconf.c 490- generate_source(OUTPUT "pnglibconf.c" 491- DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.dfa" 492- "${CMAKE_CURRENT_BINARY_DIR}/scripts/options.awk" 493- "${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h") 494- add_custom_target(pnglibconf_c 495- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.c") 496- 497- if(PNG_PREFIX) 498- set(PNGLIBCONF_H_EXTRA_DEPENDS 499- "${CMAKE_CURRENT_BINARY_DIR}/scripts/prefix.out" 500- "${CMAKE_CURRENT_SOURCE_DIR}/scripts/macro.lst") 501- set(PNGPREFIX_H_EXTRA_DEPENDS 502- "${CMAKE_CURRENT_BINARY_DIR}/scripts/intprefix.out") 503- endif() 504- 505- generate_out(INPUT "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.c" 506- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out" 507- DEPENDS pnglibconf_c) 508- add_custom_target(pnglibconf_out 509- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out") 510- 511- # Generate pnglibconf.h 512- generate_source(OUTPUT "pnglibconf.h" 513- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out" pnglibconf_out 514- ${PNGLIBCONF_H_EXTRA_DEPENDS}) 515- add_custom_target(pnglibconf_h 516- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h") 517- 518- generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/intprefix.c" 519- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/intprefix.out" 520- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h" pnglibconf_h) 521- add_custom_target(png_scripts_intprefix_out 522- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/intprefix.out") 523- 524- generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/prefix.c" 525- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/prefix.out" 526- DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/png.h" 527- "${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h" 528- "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out" pnglibconf_out) 529- add_custom_target(png_scripts_prefix_out 530- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/prefix.out") 531- 532- # Generate pngprefix.h 533- generate_source(OUTPUT "pngprefix.h" 534- DEPENDS ${PNGPREFIX_H_EXTRA_DEPENDS}) 535- add_custom_target(pngprefix_h 536- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pngprefix.h") 537- 538- generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/sym.c" 539- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/sym.out" 540- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h" pnglibconf_h) 541- add_custom_target(png_scripts_sym_out 542- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/sym.out") 543- 544- generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/symbols.c" 545- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.out" 546- DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/png.h" 547- "${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h" 548- "${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.h.prebuilt") 549- add_custom_target(png_scripts_symbols_out 550- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.out") 551- 552- generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/vers.c" 553- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/vers.out" 554- DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/png.h" 555- "${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h" 556- "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h" pnglibconf_h) 557- add_custom_target(png_scripts_vers_out 558- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/vers.out") 559- 560- generate_chk(INPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.out" 561- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.chk" 562- DEPENDS png_scripts_symbols_out 563- "${CMAKE_CURRENT_BINARY_DIR}/scripts/checksym.awk" 564- "${CMAKE_CURRENT_SOURCE_DIR}/scripts/symbols.def") 565- 566- add_custom_target(png_scripts_symbols_chk 567- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.chk") 568- 569- generate_copy(INPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/sym.out" 570- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/libpng.sym" 571- DEPENDS png_scripts_sym_out) 572- generate_copy(INPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/vers.out" 573- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/libpng.vers" 574- DEPENDS png_scripts_vers_out) 575- 576- add_custom_target(png_genvers 577- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/libpng.vers") 578- add_custom_target(png_gensym 579- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/libpng.sym") 580- 581- add_custom_target(png_genprebuilt 582- COMMAND "${CMAKE_COMMAND}" 583- "-DOUTPUT=scripts/pnglibconf.h.prebuilt" 584- -P "${CMAKE_CURRENT_BINARY_DIR}/scripts/cmake/gensrc.cmake" 585- WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") 586- 587- # A single target handles generation of all generated files. 588- add_custom_target(png_genfiles 589- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/libpng.sym" png_gensym 590- "${CMAKE_CURRENT_BINARY_DIR}/libpng.vers" png_genvers 591- "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.c" pnglibconf_c 592- "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h" pnglibconf_h 593- "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out" pnglibconf_out 594- "${CMAKE_CURRENT_BINARY_DIR}/pngprefix.h" pngprefix_h 595- "${CMAKE_CURRENT_BINARY_DIR}/scripts/intprefix.out" png_scripts_intprefix_out 596- "${CMAKE_CURRENT_BINARY_DIR}/scripts/pnglibconf.c" png_scripts_pnglibconf_c 597- "${CMAKE_CURRENT_BINARY_DIR}/scripts/prefix.out" png_scripts_prefix_out 598- "${CMAKE_CURRENT_BINARY_DIR}/scripts/sym.out" png_scripts_sym_out 599- "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.chk" png_scripts_symbols_chk 600- "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.out" png_scripts_symbols_out 601- "${CMAKE_CURRENT_BINARY_DIR}/scripts/vers.out" png_scripts_vers_out) 602-endif(NOT AWK OR ANDROID OR IOS) 603- 604-# List the source code files. 605-set(libpng_public_hdrs 606- png.h 607- pngconf.h 608- "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h" 609-) 610-set(libpng_private_hdrs 611- pngpriv.h 612- pngdebug.h 613- pnginfo.h 614- pngstruct.h 615-) 616-if(AWK AND NOT ANDROID AND NOT IOS) 617- list(APPEND libpng_private_hdrs "${CMAKE_CURRENT_BINARY_DIR}/pngprefix.h") 618-endif() 619-set(libpng_sources 620- ${libpng_public_hdrs} 621- ${libpng_private_hdrs} 622- png.c 623- pngerror.c 624- pngget.c 625- pngmem.c 626- pngpread.c 627- pngread.c 628- pngrio.c 629- pngrtran.c 630- pngrutil.c 631- pngset.c 632- pngtrans.c 633- pngwio.c 634- pngwrite.c 635- pngwtran.c 636- pngwutil.c 637- ${libpng_arm_sources} 638- ${libpng_intel_sources} 639- ${libpng_mips_sources} 640- ${libpng_powerpc_sources} 641- ${libpng_loongarch_sources} 642-) 643-set(pngtest_sources 644- pngtest.c 645-) 646-set(pngvalid_sources 647- contrib/libtests/pngvalid.c 648-) 649-set(pngstest_sources 650- contrib/libtests/pngstest.c 651-) 652-set(pngunknown_sources 653- contrib/libtests/pngunknown.c 654-) 655-set(pngimage_sources 656- contrib/libtests/pngimage.c 657-) 658-set(pngfix_sources 659- contrib/tools/pngfix.c 660-) 661-set(png_fix_itxt_sources 662- contrib/tools/png-fix-itxt.c 663-) 664- 665-if(MSVC OR (WIN32 AND (CMAKE_C_COMPILER_ID MATCHES "Clang"))) 666- add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE) 667- add_definitions(-D_CRT_SECURE_NO_DEPRECATE) 668-endif() 669- 670-if(PNG_DEBUG) 671- add_definitions(-DPNG_DEBUG) 672-endif() 673- 674-# Now build our targets. 675- 676-# Initialize the list of libpng library targets. 677-set(PNG_LIBRARY_TARGETS "") 678- 679-# Initialize the libpng library file names. 680-if(UNIX 681- OR (WIN32 AND NOT CMAKE_SHARED_LIBRARY_PREFIX STREQUAL "") 682- OR (WIN32 AND NOT CMAKE_STATIC_LIBRARY_PREFIX STREQUAL "")) 683- # We are on a Unix or Unix-like toolchain like the GNU toolchain on Windows. 684- # Library file names are expected to have an implicit prefix such as "lib". 685- # Let CMake prepend and append its usual prefixes and suffixes by default. 686- set(PNG_SHARED_OUTPUT_NAME "png${PNGLIB_ABI_VERSION}") 687- set(PNG_STATIC_OUTPUT_NAME "png${PNGLIB_ABI_VERSION}") 688-else() 689- # We are, most likely, on a Windows toolchain like MSVC, Clang on Windows, 690- # Borland/Embarcadero, etc. We need to specify the "libpng" name explicitly. 691- # We also need to use a custom suffix, in order to distinguish between the 692- # shared import library name and the static library name. 693- set(PNG_SHARED_OUTPUT_NAME "libpng${PNGLIB_ABI_VERSION}") 694- set(PNG_STATIC_OUTPUT_NAME "libpng${PNGLIB_ABI_VERSION}_static") 695-endif() 696- 697-if(PNG_SHARED) 698- add_library(png_shared SHARED ${libpng_sources}) 699- add_dependencies(png_shared png_genfiles) 700- list(APPEND PNG_LIBRARY_TARGETS png_shared) 701- set_target_properties(png_shared PROPERTIES 702- OUTPUT_NAME "${PNG_SHARED_OUTPUT_NAME}" 703- DEBUG_POSTFIX "${PNG_DEBUG_POSTFIX}" 704- VERSION "${PNGLIB_SHARED_VERSION}" 705- SOVERSION "${PNGLIB_ABI_VERSION}") 706- if(UNIX AND AWK) 707- if(HAVE_LD_VERSION_SCRIPT) 708- set_target_properties(png_shared PROPERTIES 709- LINK_FLAGS "-Wl,--version-script='${CMAKE_CURRENT_BINARY_DIR}/libpng.vers'") 710- elseif(HAVE_SOLARIS_LD_VERSION_SCRIPT) 711- set_target_properties(png_shared PROPERTIES 712- LINK_FLAGS "-Wl,-M -Wl,'${CMAKE_CURRENT_BINARY_DIR}/libpng.vers'") 713- endif() 714- endif() 715- if(APPLE) 716- # Avoid CMake's implicit compile definition "png_shared_EXPORTS". 717- set_target_properties(png_shared PROPERTIES DEFINE_SYMBOL "") 718- elseif(WIN32) 719- # Use the explicit compile definition "PNG_BUILD_DLL" for Windows DLLs. 720- set_target_properties(png_shared PROPERTIES DEFINE_SYMBOL PNG_BUILD_DLL) 721- endif() 722- target_include_directories(png_shared 723- PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>) 724- target_include_directories(png_shared 725- PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>) 726- target_include_directories(png_shared SYSTEM 727- INTERFACE $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/libpng${PNGLIB_ABI_VERSION}>) 728- target_link_libraries(png_shared PUBLIC ZLIB::ZLIB ${M_LIBRARY}) 729-endif() 730- 731-if(PNG_STATIC) 732- add_library(png_static STATIC ${libpng_sources}) 733- add_dependencies(png_static png_genfiles) 734- list(APPEND PNG_LIBRARY_TARGETS png_static) 735- set_target_properties(png_static PROPERTIES 736- OUTPUT_NAME "${PNG_STATIC_OUTPUT_NAME}" 737- DEBUG_POSTFIX "${PNG_DEBUG_POSTFIX}") 738- target_include_directories(png_static 739- PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>) 740- target_include_directories(png_static 741- PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>) 742- target_include_directories(png_static SYSTEM 743- INTERFACE $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/libpng${PNGLIB_ABI_VERSION}>) 744- target_link_libraries(png_static PUBLIC ZLIB::ZLIB ${M_LIBRARY}) 745-endif() 746- 747-if(PNG_FRAMEWORK AND NOT APPLE) 748- message(AUTHOR_WARNING 749- "Setting PNG_FRAMEWORK to OFF, as it only applies to Apple systems") 750- set(PNG_FRAMEWORK OFF) 751-endif() 752- 753-if(PNG_FRAMEWORK) 754- add_library(png_framework SHARED ${libpng_sources}) 755- add_dependencies(png_framework png_genfiles) 756- list(APPEND PNG_LIBRARY_TARGETS png_framework) 757- set_target_properties(png_framework PROPERTIES 758- FRAMEWORK TRUE 759- FRAMEWORK_VERSION "${PNGLIB_VERSION}" 760- MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${PNGLIB_MAJOR}.${PNGLIB_MINOR}" 761- MACOSX_FRAMEWORK_BUNDLE_VERSION "${PNGLIB_VERSION}" 762- MACOSX_FRAMEWORK_IDENTIFIER "org.libpng.libpng" 763- XCODE_ATTRIBUTE_INSTALL_PATH "@rpath" 764- PUBLIC_HEADER "${libpng_public_hdrs}" 765- OUTPUT_NAME "png" 766- DEBUG_POSTFIX "${PNG_DEBUG_POSTFIX}") 767- # Avoid CMake's implicit compile definition "-Dpng_framework_EXPORTS". 768- set_target_properties(png_framework PROPERTIES DEFINE_SYMBOL "") 769- target_include_directories(png_framework 770- PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>) 771- target_include_directories(png_framework 772- PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>) 773- target_include_directories(png_framework SYSTEM 774- INTERFACE $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/libpng${PNGLIB_ABI_VERSION}>) 775- target_link_libraries(png_framework PUBLIC ZLIB::ZLIB ${M_LIBRARY}) 776-endif() 777- 778-if(NOT PNG_LIBRARY_TARGETS) 779- message(SEND_ERROR "No library variant selected to build. " 780- "Please enable at least one of the following options: " 781- "PNG_SHARED, PNG_STATIC, PNG_FRAMEWORK") 782-endif() 783- 784-if(PNG_TESTS AND PNG_SHARED) 785- enable_testing() 786- 787- function(png_add_test) 788- set(options) 789- set(oneValueArgs NAME COMMAND) 790- set(multiValueArgs OPTIONS FILES) 791- cmake_parse_arguments(_PAT "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) 792- if(NOT _PAT_NAME) 793- message(FATAL_ERROR "png_add_test: Missing NAME argument") 794- endif() 795- if(NOT _PAT_COMMAND) 796- message(FATAL_ERROR "png_add_test: Missing COMMAND argument") 797- endif() 798- 799- set(TEST_OPTIONS "${_PAT_OPTIONS}") 800- set(TEST_FILES "${_PAT_FILES}") 801- 802- configure_file("${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake/test.cmake.in" 803- "${CMAKE_CURRENT_BINARY_DIR}/tests/${_PAT_NAME}.cmake" 804- @ONLY) 805- add_test(NAME "${_PAT_NAME}" 806- COMMAND "${CMAKE_COMMAND}" 807- "-DLIBPNG=$<TARGET_FILE:png_shared>" 808- "-DTEST_COMMAND=$<TARGET_FILE:${_PAT_COMMAND}>" 809- -P "${CMAKE_CURRENT_BINARY_DIR}/tests/${_PAT_NAME}.cmake") 810- endfunction() 811- 812- # Find test PNG files by globbing, but sort lists to ensure 813- # consistency between different filesystems. 814- file(GLOB PNGSUITE_PNGS "${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/*.png") 815- list(SORT PNGSUITE_PNGS) 816- file(GLOB TEST_PNGS "${CMAKE_CURRENT_SOURCE_DIR}/contrib/testpngs/*.png") 817- list(SORT TEST_PNGS) 818- 819- set(PNGTEST_PNG "${CMAKE_CURRENT_SOURCE_DIR}/pngtest.png") 820- 821- add_executable(pngtest ${pngtest_sources}) 822- target_link_libraries(pngtest PRIVATE png_shared) 823- 824- png_add_test(NAME pngtest 825- COMMAND pngtest 826- FILES "${PNGTEST_PNG}") 827- 828- add_executable(pngvalid ${pngvalid_sources}) 829- target_link_libraries(pngvalid PRIVATE png_shared) 830- 831- png_add_test(NAME pngvalid-gamma-16-to-8 832- COMMAND pngvalid 833- OPTIONS --gamma-16-to-8) 834- png_add_test(NAME pngvalid-gamma-alpha-mode 835- COMMAND pngvalid 836- OPTIONS --gamma-alpha-mode) 837- png_add_test(NAME pngvalid-gamma-background 838- COMMAND pngvalid 839- OPTIONS --gamma-background) 840- png_add_test(NAME pngvalid-gamma-expand16-alpha-mode 841- COMMAND pngvalid 842- OPTIONS --gamma-alpha-mode --expand16) 843- png_add_test(NAME pngvalid-gamma-expand16-background 844- COMMAND pngvalid 845- OPTIONS --gamma-background --expand16) 846- png_add_test(NAME pngvalid-gamma-expand16-transform 847- COMMAND pngvalid 848- OPTIONS --gamma-transform --expand16) 849- png_add_test(NAME pngvalid-gamma-sbit 850- COMMAND pngvalid 851- OPTIONS --gamma-sbit) 852- png_add_test(NAME pngvalid-gamma-threshold 853- COMMAND pngvalid 854- OPTIONS --gamma-threshold) 855- png_add_test(NAME pngvalid-gamma-transform 856- COMMAND pngvalid 857- OPTIONS --gamma-transform) 858- png_add_test(NAME pngvalid-progressive-interlace-standard 859- COMMAND pngvalid 860- OPTIONS --standard --progressive-read --interlace) 861- png_add_test(NAME pngvalid-progressive-size 862- COMMAND pngvalid 863- OPTIONS --size --progressive-read) 864- png_add_test(NAME pngvalid-progressive-standard 865- COMMAND pngvalid 866- OPTIONS --standard --progressive-read) 867- png_add_test(NAME pngvalid-standard 868- COMMAND pngvalid 869- OPTIONS --standard) 870- png_add_test(NAME pngvalid-transform 871- COMMAND pngvalid 872- OPTIONS --transform) 873- 874- add_executable(pngstest ${pngstest_sources}) 875- target_link_libraries(pngstest PRIVATE png_shared) 876- 877- foreach(gamma_type 1.8 linear none sRGB) 878- foreach(alpha_type none alpha) 879- set(PNGSTEST_FILES) 880- foreach(test_png ${TEST_PNGS}) 881- string(REGEX MATCH "-linear[-.]" TEST_PNG_LINEAR "${test_png}") 882- string(REGEX MATCH "-sRGB[-.]" TEST_PNG_SRGB "${test_png}") 883- string(REGEX MATCH "-1.8[-.]" TEST_PNG_G18 "${test_png}") 884- string(REGEX MATCH "-alpha-" TEST_PNG_ALPHA "${test_png}") 885- 886- set(TEST_PNG_VALID TRUE) 887- 888- if(TEST_PNG_ALPHA) 889- if(NOT alpha_type STREQUAL "alpha") 890- set(TEST_PNG_VALID FALSE) 891- endif() 892- else() 893- if(alpha_type STREQUAL "alpha") 894- set(TEST_PNG_VALID FALSE) 895- endif() 896- endif() 897- 898- if(TEST_PNG_LINEAR) 899- if(NOT gamma_type STREQUAL "linear") 900- set(TEST_PNG_VALID FALSE) 901- endif() 902- elseif(TEST_PNG_SRGB) 903- if(NOT gamma_type STREQUAL "sRGB") 904- set(TEST_PNG_VALID FALSE) 905- endif() 906- elseif(TEST_PNG_G18) 907- if(NOT gamma_type STREQUAL "1.8") 908- set(TEST_PNG_VALID FALSE) 909- endif() 910- else() 911- if(NOT gamma_type STREQUAL "none") 912- set(TEST_PNG_VALID FALSE) 913- endif() 914- endif() 915- 916- if(TEST_PNG_VALID) 917- list(APPEND PNGSTEST_FILES "${test_png}") 918- endif() 919- endforeach() 920- # Should already be sorted, but sort anyway to be certain. 921- list(SORT PNGSTEST_FILES) 922- png_add_test(NAME pngstest-${gamma_type}-${alpha_type} 923- COMMAND pngstest 924- OPTIONS --tmpfile "${gamma_type}-${alpha_type}-" --log 925- FILES ${PNGSTEST_FILES}) 926- endforeach() 927- endforeach() 928- 929- add_executable(pngunknown ${pngunknown_sources}) 930- target_link_libraries(pngunknown PRIVATE png_shared) 931- 932- png_add_test(NAME pngunknown-discard 933- COMMAND pngunknown 934- OPTIONS --strict default=discard 935- FILES "${PNGTEST_PNG}") 936- png_add_test(NAME pngunknown-IDAT 937- COMMAND pngunknown 938- OPTIONS --strict default=discard IDAT=save 939- FILES "${PNGTEST_PNG}") 940- png_add_test(NAME pngunknown-if-safe 941- COMMAND pngunknown 942- OPTIONS --strict default=if-safe 943- FILES "${PNGTEST_PNG}") 944- png_add_test(NAME pngunknown-sAPI 945- COMMAND pngunknown 946- OPTIONS --strict bKGD=save cHRM=save gAMA=save all=discard iCCP=save sBIT=save sRGB=save 947- FILES "${PNGTEST_PNG}") 948- png_add_test(NAME pngunknown-save 949- COMMAND pngunknown 950- OPTIONS --strict default=save 951- FILES "${PNGTEST_PNG}") 952- png_add_test(NAME pngunknown-sTER 953- COMMAND pngunknown 954- OPTIONS --strict sTER=if-safe 955- FILES "${PNGTEST_PNG}") 956- png_add_test(NAME pngunknown-vpAg 957- COMMAND pngunknown 958- OPTIONS --strict vpAg=if-safe 959- FILES "${PNGTEST_PNG}") 960- 961- add_executable(pngimage ${pngimage_sources}) 962- target_link_libraries(pngimage PRIVATE png_shared) 963- 964- png_add_test(NAME pngimage-quick 965- COMMAND pngimage 966- OPTIONS --list-combos --log 967- FILES ${PNGSUITE_PNGS}) 968- png_add_test(NAME pngimage-full 969- COMMAND pngimage 970- OPTIONS --exhaustive --list-combos --log 971- FILES ${PNGSUITE_PNGS}) 972-endif() 973- 974-if(PNG_SHARED AND PNG_TOOLS) 975- add_executable(pngfix ${pngfix_sources}) 976- target_link_libraries(pngfix PRIVATE png_shared) 977- set(PNG_BIN_TARGETS pngfix) 978- 979- add_executable(png-fix-itxt ${png_fix_itxt_sources}) 980- target_link_libraries(png-fix-itxt PRIVATE ZLIB::ZLIB ${M_LIBRARY}) 981- list(APPEND PNG_BIN_TARGETS png-fix-itxt) 982-endif() 983- 984-# Create a symlink from src to dest (if possible), or, alternatively, 985-# copy src to dest if different. 986-function(create_symlink DEST_FILE) 987- cmake_parse_arguments(_SYM "" "FILE;TARGET" "" ${ARGN}) 988- if(NOT _SYM_FILE AND NOT _SYM_TARGET) 989- message(FATAL_ERROR "create_symlink: Missing FILE or TARGET argument") 990- endif() 991- if(_SYM_FILE AND _SYM_TARGET) 992- message(FATAL_ERROR "create_symlink: " 993- "The arguments FILE (${_SYM_FILE}) and TARGET (${_SYM_TARGET}) " 994- "are mutually-exclusive") 995- endif() 996- 997- if(_SYM_FILE) 998- # If we don't need to symlink something that's coming from a build target, 999- # we can go ahead and symlink/copy at configure time. 1000- if(CMAKE_HOST_WIN32 AND NOT CYGWIN) 1001- execute_process(COMMAND "${CMAKE_COMMAND}" 1002- -E copy_if_different 1003- ${_SYM_FILE} ${DEST_FILE} 1004- WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") 1005- else() 1006- execute_process(COMMAND "${CMAKE_COMMAND}" 1007- -E create_symlink 1008- ${_SYM_FILE} ${DEST_FILE} 1009- WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") 1010- endif() 1011- endif() 1012- 1013- if(_SYM_TARGET) 1014- # We need to use generator expressions, which can be a bit tricky. 1015- # For simplicity, make the symlink a POST_BUILD step, and use the TARGET 1016- # signature of add_custom_command. 1017- if(CMAKE_HOST_WIN32 AND NOT CYGWIN) 1018- add_custom_command(TARGET ${_SYM_TARGET} 1019- POST_BUILD 1020- COMMAND "${CMAKE_COMMAND}" 1021- -E copy_if_different 1022- $<TARGET_LINKER_FILE_DIR:${_SYM_TARGET}>/$<TARGET_LINKER_FILE_NAME:${_SYM_TARGET}> 1023- $<TARGET_LINKER_FILE_DIR:${_SYM_TARGET}>/${DEST_FILE}) 1024- else() 1025- add_custom_command(TARGET ${_SYM_TARGET} 1026- POST_BUILD 1027- COMMAND "${CMAKE_COMMAND}" 1028- -E create_symlink 1029- $<TARGET_LINKER_FILE_NAME:${_SYM_TARGET}> 1030- $<TARGET_LINKER_FILE_DIR:${_SYM_TARGET}>/${DEST_FILE}) 1031- endif() 1032- endif() 1033-endfunction() 1034- 1035-# Create source generation scripts. 1036-configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake/genchk.cmake.in 1037- ${CMAKE_CURRENT_BINARY_DIR}/scripts/cmake/genchk.cmake 1038- @ONLY) 1039-configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake/genout.cmake.in 1040- ${CMAKE_CURRENT_BINARY_DIR}/scripts/cmake/genout.cmake 1041- @ONLY) 1042-configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake/gensrc.cmake.in 1043- ${CMAKE_CURRENT_BINARY_DIR}/scripts/cmake/gensrc.cmake 1044- @ONLY) 1045- 1046-# libpng is a library so default to 'lib' 1047-if(NOT DEFINED CMAKE_INSTALL_LIBDIR) 1048- set(CMAKE_INSTALL_LIBDIR lib) 1049-endif() 1050- 1051-# Create pkgconfig files. 1052-# We use the same files like ./configure, so we have to set its vars. 1053-# Only do this on Windows for Cygwin - the files don't make much sense 1054-# outside of a UNIX look-alike. 1055-if(NOT WIN32 OR CYGWIN OR MINGW) 1056- set(prefix ${CMAKE_INSTALL_PREFIX}) 1057- set(exec_prefix ${CMAKE_INSTALL_PREFIX}) 1058- set(libdir ${CMAKE_INSTALL_FULL_LIBDIR}) 1059- set(includedir ${CMAKE_INSTALL_FULL_INCLUDEDIR}) 1060- set(LIBS "-lz -lm") 1061- configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libpng.pc.in 1062- ${CMAKE_CURRENT_BINARY_DIR}/libpng${PNGLIB_ABI_VERSION}.pc 1063- @ONLY) 1064- create_symlink(libpng.pc FILE libpng${PNGLIB_ABI_VERSION}.pc) 1065- configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libpng-config.in 1066- ${CMAKE_CURRENT_BINARY_DIR}/libpng${PNGLIB_ABI_VERSION}-config 1067- @ONLY) 1068- create_symlink(libpng-config FILE libpng${PNGLIB_ABI_VERSION}-config) 1069-endif() 1070- 1071-# Install. 1072-if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL) 1073- install(TARGETS ${PNG_LIBRARY_TARGETS} 1074- EXPORT libpng 1075- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} 1076- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} 1077- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} 1078- FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR}) 1079- 1080- if(PNG_SHARED) 1081- # Create a symlink for libpng.dll.a => libpng16.dll.a on Cygwin 1082- if(NOT WIN32 OR CYGWIN OR MINGW) 1083- create_symlink(libpng${CMAKE_SHARED_LIBRARY_SUFFIX} TARGET png_shared) 1084- install(FILES $<TARGET_LINKER_FILE_DIR:png_shared>/libpng${CMAKE_SHARED_LIBRARY_SUFFIX} 1085- DESTINATION ${CMAKE_INSTALL_LIBDIR}) 1086- endif() 1087- endif() 1088- 1089- if(PNG_STATIC) 1090- if(NOT WIN32 OR CYGWIN OR MINGW) 1091- create_symlink(libpng${CMAKE_STATIC_LIBRARY_SUFFIX} TARGET png_static) 1092- install(FILES $<TARGET_LINKER_FILE_DIR:png_static>/libpng${CMAKE_STATIC_LIBRARY_SUFFIX} 1093- DESTINATION ${CMAKE_INSTALL_LIBDIR}) 1094- endif() 1095- endif() 1096-endif() 1097- 1098-if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL) 1099- install(FILES ${libpng_public_hdrs} 1100- DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) 1101- install(FILES ${libpng_public_hdrs} 1102- DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libpng${PNGLIB_ABI_VERSION}) 1103-endif() 1104-if(NOT SKIP_INSTALL_EXECUTABLES AND NOT SKIP_INSTALL_ALL) 1105- if(NOT WIN32 OR CYGWIN OR MINGW) 1106- install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng-config 1107- DESTINATION ${CMAKE_INSTALL_BINDIR}) 1108- install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng${PNGLIB_ABI_VERSION}-config 1109- DESTINATION ${CMAKE_INSTALL_BINDIR}) 1110- endif() 1111-endif() 1112- 1113-if(NOT SKIP_INSTALL_PROGRAMS AND NOT SKIP_INSTALL_ALL) 1114- install(TARGETS ${PNG_BIN_TARGETS} 1115- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) 1116-endif() 1117- 1118-if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL) 1119- # Install the man pages. 1120- install(FILES libpng.3 libpngpf.3 1121- DESTINATION ${CMAKE_INSTALL_MANDIR}/man3) 1122- install(FILES png.5 1123- DESTINATION ${CMAKE_INSTALL_MANDIR}/man5) 1124- # Install the pkg-config files. 1125- if(NOT CMAKE_HOST_WIN32 OR CYGWIN OR MINGW) 1126- install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng.pc 1127- DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) 1128- install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng-config 1129- DESTINATION ${CMAKE_INSTALL_BINDIR}) 1130- install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng${PNGLIB_ABI_VERSION}.pc 1131- DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) 1132- install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng${PNGLIB_ABI_VERSION}-config 1133- DESTINATION ${CMAKE_INSTALL_BINDIR}) 1134- endif() 1135-endif() 1136- 1137-# Create an export file that CMake users can include() to import our targets. 1138-if(NOT SKIP_INSTALL_EXPORT AND NOT SKIP_INSTALL_ALL) 1139- install(EXPORT libpng 1140- DESTINATION ${CMAKE_INSTALL_LIBDIR}/libpng 1141- FILE libpng${PNGLIB_ABI_VERSION}.cmake) 1142-endif() 1143- 1144-# Create a CMake Config File that can be used via find_package(PNG CONFIG) 1145-if(NOT SKIP_INSTALL_CONFIG_FILE AND NOT SKIP_INSTALL_ALL) 1146- install(TARGETS ${PNG_LIBRARY_TARGETS} 1147- EXPORT PNGTargets 1148- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} 1149- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} 1150- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} 1151- FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR}) 1152- 1153- include(CMakePackageConfigHelpers) 1154- write_basic_package_version_file(PNGConfigVersion.cmake 1155- VERSION ${PNGLIB_VERSION} 1156- COMPATIBILITY SameMinorVersion) 1157- 1158- install(EXPORT PNGTargets 1159- FILE PNGTargets.cmake 1160- NAMESPACE PNG:: 1161- DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/PNG) 1162- 1163- install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake/PNGConfig.cmake 1164- ${CMAKE_CURRENT_BINARY_DIR}/PNGConfigVersion.cmake 1165- DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/PNG) 1166-endif() 1167- 1168-# TODO: Create MSVC import lib for MinGW-compiled shared lib. 1169-# pexports libpng.dll > libpng.def 1170-# lib /def:libpng.def /machine:x86 1171+include_directories(${LibpngInc}) 1172+message(${LibpngSrc}) 1173+add_library(libpng STATIC 1174+ ${LibpngSrc}/png.c 1175+ ${LibpngSrc}/pngerror.c 1176+ ${LibpngSrc}/pngget.c 1177+ ${LibpngSrc}/pngmem.c 1178+ ${LibpngSrc}/pngpread.c 1179+ ${LibpngSrc}/pngread.c 1180+ ${LibpngSrc}/pngrio.c 1181+ ${LibpngSrc}/pngrtran.c 1182+ ${LibpngSrc}/pngrutil.c 1183+ ${LibpngSrc}/pngset.c 1184+ ${LibpngSrc}/pngtrans.c 1185+ ${LibpngSrc}/pngwio.c 1186+ ${LibpngSrc}/pngwrite.c 1187+ ${LibpngSrc}/pngwtran.c 1188+ ${LibpngSrc}/pngwutil.c 1189+ ) 1190+target_link_libraries(libpng PUBLIC zlib) 1191+target_include_directories(libpng PUBLIC ${LibpngInc}) 1192