3 # Copyright (c) 2018-2023 Cosmin Truta
4 # Copyright (c) 2007,2009-2018 Glenn Randers-Pehrson
5 # Written by Christian Ehrlicher, 2007
6 # Revised by Roger Lowman, 2009-2010
7 # Revised by Clifford Yapp, 2011-2012,2017
8 # Revised by Claudio Bley, 2013
9 # Revised by Roger Leigh, 2016
10 # Revised by Andreas Franek, 2016
11 # Revised by Sam Serrels, 2017
12 # Revised by Vadim Barkov, 2017
13 # Revised by Vicky Pfau, 2018
14 # Revised by Cameron Cawley, 2018,2021
15 # Revised by Kyle Bentley, 2018
16 # Revised by David Callu, 2020
17 # Revised by Steve Robinson, 2020
18 # Revised by Simon Hausmann, 2020
19 # Revised by Alex Gaynor, 2020
20 # Revised by Owen Rudge, 2020
21 # Revised by Gleb Mazovetskiy, 2021
22 # Revised by Christopher Sean Morrison, 2022
23 # Revised by B. Scott Michel, 2022
24 # Revised by Jeremy Maitin-Shepard, 2022
25 # Revised by Martin Storsjo, 2022
26 # Revised by Jon Creighton, 2023
27 # Revised by Gunther Nikl, 2023
29 # This code is released under the libpng license.
30 # For conditions of distribution and use, see the disclaimer
31 # and license in png.h
33 cmake_minimum_required(VERSION 3.1)
34 cmake_policy(VERSION 3.1)
39 include(CMakeParseArguments)
40 include(CheckCSourceCompiles)
41 include(GNUInstallDirs)
45 set(PNGLIB_REVISION 40)
46 set(PNGLIB_SUBREVISION 0)
47 #set(PNGLIB_SUBREVISION "git")
48 set(PNGLIB_VERSION ${PNGLIB_MAJOR}.${PNGLIB_MINOR}.${PNGLIB_REVISION})
49 set(PNGLIB_ABI_VERSION ${PNGLIB_MAJOR}${PNGLIB_MINOR})
50 set(PNGLIB_SHARED_VERSION ${PNGLIB_ABI_VERSION}.${PNGLIB_REVISION}.${PNGLIB_SUBREVISION})
52 # Allow the users to specify an application-specific API prefix for libpng
53 # vendoring purposes. A standard libpng build should have no such prefix.
55 CACHE STRING "Prefix to prepend to the API function names")
57 # Allow the users to override the postfix appended to debug library file names.
58 # Previously, we used to set CMAKE_DEBUG_POSTFIX globally. That variable should
59 # not be cached, however, because doing so would affect all projects processed
60 # after libpng, in unexpected and undesirable ways.
61 set(PNG_DEBUG_POSTFIX "d"
62 CACHE STRING "Postfix to append to library file names under the Debug configuration")
64 # Allow the users to import their own extra configuration settings.
66 CACHE FILEPATH "File containing extra configuration settings")
68 # Allow the users to configure the following build options.
69 option(PNG_SHARED "Build libpng as a shared lib" ON)
70 option(PNG_STATIC "Build libpng as a static lib" ON)
71 option(PNG_FRAMEWORK "Build libpng as a Mac OS X framework" OFF)
72 option(PNG_EXECUTABLES "Build libpng executables" ON)
73 option(PNG_TESTS "Build libpng tests" ON)
74 option(PNG_DEBUG "Enable debug output" OFF)
75 option(PNG_HARDWARE_OPTIMIZATIONS "Enable hardware optimizations" ON)
77 # Allow the users to specify a location of zlib.
78 # Useful if zlib is being built alongside this as a sub-project.
79 option(PNG_BUILD_ZLIB "Custom zlib location, else find_package is used" OFF)
80 if(NOT PNG_BUILD_ZLIB)
81 find_package(ZLIB REQUIRED)
82 include_directories(${ZLIB_INCLUDE_DIRS})
85 if(UNIX AND NOT APPLE AND NOT BEOS AND NOT HAIKU AND NOT EMSCRIPTEN)
86 find_library(M_LIBRARY m)
91 # libm is not needed and/or not available.
95 # CMake currently sets CMAKE_SYSTEM_PROCESSOR to one of x86_64 or arm64 on macOS,
96 # based upon the OS architecture, not the target architecture. As such, we need
97 # to check CMAKE_OSX_ARCHITECTURES to identify which hardware-specific flags to
98 # enable. Note that this will fail if you attempt to build a universal binary in
99 # a single CMake invocation.
100 if (APPLE AND CMAKE_OSX_ARCHITECTURES)
101 set(TARGET_ARCH ${CMAKE_OSX_ARCHITECTURES})
103 set(TARGET_ARCH ${CMAKE_SYSTEM_PROCESSOR})
106 if(PNG_HARDWARE_OPTIMIZATIONS)
108 # Set definitions and sources for ARM.
109 if(TARGET_ARCH MATCHES "^arm" OR
110 TARGET_ARCH MATCHES "^aarch64")
111 if(TARGET_ARCH MATCHES "^arm64" OR
112 TARGET_ARCH MATCHES "^aarch64")
113 set(PNG_ARM_NEON_POSSIBLE_VALUES on off)
114 set(PNG_ARM_NEON "on"
115 CACHE STRING "Enable ARM NEON optimizations: on|off; on is default")
117 set(PNG_ARM_NEON_POSSIBLE_VALUES check on off)
118 set(PNG_ARM_NEON "off"
119 CACHE STRING "Enable ARM NEON optimizations: check|on|off; off is default")
121 set_property(CACHE PNG_ARM_NEON
122 PROPERTY STRINGS ${PNG_ARM_NEON_POSSIBLE_VALUES})
123 list(FIND PNG_ARM_NEON_POSSIBLE_VALUES ${PNG_ARM_NEON} index)
125 message(FATAL_ERROR "PNG_ARM_NEON must be one of [${PNG_ARM_NEON_POSSIBLE_VALUES}]")
126 elseif(NOT ${PNG_ARM_NEON} STREQUAL "off")
127 set(libpng_arm_sources
130 arm/filter_neon_intrinsics.c
131 arm/palette_neon_intrinsics.c)
132 if(${PNG_ARM_NEON} STREQUAL "on")
133 add_definitions(-DPNG_ARM_NEON_OPT=2)
134 elseif(${PNG_ARM_NEON} STREQUAL "check")
135 add_definitions(-DPNG_ARM_NEON_CHECK_SUPPORTED)
138 add_definitions(-DPNG_ARM_NEON_OPT=0)
142 # Set definitions and sources for PowerPC.
143 if(TARGET_ARCH MATCHES "^powerpc*" OR
144 TARGET_ARCH MATCHES "^ppc64*")
145 set(PNG_POWERPC_VSX_POSSIBLE_VALUES on off)
146 set(PNG_POWERPC_VSX "on"
147 CACHE STRING "Enable POWERPC VSX optimizations: on|off; on is default")
148 set_property(CACHE PNG_POWERPC_VSX
149 PROPERTY STRINGS ${PNG_POWERPC_VSX_POSSIBLE_VALUES})
150 list(FIND PNG_POWERPC_VSX_POSSIBLE_VALUES ${PNG_POWERPC_VSX} index)
152 message(FATAL_ERROR "PNG_POWERPC_VSX must be one of [${PNG_POWERPC_VSX_POSSIBLE_VALUES}]")
153 elseif(NOT ${PNG_POWERPC_VSX} STREQUAL "off")
154 set(libpng_powerpc_sources
155 powerpc/powerpc_init.c
156 powerpc/filter_vsx_intrinsics.c)
157 if(${PNG_POWERPC_VSX} STREQUAL "on")
158 add_definitions(-DPNG_POWERPC_VSX_OPT=2)
161 add_definitions(-DPNG_POWERPC_VSX_OPT=0)
165 # Set definitions and sources for Intel.
166 if(TARGET_ARCH MATCHES "^i?86" OR
167 TARGET_ARCH MATCHES "^x86_64*")
168 set(PNG_INTEL_SSE_POSSIBLE_VALUES on off)
169 set(PNG_INTEL_SSE "on"
170 CACHE STRING "Enable INTEL_SSE optimizations: on|off; on is default")
171 set_property(CACHE PNG_INTEL_SSE
172 PROPERTY STRINGS ${PNG_INTEL_SSE_POSSIBLE_VALUES})
173 list(FIND PNG_INTEL_SSE_POSSIBLE_VALUES ${PNG_INTEL_SSE} index)
175 message(FATAL_ERROR "PNG_INTEL_SSE must be one of [${PNG_INTEL_SSE_POSSIBLE_VALUES}]")
176 elseif(NOT ${PNG_INTEL_SSE} STREQUAL "off")
177 set(libpng_intel_sources
179 intel/filter_sse2_intrinsics.c)
180 if(${PNG_INTEL_SSE} STREQUAL "on")
181 add_definitions(-DPNG_INTEL_SSE_OPT=1)
184 add_definitions(-DPNG_INTEL_SSE_OPT=0)
188 # Set definitions and sources for MIPS.
189 if(TARGET_ARCH MATCHES "mipsel*" OR
190 TARGET_ARCH MATCHES "mips64el*")
191 set(PNG_MIPS_MSA_POSSIBLE_VALUES on off)
192 set(PNG_MIPS_MSA "on"
193 CACHE STRING "Enable MIPS_MSA optimizations: on|off; on is default")
194 set_property(CACHE PNG_MIPS_MSA
195 PROPERTY STRINGS ${PNG_MIPS_MSA_POSSIBLE_VALUES})
196 list(FIND PNG_MIPS_MSA_POSSIBLE_VALUES ${PNG_MIPS_MSA} index)
198 message(FATAL_ERROR "PNG_MIPS_MSA must be one of [${PNG_MIPS_MSA_POSSIBLE_VALUES}]")
199 elseif(NOT ${PNG_MIPS_MSA} STREQUAL "off")
200 set(libpng_mips_sources
202 mips/filter_msa_intrinsics.c)
203 if(${PNG_MIPS_MSA} STREQUAL "on")
204 add_definitions(-DPNG_MIPS_MSA_OPT=2)
207 add_definitions(-DPNG_MIPS_MSA_OPT=0)
211 else(PNG_HARDWARE_OPTIMIZATIONS)
213 # Set definitions and sources for ARM.
214 if(TARGET_ARCH MATCHES "^arm" OR
215 TARGET_ARCH MATCHES "^aarch64")
216 add_definitions(-DPNG_ARM_NEON_OPT=0)
219 # Set definitions and sources for PowerPC.
220 if(TARGET_ARCH MATCHES "^powerpc*" OR
221 TARGET_ARCH MATCHES "^ppc64*")
222 add_definitions(-DPNG_POWERPC_VSX_OPT=0)
225 # Set definitions and sources for Intel.
226 if(TARGET_ARCH MATCHES "^i?86" OR
227 TARGET_ARCH MATCHES "^x86_64*")
228 add_definitions(-DPNG_INTEL_SSE_OPT=0)
231 # Set definitions and sources for MIPS.
232 if(TARGET_ARCH MATCHES "mipsel*" OR
233 TARGET_ARCH MATCHES "mips64el*")
234 add_definitions(-DPNG_MIPS_MSA_OPT=0)
237 endif(PNG_HARDWARE_OPTIMIZATIONS)
239 option(ld-version-script "Enable linker version script" ON)
240 if(ld-version-script AND NOT ANDROID AND NOT APPLE)
241 # Check if LD supports linker scripts.
242 file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/conftest.map" "
243 VERS_1 { global: sym1; local: *; };
244 VERS_2 { global: sym2; main; } VERS_1;
246 set(_SAVED_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
247 if(NOT CMAKE_HOST_SYSTEM_NAME MATCHES "^SunOS")
248 # Avoid using CMAKE_SHARED_LIBRARY_C_FLAGS in version script checks on
249 # Solaris, because of an incompatibility with the Solaris link editor.
250 list(APPEND CMAKE_REQUIRED_FLAGS ${CMAKE_SHARED_LIBRARY_C_FLAGS})
252 list(APPEND CMAKE_REQUIRED_FLAGS "-Wl,--version-script='${CMAKE_CURRENT_BINARY_DIR}/conftest.map'")
253 check_c_source_compiles("
256 int main(void) { return 0; }
257 " HAVE_LD_VERSION_SCRIPT)
258 if(NOT HAVE_LD_VERSION_SCRIPT)
259 set(CMAKE_REQUIRED_FLAGS ${_SAVED_CMAKE_REQUIRED_FLAGS})
260 if(NOT CMAKE_HOST_SYSTEM_NAME MATCHES "^SunOS")
261 # Again, avoid using CMAKE_SHARED_LIBRARY_C_FLAGS in version script
263 list(APPEND CMAKE_REQUIRED_FLAGS ${CMAKE_SHARED_LIBRARY_C_FLAGS})
265 list(APPEND CMAKE_REQUIRED_FLAGS "-Wl,-M -Wl,${CMAKE_CURRENT_BINARY_DIR}/conftest.map")
266 check_c_source_compiles("
269 int main(void) { return 0; }
270 " HAVE_SOLARIS_LD_VERSION_SCRIPT)
272 set(CMAKE_REQUIRED_FLAGS ${_SAVED_CMAKE_REQUIRED_FLAGS})
273 file(REMOVE "${CMAKE_CURRENT_BINARY_DIR}/conftest.map")
276 # Find symbol prefix. Likely obsolete and unnecessary with recent
277 # toolchains (it's not done in many other projects).
278 function(find_symbol_prefix)
281 execute_process(COMMAND "${CMAKE_C_COMPILER}" -E -
284 RESULT_VARIABLE STATUS)
287 message(WARNING "Failed to run the C preprocessor")
290 string(REPLACE "\n" ";" OUT "${OUT}")
292 string(REGEX MATCH "^PREFIX=" found_match "${line}")
294 string(REGEX REPLACE "^PREFIX=(.*\)" "\\1" prefix "${line}")
295 string(REGEX MATCH "__USER_LABEL_PREFIX__" found_match "${prefix}")
297 string(REGEX REPLACE "(.*)__USER_LABEL_PREFIX__(.*)" "\\1\\2" prefix "${prefix}")
299 set(SYMBOL_PREFIX "${prefix}")
303 message(STATUS "Symbol prefix: ${SYMBOL_PREFIX}")
304 set(SYMBOL_PREFIX "${SYMBOL_PREFIX}" PARENT_SCOPE)
311 find_program(AWK NAMES gawk awk)
313 include_directories(${CMAKE_CURRENT_BINARY_DIR})
315 if(NOT AWK OR ANDROID OR IOS)
316 # No awk available to generate sources; use pre-built pnglibconf.h
317 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.h.prebuilt
318 ${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h)
319 add_custom_target(png_genfiles)
321 # Copy the awk scripts, converting their line endings to Unix (LF)
322 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/checksym.awk
323 ${CMAKE_CURRENT_BINARY_DIR}/scripts/checksym.awk
326 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/options.awk
327 ${CMAKE_CURRENT_BINARY_DIR}/scripts/options.awk
330 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/dfn.awk
331 ${CMAKE_CURRENT_BINARY_DIR}/scripts/dfn.awk
335 # Generate .chk from .out with awk:
336 # generate_chk(INPUT inputfile OUTPUT outputfile [DEPENDS dep1 [dep2...]])
337 function(generate_chk)
339 set(oneValueArgs INPUT OUTPUT)
340 set(multiValueArgs DEPENDS)
341 cmake_parse_arguments(_GC "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
343 message(FATAL_ERROR "generate_chk: Missing INPUT argument")
346 message(FATAL_ERROR "generate_chk: Missing OUTPUT argument")
349 add_custom_command(OUTPUT "${_GC_OUTPUT}"
350 COMMAND "${CMAKE_COMMAND}"
351 "-DINPUT=${_GC_INPUT}"
352 "-DOUTPUT=${_GC_OUTPUT}"
353 -P "${CMAKE_CURRENT_BINARY_DIR}/scripts/genchk.cmake"
354 DEPENDS "${_GC_INPUT}" ${_GC_DEPENDS}
355 WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
358 # Generate .out from .c with awk
359 # generate_out(INPUT inputfile OUTPUT outputfile [DEPENDS dep1 [dep2...]])
360 function(generate_out)
362 set(oneValueArgs INPUT OUTPUT)
363 set(multiValueArgs DEPENDS)
364 cmake_parse_arguments(_GO "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
366 message(FATAL_ERROR "generate_out: Missing INPUT argument")
369 message(FATAL_ERROR "generate_out: Missing OUTPUT argument")
372 add_custom_command(OUTPUT "${_GO_OUTPUT}"
373 COMMAND "${CMAKE_COMMAND}"
374 "-DINPUT=${_GO_INPUT}"
375 "-DOUTPUT=${_GO_OUTPUT}"
376 -P "${CMAKE_CURRENT_BINARY_DIR}/scripts/genout.cmake"
377 DEPENDS "${_GO_INPUT}" ${_GO_DEPENDS}
378 WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
381 # Generate specific source file with awk
382 # generate_source(OUTPUT outputfile [DEPENDS dep1 [dep2...]])
383 function(generate_source)
385 set(oneValueArgs OUTPUT)
386 set(multiValueArgs DEPENDS)
387 cmake_parse_arguments(_GSO "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
389 message(FATAL_ERROR "generate_source: Missing OUTPUT argument")
392 add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${_GSO_OUTPUT}"
393 COMMAND "${CMAKE_COMMAND}"
394 "-DOUTPUT=${_GSO_OUTPUT}"
395 -P "${CMAKE_CURRENT_BINARY_DIR}/scripts/gensrc.cmake"
396 DEPENDS ${_GSO_DEPENDS}
397 WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
401 # generate_copy(INPUT inputfile OUTPUT outputfile [DEPENDS dep1 [dep2...]])
402 function(generate_copy)
404 set(oneValueArgs INPUT OUTPUT)
405 set(multiValueArgs DEPENDS)
406 cmake_parse_arguments(_GCO "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
408 message(FATAL_ERROR "generate_copy: Missing INPUT argument")
411 message(FATAL_ERROR "generate_copy: Missing OUTPUT argument")
414 add_custom_command(OUTPUT "${_GCO_OUTPUT}"
415 COMMAND "${CMAKE_COMMAND}"
416 -E remove "${_GCO_OUTPUT}"
417 COMMAND "${CMAKE_COMMAND}"
418 -E copy "${_GCO_INPUT}" "${_GCO_OUTPUT}"
419 DEPENDS "${source}" ${_GCO_DEPENDS})
422 # Generate scripts/pnglibconf.h
423 generate_source(OUTPUT "scripts/pnglibconf.c"
424 DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.dfa"
425 "${CMAKE_CURRENT_BINARY_DIR}/scripts/options.awk"
426 "${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h")
427 add_custom_target(png_scripts_pnglibconf_c
428 DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/pnglibconf.c")
430 # Generate pnglibconf.c
431 generate_source(OUTPUT "pnglibconf.c"
432 DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.dfa"
433 "${CMAKE_CURRENT_BINARY_DIR}/scripts/options.awk"
434 "${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h")
435 add_custom_target(pnglibconf_c
436 DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.c")
439 set(PNGLIBCONF_H_EXTRA_DEPENDS
440 "${CMAKE_CURRENT_BINARY_DIR}/scripts/prefix.out"
441 "${CMAKE_CURRENT_SOURCE_DIR}/scripts/macro.lst")
442 set(PNGPREFIX_H_EXTRA_DEPENDS
443 "${CMAKE_CURRENT_BINARY_DIR}/scripts/intprefix.out")
446 generate_out(INPUT "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.c"
447 OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out"
448 DEPENDS pnglibconf_c)
449 add_custom_target(pnglibconf_out
450 DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out")
452 # Generate pnglibconf.h
453 generate_source(OUTPUT "pnglibconf.h"
454 DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out" pnglibconf_out
455 ${PNGLIBCONF_H_EXTRA_DEPENDS})
456 add_custom_target(pnglibconf_h
457 DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h")
459 generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/intprefix.c"
460 OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/intprefix.out"
461 DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h" pnglibconf_h)
462 add_custom_target(png_scripts_intprefix_out
463 DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/intprefix.out")
465 generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/prefix.c"
466 OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/prefix.out"
467 DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/png.h"
468 "${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h"
469 "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out" pnglibconf_out)
470 add_custom_target(png_scripts_prefix_out
471 DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/prefix.out")
473 # Generate pngprefix.h
474 generate_source(OUTPUT "pngprefix.h"
475 DEPENDS ${PNGPREFIX_H_EXTRA_DEPENDS})
476 add_custom_target(pngprefix_h
477 DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pngprefix.h")
479 generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/sym.c"
480 OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/sym.out"
481 DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h" pnglibconf_h)
482 add_custom_target(png_scripts_sym_out
483 DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/sym.out")
485 generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/symbols.c"
486 OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.out"
487 DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/png.h"
488 "${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h"
489 "${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.h.prebuilt")
490 add_custom_target(png_scripts_symbols_out
491 DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.out")
493 generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/vers.c"
494 OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/vers.out"
495 DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/png.h"
496 "${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h"
497 "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h" pnglibconf_h)
498 add_custom_target(png_scripts_vers_out
499 DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/vers.out")
501 generate_chk(INPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.out"
502 OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.chk"
503 DEPENDS png_scripts_symbols_out
504 "${CMAKE_CURRENT_BINARY_DIR}/scripts/checksym.awk"
505 "${CMAKE_CURRENT_SOURCE_DIR}/scripts/symbols.def")
507 add_custom_target(png_scripts_symbols_chk
508 DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.chk")
510 generate_copy(INPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/sym.out"
511 OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/libpng.sym"
512 DEPENDS png_scripts_sym_out)
513 generate_copy(INPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/vers.out"
514 OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/libpng.vers"
515 DEPENDS png_scripts_vers_out)
517 add_custom_target(png_genvers
518 DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/libpng.vers")
519 add_custom_target(png_gensym
520 DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/libpng.sym")
522 add_custom_target(png_genprebuilt
523 COMMAND "${CMAKE_COMMAND}"
524 "-DOUTPUT=scripts/pnglibconf.h.prebuilt"
525 -P "${CMAKE_CURRENT_BINARY_DIR}/scripts/gensrc.cmake"
526 WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
528 # A single target handles generation of all generated files.
529 add_custom_target(png_genfiles
530 DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/libpng.sym" png_gensym
531 "${CMAKE_CURRENT_BINARY_DIR}/libpng.vers" png_genvers
532 "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.c" pnglibconf_c
533 "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h" pnglibconf_h
534 "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out" pnglibconf_out
535 "${CMAKE_CURRENT_BINARY_DIR}/pngprefix.h" pngprefix_h
536 "${CMAKE_CURRENT_BINARY_DIR}/scripts/intprefix.out" png_scripts_intprefix_out
537 "${CMAKE_CURRENT_BINARY_DIR}/scripts/pnglibconf.c" png_scripts_pnglibconf_c
538 "${CMAKE_CURRENT_BINARY_DIR}/scripts/prefix.out" png_scripts_prefix_out
539 "${CMAKE_CURRENT_BINARY_DIR}/scripts/sym.out" png_scripts_sym_out
540 "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.chk" png_scripts_symbols_chk
541 "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.out" png_scripts_symbols_out
542 "${CMAKE_CURRENT_BINARY_DIR}/scripts/vers.out" png_scripts_vers_out)
543 endif(NOT AWK OR ANDROID OR IOS)
545 # List the source code files.
546 set(libpng_public_hdrs
549 "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h"
551 set(libpng_private_hdrs
557 if(AWK AND NOT ANDROID AND NOT IOS)
558 list(APPEND libpng_private_hdrs "${CMAKE_CURRENT_BINARY_DIR}/pngprefix.h")
561 ${libpng_public_hdrs}
562 ${libpng_private_hdrs}
578 ${libpng_arm_sources}
579 ${libpng_intel_sources}
580 ${libpng_mips_sources}
581 ${libpng_powerpc_sources}
587 contrib/libtests/pngvalid.c
590 contrib/libtests/pngstest.c
592 set(pngunknown_sources
593 contrib/libtests/pngunknown.c
596 contrib/libtests/pngimage.c
599 contrib/tools/pngfix.c
601 set(png_fix_itxt_sources
602 contrib/tools/png-fix-itxt.c
605 if(MSVC OR (WIN32 AND (CMAKE_C_COMPILER_ID MATCHES ".*Clang")))
606 add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE)
607 add_definitions(-D_CRT_SECURE_NO_DEPRECATE)
611 add_definitions(-DPNG_DEBUG)
614 # Now build our targets.
615 include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${ZLIB_INCLUDE_DIRS})
617 # Initialize the list of libpng library targets.
618 set(PNG_LIBRARY_TARGETS "")
620 # Initialize the libpng library file names.
622 OR (WIN32 AND NOT "${CMAKE_SHARED_LIBRARY_PREFIX}" STREQUAL "")
623 OR (WIN32 AND NOT "${CMAKE_STATIC_LIBRARY_PREFIX}" STREQUAL ""))
624 # We are on a Unix or Unix-like toolchain like the GNU toolchain on Windows.
625 # Library file names are expected to have an implicit prefix such as "lib".
626 # Let CMake prepend and append its usual prefixes and suffixes by default.
627 set(PNG_SHARED_OUTPUT_NAME "png${PNGLIB_ABI_VERSION}")
628 set(PNG_STATIC_OUTPUT_NAME "png${PNGLIB_ABI_VERSION}")
630 # We are, most likely, on a Windows toolchain like MSVC, Clang on Windows,
631 # Borland/Embarcadero, etc. We need to specify the "libpng" name explicitly.
632 # We also need to use a custom suffix, in order to distinguish between the
633 # shared import library name and the static library name.
634 set(PNG_SHARED_OUTPUT_NAME "libpng${PNGLIB_ABI_VERSION}")
635 set(PNG_STATIC_OUTPUT_NAME "libpng${PNGLIB_ABI_VERSION}_static")
639 add_library(png_shared SHARED ${libpng_sources})
640 add_dependencies(png_shared png_genfiles)
641 list(APPEND PNG_LIBRARY_TARGETS png_shared)
642 set_target_properties(png_shared PROPERTIES
643 OUTPUT_NAME "${PNG_SHARED_OUTPUT_NAME}"
644 DEBUG_POSTFIX "${PNG_DEBUG_POSTFIX}"
645 VERSION "${PNGLIB_SHARED_VERSION}"
646 SOVERSION "${PNGLIB_ABI_VERSION}")
648 if(HAVE_LD_VERSION_SCRIPT)
649 set_target_properties(png_shared PROPERTIES
650 LINK_FLAGS "-Wl,--version-script='${CMAKE_CURRENT_BINARY_DIR}/libpng.vers'")
651 elseif(HAVE_SOLARIS_LD_VERSION_SCRIPT)
652 set_target_properties(png_shared PROPERTIES
653 LINK_FLAGS "-Wl,-M -Wl,'${CMAKE_CURRENT_BINARY_DIR}/libpng.vers'")
657 set_target_properties(png_shared PROPERTIES DEFINE_SYMBOL PNG_BUILD_DLL)
659 target_link_libraries(png_shared ${ZLIB_LIBRARIES} ${M_LIBRARY})
663 add_library(png_static STATIC ${libpng_sources})
664 add_dependencies(png_static png_genfiles)
665 list(APPEND PNG_LIBRARY_TARGETS png_static)
666 set_target_properties(png_static PROPERTIES
667 OUTPUT_NAME "${PNG_STATIC_OUTPUT_NAME}"
668 DEBUG_POSTFIX "${PNG_DEBUG_POSTFIX}")
669 target_link_libraries(png_static ${ZLIB_LIBRARIES} ${M_LIBRARY})
673 add_library(png_framework SHARED ${libpng_sources})
674 add_dependencies(png_framework png_genfiles)
675 list(APPEND PNG_LIBRARY_TARGETS png_framework)
676 set_target_properties(png_framework PROPERTIES
678 FRAMEWORK_VERSION "${PNGLIB_VERSION}"
679 MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${PNGLIB_MAJOR}.${PNGLIB_MINOR}"
680 MACOSX_FRAMEWORK_BUNDLE_VERSION "${PNGLIB_VERSION}"
681 MACOSX_FRAMEWORK_IDENTIFIER "org.libpng.libpng"
682 XCODE_ATTRIBUTE_INSTALL_PATH "@rpath"
683 PUBLIC_HEADER "${libpng_public_hdrs}"
685 target_link_libraries(png_framework ${ZLIB_LIBRARIES} ${M_LIBRARY})
688 if(NOT PNG_LIBRARY_TARGETS)
689 message(SEND_ERROR "No library variant selected to build. "
690 "Please enable at least one of the following options: "
691 "PNG_SHARED, PNG_STATIC, PNG_FRAMEWORK")
694 function(png_add_test)
696 set(oneValueArgs NAME COMMAND)
697 set(multiValueArgs OPTIONS FILES)
698 cmake_parse_arguments(_PAT "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
700 message(FATAL_ERROR "png_add_test: Missing NAME argument")
703 message(FATAL_ERROR "png_add_test: Missing COMMAND argument")
706 set(TEST_OPTIONS "${_PAT_OPTIONS}")
707 set(TEST_FILES "${_PAT_FILES}")
709 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/scripts/test.cmake.in"
710 "${CMAKE_CURRENT_BINARY_DIR}/tests/${_PAT_NAME}.cmake"
712 add_test(NAME "${_PAT_NAME}"
713 COMMAND "${CMAKE_COMMAND}"
714 "-DLIBPNG=$<TARGET_FILE:png_shared>"
715 "-DTEST_COMMAND=$<TARGET_FILE:${_PAT_COMMAND}>"
716 -P "${CMAKE_CURRENT_BINARY_DIR}/tests/${_PAT_NAME}.cmake")
719 if(PNG_TESTS AND PNG_SHARED)
720 # Find test PNG files by globbing, but sort lists to ensure
721 # consistency between different filesystems.
722 file(GLOB PNGSUITE_PNGS "${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/*.png")
723 list(SORT PNGSUITE_PNGS)
724 file(GLOB TEST_PNGS "${CMAKE_CURRENT_SOURCE_DIR}/contrib/testpngs/*.png")
727 set(PNGTEST_PNG "${CMAKE_CURRENT_SOURCE_DIR}/pngtest.png")
729 add_executable(pngtest ${pngtest_sources})
730 target_link_libraries(pngtest png_shared)
732 png_add_test(NAME pngtest
734 FILES "${PNGTEST_PNG}")
736 add_executable(pngvalid ${pngvalid_sources})
737 target_link_libraries(pngvalid png_shared)
739 png_add_test(NAME pngvalid-gamma-16-to-8
741 OPTIONS --gamma-16-to-8)
742 png_add_test(NAME pngvalid-gamma-alpha-mode
744 OPTIONS --gamma-alpha-mode)
745 png_add_test(NAME pngvalid-gamma-background
747 OPTIONS --gamma-background)
748 png_add_test(NAME pngvalid-gamma-expand16-alpha-mode
750 OPTIONS --gamma-alpha-mode --expand16)
751 png_add_test(NAME pngvalid-gamma-expand16-background
753 OPTIONS --gamma-background --expand16)
754 png_add_test(NAME pngvalid-gamma-expand16-transform
756 OPTIONS --gamma-transform --expand16)
757 png_add_test(NAME pngvalid-gamma-sbit
759 OPTIONS --gamma-sbit)
760 png_add_test(NAME pngvalid-gamma-threshold
762 OPTIONS --gamma-threshold)
763 png_add_test(NAME pngvalid-gamma-transform
765 OPTIONS --gamma-transform)
766 png_add_test(NAME pngvalid-progressive-interlace-standard
768 OPTIONS --standard --progressive-read --interlace)
769 png_add_test(NAME pngvalid-progressive-size
771 OPTIONS --size --progressive-read)
772 png_add_test(NAME pngvalid-progressive-standard
774 OPTIONS --standard --progressive-read)
775 png_add_test(NAME pngvalid-standard
778 png_add_test(NAME pngvalid-transform
782 add_executable(pngstest ${pngstest_sources})
783 target_link_libraries(pngstest png_shared)
785 foreach(gamma_type 1.8 linear none sRGB)
786 foreach(alpha_type none alpha)
788 foreach(test_png ${TEST_PNGS})
789 string(REGEX MATCH ".*-linear[-.].*" TEST_PNG_LINEAR "${test_png}")
790 string(REGEX MATCH ".*-sRGB[-.].*" TEST_PNG_SRGB "${test_png}")
791 string(REGEX MATCH ".*-1.8[-.].*" TEST_PNG_G18 "${test_png}")
792 string(REGEX MATCH ".*-alpha-.*" TEST_PNG_ALPHA "${test_png}")
794 set(TEST_PNG_VALID TRUE)
797 if(NOT "${alpha_type}" STREQUAL "alpha")
798 set(TEST_PNG_VALID FALSE)
801 if("${alpha_type}" STREQUAL "alpha")
802 set(TEST_PNG_VALID FALSE)
807 if(NOT "${gamma_type}" STREQUAL "linear")
808 set(TEST_PNG_VALID FALSE)
810 elseif(TEST_PNG_SRGB)
811 if(NOT "${gamma_type}" STREQUAL "sRGB")
812 set(TEST_PNG_VALID FALSE)
815 if(NOT "${gamma_type}" STREQUAL "1.8")
816 set(TEST_PNG_VALID FALSE)
819 if(NOT "${gamma_type}" STREQUAL "none")
820 set(TEST_PNG_VALID FALSE)
825 list(APPEND PNGSTEST_FILES "${test_png}")
828 # Should already be sorted, but sort anyway to be certain.
829 list(SORT PNGSTEST_FILES)
830 png_add_test(NAME pngstest-${gamma_type}-${alpha_type}
832 OPTIONS --tmpfile "${gamma_type}-${alpha_type}-" --log
833 FILES ${PNGSTEST_FILES})
837 add_executable(pngunknown ${pngunknown_sources})
838 target_link_libraries(pngunknown png_shared)
840 png_add_test(NAME pngunknown-discard
842 OPTIONS --strict default=discard
843 FILES "${PNGTEST_PNG}")
844 png_add_test(NAME pngunknown-IDAT
846 OPTIONS --strict default=discard IDAT=save
847 FILES "${PNGTEST_PNG}")
848 png_add_test(NAME pngunknown-if-safe
850 OPTIONS --strict default=if-safe
851 FILES "${PNGTEST_PNG}")
852 png_add_test(NAME pngunknown-sAPI
854 OPTIONS --strict bKGD=save cHRM=save gAMA=save all=discard iCCP=save sBIT=save sRGB=save
855 FILES "${PNGTEST_PNG}")
856 png_add_test(NAME pngunknown-save
858 OPTIONS --strict default=save
859 FILES "${PNGTEST_PNG}")
860 png_add_test(NAME pngunknown-sTER
862 OPTIONS --strict sTER=if-safe
863 FILES "${PNGTEST_PNG}")
864 png_add_test(NAME pngunknown-vpAg
866 OPTIONS --strict vpAg=if-safe
867 FILES "${PNGTEST_PNG}")
869 add_executable(pngimage ${pngimage_sources})
870 target_link_libraries(pngimage png_shared)
872 png_add_test(NAME pngimage-quick
874 OPTIONS --list-combos --log
875 FILES ${PNGSUITE_PNGS})
876 png_add_test(NAME pngimage-full
878 OPTIONS --exhaustive --list-combos --log
879 FILES ${PNGSUITE_PNGS})
882 if(PNG_SHARED AND PNG_EXECUTABLES)
883 add_executable(pngfix ${pngfix_sources})
884 target_link_libraries(pngfix png_shared)
885 set(PNG_BIN_TARGETS pngfix)
887 add_executable(png-fix-itxt ${png_fix_itxt_sources})
888 target_link_libraries(png-fix-itxt ${ZLIB_LIBRARIES} ${M_LIBRARY})
889 list(APPEND PNG_BIN_TARGETS png-fix-itxt)
892 # Create a symlink from src to dest (if possible), or, alternatively,
893 # copy src to dest if different.
894 function(create_symlink DEST_FILE)
895 cmake_parse_arguments(_SYM "" "FILE;TARGET" "" ${ARGN})
896 if(NOT _SYM_FILE AND NOT _SYM_TARGET)
897 message(FATAL_ERROR "create_symlink: Missing FILE or TARGET argument")
899 if(_SYM_FILE AND _SYM_TARGET)
900 message(FATAL_ERROR "create_symlink: "
901 "The arguments FILE (${_SYM_FILE}) and TARGET (${_SYM_TARGET}) "
902 "are mutually-exclusive")
906 # If we don't need to symlink something that's coming from a build target,
907 # we can go ahead and symlink/copy at configure time.
908 if(CMAKE_HOST_WIN32 AND NOT CYGWIN)
909 execute_process(COMMAND "${CMAKE_COMMAND}"
911 ${_SYM_FILE} ${DEST_FILE}
912 WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
914 execute_process(COMMAND "${CMAKE_COMMAND}"
916 ${_SYM_FILE} ${DEST_FILE}
917 WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
922 # We need to use generator expressions, which can be a bit tricky.
923 # For simplicity, make the symlink a POST_BUILD step, and use the TARGET
924 # signature of add_custom_command.
925 if(CMAKE_HOST_WIN32 AND NOT CYGWIN)
926 add_custom_command(TARGET ${_SYM_TARGET}
928 COMMAND "${CMAKE_COMMAND}"
930 $<TARGET_LINKER_FILE_NAME:${_SYM_TARGET}>
931 $<TARGET_LINKER_FILE_DIR:${_SYM_TARGET}>/${DEST_FILE})
933 add_custom_command(TARGET ${_SYM_TARGET}
935 COMMAND "${CMAKE_COMMAND}"
937 $<TARGET_LINKER_FILE_NAME:${_SYM_TARGET}>
938 $<TARGET_LINKER_FILE_DIR:${_SYM_TARGET}>/${DEST_FILE})
943 # Create source generation scripts.
944 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/genchk.cmake.in
945 ${CMAKE_CURRENT_BINARY_DIR}/scripts/genchk.cmake
947 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/genout.cmake.in
948 ${CMAKE_CURRENT_BINARY_DIR}/scripts/genout.cmake
950 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/gensrc.cmake.in
951 ${CMAKE_CURRENT_BINARY_DIR}/scripts/gensrc.cmake
954 # libpng is a library so default to 'lib'
955 if(NOT DEFINED CMAKE_INSTALL_LIBDIR)
956 set(CMAKE_INSTALL_LIBDIR lib)
959 # Create pkgconfig files.
960 # We use the same files like ./configure, so we have to set its vars.
961 # Only do this on Windows for Cygwin - the files don't make much sense
962 # outside of a UNIX look-alike.
963 if(NOT WIN32 OR CYGWIN OR MINGW)
964 set(prefix ${CMAKE_INSTALL_PREFIX})
965 set(exec_prefix ${CMAKE_INSTALL_PREFIX})
966 set(libdir ${CMAKE_INSTALL_FULL_LIBDIR})
967 set(includedir ${CMAKE_INSTALL_FULL_INCLUDEDIR})
969 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libpng.pc.in
970 ${CMAKE_CURRENT_BINARY_DIR}/libpng${PNGLIB_ABI_VERSION}.pc
972 create_symlink(libpng.pc FILE libpng${PNGLIB_ABI_VERSION}.pc)
973 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libpng-config.in
974 ${CMAKE_CURRENT_BINARY_DIR}/libpng${PNGLIB_ABI_VERSION}-config
976 create_symlink(libpng-config FILE libpng${PNGLIB_ABI_VERSION}-config)
980 if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL)
981 install(TARGETS ${PNG_LIBRARY_TARGETS}
983 RUNTIME DESTINATION bin
984 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
985 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
986 FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR})
989 # Create a symlink for libpng.dll.a => libpng16.dll.a on Cygwin
991 create_symlink(libpng${CMAKE_IMPORT_LIBRARY_SUFFIX} TARGET png_shared)
992 install(FILES $<TARGET_LINKER_FILE_DIR:png_shared>/libpng${CMAKE_IMPORT_LIBRARY_SUFFIX}
993 DESTINATION ${CMAKE_INSTALL_LIBDIR})
997 create_symlink(libpng${CMAKE_SHARED_LIBRARY_SUFFIX} TARGET png_shared)
998 install(FILES $<TARGET_LINKER_FILE_DIR:png_shared>/libpng${CMAKE_SHARED_LIBRARY_SUFFIX}
999 DESTINATION ${CMAKE_INSTALL_LIBDIR})
1004 if(NOT WIN32 OR CYGWIN OR MINGW)
1005 create_symlink(libpng${CMAKE_STATIC_LIBRARY_SUFFIX} TARGET png_static)
1006 install(FILES $<TARGET_LINKER_FILE_DIR:png_static>/libpng${CMAKE_STATIC_LIBRARY_SUFFIX}
1007 DESTINATION ${CMAKE_INSTALL_LIBDIR})
1012 if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL)
1013 install(FILES ${libpng_public_hdrs}
1014 DESTINATION include)
1015 install(FILES ${libpng_public_hdrs}
1016 DESTINATION include/libpng${PNGLIB_ABI_VERSION})
1018 if(NOT SKIP_INSTALL_EXECUTABLES AND NOT SKIP_INSTALL_ALL)
1019 if(NOT WIN32 OR CYGWIN OR MINGW)
1020 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng-config
1022 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng${PNGLIB_ABI_VERSION}-config
1027 if(NOT SKIP_INSTALL_PROGRAMS AND NOT SKIP_INSTALL_ALL)
1028 install(TARGETS ${PNG_BIN_TARGETS}
1029 RUNTIME DESTINATION bin)
1032 if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL)
1033 # Install the man pages.
1034 install(FILES libpng.3 libpngpf.3
1035 DESTINATION ${CMAKE_INSTALL_MANDIR}/man3)
1037 DESTINATION ${CMAKE_INSTALL_MANDIR}/man5)
1038 # Install the pkg-config files.
1039 if(NOT CMAKE_HOST_WIN32 OR CYGWIN OR MINGW)
1040 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng.pc
1041 DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
1042 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng-config
1043 DESTINATION ${CMAKE_INSTALL_BINDIR})
1044 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng${PNGLIB_ABI_VERSION}.pc
1045 DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
1046 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng${PNGLIB_ABI_VERSION}-config
1047 DESTINATION ${CMAKE_INSTALL_BINDIR})
1051 # Create an export file that CMake users can include() to import our targets.
1052 if(NOT SKIP_INSTALL_EXPORT AND NOT SKIP_INSTALL_ALL)
1053 install(EXPORT libpng
1054 DESTINATION lib/libpng
1055 FILE libpng${PNGLIB_ABI_VERSION}.cmake)
1058 # TODO: Create MSVC import lib for MinGW-compiled shared lib.
1059 # pexports libpng.dll > libpng.def
1060 # lib /def:libpng.def /machine:x86