blob: 563068ded61f8e760cff05359b7ec2d9da010780 [file] [log] [blame]
Glenn Randers-Pehrson0c03fc62011-08-17 09:46:29 -05001# CMakeLists.txt
2
John Bowler1b9b9702013-06-05 11:41:44 -05003# Copyright (C) 2007-2013 Glenn Randers-Pehrson
Glenn Randers-Pehrson0c03fc62011-08-17 09:46:29 -05004
5# This code is released under the libpng license.
6# For conditions of distribution and use, see the disclaimer
7# and license in png.h
8
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -05009cmake_minimum_required(VERSION 2.4.4)
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -060010set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)
11
Glenn Randers-Pehrson43f03112013-06-05 11:07:01 -050012set(CMAKE_CONFIGURATION_TYPES "Release;Debug;MinSizeRel;RelWithDebInfo")
13
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -060014project(libpng C)
Glenn Randers-Pehrsonee35abb2009-10-30 15:42:54 -050015enable_testing()
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -060016
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -050017set(PNGLIB_MAJOR 1)
Glenn Randers-Pehrson15ea1fa2011-11-23 15:28:01 -060018set(PNGLIB_MINOR 6)
Glenn Randers-Pehrson71d23c42014-03-06 19:52:04 -060019set(PNGLIB_RELEASE 11)
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -050020set(PNGLIB_NAME libpng${PNGLIB_MAJOR}${PNGLIB_MINOR})
21set(PNGLIB_VERSION ${PNGLIB_MAJOR}.${PNGLIB_MINOR}.${PNGLIB_RELEASE})
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -060022
23# needed packages
24find_package(ZLIB REQUIRED)
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -050025include_directories(${ZLIB_INCLUDE_DIR})
26
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -050027if(NOT WIN32)
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -060028 find_library(M_LIBRARY
29 NAMES m
30 PATHS /usr/lib /usr/local/lib
31 )
32 if(NOT M_LIBRARY)
33 message(STATUS
34 "math library 'libm' not found - floating point support disabled")
35 endif()
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -050036else()
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -060037 # not needed on windows
38 set(M_LIBRARY "")
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -050039endif()
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -060040
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -050041# COMMAND LINE OPTIONS
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -050042if(DEFINED PNG_SHARED)
43 option(PNG_SHARED "Build shared lib" ${PNG_SHARED})
44else()
45 option(PNG_SHARED "Build shared lib" ON)
46endif()
47if(DEFINED PNG_STATIC)
48 option(PNG_STATIC "Build static lib" ${PNG_STATIC})
49else()
50 option(PNG_STATIC "Build static lib" ON)
51endif()
52
Glenn Randers-Pehrsone29c4b92011-09-27 19:01:58 -050053option(PNG_TESTS "Build libpng tests" YES)
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -050054
Glenn Randers-Pehrsone29c4b92011-09-27 19:01:58 -050055# Many more configuration options could be added here
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -050056option(PNG_DEBUG "Build with debug output" NO)
Glenn Randers-Pehrsone29c4b92011-09-27 19:01:58 -050057option(PNGARG "Disable ANSI-C prototypes" NO)
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -060058
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -050059# SET LIBNAME
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -050060set(PNG_LIB_NAME png${PNGLIB_MAJOR}${PNGLIB_MINOR})
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -060061
62# to distinguish between debug and release lib
63set(CMAKE_DEBUG_POSTFIX "d")
64
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -050065# Use the prebuilt pnglibconf.h file from the scripts folder
Glenn Randers-Pehrsone29c4b92011-09-27 19:01:58 -050066# TODO: fix this by building with awk; without this no cmake build can be
67# configured directly (to do so indirectly use your local awk to build a
68# pnglibconf.h in the build directory.)
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -050069configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.h.prebuilt
70 ${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h)
71include_directories(${CMAKE_CURRENT_BINARY_DIR})
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -060072
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -050073# OUR SOURCES
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -050074set(libpng_public_hdrs
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -060075 png.h
76 pngconf.h
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -050077 ${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h
78)
79set(libpng_sources
80 ${libpng_public_hdrs}
Glenn Randers-Pehrson07d9fc92010-08-26 17:11:55 -050081 pngdebug.h
82 pnginfo.h
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -050083 pngpriv.h
Glenn Randers-Pehrson07d9fc92010-08-26 17:11:55 -050084 pngstruct.h
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -060085 png.c
86 pngerror.c
87 pngget.c
88 pngmem.c
89 pngpread.c
90 pngread.c
91 pngrio.c
92 pngrtran.c
93 pngrutil.c
94 pngset.c
95 pngtrans.c
96 pngwio.c
97 pngwrite.c
98 pngwtran.c
99 pngwutil.c
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600100)
101set(pngtest_sources
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600102 pngtest.c
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600103)
Glenn Randers-Pehrsone29c4b92011-09-27 19:01:58 -0500104set(pngvalid_sources
John Bowlerc4081f02011-12-08 09:53:00 -0600105 contrib/libtests/pngvalid.c
106)
107set(pngstest_sources
108 contrib/libtests/pngstest.c
Glenn Randers-Pehrsone29c4b92011-09-27 19:01:58 -0500109)
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500110# SOME NEEDED DEFINITIONS
Glenn Randers-Pehrson69b0bc02009-11-07 12:02:48 -0600111
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600112if(MSVC)
Glenn Randers-Pehrsone29c4b92011-09-27 19:01:58 -0500113 add_definitions(-D_CRT_SECURE_NO_DEPRECATE)
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600114endif(MSVC)
115
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500116if(PNG_DEBUG)
Glenn Randers-Pehrson8c037302010-08-23 17:07:32 -0500117 add_definitions(-DPNG_DEBUG)
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500118endif()
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500119
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500120# NOW BUILD OUR TARGET
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600121include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${ZLIB_INCLUDE_DIR})
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600122
Claudio Bley0281dee2013-03-07 11:17:17 -0600123unset(PNG_LIB_TARGETS)
124
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600125if(PNG_SHARED)
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600126 add_library(${PNG_LIB_NAME} SHARED ${libpng_sources})
Claudio Bley0281dee2013-03-07 11:17:17 -0600127 set(PNG_LIB_TARGETS ${PNG_LIB_NAME})
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600128 if(MSVC)
129 # msvc does not append 'lib' - do it here to have consistent name
130 set_target_properties(${PNG_LIB_NAME} PROPERTIES PREFIX "lib")
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500131 set_target_properties(${PNG_LIB_NAME} PROPERTIES IMPORT_PREFIX "lib")
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600132 endif()
133 target_link_libraries(${PNG_LIB_NAME} ${ZLIB_LIBRARY} ${M_LIBRARY})
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500134endif()
135
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500136if(PNG_STATIC)
137# does not work without changing name
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600138 set(PNG_LIB_NAME_STATIC ${PNG_LIB_NAME}_static)
139 add_library(${PNG_LIB_NAME_STATIC} STATIC ${libpng_sources})
Claudio Bley0281dee2013-03-07 11:17:17 -0600140 list(APPEND PNG_LIB_TARGETS ${PNG_LIB_NAME_STATIC})
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600141 if(MSVC)
142 # msvc does not append 'lib' - do it here to have consistent name
143 set_target_properties(${PNG_LIB_NAME_STATIC} PROPERTIES PREFIX "lib")
144 endif()
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500145 target_link_libraries(${PNG_LIB_NAME_STATIC} ${ZLIB_LIBRARY} ${M_LIBRARY})
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500146endif()
147
Claudio Bley0281dee2013-03-07 11:17:17 -0600148if(NOT PNG_LIB_TARGETS)
149 message(SEND_ERROR
150 "No library variant selected to build. "
151 "Please enable at least one of the following options: PNG_STATIC, PNG_SHARED")
152endif()
153
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600154if(PNG_SHARED AND WIN32)
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600155 set_target_properties(${PNG_LIB_NAME} PROPERTIES DEFINE_SYMBOL PNG_BUILD_DLL)
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500156endif()
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600157
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500158if(PNG_TESTS AND PNG_SHARED)
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600159 # does not work with msvc due to png_lib_ver issue
160 add_executable(pngtest ${pngtest_sources})
161 target_link_libraries(pngtest ${PNG_LIB_NAME})
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500162 add_test(pngtest ./pngtest ${CMAKE_CURRENT_SOURCE_DIR}/pngtest.png)
Glenn Randers-Pehrsone29c4b92011-09-27 19:01:58 -0500163 #
164 add_executable(pngvalid ${pngvalid_sources})
165 target_link_libraries(pngvalid ${PNG_LIB_NAME})
166 add_test(pngvalid ./pngvalid)
John Bowlerc4081f02011-12-08 09:53:00 -0600167 add_executable(pngstest ${pngstest_sources})
168 target_link_libraries(pngstest ${PNG_LIB_NAME})
169 add_test(pngstest ./pngstest
170 ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn0g01.png
171 ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn0g02.png
172 ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn0g04.png
173 ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn0g08.png
174 ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn0g16.png
175 ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn2c08.png
176 ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn2c16.png
177 ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn3p01.png
178 ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn3p02.png
179 ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn3p04.png
180 ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn3p08.png
181 ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn4a08.png
182 ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn4a16.png
183 ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn6a08.png
184 ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn6a16.png
Glenn Randers-Pehrson871b1d02013-03-02 14:58:22 -0600185 ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftbbn0g01.png
186 ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftbbn0g02.png
187 ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftbbn0g04.png
John Bowlerc4081f02011-12-08 09:53:00 -0600188 ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftbbn2c16.png
189 ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftbbn3p08.png
190 ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftbgn2c16.png
191 ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftbgn3p08.png
192 ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftbrn2c08.png
Glenn Randers-Pehrson871b1d02013-03-02 14:58:22 -0600193 ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftbwn0g16.png
John Bowlerc4081f02011-12-08 09:53:00 -0600194 ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftbwn3p08.png
195 ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftbyn3p08.png
Glenn Randers-Pehrson871b1d02013-03-02 14:58:22 -0600196 ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftp0n0g08.png
John Bowlerc4081f02011-12-08 09:53:00 -0600197 ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftp0n2c08.png
198 ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftp0n3p08.png
199 ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftp1n3p08.png
200 )
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500201endif()
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600202
Glenn Randers-Pehrsone61e4032011-08-17 09:02:07 -0500203# Ensure the CMAKE_LIBRARY_OUTPUT_DIRECTORY is set
204IF(NOT CMAKE_LIBRARY_OUTPUT_DIRECTORY)
Glenn Randers-Pehrson871b1d02013-03-02 14:58:22 -0600205 SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY "lib")
Glenn Randers-Pehrsone61e4032011-08-17 09:02:07 -0500206ENDIF(NOT CMAKE_LIBRARY_OUTPUT_DIRECTORY)
207
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500208# Set a variable with CMake code which:
209# Creates a symlink from src to dest (if possible) or alternatively
210# copies if different.
Glenn Randers-Pehrsonb17c75b2011-07-27 20:47:13 -0500211macro(CREATE_SYMLINK SRC_FILE DEST_FILE)
Glenn Randers-Pehrson0c03fc62011-08-17 09:46:29 -0500212 FILE(REMOVE ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE})
Glenn Randers-Pehrson871b1d02013-03-02 14:58:22 -0600213 if(WIN32 AND NOT CYGWIN AND NOT MSYS)
Glenn Randers-Pehrson0c03fc62011-08-17 09:46:29 -0500214 ADD_CUSTOM_COMMAND(
215 OUTPUT ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE} ${CMAKE_CURRENT_BINARY_DIR}/${DEST_FILE}
Claudio Bley0281dee2013-03-07 11:17:17 -0600216 COMMAND ${CMAKE_COMMAND} -E copy_if_different "${SRC_FILE}" ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE}
217 COMMAND ${CMAKE_COMMAND} -E copy_if_different "${SRC_FILE}" ${CMAKE_CURRENT_BINARY_DIR}/${DEST_FILE}
218 DEPENDS ${PNG_LIB_TARGETS}
Glenn Randers-Pehrson0c03fc62011-08-17 09:46:29 -0500219 )
220 ADD_CUSTOM_TARGET(${DEST_FILE}_COPY ALL DEPENDS ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE})
Glenn Randers-Pehrson871b1d02013-03-02 14:58:22 -0600221 else(WIN32 AND NOT CYGWIN AND NOT MSYS)
Claudio Bley0281dee2013-03-07 11:17:17 -0600222 get_filename_component(LINK_TARGET "${SRC_FILE}" NAME)
223 execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink "${LINK_TARGET}" ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
224 execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink "${LINK_TARGET}" ${DEST_FILE} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
Glenn Randers-Pehrson871b1d02013-03-02 14:58:22 -0600225 endif(WIN32 AND NOT CYGWIN AND NOT MSYS)
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500226endmacro()
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600227
Glenn Randers-Pehrsone29c4b92011-09-27 19:01:58 -0500228# libpng is a library so default to 'lib'
Glenn Randers-Pehrson8c037302010-08-23 17:07:32 -0500229if(NOT DEFINED CMAKE_INSTALL_LIBDIR)
Glenn Randers-Pehrsond3edb3f2011-01-14 17:08:28 -0600230 set(CMAKE_INSTALL_LIBDIR lib)
Glenn Randers-Pehrson8c037302010-08-23 17:07:32 -0500231endif(NOT DEFINED CMAKE_INSTALL_LIBDIR)
Glenn Randers-Pehrsone29c4b92011-09-27 19:01:58 -0500232
233# CREATE PKGCONFIG FILES
234# we use the same files like ./configure, so we have to set its vars
235# Only do this on Windows for Cygwin - the files don't make much sense outside
236# a UNIX look alike
Glenn Randers-Pehrson871b1d02013-03-02 14:58:22 -0600237if(NOT WIN32 OR CYGWIN OR MINGW)
238 set(prefix ${CMAKE_INSTALL_PREFIX})
239 set(exec_prefix ${CMAKE_INSTALL_PREFIX})
240 set(libdir ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR})
241 set(includedir ${CMAKE_INSTALL_PREFIX}/include)
242 set(LIBS "-lz -lm")
243 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libpng.pc.in
244 ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}.pc @ONLY)
245 CREATE_SYMLINK(${PNGLIB_NAME}.pc libpng.pc)
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500246
Glenn Randers-Pehrson871b1d02013-03-02 14:58:22 -0600247 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libpng-config.in
248 ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config @ONLY)
249 CREATE_SYMLINK(${PNGLIB_NAME}-config libpng-config)
Glenn Randers-Pehrson8e836312011-11-21 12:37:13 -0600250endif(NOT WIN32 OR CYGWIN OR MINGW)
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500251
252# SET UP LINKS
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500253if(PNG_SHARED)
254 set_target_properties(${PNG_LIB_NAME} PROPERTIES
Glenn Randers-Pehrson165f0722014-05-27 10:47:22 -0500255# VERSION 16.${PNGLIB_RELEASE}.1.6.11rc01
Glenn Randers-Pehrson7455cbf2011-11-24 14:40:36 -0600256 VERSION 16.${PNGLIB_RELEASE}.0
257 SOVERSION 16
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600258 CLEAN_DIRECT_OUTPUT 1)
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500259endif()
Glenn Randers-Pehrson glennrp@comcast.net7ecf7bd2009-05-02 15:36:08 -0500260if(PNG_STATIC)
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500261 # MSVC doesn't use a different file extension for shared vs. static
262 # libs. We are able to change OUTPUT_NAME to remove the _static
263 # for all other platforms.
264 if(NOT MSVC)
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500265 set_target_properties(${PNG_LIB_NAME_STATIC} PROPERTIES
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600266 OUTPUT_NAME ${PNG_LIB_NAME}
267 CLEAN_DIRECT_OUTPUT 1)
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500268 endif()
269endif()
270
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500271# If CMake > 2.4.x, we set a variable used below to export
272# targets to an export file.
273# TODO: Use VERSION_GREATER after our cmake_minimum_required >= 2.6.2
274if(CMAKE_MAJOR_VERSION GREATER 1 AND CMAKE_MINOR_VERSION GREATER 4)
275 set(PNG_EXPORT_RULE EXPORT libpng)
276elseif(CMAKE_MAJOR_VERSION GREATER 2) # future proof
277 set(PNG_EXPORT_RULE EXPORT libpng)
278endif()
279
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500280# INSTALL
281if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL )
Claudio Bley0281dee2013-03-07 11:17:17 -0600282 install(TARGETS ${PNG_LIB_TARGETS}
283 ${PNG_EXPORT_RULE}
284 RUNTIME DESTINATION bin
285 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
286 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500287
Claudio Bley0281dee2013-03-07 11:17:17 -0600288 if(PNG_SHARED)
Glenn Randers-Pehrson7455cbf2011-11-24 14:40:36 -0600289 # Create a symlink for libpng.dll.a => libpng16.dll.a on Cygwin
Glenn Randers-Pehrson8e836312011-11-21 12:37:13 -0600290 if(CYGWIN OR MINGW)
Glenn Randers-Pehrson0c03fc62011-08-17 09:46:29 -0500291 get_target_property(BUILD_TARGET_LOCATION ${PNG_LIB_NAME} LOCATION_${CMAKE_BUILD_TYPE})
Claudio Bley0281dee2013-03-07 11:17:17 -0600292 CREATE_SYMLINK(${BUILD_TARGET_LOCATION} libpng${CMAKE_IMPORT_LIBRARY_SUFFIX})
Glenn Randers-Pehrson0c03fc62011-08-17 09:46:29 -0500293 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng${CMAKE_IMPORT_LIBRARY_SUFFIX}
294 DESTINATION ${CMAKE_INSTALL_LIBDIR})
Glenn Randers-Pehrson8e836312011-11-21 12:37:13 -0600295 endif(CYGWIN OR MINGW)
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500296
297 if(NOT WIN32)
Glenn Randers-Pehrson0c03fc62011-08-17 09:46:29 -0500298 get_target_property(BUILD_TARGET_LOCATION ${PNG_LIB_NAME} LOCATION_${CMAKE_BUILD_TYPE})
Claudio Bley0281dee2013-03-07 11:17:17 -0600299 CREATE_SYMLINK(${BUILD_TARGET_LOCATION} libpng${CMAKE_SHARED_LIBRARY_SUFFIX})
Glenn Randers-Pehrson0c03fc62011-08-17 09:46:29 -0500300 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng${CMAKE_SHARED_LIBRARY_SUFFIX}
301 DESTINATION ${CMAKE_INSTALL_LIBDIR})
Glenn Randers-Pehrsonb17c75b2011-07-27 20:47:13 -0500302 endif(NOT WIN32)
303 endif(PNG_SHARED)
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500304
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600305 if(PNG_STATIC)
Glenn Randers-Pehrson8e836312011-11-21 12:37:13 -0600306 if(NOT WIN32 OR CYGWIN OR MINGW)
Glenn Randers-Pehrson0c03fc62011-08-17 09:46:29 -0500307 get_target_property(BUILD_TARGET_LOCATION ${PNG_LIB_NAME_STATIC} LOCATION_${CMAKE_BUILD_TYPE})
Claudio Bley0281dee2013-03-07 11:17:17 -0600308 CREATE_SYMLINK(${BUILD_TARGET_LOCATION} libpng${CMAKE_STATIC_LIBRARY_SUFFIX})
Glenn Randers-Pehrson0c03fc62011-08-17 09:46:29 -0500309 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng${CMAKE_STATIC_LIBRARY_SUFFIX}
310 DESTINATION ${CMAKE_INSTALL_LIBDIR})
Glenn Randers-Pehrson8e836312011-11-21 12:37:13 -0600311 endif(NOT WIN32 OR CYGWIN OR MINGW)
Glenn Randers-Pehrsonb17c75b2011-07-27 20:47:13 -0500312 endif()
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500313endif()
314
315if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL )
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500316 install(FILES ${libpng_public_hdrs} DESTINATION include)
317 install(FILES ${libpng_public_hdrs} DESTINATION include/${PNGLIB_NAME})
Glenn Randers-Pehrsonee35abb2009-10-30 15:42:54 -0500318endif()
319if(NOT SKIP_INSTALL_EXECUTABLES AND NOT SKIP_INSTALL_ALL )
Glenn Randers-Pehrson871b1d02013-03-02 14:58:22 -0600320 if(NOT WIN32 OR CYGWIN OR MINGW)
321 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng-config DESTINATION bin)
322 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config
323 DESTINATION bin)
324 endif(NOT WIN32 OR CYGWIN OR MINGW)
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500325endif()
Glenn Randers-Pehrson871b1d02013-03-02 14:58:22 -0600326
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500327if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL )
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600328 # Install man pages
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500329 if(NOT PNG_MAN_DIR)
330 set(PNG_MAN_DIR "share/man")
331 endif()
332 install(FILES libpng.3 libpngpf.3 DESTINATION ${PNG_MAN_DIR}/man3)
333 install(FILES png.5 DESTINATION ${PNG_MAN_DIR}/man5)
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600334 # Install pkg-config files
Glenn Randers-Pehrson871b1d02013-03-02 14:58:22 -0600335 if(NOT WIN32 OR CYGWIN OR MINGW)
336 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng.pc
337 DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
338 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng-config
339 DESTINATION bin)
340 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}.pc
341 DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
342 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config
343 DESTINATION bin)
344 endif(NOT WIN32 OR CYGWIN OR MINGW)
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500345endif()
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500346
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500347# On versions of CMake that support it, create an export file CMake
348# users can include() to import our targets
349if(PNG_EXPORT_RULE AND NOT SKIP_INSTALL_EXPORT AND NOT SKIP_INSTALL_ALL )
350 install(EXPORT libpng DESTINATION lib/libpng FILE lib${PNG_LIB_NAME}.cmake)
351endif()
352
Glenn Randers-Pehrsond3edb3f2011-01-14 17:08:28 -0600353# what's with libpng-$VER%.txt and all the extra files?
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600354
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500355# UNINSTALL
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600356# do we need this?
357
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500358# DIST
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600359# do we need this?
360
361# to create msvc import lib for mingw compiled shared lib
362# pexports libpng.dll > libpng.def
363# lib /def:libpng.def /machine:x86
Glenn Randers-Pehrson glennrp@comcast.net7ecf7bd2009-05-02 15:36:08 -0500364