blob: 70a6029899f5a5bf1ade6905564928c22bbf8b33 [file] [log] [blame]
Glenn Randers-Pehrson0c03fc62011-08-17 09:46:29 -05001# CMakeLists.txt
2
Glenn Randers-Pehrsona243ec02014-08-02 18:06:34 -05003# Copyright (C) 2007-2014 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-Pehrson17fba0f2014-08-21 07:17:37 -050019set(PNGLIB_RELEASE 14)
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)
Glenn Randers-Pehrson37c3b082014-07-30 08:09:22 -0500223 execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
Claudio Bley0281dee2013-03-07 11:17:17 -0600224 execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink "${LINK_TARGET}" ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
225 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 -0600226 endif(WIN32 AND NOT CYGWIN AND NOT MSYS)
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500227endmacro()
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600228
Glenn Randers-Pehrsone29c4b92011-09-27 19:01:58 -0500229# libpng is a library so default to 'lib'
Glenn Randers-Pehrson8c037302010-08-23 17:07:32 -0500230if(NOT DEFINED CMAKE_INSTALL_LIBDIR)
Glenn Randers-Pehrsond3edb3f2011-01-14 17:08:28 -0600231 set(CMAKE_INSTALL_LIBDIR lib)
Glenn Randers-Pehrson8c037302010-08-23 17:07:32 -0500232endif(NOT DEFINED CMAKE_INSTALL_LIBDIR)
Glenn Randers-Pehrsone29c4b92011-09-27 19:01:58 -0500233
234# CREATE PKGCONFIG FILES
235# we use the same files like ./configure, so we have to set its vars
236# Only do this on Windows for Cygwin - the files don't make much sense outside
237# a UNIX look alike
Glenn Randers-Pehrson871b1d02013-03-02 14:58:22 -0600238if(NOT WIN32 OR CYGWIN OR MINGW)
239 set(prefix ${CMAKE_INSTALL_PREFIX})
240 set(exec_prefix ${CMAKE_INSTALL_PREFIX})
241 set(libdir ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR})
242 set(includedir ${CMAKE_INSTALL_PREFIX}/include)
243 set(LIBS "-lz -lm")
244 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libpng.pc.in
245 ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}.pc @ONLY)
246 CREATE_SYMLINK(${PNGLIB_NAME}.pc libpng.pc)
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500247
Glenn Randers-Pehrson871b1d02013-03-02 14:58:22 -0600248 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libpng-config.in
249 ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config @ONLY)
250 CREATE_SYMLINK(${PNGLIB_NAME}-config libpng-config)
Glenn Randers-Pehrson8e836312011-11-21 12:37:13 -0600251endif(NOT WIN32 OR CYGWIN OR MINGW)
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500252
253# SET UP LINKS
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500254if(PNG_SHARED)
255 set_target_properties(${PNG_LIB_NAME} PROPERTIES
Glenn Randers-Pehrson3fe16162014-09-14 14:20:37 -0500256# VERSION 16.${PNGLIB_RELEASE}.1.6.14beta02
Glenn Randers-Pehrson7455cbf2011-11-24 14:40:36 -0600257 VERSION 16.${PNGLIB_RELEASE}.0
258 SOVERSION 16
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600259 CLEAN_DIRECT_OUTPUT 1)
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500260endif()
Glenn Randers-Pehrson glennrp@comcast.net7ecf7bd2009-05-02 15:36:08 -0500261if(PNG_STATIC)
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500262 # MSVC doesn't use a different file extension for shared vs. static
263 # libs. We are able to change OUTPUT_NAME to remove the _static
264 # for all other platforms.
265 if(NOT MSVC)
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500266 set_target_properties(${PNG_LIB_NAME_STATIC} PROPERTIES
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600267 OUTPUT_NAME ${PNG_LIB_NAME}
268 CLEAN_DIRECT_OUTPUT 1)
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500269 endif()
270endif()
271
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500272# If CMake > 2.4.x, we set a variable used below to export
273# targets to an export file.
274# TODO: Use VERSION_GREATER after our cmake_minimum_required >= 2.6.2
275if(CMAKE_MAJOR_VERSION GREATER 1 AND CMAKE_MINOR_VERSION GREATER 4)
276 set(PNG_EXPORT_RULE EXPORT libpng)
277elseif(CMAKE_MAJOR_VERSION GREATER 2) # future proof
278 set(PNG_EXPORT_RULE EXPORT libpng)
279endif()
280
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500281# INSTALL
282if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL )
Claudio Bley0281dee2013-03-07 11:17:17 -0600283 install(TARGETS ${PNG_LIB_TARGETS}
284 ${PNG_EXPORT_RULE}
285 RUNTIME DESTINATION bin
286 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
287 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500288
Claudio Bley0281dee2013-03-07 11:17:17 -0600289 if(PNG_SHARED)
Glenn Randers-Pehrson7455cbf2011-11-24 14:40:36 -0600290 # Create a symlink for libpng.dll.a => libpng16.dll.a on Cygwin
Glenn Randers-Pehrson8e836312011-11-21 12:37:13 -0600291 if(CYGWIN OR MINGW)
Glenn Randers-Pehrson0c03fc62011-08-17 09:46:29 -0500292 get_target_property(BUILD_TARGET_LOCATION ${PNG_LIB_NAME} LOCATION_${CMAKE_BUILD_TYPE})
Claudio Bley0281dee2013-03-07 11:17:17 -0600293 CREATE_SYMLINK(${BUILD_TARGET_LOCATION} libpng${CMAKE_IMPORT_LIBRARY_SUFFIX})
Glenn Randers-Pehrson0c03fc62011-08-17 09:46:29 -0500294 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng${CMAKE_IMPORT_LIBRARY_SUFFIX}
295 DESTINATION ${CMAKE_INSTALL_LIBDIR})
Glenn Randers-Pehrson8e836312011-11-21 12:37:13 -0600296 endif(CYGWIN OR MINGW)
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500297
298 if(NOT WIN32)
Glenn Randers-Pehrson0c03fc62011-08-17 09:46:29 -0500299 get_target_property(BUILD_TARGET_LOCATION ${PNG_LIB_NAME} LOCATION_${CMAKE_BUILD_TYPE})
Claudio Bley0281dee2013-03-07 11:17:17 -0600300 CREATE_SYMLINK(${BUILD_TARGET_LOCATION} libpng${CMAKE_SHARED_LIBRARY_SUFFIX})
Glenn Randers-Pehrson0c03fc62011-08-17 09:46:29 -0500301 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng${CMAKE_SHARED_LIBRARY_SUFFIX}
302 DESTINATION ${CMAKE_INSTALL_LIBDIR})
Glenn Randers-Pehrsonb17c75b2011-07-27 20:47:13 -0500303 endif(NOT WIN32)
304 endif(PNG_SHARED)
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500305
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600306 if(PNG_STATIC)
Glenn Randers-Pehrson8e836312011-11-21 12:37:13 -0600307 if(NOT WIN32 OR CYGWIN OR MINGW)
Glenn Randers-Pehrson0c03fc62011-08-17 09:46:29 -0500308 get_target_property(BUILD_TARGET_LOCATION ${PNG_LIB_NAME_STATIC} LOCATION_${CMAKE_BUILD_TYPE})
Claudio Bley0281dee2013-03-07 11:17:17 -0600309 CREATE_SYMLINK(${BUILD_TARGET_LOCATION} libpng${CMAKE_STATIC_LIBRARY_SUFFIX})
Glenn Randers-Pehrson0c03fc62011-08-17 09:46:29 -0500310 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng${CMAKE_STATIC_LIBRARY_SUFFIX}
311 DESTINATION ${CMAKE_INSTALL_LIBDIR})
Glenn Randers-Pehrson8e836312011-11-21 12:37:13 -0600312 endif(NOT WIN32 OR CYGWIN OR MINGW)
Glenn Randers-Pehrsonb17c75b2011-07-27 20:47:13 -0500313 endif()
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500314endif()
315
316if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL )
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500317 install(FILES ${libpng_public_hdrs} DESTINATION include)
318 install(FILES ${libpng_public_hdrs} DESTINATION include/${PNGLIB_NAME})
Glenn Randers-Pehrsonee35abb2009-10-30 15:42:54 -0500319endif()
320if(NOT SKIP_INSTALL_EXECUTABLES AND NOT SKIP_INSTALL_ALL )
Glenn Randers-Pehrson871b1d02013-03-02 14:58:22 -0600321 if(NOT WIN32 OR CYGWIN OR MINGW)
322 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng-config DESTINATION bin)
323 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config
324 DESTINATION bin)
325 endif(NOT WIN32 OR CYGWIN OR MINGW)
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500326endif()
Glenn Randers-Pehrson871b1d02013-03-02 14:58:22 -0600327
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500328if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL )
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600329 # Install man pages
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500330 if(NOT PNG_MAN_DIR)
331 set(PNG_MAN_DIR "share/man")
332 endif()
333 install(FILES libpng.3 libpngpf.3 DESTINATION ${PNG_MAN_DIR}/man3)
334 install(FILES png.5 DESTINATION ${PNG_MAN_DIR}/man5)
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600335 # Install pkg-config files
Glenn Randers-Pehrson871b1d02013-03-02 14:58:22 -0600336 if(NOT WIN32 OR CYGWIN OR MINGW)
337 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng.pc
338 DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
339 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng-config
340 DESTINATION bin)
341 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}.pc
342 DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
343 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config
344 DESTINATION bin)
345 endif(NOT WIN32 OR CYGWIN OR MINGW)
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500346endif()
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500347
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500348# On versions of CMake that support it, create an export file CMake
349# users can include() to import our targets
350if(PNG_EXPORT_RULE AND NOT SKIP_INSTALL_EXPORT AND NOT SKIP_INSTALL_ALL )
351 install(EXPORT libpng DESTINATION lib/libpng FILE lib${PNG_LIB_NAME}.cmake)
352endif()
353
Glenn Randers-Pehrson37c3b082014-07-30 08:09:22 -0500354# what's with libpng-manual.txt and all the extra files?
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600355
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500356# UNINSTALL
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600357# do we need this?
358
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500359# DIST
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600360# do we need this?
361
362# to create msvc import lib for mingw compiled shared lib
363# pexports libpng.dll > libpng.def
364# lib /def:libpng.def /machine:x86
Glenn Randers-Pehrson glennrp@comcast.net7ecf7bd2009-05-02 15:36:08 -0500365