]> git.saurik.com Git - wxWidgets.git/blame - src/png/CMakeLists.txt
Compilation fix for VC6 after r70151.
[wxWidgets.git] / src / png / CMakeLists.txt
CommitLineData
9c0d9ce3
DS
1# CMakeLists.txt
2
3# Copyright (C) 2007-2011 Glenn Randers-Pehrson
4
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
b61cc19c
PC
9cmake_minimum_required(VERSION 2.4.4)
10set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)
11
12if(UNIX AND NOT DEFINED CMAKE_BUILD_TYPE)
13 if(CMAKE_MAJOR_VERSION EQUAL 2 AND CMAKE_MINOR_VERSION EQUAL 4)
14 # workaround CMake 2.4.x bug
9c0d9ce3
DS
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.")
b61cc19c
PC
22 else()
23 set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING
24 "Choose the type of build, options are:
25 None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used)
26 Debug
27 Release
28 RelWithDebInfo
29 MinSizeRel.")
30 endif()
31endif()
32
33project(libpng C)
34enable_testing()
35
b61cc19c 36set(PNGLIB_MAJOR 1)
9c0d9ce3
DS
37set(PNGLIB_MINOR 5)
38set(PNGLIB_RELEASE 6)
b61cc19c
PC
39set(PNGLIB_NAME libpng${PNGLIB_MAJOR}${PNGLIB_MINOR})
40set(PNGLIB_VERSION ${PNGLIB_MAJOR}.${PNGLIB_MINOR}.${PNGLIB_RELEASE})
41
42# needed packages
43find_package(ZLIB REQUIRED)
44include_directories(${ZLIB_INCLUDE_DIR})
45
46if(NOT WIN32)
47 find_library(M_LIBRARY
48 NAMES m
49 PATHS /usr/lib /usr/local/lib
50 )
51 if(NOT M_LIBRARY)
52 message(STATUS
53 "math library 'libm' not found - floating point support disabled")
54 endif()
55else()
56 # not needed on windows
57 set(M_LIBRARY "")
58endif()
59
60# COMMAND LINE OPTIONS
61if(DEFINED PNG_SHARED)
62 option(PNG_SHARED "Build shared lib" ${PNG_SHARED})
63else()
64 option(PNG_SHARED "Build shared lib" ON)
65endif()
66if(DEFINED PNG_STATIC)
67 option(PNG_STATIC "Build static lib" ${PNG_STATIC})
68else()
69 option(PNG_STATIC "Build static lib" ON)
70endif()
71
9c0d9ce3 72option(PNG_TESTS "Build libpng tests" YES)
b61cc19c 73
9c0d9ce3 74# Many more configuration options could be added here
b61cc19c 75option(PNG_DEBUG "Build with debug output" NO)
9c0d9ce3 76option(PNGARG "Disable ANSI-C prototypes" NO)
b61cc19c
PC
77
78# SET LIBNAME
79set(PNG_LIB_NAME png${PNGLIB_MAJOR}${PNGLIB_MINOR})
80
81# to distinguish between debug and release lib
82set(CMAKE_DEBUG_POSTFIX "d")
83
9c0d9ce3
DS
84# Use the prebuilt pnglibconf.h file from the scripts folder
85# TODO: fix this by building with awk; without this no cmake build can be
86# configured directly (to do so indirectly use your local awk to build a
87# pnglibconf.h in the build directory.)
88configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.h.prebuilt
89 ${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h)
90include_directories(${CMAKE_CURRENT_BINARY_DIR})
b61cc19c
PC
91
92# OUR SOURCES
9c0d9ce3 93set(libpng_public_hdrs
b61cc19c
PC
94 png.h
95 pngconf.h
9c0d9ce3
DS
96 ${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h
97)
98set(libpng_sources
99 ${libpng_public_hdrs}
100 pngdebug.h
101 pnginfo.h
b61cc19c 102 pngpriv.h
9c0d9ce3 103 pngstruct.h
b61cc19c
PC
104 png.c
105 pngerror.c
106 pngget.c
107 pngmem.c
108 pngpread.c
109 pngread.c
110 pngrio.c
111 pngrtran.c
112 pngrutil.c
113 pngset.c
114 pngtrans.c
115 pngwio.c
116 pngwrite.c
117 pngwtran.c
118 pngwutil.c
119)
120set(pngtest_sources
121 pngtest.c
122)
9c0d9ce3
DS
123set(pngvalid_sources
124 pngvalid.c
125)
b61cc19c
PC
126# SOME NEEDED DEFINITIONS
127
128add_definitions(-DPNG_CONFIGURE_LIBPNG)
129
b61cc19c 130if(MSVC)
9c0d9ce3 131 add_definitions(-D_CRT_SECURE_NO_DEPRECATE)
b61cc19c
PC
132endif(MSVC)
133
b61cc19c
PC
134if(PNG_DEBUG)
135 add_definitions(-DPNG_DEBUG)
136endif()
137
b61cc19c
PC
138# NOW BUILD OUR TARGET
139include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${ZLIB_INCLUDE_DIR})
140
141if(PNG_SHARED)
142 add_library(${PNG_LIB_NAME} SHARED ${libpng_sources})
143 if(MSVC)
144 # msvc does not append 'lib' - do it here to have consistent name
145 set_target_properties(${PNG_LIB_NAME} PROPERTIES PREFIX "lib")
146 set_target_properties(${PNG_LIB_NAME} PROPERTIES IMPORT_PREFIX "lib")
147 endif()
148 target_link_libraries(${PNG_LIB_NAME} ${ZLIB_LIBRARY} ${M_LIBRARY})
149endif()
150
151if(PNG_STATIC)
152# does not work without changing name
153 set(PNG_LIB_NAME_STATIC ${PNG_LIB_NAME}_static)
154 add_library(${PNG_LIB_NAME_STATIC} STATIC ${libpng_sources})
155 if(MSVC)
156 # msvc does not append 'lib' - do it here to have consistent name
157 set_target_properties(${PNG_LIB_NAME_STATIC} PROPERTIES PREFIX "lib")
158 endif()
159 target_link_libraries(${PNG_LIB_NAME_STATIC} ${ZLIB_LIBRARY} ${M_LIBRARY})
160endif()
161
b61cc19c
PC
162if(PNG_SHARED AND WIN32)
163 set_target_properties(${PNG_LIB_NAME} PROPERTIES DEFINE_SYMBOL PNG_BUILD_DLL)
164endif()
165
166if(PNG_TESTS AND PNG_SHARED)
167 # does not work with msvc due to png_lib_ver issue
168 add_executable(pngtest ${pngtest_sources})
169 target_link_libraries(pngtest ${PNG_LIB_NAME})
170 add_test(pngtest ./pngtest ${CMAKE_CURRENT_SOURCE_DIR}/pngtest.png)
9c0d9ce3
DS
171 #
172 add_executable(pngvalid ${pngvalid_sources})
173 target_link_libraries(pngvalid ${PNG_LIB_NAME})
174 add_test(pngvalid ./pngvalid)
b61cc19c
PC
175endif()
176
9c0d9ce3
DS
177# Ensure the CMAKE_LIBRARY_OUTPUT_DIRECTORY is set
178IF(NOT CMAKE_LIBRARY_OUTPUT_DIRECTORY)
179 IF(WIN32)
180 SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY "bin")
181 ELSE(WIN32)
182 SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY "lib")
183 ENDIF(WIN32)
184ENDIF(NOT CMAKE_LIBRARY_OUTPUT_DIRECTORY)
185
b61cc19c
PC
186# Set a variable with CMake code which:
187# Creates a symlink from src to dest (if possible) or alternatively
188# copies if different.
9c0d9ce3
DS
189macro(CREATE_SYMLINK SRC_FILE DEST_FILE)
190 FILE(REMOVE ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE})
b61cc19c 191 if(WIN32 AND NOT CYGWIN)
9c0d9ce3
DS
192 ADD_CUSTOM_COMMAND(
193 OUTPUT ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE} ${CMAKE_CURRENT_BINARY_DIR}/${DEST_FILE}
194 COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${SRC_FILE} ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE}
195 COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${SRC_FILE} ${CMAKE_CURRENT_BINARY_DIR}/${DEST_FILE}
196 DEPENDS ${PNG_LIB_NAME} ${PNG_LIB_NAME_STATIC}
197 )
198 ADD_CUSTOM_TARGET(${DEST_FILE}_COPY ALL DEPENDS ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE})
199 else(WIN32 AND NOT CYGWIN)
200 execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ${SRC_FILE} ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
201 execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ${SRC_FILE} ${DEST_FILE} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
202 endif(WIN32 AND NOT CYGWIN)
b61cc19c
PC
203endmacro()
204
9c0d9ce3 205# libpng is a library so default to 'lib'
b61cc19c 206if(NOT DEFINED CMAKE_INSTALL_LIBDIR)
9c0d9ce3 207 set(CMAKE_INSTALL_LIBDIR lib)
b61cc19c 208endif(NOT DEFINED CMAKE_INSTALL_LIBDIR)
9c0d9ce3
DS
209
210# CREATE PKGCONFIG FILES
211# we use the same files like ./configure, so we have to set its vars
212# Only do this on Windows for Cygwin - the files don't make much sense outside
213# a UNIX look alike
214if(NOT WIN32 OR CYGWIN)
b61cc19c
PC
215set(prefix ${CMAKE_INSTALL_PREFIX})
216set(exec_prefix ${CMAKE_INSTALL_PREFIX})
9c0d9ce3 217set(libdir ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR})
b61cc19c
PC
218set(includedir ${CMAKE_INSTALL_PREFIX}/include)
219set(LIBS "-lz -lm")
220configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libpng.pc.in
221 ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}.pc @ONLY)
9c0d9ce3 222CREATE_SYMLINK(${PNGLIB_NAME}.pc libpng.pc)
b61cc19c
PC
223
224configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libpng-config.in
225 ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config @ONLY)
9c0d9ce3
DS
226CREATE_SYMLINK(${PNGLIB_NAME}-config libpng-config)
227endif(NOT WIN32 OR CYGWIN)
b61cc19c
PC
228
229# SET UP LINKS
230if(PNG_SHARED)
231 set_target_properties(${PNG_LIB_NAME} PROPERTIES
9c0d9ce3
DS
232# VERSION 15.${PNGLIB_RELEASE}.1.5.6
233 VERSION 15.${PNGLIB_RELEASE}.0
234 SOVERSION 15
b61cc19c
PC
235 CLEAN_DIRECT_OUTPUT 1)
236endif()
237if(PNG_STATIC)
238 # MSVC doesn't use a different file extension for shared vs. static
239 # libs. We are able to change OUTPUT_NAME to remove the _static
240 # for all other platforms.
241 if(NOT MSVC)
242 set_target_properties(${PNG_LIB_NAME_STATIC} PROPERTIES
243 OUTPUT_NAME ${PNG_LIB_NAME}
244 CLEAN_DIRECT_OUTPUT 1)
245 endif()
246endif()
247
248# If CMake > 2.4.x, we set a variable used below to export
249# targets to an export file.
250# TODO: Use VERSION_GREATER after our cmake_minimum_required >= 2.6.2
251if(CMAKE_MAJOR_VERSION GREATER 1 AND CMAKE_MINOR_VERSION GREATER 4)
252 set(PNG_EXPORT_RULE EXPORT libpng)
253elseif(CMAKE_MAJOR_VERSION GREATER 2) # future proof
254 set(PNG_EXPORT_RULE EXPORT libpng)
255endif()
256
257# INSTALL
258if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL )
259 if(PNG_SHARED)
260 install(TARGETS ${PNG_LIB_NAME}
261 ${PNG_EXPORT_RULE}
262 RUNTIME DESTINATION bin
263 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
264 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
265
9c0d9ce3 266 # Create a symlink for libpng.dll.a => libpng15.dll.a on Cygwin
b61cc19c 267 if(CYGWIN)
9c0d9ce3
DS
268 get_target_property(BUILD_TARGET_LOCATION ${PNG_LIB_NAME} LOCATION_${CMAKE_BUILD_TYPE})
269 get_filename_component(BUILD_TARGET_FILE ${BUILD_TARGET_LOCATION} NAME)
270 CREATE_SYMLINK(${BUILD_TARGET_FILE} libpng${CMAKE_IMPORT_LIBRARY_SUFFIX})
271 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng${CMAKE_IMPORT_LIBRARY_SUFFIX}
272 DESTINATION ${CMAKE_INSTALL_LIBDIR})
273 endif(CYGWIN)
b61cc19c
PC
274
275 if(NOT WIN32)
9c0d9ce3
DS
276 get_target_property(BUILD_TARGET_LOCATION ${PNG_LIB_NAME} LOCATION_${CMAKE_BUILD_TYPE})
277 get_filename_component(BUILD_TARGET_FILE ${BUILD_TARGET_LOCATION} NAME)
278 CREATE_SYMLINK(${BUILD_TARGET_FILE} libpng${CMAKE_SHARED_LIBRARY_SUFFIX})
279 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng${CMAKE_SHARED_LIBRARY_SUFFIX}
280 DESTINATION ${CMAKE_INSTALL_LIBDIR})
281 endif(NOT WIN32)
282 endif(PNG_SHARED)
b61cc19c
PC
283
284 if(PNG_STATIC)
285 install(TARGETS ${PNG_LIB_NAME_STATIC}
286 ${PNG_EXPORT_RULE}
9c0d9ce3
DS
287 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
288 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
b61cc19c 289 if(NOT WIN32 OR CYGWIN)
9c0d9ce3
DS
290 get_target_property(BUILD_TARGET_LOCATION ${PNG_LIB_NAME_STATIC} LOCATION_${CMAKE_BUILD_TYPE})
291 get_filename_component(BUILD_TARGET_FILE ${BUILD_TARGET_LOCATION} NAME)
292 CREATE_SYMLINK(${BUILD_TARGET_FILE} libpng${CMAKE_STATIC_LIBRARY_SUFFIX})
293 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng${CMAKE_STATIC_LIBRARY_SUFFIX}
294 DESTINATION ${CMAKE_INSTALL_LIBDIR})
295 endif(NOT WIN32 OR CYGWIN)
296 endif()
b61cc19c
PC
297endif()
298
299if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL )
9c0d9ce3
DS
300 install(FILES ${libpng_public_hdrs} DESTINATION include)
301 install(FILES ${libpng_public_hdrs} DESTINATION include/${PNGLIB_NAME})
b61cc19c
PC
302endif()
303if(NOT SKIP_INSTALL_EXECUTABLES AND NOT SKIP_INSTALL_ALL )
304 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng-config DESTINATION bin)
305 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config
306 DESTINATION bin)
307endif()
308if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL )
309 # Install man pages
310 if(NOT PNG_MAN_DIR)
311 set(PNG_MAN_DIR "share/man")
312 endif()
313 install(FILES libpng.3 libpngpf.3 DESTINATION ${PNG_MAN_DIR}/man3)
314 install(FILES png.5 DESTINATION ${PNG_MAN_DIR}/man5)
315 # Install pkg-config files
316 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng.pc
317 DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
318 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng-config
319 DESTINATION bin)
320 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}.pc
321 DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
322 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config
323 DESTINATION bin)
324endif()
325
326# On versions of CMake that support it, create an export file CMake
327# users can include() to import our targets
328if(PNG_EXPORT_RULE AND NOT SKIP_INSTALL_EXPORT AND NOT SKIP_INSTALL_ALL )
329 install(EXPORT libpng DESTINATION lib/libpng FILE lib${PNG_LIB_NAME}.cmake)
330endif()
331
9c0d9ce3 332# what's with libpng-$VER%.txt and all the extra files?
b61cc19c
PC
333
334# UNINSTALL
335# do we need this?
336
b61cc19c
PC
337# DIST
338# do we need this?
339
340# to create msvc import lib for mingw compiled shared lib
341# pexports libpng.dll > libpng.def
342# lib /def:libpng.def /machine:x86
343