• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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