1
2project(PNG)
3
4# Copyright (C) 2007 Glenn Randers-Pehrson
5
6# This code is released under the libpng license.
7# For conditions of distribution and use, see the disclaimer
8# and license in png.h
9
10set(PNGLIB_MAJOR 1)
11set(PNGLIB_MINOR 2)
12set(PNGLIB_RELEASE 38)
13set(PNGLIB_NAME libpng${PNGLIB_MAJOR}${PNGLIB_MINOR})
14set(PNGLIB_VERSION ${PNGLIB_MAJOR}.${PNGLIB_MINOR}.${PNGLIB_RELEASE})
15
16# needed packages
17find_package(ZLIB REQUIRED)
18if(NOT WIN32)
19 find_library(M_LIBRARY
20     NAMES m
21     PATHS /usr/lib /usr/local/lib
22 )
23 if(NOT M_LIBRARY)
24   message(STATUS
25     "math library 'libm' not found - floating point support disabled")
26 endif(NOT M_LIBRARY)
27else(NOT WIN32)
28 # not needed on windows
29 set(M_LIBRARY "")
30endif(NOT WIN32)
31
32
33# COMMAND LINE OPTIONS
34option(PNG_SHARED "Build shared lib" YES)
35option(PNG_STATIC "Build static lib" YES)
36if(MINGW)
37  option(PNG_TESTS  "Build pngtest" NO)
38else(MINGW)
39  option(PNG_TESTS  "Build pngtest" YES)
40endif(MINGW)
41option(PNG_NO_CONSOLE_IO "FIXME" YES)
42option(PNG_NO_STDIO      "FIXME" YES)
43option(PNG_DEBUG         "Build with debug output" YES)
44option(PNGARG            "FIXME" YES)
45#TODO:
46# PNG_CONSOLE_IO_SUPPORTED
47
48# maybe needs improving, but currently I don't know when we can enable what :)
49set(png_asm_tmp "OFF")
50if(NOT WIN32)
51 find_program(uname_executable NAMES uname PATHS /bin /usr/bin /usr/local/bin)
52 if(uname_executable)
53   EXEC_PROGRAM(${uname_executable} ARGS --machine OUTPUT_VARIABLE uname_output)
54   if("uname_output" MATCHES "^.*i[1-9]86.*$")
55      set(png_asm_tmp "ON")
56   else("uname_output" MATCHES "^.*i[1-9]86.*$")
57      set(png_asm_tmp "OFF")
58   endif("uname_output" MATCHES "^.*i[1-9]86.*$")
59 endif(uname_executable)
60else(NOT WIN32)
61 # this env var is normally only set on win64
62 SET(TEXT "ProgramFiles(x86)")
63 if("$ENV{${TEXT}}" STREQUAL "")
64  set(png_asm_tmp "ON")
65 endif("$ENV{${TEXT}}" STREQUAL "")
66endif(NOT WIN32)
67
68# SET LIBNAME
69# msvc does not append 'lib' - do it here to have consistent name
70if(MSVC)
71 set(PNG_LIB_NAME lib)
72endif(MSVC)
73set(PNG_LIB_NAME ${PNG_LIB_NAME}png${PNGLIB_MAJOR}${PNGLIB_MINOR})
74
75# to distinguish between debug and release lib
76set(CMAKE_DEBUG_POSTFIX "d")
77
78
79# OUR SOURCES
80set(libpng_sources
81 png.h
82 pngconf.h
83 png.c
84 pngerror.c
85 pngget.c
86 pngmem.c
87 pngpread.c
88 pngread.c
89 pngrio.c
90 pngrtran.c
91 pngrutil.c
92 pngset.c
93 pngtrans.c
94 pngwio.c
95 pngwrite.c
96 pngwtran.c
97 pngwutil.c
98)
99set(pngtest_sources
100       pngtest.c
101)
102# SOME NEEDED DEFINITIONS
103if(MSVC)
104  add_definitions(-DPNG_NO_MODULEDEF -D_CRT_SECURE_NO_DEPRECATE)
105endif(MSVC)
106
107add_definitions(-DZLIB_DLL)
108
109add_definitions(-DLIBPNG_NO_MMX)
110add_definitions(-DPNG_NO_MMX_CODE)
111
112if(PNG_CONSOLE_IO_SUPPORTED)
113 add_definitions(-DPNG_CONSOLE_IO_SUPPORTED)
114endif(PNG_CONSOLE_IO_SUPPORTED)
115
116if(PNG_NO_CONSOLE_IO)
117 add_definitions(-DPNG_NO_CONSOLE_IO)
118endif(PNG_NO_CONSOLE_IO)
119
120if(PNG_NO_STDIO)
121 add_definitions(-DPNG_NO_STDIO)
122endif(PNG_NO_STDIO)
123
124if(PNG_DEBUG)
125 add_definitions(-DPNG_DEBUG)
126endif(PNG_DEBUG)
127
128if(NOT M_LIBRARY AND NOT WIN32)
129 add_definitions(-DPNG_NO_FLOATING_POINT_SUPPORTED)
130endif(NOT M_LIBRARY AND NOT WIN32)
131
132# NOW BUILD OUR TARGET
133include_directories(${PNG_SOURCE_DIR} ${ZLIB_INCLUDE_DIR})
134
135if(PNG_SHARED)
136 add_library(${PNG_LIB_NAME} SHARED ${libpng_sources})
137 target_link_libraries(${PNG_LIB_NAME} ${ZLIB_LIBRARY} ${M_LIBRARY})
138endif(PNG_SHARED)
139if(PNG_STATIC)
140# does not work without changing name
141 set(PNG_LIB_NAME_STATIC ${PNG_LIB_NAME}_static)
142 add_library(${PNG_LIB_NAME_STATIC} STATIC ${libpng_sources})
143endif(PNG_STATIC)
144
145if(PNG_SHARED AND WIN32)
146 set_target_properties(${PNG_LIB_NAME} PROPERTIES DEFINE_SYMBOL PNG_BUILD_DLL)
147endif(PNG_SHARED AND WIN32)
148
149if(PNG_TESTS)
150# does not work with msvc due to png_lib_ver issue
151 add_executable(pngtest ${pngtest_sources})
152 target_link_libraries(pngtest ${PNG_LIB_NAME})
153#  add_test(pngtest ${PNG_SOURCE_DIR}/pngtest.png)
154endif(PNG_TESTS)
155
156
157# CREATE PKGCONFIG FILES
158# we use the same files like ./configure, so we have to set its vars
159set(prefix      ${CMAKE_INSTALL_PREFIX})
160set(exec_prefix ${CMAKE_INSTALL_PREFIX})
161set(libdir      ${CMAKE_INSTALL_PREFIX}/lib)
162set(includedir  ${CMAKE_INSTALL_PREFIX}/include)
163
164configure_file(${PNG_SOURCE_DIR}/scripts/libpng.pc.in
165  ${PNG_BINARY_DIR}/libpng.pc)
166configure_file(${PNG_SOURCE_DIR}/scripts/libpng-config.in
167  ${PNG_BINARY_DIR}/libpng-config)
168configure_file(${PNG_SOURCE_DIR}/scripts/libpng.pc.in
169  ${PNG_BINARY_DIR}/${PNGLIB_NAME}.pc)
170configure_file(${PNG_SOURCE_DIR}/scripts/libpng-config.in
171  ${PNG_BINARY_DIR}/${PNGLIB_NAME}-config)
172
173# SET UP LINKS
174set_target_properties(${PNG_LIB_NAME} PROPERTIES
175#    VERSION 0.${PNGLIB_RELEASE}.1.2.38
176     VERSION 0.${PNGLIB_RELEASE}.0
177     SOVERSION 0
178     CLEAN_DIRECT_OUTPUT 1)
179if(NOT WIN32)
180  # that's uncool on win32 - it overwrites our static import lib...
181  set_target_properties(${PNG_LIB_NAME_STATIC} PROPERTIES
182     OUTPUT_NAME ${PNG_LIB_NAME}
183     CLEAN_DIRECT_OUTPUT 1)
184endif(NOT WIN32)
185# INSTALL
186install_targets(/lib ${PNG_LIB_NAME})
187if(PNG_STATIC)
188  install_targets(/lib ${PNG_LIB_NAME_STATIC})
189endif(PNG_STATIC)
190install(FILES png.h pngconf.h         DESTINATION include)
191install(FILES png.h pngconf.h         DESTINATION include/${PNGLIB_NAME})
192install(FILES libpng.3 libpngpf.3             DESTINATION man/man3)
193install(FILES png.5                           DESTINATION man/man5)
194install(FILES ${PNG_BINARY_DIR}/libpng.pc     DESTINATION lib/pkgconfig)
195install(FILES ${PNG_BINARY_DIR}/libpng-config      DESTINATION bin)
196install(FILES ${PNG_BINARY_DIR}/${PNGLIB_NAME}.pc  DESTINATION lib/pkgconfig)
197install(FILES ${PNG_BINARY_DIR}/${PNGLIB_NAME}-config DESTINATION bin)
198
199# what's with libpng.txt and all the extra files?
200
201
202# UNINSTALL
203# do we need this?
204
205
206# DIST
207# do we need this?
208
209# to create msvc import lib for mingw compiled shared lib
210# pexports libpng.dll > libpng.def
211# lib /def:libpng.def /machine:x86
212
213