blob: d1f1cdc589bd89419a8bd3b29ceacc38fdc83c7d [file] [log] [blame]
Glenn Randers-Pehrson glennrp@comcast.net7ecf7bd2009-05-02 15:36:08 -05001
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -05002project(PNG)
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -06003
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -05004# Copyright (C) 2007 Glenn Randers-Pehrson
5# For conditions of distribution and use, see copyright notice in png.h
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -06006
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -05007set(PNGLIB_MAJOR 1)
8set(PNGLIB_MINOR 4)
9set(PNGLIB_RELEASE 0)
10set(PNGLIB_NAME libpng${PNGLIB_MAJOR}${PNGLIB_MINOR})
11set(PNGLIB_VERSION ${PNGLIB_MAJOR}.${PNGLIB_MINOR}.${PNGLIB_RELEASE})
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -060012
13# needed packages
14find_package(ZLIB REQUIRED)
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -050015if(NOT WIN32)
16 find_library(M_LIBRARY
17 NAMES m
18 PATHS /usr/lib /usr/local/lib
19 )
20 if(NOT M_LIBRARY)
21 message(STATUS
22 "math library 'libm' not found - floating point support disabled")
23 endif(NOT M_LIBRARY)
24else(NOT WIN32)
25 # not needed on windows
26 set(M_LIBRARY "")
27endif(NOT WIN32)
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -060028
29
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -050030# COMMAND LINE OPTIONS
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -060031option(PNG_SHARED "Build shared lib" YES)
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -050032option(PNG_STATIC "Build static lib" YES)
Glenn Randers-Pehrson glennrp@comcast.net7ecf7bd2009-05-02 15:36:08 -050033if(MINGW)
34 option(PNG_TESTS "Build pngtest" NO)
35else(MINGW)
36 option(PNG_TESTS "Build pngtest" YES)
37endif(MINGW)
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -050038option(PNG_NO_CONSOLE_IO "FIXME" YES)
39option(PNG_NO_STDIO "FIXME" YES)
40option(PNG_DEBUG "Build with debug output" YES)
41option(PNGARG "FIXME" YES)
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -060042#TODO:
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -060043# PNG_CONSOLE_IO_SUPPORTED
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -060044
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -050045# maybe needs improving, but currently I don't know when we can enable what :)
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -060046set(png_asm_tmp "OFF")
47if(NOT WIN32)
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -050048 find_program(uname_executable NAMES uname PATHS /bin /usr/bin /usr/local/bin)
49 if(uname_executable)
50 EXEC_PROGRAM(${uname_executable} ARGS --machine OUTPUT_VARIABLE uname_output)
51 if("uname_output" MATCHES "^.*i[1-9]86.*$")
52 set(png_asm_tmp "ON")
53 else("uname_output" MATCHES "^.*i[1-9]86.*$")
54 set(png_asm_tmp "OFF")
55 endif("uname_output" MATCHES "^.*i[1-9]86.*$")
56 endif(uname_executable)
Glenn Randers-Pehrson glennrp@comcast.net7ecf7bd2009-05-02 15:36:08 -050057else(NOT WIN32)
58 # this env var is normally only set on win64
59 SET(TEXT "ProgramFiles(x86)")
60 if("$ENV{${TEXT}}" STREQUAL "")
61 set(png_asm_tmp "ON")
62 endif("$ENV{${TEXT}}" STREQUAL "")
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -060063endif(NOT WIN32)
64
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -050065# SET LIBNAME
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -060066# msvc does not append 'lib' - do it here to have consistent name
67if(MSVC)
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -050068 set(PNG_LIB_NAME lib)
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -060069endif(MSVC)
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -050070set(PNG_LIB_NAME ${PNG_LIB_NAME}png${PNGLIB_MAJOR}${PNGLIB_MINOR})
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -060071
72# to distinguish between debug and release lib
73set(CMAKE_DEBUG_POSTFIX "d")
74
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -060075
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -050076# OUR SOURCES
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -060077set(libpng_sources
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -050078 png.h
79 pngconf.h
Glenn Randers-Pehrson glennrp@comcast.net7ecf7bd2009-05-02 15:36:08 -050080 pngpriv.h
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -050081 png.c
82 pngerror.c
83 pngget.c
84 pngmem.c
85 pngpread.c
86 pngread.c
87 pngrio.c
88 pngrtran.c
89 pngrutil.c
90 pngset.c
91 pngtrans.c
92 pngwio.c
93 pngwrite.c
94 pngwtran.c
95 pngwutil.c
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -060096)
97set(pngtest_sources
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -050098 pngtest.c
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -060099)
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500100# SOME NEEDED DEFINITIONS
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600101if(MSVC)
Glenn Randers-Pehrson glennrp@comcast.net7ecf7bd2009-05-02 15:36:08 -0500102 add_definitions(-DPNG_NO_MODULEDEF -D_CRT_SECURE_NO_DEPRECATE)
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600103endif(MSVC)
104
Glenn Randers-Pehrson glennrp@comcast.net7ecf7bd2009-05-02 15:36:08 -0500105add_definitions(-DZLIB_DLL)
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600106
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500107if(PNG_CONSOLE_IO_SUPPORTED)
108 add_definitions(-DPNG_CONSOLE_IO_SUPPORTED)
109endif(PNG_CONSOLE_IO_SUPPORTED)
110
111if(PNG_NO_CONSOLE_IO)
112 add_definitions(-DPNG_NO_CONSOLE_IO)
113endif(PNG_NO_CONSOLE_IO)
114
115if(PNG_NO_STDIO)
116 add_definitions(-DPNG_NO_STDIO)
117endif(PNG_NO_STDIO)
118
119if(PNG_DEBUG)
120 add_definitions(-DPNG_DEBUG)
121endif(PNG_DEBUG)
122
Glenn Randers-Pehrson glennrp@comcast.net7ecf7bd2009-05-02 15:36:08 -0500123if(NOT M_LIBRARY AND NOT WIN32)
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500124 add_definitions(-DPNG_NO_FLOATING_POINT_SUPPORTED)
Glenn Randers-Pehrson glennrp@comcast.net7ecf7bd2009-05-02 15:36:08 -0500125endif(NOT M_LIBRARY AND NOT WIN32)
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500126
127# NOW BUILD OUR TARGET
128include_directories(${PNG_SOURCE_DIR} ${ZLIB_INCLUDE_DIR})
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600129
130if(PNG_SHARED)
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500131 add_library(${PNG_LIB_NAME} SHARED ${libpng_sources})
132 target_link_libraries(${PNG_LIB_NAME} ${ZLIB_LIBRARY} ${M_LIBRARY})
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600133endif(PNG_SHARED)
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500134if(PNG_STATIC)
135# does not work without changing name
136 set(PNG_LIB_NAME_STATIC ${PNG_LIB_NAME}_static)
137 add_library(${PNG_LIB_NAME_STATIC} STATIC ${libpng_sources})
138endif(PNG_STATIC)
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600139
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600140if(PNG_SHARED AND WIN32)
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500141 set_target_properties(${PNG_LIB_NAME} PROPERTIES DEFINE_SYMBOL PNG_BUILD_DLL)
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600142endif(PNG_SHARED AND WIN32)
143
144if(PNG_TESTS)
145# does not work with msvc due to png_lib_ver issue
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500146 add_executable(pngtest ${pngtest_sources})
147 target_link_libraries(pngtest ${PNG_LIB_NAME})
148# add_test(pngtest ${PNG_SOURCE_DIR}/pngtest.png)
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600149endif(PNG_TESTS)
150
151
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500152# CREATE PKGCONFIG FILES
153# we use the same files like ./configure, so we have to set its vars
154set(prefix ${CMAKE_INSTALL_PREFIX})
155set(exec_prefix ${CMAKE_INSTALL_PREFIX})
156set(libdir ${CMAKE_INSTALL_PREFIX}/lib)
157set(includedir ${CMAKE_INSTALL_PREFIX}/include)
158
159configure_file(${PNG_SOURCE_DIR}/scripts/libpng.pc.in
160 ${PNG_BINARY_DIR}/libpng.pc)
161configure_file(${PNG_SOURCE_DIR}/scripts/libpng-config.in
162 ${PNG_BINARY_DIR}/libpng-config)
163configure_file(${PNG_SOURCE_DIR}/scripts/libpng.pc.in
164 ${PNG_BINARY_DIR}/${PNGLIB_NAME}.pc)
165configure_file(${PNG_SOURCE_DIR}/scripts/libpng-config.in
166 ${PNG_BINARY_DIR}/${PNGLIB_NAME}-config)
167
168# SET UP LINKS
169set_target_properties(${PNG_LIB_NAME} PROPERTIES
Glenn Randers-Pehrson glennrp@comcast.net7ecf7bd2009-05-02 15:36:08 -0500170# VERSION 14.${PNGLIB_RELEASE}.1.4.0beta57
171 VERSION 14.${PNGLIB_RELEASE}.0
172 SOVERSION 14
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500173 CLEAN_DIRECT_OUTPUT 1)
Glenn Randers-Pehrson glennrp@comcast.net7ecf7bd2009-05-02 15:36:08 -0500174if(NOT WIN32)
175 # that's uncool on win32 - it overwrites our static import lib...
176 set_target_properties(${PNG_LIB_NAME_STATIC} PROPERTIES
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500177 OUTPUT_NAME ${PNG_LIB_NAME}
178 CLEAN_DIRECT_OUTPUT 1)
Glenn Randers-Pehrson glennrp@comcast.net7ecf7bd2009-05-02 15:36:08 -0500179endif(NOT WIN32)
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500180# INSTALL
Glenn Randers-Pehrson glennrp@comcast.net7ecf7bd2009-05-02 15:36:08 -0500181install_targets(/lib ${PNG_LIB_NAME})
182if(PNG_STATIC)
183 install_targets(/lib ${PNG_LIB_NAME_STATIC})
184endif(PNG_STATIC)
185install(FILES png.h pngconf.h pngpriv.h DESTINATION include)
186install(FILES png.h pngconf.h pngpriv.h DESTINATION include/${PNGLIB_NAME})
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500187install(FILES libpng.3 libpngpf.3 DESTINATION man/man3)
188install(FILES png.5 DESTINATION man/man5)
189install(FILES ${PNG_BINARY_DIR}/libpng.pc DESTINATION lib/pkgconfig)
190install(FILES ${PNG_BINARY_DIR}/libpng-config DESTINATION bin)
191install(FILES ${PNG_BINARY_DIR}/${PNGLIB_NAME}.pc DESTINATION lib/pkgconfig)
192install(FILES ${PNG_BINARY_DIR}/${PNGLIB_NAME}-config DESTINATION bin)
193
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600194# what's with libpng.txt and all the extra files?
195
196
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500197# UNINSTALL
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600198# do we need this?
199
200
Glenn Randers-Pehrsona7dbcba2007-05-15 16:16:34 -0500201# DIST
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600202# do we need this?
203
204# to create msvc import lib for mingw compiled shared lib
205# pexports libpng.dll > libpng.def
206# lib /def:libpng.def /machine:x86
Glenn Randers-Pehrson glennrp@comcast.net7ecf7bd2009-05-02 15:36:08 -0500207