Imported Upstream version 1.2.50
[platform/upstream/libpng.git] / CMakeLists.txt
1 cmake_minimum_required(VERSION 2.4.3)
2 set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)
3
4 if(UNIX AND NOT DEFINED CMAKE_BUILD_TYPE)
5   set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING 
6       "Choose the type of build, options are:
7          None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used)
8          Debug
9          Release
10          RelWithDebInfo
11          MinSizeRel.")
12 endif()
13
14 project(libpng C)
15 enable_testing()
16
17 # Copyright (C) 2007-2010 Glenn Randers-Pehrson
18
19 # This code is released under the libpng license.
20 # For conditions of distribution and use, see the disclaimer
21 # and license in png.h
22
23 set(PNGLIB_MAJOR 1)
24 set(PNGLIB_MINOR 2)
25 set(PNGLIB_RELEASE 50)
26 set(PNGLIB_NAME libpng${PNGLIB_MAJOR}${PNGLIB_MINOR})
27 set(PNGLIB_VERSION ${PNGLIB_MAJOR}.${PNGLIB_MINOR}.${PNGLIB_RELEASE})
28
29 # needed packages
30 find_package(ZLIB REQUIRED)
31 include_directories(${ZLIB_INCLUDE_DIR})
32
33 if(NOT WIN32)
34   find_library(M_LIBRARY
35     NAMES m
36     PATHS /usr/lib /usr/local/lib
37   )
38   if(NOT M_LIBRARY)
39     message(STATUS
40       "math library 'libm' not found - floating point support disabled")
41   endif()
42 else()
43   # not needed on windows
44   set(M_LIBRARY "")
45 endif()
46
47 # COMMAND LINE OPTIONS
48 if(DEFINED PNG_SHARED)
49   option(PNG_SHARED "Build shared lib" ${PNG_SHARED})
50 else()
51   option(PNG_SHARED "Build shared lib" ON)
52 endif()
53 if(DEFINED PNG_STATIC)
54   option(PNG_STATIC "Build static lib" ${PNG_STATIC})
55 else()
56   option(PNG_STATIC "Build static lib" ON)
57 endif()
58
59 if(MINGW)
60   option(PNG_TESTS  "Build pngtest" NO)
61 else()
62   option(PNG_TESTS  "Build pngtest" YES)
63 endif()
64
65 option(PNG_NO_CONSOLE_IO "FIXME" YES)
66 option(PNG_NO_STDIO      "FIXME" YES)
67 option(PNG_DEBUG         "Build with debug output" NO)
68 option(PNGARG            "FIXME" YES)
69 #TODO:
70 # PNG_CONSOLE_IO_SUPPORTED
71
72 # maybe needs improving, but currently I don't know when we can enable what :)
73 set(png_asm_tmp "OFF")
74 if(NOT WIN32)
75   find_program(uname_executable NAMES uname PATHS /bin /usr/bin /usr/local/bin)
76   if(uname_executable)
77     exec_program(${uname_executable}
78                  ARGS --machine OUTPUT_VARIABLE uname_output)
79     if("uname_output" MATCHES "^.*i[1-9]86.*$")
80       set(png_asm_tmp "ON")
81     else("uname_output" MATCHES "^.*i[1-9]86.*$")
82       set(png_asm_tmp "OFF")
83     endif("uname_output" MATCHES "^.*i[1-9]86.*$")
84   endif(uname_executable)
85 else()
86   # this env var is normally only set on win64
87   set(TEXT "ProgramFiles(x86)")
88   if("$ENV{${TEXT}}" STREQUAL "")
89     set(png_asm_tmp "ON")
90   endif("$ENV{${TEXT}}" STREQUAL "")
91 endif()
92
93 # SET LIBNAME
94 set(PNG_LIB_NAME png${PNGLIB_MAJOR}${PNGLIB_MINOR})
95
96 # to distinguish between debug and release lib
97 set(CMAKE_DEBUG_POSTFIX "d")
98
99
100 # OUR SOURCES
101 set(libpng_sources
102   png.h
103   pngconf.h
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 )
120 set(pngtest_sources
121   pngtest.c
122 )
123 # SOME NEEDED DEFINITIONS
124
125 add_definitions(-DPNG_CONFIGURE_LIBPNG)
126
127 if(_AIX)
128   add_definitions(-D_ALL_SOURCE)
129 endif(_AIX)
130
131 if(MSVC)
132   add_definitions(-DPNG_NO_MODULEDEF -D_CRT_SECURE_NO_DEPRECATE)
133 endif(MSVC)
134
135 if(PNG_SHARED OR  NOT MSVC)
136   #if building msvc static this has NOT to be defined
137   add_definitions(-DZLIB_DLL)
138 endif()
139
140 add_definitions(-DLIBPNG_NO_MMX)
141 add_definitions(-DPNG_NO_MMX_CODE)
142
143
144 if(PNG_CONSOLE_IO_SUPPORTED)
145   add_definitions(-DPNG_CONSOLE_IO_SUPPORTED)
146 endif()
147
148 if(PNG_NO_CONSOLE_IO)
149   add_definitions(-DPNG_NO_CONSOLE_IO)
150 endif()
151
152 if(PNG_NO_STDIO)
153   add_definitions(-DPNG_NO_STDIO)
154 endif()
155
156 if(PNG_DEBUG)
157   add_definitions(-DPNG_DEBUG)
158 endif()
159
160 if(NOT M_LIBRARY AND NOT WIN32)
161   add_definitions(-DPNG_NO_FLOATING_POINT_SUPPORTED)
162 endif()
163
164 # NOW BUILD OUR TARGET
165 include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${ZLIB_INCLUDE_DIR})
166
167 if(PNG_SHARED)
168   add_library(${PNG_LIB_NAME} SHARED ${libpng_sources})
169   if(MSVC)
170     # msvc does not append 'lib' - do it here to have consistent name
171     set_target_properties(${PNG_LIB_NAME} PROPERTIES PREFIX "lib")
172   endif()
173   target_link_libraries(${PNG_LIB_NAME} ${ZLIB_LIBRARY} ${M_LIBRARY})
174 endif()
175
176 if(PNG_STATIC)
177 # does not work without changing name
178   set(PNG_LIB_NAME_STATIC ${PNG_LIB_NAME}_static)
179   add_library(${PNG_LIB_NAME_STATIC} STATIC ${libpng_sources})
180   if(MSVC)
181     # msvc does not append 'lib' - do it here to have consistent name
182     set_target_properties(${PNG_LIB_NAME_STATIC} PROPERTIES PREFIX "lib")
183   endif()
184 endif()
185
186
187 if(PNG_SHARED AND WIN32)
188   set_target_properties(${PNG_LIB_NAME} PROPERTIES DEFINE_SYMBOL PNG_BUILD_DLL)
189 endif()
190
191 if(PNG_TESTS AND PNG_SHARED)
192   # does not work with msvc due to png_lib_ver issue
193   add_executable(pngtest ${pngtest_sources})
194   target_link_libraries(pngtest ${PNG_LIB_NAME})
195   add_test(pngtest pngtest ${CMAKE_CURRENT_SOURCE_DIR}/pngtest.png)
196 endif()
197
198
199 # CREATE PKGCONFIG FILES
200 # we use the same files like ./configure, so we have to set its vars
201 set(prefix      ${CMAKE_INSTALL_PREFIX})
202 set(exec_prefix ${CMAKE_INSTALL_PREFIX})
203 set(libdir      ${CMAKE_INSTALL_PREFIX}/lib)
204 set(includedir  ${CMAKE_INSTALL_PREFIX}/include)
205
206 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/libpng.pc.in
207   ${CMAKE_CURRENT_BINARY_DIR}/libpng.pc)
208 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/libpng-config.in
209   ${CMAKE_CURRENT_BINARY_DIR}/libpng-config)
210 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/libpng.pc.in
211   ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}.pc)
212 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/libpng-config.in
213   ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config)
214
215 # SET UP LINKS
216 if(PNG_SHARED)
217   set_target_properties(${PNG_LIB_NAME} PROPERTIES
218 #   VERSION 0.${PNGLIB_RELEASE}.1.2.50
219     VERSION 0.${PNGLIB_RELEASE}.0
220     SOVERSION 0
221     CLEAN_DIRECT_OUTPUT 1)
222 endif()
223 if(PNG_STATIC)
224   if(NOT WIN32)
225     # that's uncool on win32 - it overwrites our static import lib...
226     set_target_properties(${PNG_LIB_NAME_STATIC} PROPERTIES
227       OUTPUT_NAME ${PNG_LIB_NAME}
228       CLEAN_DIRECT_OUTPUT 1)
229   endif()
230 endif()
231
232 # INSTALL
233 if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL )
234   if(PNG_SHARED)
235     install(TARGETS ${PNG_LIB_NAME}
236             RUNTIME DESTINATION bin
237             LIBRARY DESTINATION lib
238             ARCHIVE DESTINATION lib)
239   endif()
240   if(PNG_STATIC)
241     install(TARGETS ${PNG_LIB_NAME_STATIC}
242             LIBRARY DESTINATION lib
243             ARCHIVE DESTINATION lib)
244   endif()
245 endif()
246
247 if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL )
248   install(FILES png.h pngconf.h         DESTINATION include)
249   install(FILES png.h pngconf.h         DESTINATION include/${PNGLIB_NAME})
250 endif()
251 if(NOT SKIP_INSTALL_EXECUTABLES AND NOT SKIP_INSTALL_ALL )
252   install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng-config DESTINATION bin)
253   install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config
254           DESTINATION bin)
255 endif()
256 if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL )
257   # Install man pages
258   install(FILES libpng.3 libpngpf.3             DESTINATION man/man3)
259   install(FILES png.5                           DESTINATION man/man5)
260   # Install pkg-config files
261   install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng.pc
262           DESTINATION lib/pkgconfig)
263   install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng-config
264           DESTINATION bin)
265   install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}.pc
266           DESTINATION lib/pkgconfig)
267   install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config
268           DESTINATION bin)
269 endif()
270
271 # what's with libpng.txt and all the extra files?
272
273
274 # UNINSTALL
275 # do we need this?
276
277
278 # DIST
279 # do we need this?
280
281 # to create msvc import lib for mingw compiled shared lib
282 # pexports libpng.dll > libpng.def
283 # lib /def:libpng.def /machine:x86
284