blob: b9ccd83e547619de6f60c7bf33a5be0dca76b4ba [file] [log] [blame]
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -05001cmake_minimum_required(VERSION 2.4.4)
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -06002set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)
3
Glenn Randers-Pehrsonee35abb2009-10-30 15:42:54 -05004if(UNIX AND NOT DEFINED CMAKE_BUILD_TYPE)
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -05005 if(CMAKE_MAJOR_VERSION EQUAL 2 AND CMAKE_MINOR_VERSION EQUAL 4)
6 # workaround CMake 2.4.x bug
Glenn Randers-Pehrsone89d33a2010-10-02 21:36:02 -05007 set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING
8 "Choose the type of build, options are:
9 None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used)
10 Debug
11 Release
12 RelWithDebInfo
13 MinSizeRel.")
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -050014 else()
15 set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING
16 "Choose the type of build, options are:
17 None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used)
18 Debug
19 Release
20 RelWithDebInfo
21 MinSizeRel.")
22 endif()
Glenn Randers-Pehrsonee35abb2009-10-30 15:42:54 -050023endif()
24
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -060025project(libpng C)
Glenn Randers-Pehrsonee35abb2009-10-30 15:42:54 -050026enable_testing()
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -060027
Glenn Randers-Pehrson9f45c8e2011-01-15 19:35:03 -060028# Copyright (C) 2007-2011 Glenn Randers-Pehrson
Glenn Randers-Pehrson3e61d792009-06-24 09:31:28 -050029
Glenn Randers-Pehrsonbfbf8652009-06-26 21:46:52 -050030# This code is released under the libpng license.
Glenn Randers-Pehrsonc332bbc2009-06-25 13:43:50 -050031# For conditions of distribution and use, see the disclaimer
Glenn Randers-Pehrson037023b2009-06-24 10:27:36 -050032# and license in png.h
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -060033
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -050034set(PNGLIB_MAJOR 1)
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -060035set(PNGLIB_MINOR 5)
Glenn Randers-Pehrson628b6322011-07-08 13:15:20 -050036set(PNGLIB_RELEASE 5)
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -050037set(PNGLIB_NAME libpng${PNGLIB_MAJOR}${PNGLIB_MINOR})
38set(PNGLIB_VERSION ${PNGLIB_MAJOR}.${PNGLIB_MINOR}.${PNGLIB_RELEASE})
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -060039
40# needed packages
41find_package(ZLIB REQUIRED)
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -050042include_directories(${ZLIB_INCLUDE_DIR})
43
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -050044if(NOT WIN32)
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -060045 find_library(M_LIBRARY
46 NAMES m
47 PATHS /usr/lib /usr/local/lib
48 )
49 if(NOT M_LIBRARY)
50 message(STATUS
51 "math library 'libm' not found - floating point support disabled")
52 endif()
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -050053else()
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -060054 # not needed on windows
55 set(M_LIBRARY "")
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -050056endif()
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -060057
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -050058# COMMAND LINE OPTIONS
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -050059if(DEFINED PNG_SHARED)
60 option(PNG_SHARED "Build shared lib" ${PNG_SHARED})
61else()
62 option(PNG_SHARED "Build shared lib" ON)
63endif()
64if(DEFINED PNG_STATIC)
65 option(PNG_STATIC "Build static lib" ${PNG_STATIC})
66else()
67 option(PNG_STATIC "Build static lib" ON)
68endif()
69
Glenn Randers-Pehrson glennrp@comcast.net7ecf7bd2009-05-02 15:36:08 -050070if(MINGW)
71 option(PNG_TESTS "Build pngtest" NO)
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -060072else()
Glenn Randers-Pehrson glennrp@comcast.net7ecf7bd2009-05-02 15:36:08 -050073 option(PNG_TESTS "Build pngtest" YES)
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -060074endif()
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -050075
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -050076option(PNG_NO_CONSOLE_IO "FIXME" YES)
77option(PNG_NO_STDIO "FIXME" YES)
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -050078option(PNG_DEBUG "Build with debug output" NO)
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -050079option(PNGARG "FIXME" YES)
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -060080#TODO:
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -060081# PNG_CONSOLE_IO_SUPPORTED
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -060082
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -050083# maybe needs improving, but currently I don't know when we can enable what :)
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -060084set(png_asm_tmp "OFF")
85if(NOT WIN32)
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -060086 find_program(uname_executable NAMES uname PATHS /bin /usr/bin /usr/local/bin)
87 if(uname_executable)
88 exec_program(${uname_executable}
89 ARGS --machine OUTPUT_VARIABLE uname_output)
90 if("uname_output" MATCHES "^.*i[1-9]86.*$")
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -050091 set(png_asm_tmp "ON")
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -060092 else("uname_output" MATCHES "^.*i[1-9]86.*$")
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -050093 set(png_asm_tmp "OFF")
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -060094 endif("uname_output" MATCHES "^.*i[1-9]86.*$")
95 endif(uname_executable)
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -050096else()
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -060097 # this env var is normally only set on win64
98 set(TEXT "ProgramFiles(x86)")
99 if("$ENV{${TEXT}}" STREQUAL "")
100 set(png_asm_tmp "ON")
101 endif("$ENV{${TEXT}}" STREQUAL "")
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500102endif()
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600103
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500104# SET LIBNAME
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500105set(PNG_LIB_NAME png${PNGLIB_MAJOR}${PNGLIB_MINOR})
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600106
107# to distinguish between debug and release lib
108set(CMAKE_DEBUG_POSTFIX "d")
109
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500110# Use the prebuilt pnglibconf.h file from the scripts folder
111configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.h.prebuilt
112 ${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h)
113include_directories(${CMAKE_CURRENT_BINARY_DIR})
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600114
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500115# OUR SOURCES
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500116set(libpng_public_hdrs
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600117 png.h
118 pngconf.h
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500119 ${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h
120)
121set(libpng_sources
122 ${libpng_public_hdrs}
Glenn Randers-Pehrson07d9fc92010-08-26 17:11:55 -0500123 pngdebug.h
124 pnginfo.h
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500125 pngpriv.h
Glenn Randers-Pehrson07d9fc92010-08-26 17:11:55 -0500126 pngstruct.h
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600127 png.c
128 pngerror.c
129 pngget.c
130 pngmem.c
131 pngpread.c
132 pngread.c
133 pngrio.c
134 pngrtran.c
135 pngrutil.c
136 pngset.c
137 pngtrans.c
138 pngwio.c
139 pngwrite.c
140 pngwtran.c
141 pngwutil.c
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600142)
143set(pngtest_sources
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600144 pngtest.c
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600145)
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500146# SOME NEEDED DEFINITIONS
Glenn Randers-Pehrson69b0bc02009-11-07 12:02:48 -0600147
Glenn Randers-Pehrson8c037302010-08-23 17:07:32 -0500148add_definitions(-DPNG_CONFIGURE_LIBPNG)
149
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600150if(MSVC)
Glenn Randers-Pehrson8c037302010-08-23 17:07:32 -0500151 add_definitions(-DPNG_NO_MODULEDEF -D_CRT_SECURE_NO_DEPRECATE)
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600152endif(MSVC)
153
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500154if(PNG_SHARED OR NOT MSVC)
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600155 #if building msvc static this has NOT to be defined
156 add_definitions(-DZLIB_DLL)
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500157endif()
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600158
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600159
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500160if(PNG_CONSOLE_IO_SUPPORTED)
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600161 add_definitions(-DPNG_CONSOLE_IO_SUPPORTED)
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500162endif()
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500163
164if(PNG_NO_CONSOLE_IO)
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600165 add_definitions(-DPNG_NO_CONSOLE_IO)
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500166endif()
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500167
168if(PNG_NO_STDIO)
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600169 add_definitions(-DPNG_NO_STDIO)
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500170endif()
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500171
172if(PNG_DEBUG)
Glenn Randers-Pehrson8c037302010-08-23 17:07:32 -0500173 add_definitions(-DPNG_DEBUG)
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500174endif()
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500175
Glenn Randers-Pehrson glennrp@comcast.net7ecf7bd2009-05-02 15:36:08 -0500176if(NOT M_LIBRARY AND NOT WIN32)
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600177 add_definitions(-DPNG_NO_FLOATING_POINT_SUPPORTED)
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500178endif()
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500179
180# NOW BUILD OUR TARGET
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600181include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${ZLIB_INCLUDE_DIR})
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600182
183if(PNG_SHARED)
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600184 add_library(${PNG_LIB_NAME} SHARED ${libpng_sources})
185 if(MSVC)
186 # msvc does not append 'lib' - do it here to have consistent name
187 set_target_properties(${PNG_LIB_NAME} PROPERTIES PREFIX "lib")
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500188 set_target_properties(${PNG_LIB_NAME} PROPERTIES IMPORT_PREFIX "lib")
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600189 endif()
190 target_link_libraries(${PNG_LIB_NAME} ${ZLIB_LIBRARY} ${M_LIBRARY})
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500191endif()
192
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500193if(PNG_STATIC)
194# does not work without changing name
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600195 set(PNG_LIB_NAME_STATIC ${PNG_LIB_NAME}_static)
196 add_library(${PNG_LIB_NAME_STATIC} STATIC ${libpng_sources})
197 if(MSVC)
198 # msvc does not append 'lib' - do it here to have consistent name
199 set_target_properties(${PNG_LIB_NAME_STATIC} PROPERTIES PREFIX "lib")
200 endif()
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500201 target_link_libraries(${PNG_LIB_NAME_STATIC} ${ZLIB_LIBRARY} ${M_LIBRARY})
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500202endif()
203
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600204
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600205if(PNG_SHARED AND WIN32)
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600206 set_target_properties(${PNG_LIB_NAME} PROPERTIES DEFINE_SYMBOL PNG_BUILD_DLL)
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500207endif()
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600208
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500209if(PNG_TESTS AND PNG_SHARED)
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600210 # does not work with msvc due to png_lib_ver issue
211 add_executable(pngtest ${pngtest_sources})
212 target_link_libraries(pngtest ${PNG_LIB_NAME})
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500213 add_test(pngtest ./pngtest ${CMAKE_CURRENT_SOURCE_DIR}/pngtest.png)
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500214endif()
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600215
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500216#
217# Set a variable with CMake code which:
218# Creates a symlink from src to dest (if possible) or alternatively
219# copies if different.
Glenn Randers-Pehrsonb17c75b2011-07-27 20:47:13 -0500220macro(CREATE_SYMLINK SRC_FILE DEST_FILE)
221 FILE(REMOVE ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE})
222 if(WIN32 AND NOT CYGWIN)
223 ADD_CUSTOM_COMMAND(
224 OUTPUT ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE} ${CMAKE_CURRENT_BINARY_DIR}/${DEST_FILE}
225 COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${SRC_FILE} ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE}
226 COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${SRC_FILE} ${CMAKE_CURRENT_BINARY_DIR}/${DEST_FILE}
227 DEPENDS ${PNG_LIB_NAME} ${PNG_LIB_NAME_STATIC}
228 )
229 ADD_CUSTOM_TARGET(${DEST_FILE}_COPY ALL DEPENDS ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE})
230 else(WIN32 AND NOT CYGWIN)
231 execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ${SRC_FILE} ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
232 execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ${SRC_FILE} ${DEST_FILE} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
233 endif(WIN32 AND NOT CYGWIN)
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500234endmacro()
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600235
Glenn Randers-Pehrsonb17c75b2011-07-27 20:47:13 -0500236
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500237# CREATE PKGCONFIG FILES
238# we use the same files like ./configure, so we have to set its vars
Glenn Randers-Pehrson8c037302010-08-23 17:07:32 -0500239if(NOT DEFINED CMAKE_INSTALL_LIBDIR)
Glenn Randers-Pehrsond3edb3f2011-01-14 17:08:28 -0600240 set(CMAKE_INSTALL_LIBDIR lib)
Glenn Randers-Pehrson8c037302010-08-23 17:07:32 -0500241endif(NOT DEFINED CMAKE_INSTALL_LIBDIR)
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500242set(prefix ${CMAKE_INSTALL_PREFIX})
243set(exec_prefix ${CMAKE_INSTALL_PREFIX})
Glenn Randers-Pehrsond3edb3f2011-01-14 17:08:28 -0600244set(libdir ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR})
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500245set(includedir ${CMAKE_INSTALL_PREFIX}/include)
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500246set(LIBS "-lz -lm")
247configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libpng.pc.in
Glenn Randers-Pehrson8c037302010-08-23 17:07:32 -0500248 ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}.pc @ONLY)
Glenn Randers-Pehrsonb17c75b2011-07-27 20:47:13 -0500249CREATE_SYMLINK(${PNGLIB_NAME}.pc libpng.pc)
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500250
251configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libpng-config.in
Glenn Randers-Pehrson8c037302010-08-23 17:07:32 -0500252 ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config @ONLY)
Glenn Randers-Pehrsonb17c75b2011-07-27 20:47:13 -0500253CREATE_SYMLINK(${PNGLIB_NAME}-config libpng-config)
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500254
255# SET UP LINKS
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500256if(PNG_SHARED)
257 set_target_properties(${PNG_LIB_NAME} PROPERTIES
Glenn Randers-Pehrsona45ffbe2011-07-29 12:37:41 -0500258# VERSION 15.${PNGLIB_RELEASE}.1.5.5beta05
Glenn Randers-Pehrsonf1eb9182010-02-08 15:36:41 -0600259 VERSION 15.${PNGLIB_RELEASE}.0
260 SOVERSION 15
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600261 CLEAN_DIRECT_OUTPUT 1)
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500262endif()
Glenn Randers-Pehrson glennrp@comcast.net7ecf7bd2009-05-02 15:36:08 -0500263if(PNG_STATIC)
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500264 # MSVC doesn't use a different file extension for shared vs. static
265 # libs. We are able to change OUTPUT_NAME to remove the _static
266 # for all other platforms.
267 if(NOT MSVC)
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500268 set_target_properties(${PNG_LIB_NAME_STATIC} PROPERTIES
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600269 OUTPUT_NAME ${PNG_LIB_NAME}
270 CLEAN_DIRECT_OUTPUT 1)
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500271 endif()
272endif()
273
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500274# If CMake > 2.4.x, we set a variable used below to export
275# targets to an export file.
276# TODO: Use VERSION_GREATER after our cmake_minimum_required >= 2.6.2
277if(CMAKE_MAJOR_VERSION GREATER 1 AND CMAKE_MINOR_VERSION GREATER 4)
278 set(PNG_EXPORT_RULE EXPORT libpng)
279elseif(CMAKE_MAJOR_VERSION GREATER 2) # future proof
280 set(PNG_EXPORT_RULE EXPORT libpng)
281endif()
282
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500283# INSTALL
284if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL )
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600285 if(PNG_SHARED)
286 install(TARGETS ${PNG_LIB_NAME}
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500287 ${PNG_EXPORT_RULE}
288 RUNTIME DESTINATION bin
289 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
290 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
291
Glenn Randers-Pehrson8409b8f2010-12-31 09:14:01 -0600292 # Create a symlink for libpng.dll.a => libpng15.dll.a on Cygwin
Glenn Randers-Pehrsonb17c75b2011-07-27 20:47:13 -0500293 if(CYGWIN)
294 get_target_property(BUILD_TARGET_LOCATION ${PNG_LIB_NAME} LOCATION_${CMAKE_BUILD_TYPE})
295 get_filename_component(BUILD_TARGET_FILE ${BUILD_TARGET_LOCATION} NAME)
296 CREATE_SYMLINK(${BUILD_TARGET_FILE} libpng${CMAKE_IMPORT_LIBRARY_SUFFIX})
297 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng${CMAKE_IMPORT_LIBRARY_SUFFIX}
298 DESTINATION ${CMAKE_INSTALL_LIBDIR})
299 endif(CYGWIN)
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500300
301 if(NOT WIN32)
Glenn Randers-Pehrsonb17c75b2011-07-27 20:47:13 -0500302 get_target_property(BUILD_TARGET_LOCATION ${PNG_LIB_NAME} LOCATION_${CMAKE_BUILD_TYPE})
303 get_filename_component(BUILD_TARGET_FILE ${BUILD_TARGET_LOCATION} NAME)
304 CREATE_SYMLINK(${BUILD_TARGET_FILE} libpng${CMAKE_SHARED_LIBRARY_SUFFIX})
305 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng${CMAKE_SHARED_LIBRARY_SUFFIX}
306 DESTINATION ${CMAKE_INSTALL_LIBDIR})
307 endif(NOT WIN32)
308 endif(PNG_SHARED)
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500309
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600310 if(PNG_STATIC)
311 install(TARGETS ${PNG_LIB_NAME_STATIC}
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500312 ${PNG_EXPORT_RULE}
313 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
314 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
315 if(NOT WIN32 OR CYGWIN)
Glenn Randers-Pehrsonb17c75b2011-07-27 20:47:13 -0500316 get_target_property(BUILD_TARGET_LOCATION ${PNG_LIB_NAME_STATIC} LOCATION_${CMAKE_BUILD_TYPE})
317 get_filename_component(BUILD_TARGET_FILE ${BUILD_TARGET_LOCATION} NAME)
318 CREATE_SYMLINK(${BUILD_TARGET_FILE} libpng${CMAKE_STATIC_LIBRARY_SUFFIX})
319 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng${CMAKE_STATIC_LIBRARY_SUFFIX}
320 DESTINATION ${CMAKE_INSTALL_LIBDIR})
321 endif(NOT WIN32 OR CYGWIN)
322 endif()
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500323endif()
324
325if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL )
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500326 install(FILES ${libpng_public_hdrs} DESTINATION include)
327 install(FILES ${libpng_public_hdrs} DESTINATION include/${PNGLIB_NAME})
Glenn Randers-Pehrsonee35abb2009-10-30 15:42:54 -0500328endif()
329if(NOT SKIP_INSTALL_EXECUTABLES AND NOT SKIP_INSTALL_ALL )
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600330 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng-config DESTINATION bin)
331 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config
332 DESTINATION bin)
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500333endif()
334if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL )
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600335 # Install man pages
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500336 if(NOT PNG_MAN_DIR)
337 set(PNG_MAN_DIR "share/man")
338 endif()
339 install(FILES libpng.3 libpngpf.3 DESTINATION ${PNG_MAN_DIR}/man3)
340 install(FILES png.5 DESTINATION ${PNG_MAN_DIR}/man5)
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600341 # Install pkg-config files
342 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng.pc
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500343 DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
Glenn Randers-Pehrson8c037302010-08-23 17:07:32 -0500344 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng-config
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600345 DESTINATION bin)
346 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}.pc
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500347 DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
Glenn Randers-Pehrson8c037302010-08-23 17:07:32 -0500348 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config
Glenn Randers-Pehrsone3f3c4e2010-02-07 18:08:50 -0600349 DESTINATION bin)
Glenn Randers-Pehrson38e467e2009-08-27 15:59:40 -0500350endif()
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500351
Glenn Randers-Pehrson0c3fea32010-10-02 21:25:01 -0500352# On versions of CMake that support it, create an export file CMake
353# users can include() to import our targets
354if(PNG_EXPORT_RULE AND NOT SKIP_INSTALL_EXPORT AND NOT SKIP_INSTALL_ALL )
355 install(EXPORT libpng DESTINATION lib/libpng FILE lib${PNG_LIB_NAME}.cmake)
356endif()
357
Glenn Randers-Pehrsond3edb3f2011-01-14 17:08:28 -0600358# what's with libpng-$VER%.txt and all the extra files?
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600359
360
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500361# UNINSTALL
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600362# do we need this?
363
364
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500365# DIST
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600366# do we need this?
367
368# to create msvc import lib for mingw compiled shared lib
369# pexports libpng.dll > libpng.def
370# lib /def:libpng.def /machine:x86
Glenn Randers-Pehrson glennrp@comcast.net7ecf7bd2009-05-02 15:36:08 -0500371