]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/libpng/lib/dist/CMakeLists.txt
728a419e319c418312b98b2b5c96723f62e14c8c
[l4.git] / l4 / pkg / libpng / lib / dist / CMakeLists.txt
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
9 cmake_minimum_required(VERSION 2.4.4)
10 set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)
11
12 if(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
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   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()
31 endif()
32
33 project(libpng C)
34 enable_testing()
35
36 set(PNGLIB_MAJOR 1)
37 set(PNGLIB_MINOR 6)
38 set(PNGLIB_RELEASE 0)
39 set(PNGLIB_NAME libpng${PNGLIB_MAJOR}${PNGLIB_MINOR})
40 set(PNGLIB_VERSION ${PNGLIB_MAJOR}.${PNGLIB_MINOR}.${PNGLIB_RELEASE})
41
42 # needed packages
43 find_package(ZLIB REQUIRED)
44 include_directories(${ZLIB_INCLUDE_DIR})
45
46 if(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()
55 else()
56   # not needed on windows
57   set(M_LIBRARY "")
58 endif()
59
60 # COMMAND LINE OPTIONS
61 if(DEFINED PNG_SHARED)
62   option(PNG_SHARED "Build shared lib" ${PNG_SHARED})
63 else()
64   option(PNG_SHARED "Build shared lib" ON)
65 endif()
66 if(DEFINED PNG_STATIC)
67   option(PNG_STATIC "Build static lib" ${PNG_STATIC})
68 else()
69   option(PNG_STATIC "Build static lib" ON)
70 endif()
71
72 option(PNG_TESTS  "Build libpng tests" YES)
73
74 # Many more configuration options could be added here
75 option(PNG_DEBUG         "Build with debug output" NO)
76 option(PNGARG            "Disable ANSI-C prototypes" NO)
77
78 # SET LIBNAME
79 set(PNG_LIB_NAME png${PNGLIB_MAJOR}${PNGLIB_MINOR})
80
81 # to distinguish between debug and release lib
82 set(CMAKE_DEBUG_POSTFIX "d")
83
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.)
88 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.h.prebuilt
89                ${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h)
90 include_directories(${CMAKE_CURRENT_BINARY_DIR})
91
92 # OUR SOURCES
93 set(libpng_public_hdrs
94   png.h
95   pngconf.h
96   ${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h
97 )
98 set(libpng_sources
99   ${libpng_public_hdrs}
100   pngdebug.h
101   pnginfo.h
102   pngpriv.h
103   pngstruct.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 set(pngvalid_sources
124   contrib/libtests/pngvalid.c
125 )
126 set(pngstest_sources
127   contrib/libtests/pngstest.c
128 )
129 # SOME NEEDED DEFINITIONS
130
131 if(MSVC)
132   add_definitions(-D_CRT_SECURE_NO_DEPRECATE)
133 endif(MSVC)
134
135 if(PNG_DEBUG)
136   add_definitions(-DPNG_DEBUG)
137 endif()
138
139 # NOW BUILD OUR TARGET
140 include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${ZLIB_INCLUDE_DIR})
141
142 if(PNG_SHARED)
143   add_library(${PNG_LIB_NAME} SHARED ${libpng_sources})
144   if(MSVC)
145     # msvc does not append 'lib' - do it here to have consistent name
146     set_target_properties(${PNG_LIB_NAME} PROPERTIES PREFIX "lib")
147     set_target_properties(${PNG_LIB_NAME} PROPERTIES IMPORT_PREFIX "lib")
148   endif()
149   target_link_libraries(${PNG_LIB_NAME} ${ZLIB_LIBRARY} ${M_LIBRARY})
150 endif()
151
152 if(PNG_STATIC)
153 # does not work without changing name
154   set(PNG_LIB_NAME_STATIC ${PNG_LIB_NAME}_static)
155   add_library(${PNG_LIB_NAME_STATIC} STATIC ${libpng_sources})
156   if(MSVC)
157     # msvc does not append 'lib' - do it here to have consistent name
158     set_target_properties(${PNG_LIB_NAME_STATIC} PROPERTIES PREFIX "lib")
159   endif()
160   target_link_libraries(${PNG_LIB_NAME_STATIC} ${ZLIB_LIBRARY} ${M_LIBRARY})
161 endif()
162
163 if(PNG_SHARED AND WIN32)
164   set_target_properties(${PNG_LIB_NAME} PROPERTIES DEFINE_SYMBOL PNG_BUILD_DLL)
165 endif()
166
167 if(PNG_TESTS AND PNG_SHARED)
168   # does not work with msvc due to png_lib_ver issue
169   add_executable(pngtest ${pngtest_sources})
170   target_link_libraries(pngtest ${PNG_LIB_NAME})
171   add_test(pngtest ./pngtest ${CMAKE_CURRENT_SOURCE_DIR}/pngtest.png)
172   #
173   add_executable(pngvalid ${pngvalid_sources})
174   target_link_libraries(pngvalid ${PNG_LIB_NAME})
175   add_test(pngvalid ./pngvalid)
176   add_executable(pngstest ${pngstest_sources})
177   target_link_libraries(pngstest ${PNG_LIB_NAME})
178   add_test(pngstest ./pngstest
179     ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn0g01.png
180     ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn0g02.png
181     ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn0g04.png
182     ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn0g08.png
183     ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn0g16.png
184     ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn2c08.png
185     ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn2c16.png
186     ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn3p01.png
187     ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn3p02.png
188     ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn3p04.png
189     ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn3p08.png
190     ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn4a08.png
191     ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn4a16.png
192     ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn6a08.png
193     ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/basn6a16.png
194     ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftbbn0g01.png
195     ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftbbn0g02.png
196     ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftbbn0g04.png
197     ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftbbn2c16.png
198     ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftbbn3p08.png
199     ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftbgn2c16.png
200     ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftbgn3p08.png
201     ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftbrn2c08.png
202     ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftbwn0g16.png
203     ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftbwn3p08.png
204     ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftbyn3p08.png
205     ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftp0n0g08.png
206     ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftp0n2c08.png
207     ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftp0n3p08.png
208     ${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/ftp1n3p08.png
209   )
210 endif()
211
212 # Ensure the CMAKE_LIBRARY_OUTPUT_DIRECTORY is set
213 IF(NOT CMAKE_LIBRARY_OUTPUT_DIRECTORY)
214   SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY "lib")
215 ENDIF(NOT CMAKE_LIBRARY_OUTPUT_DIRECTORY)
216
217 # Set a variable with CMake code which:
218 # Creates a symlink from src to dest (if possible) or alternatively
219 # copies if different.
220 macro(CREATE_SYMLINK SRC_FILE DEST_FILE)
221   FILE(REMOVE ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE})
222   if(WIN32 AND NOT CYGWIN AND NOT MSYS)
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 AND NOT MSYS)
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 AND NOT MSYS)
234 endmacro()
235
236 # libpng is a library so default to 'lib'
237 if(NOT DEFINED CMAKE_INSTALL_LIBDIR)
238   set(CMAKE_INSTALL_LIBDIR lib)
239 endif(NOT DEFINED CMAKE_INSTALL_LIBDIR)
240
241 # CREATE PKGCONFIG FILES
242 # we use the same files like ./configure, so we have to set its vars
243 # Only do this on Windows for Cygwin - the files don't make much sense outside
244 # a UNIX look alike
245 if(NOT WIN32 OR CYGWIN OR MINGW)
246   set(prefix      ${CMAKE_INSTALL_PREFIX})
247   set(exec_prefix ${CMAKE_INSTALL_PREFIX})
248   set(libdir      ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR})
249   set(includedir  ${CMAKE_INSTALL_PREFIX}/include)
250   set(LIBS        "-lz -lm")
251   configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libpng.pc.in
252     ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}.pc @ONLY)
253   CREATE_SYMLINK(${PNGLIB_NAME}.pc libpng.pc)
254
255   configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libpng-config.in
256     ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config @ONLY)
257   CREATE_SYMLINK(${PNGLIB_NAME}-config libpng-config)
258 endif(NOT WIN32 OR CYGWIN OR MINGW)
259
260 # SET UP LINKS
261 if(PNG_SHARED)
262   set_target_properties(${PNG_LIB_NAME} PROPERTIES
263 #   VERSION 16.${PNGLIB_RELEASE}.1.6.0
264     VERSION 16.${PNGLIB_RELEASE}.0
265     SOVERSION 16
266     CLEAN_DIRECT_OUTPUT 1)
267 endif()
268 if(PNG_STATIC)
269   # MSVC doesn't use a different file extension for shared vs. static
270   # libs.  We are able to change OUTPUT_NAME to remove the _static
271   # for all other platforms.
272   if(NOT MSVC)
273     set_target_properties(${PNG_LIB_NAME_STATIC} PROPERTIES
274       OUTPUT_NAME ${PNG_LIB_NAME}
275       CLEAN_DIRECT_OUTPUT 1)
276   endif()
277 endif()
278
279 # If CMake > 2.4.x, we set a variable used below to export
280 # targets to an export file.
281 # TODO: Use VERSION_GREATER after our cmake_minimum_required >= 2.6.2
282 if(CMAKE_MAJOR_VERSION GREATER 1 AND CMAKE_MINOR_VERSION GREATER 4)
283   set(PNG_EXPORT_RULE EXPORT libpng)
284 elseif(CMAKE_MAJOR_VERSION GREATER 2) # future proof
285   set(PNG_EXPORT_RULE EXPORT libpng)
286 endif()
287
288 # INSTALL
289 if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL )
290   if(PNG_SHARED)
291     install(TARGETS ${PNG_LIB_NAME}
292         ${PNG_EXPORT_RULE}
293         RUNTIME DESTINATION bin
294         LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
295         ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
296
297     # Create a symlink for libpng.dll.a => libpng16.dll.a on Cygwin
298     if(CYGWIN OR MINGW)
299        get_target_property(BUILD_TARGET_LOCATION ${PNG_LIB_NAME} LOCATION_${CMAKE_BUILD_TYPE})
300        get_filename_component(BUILD_TARGET_FILE ${BUILD_TARGET_LOCATION} NAME)
301        CREATE_SYMLINK(${BUILD_TARGET_FILE} libpng${CMAKE_IMPORT_LIBRARY_SUFFIX})
302        install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng${CMAKE_IMPORT_LIBRARY_SUFFIX}
303          DESTINATION ${CMAKE_INSTALL_LIBDIR})
304     endif(CYGWIN OR MINGW)
305
306     if(NOT WIN32)
307       get_target_property(BUILD_TARGET_LOCATION ${PNG_LIB_NAME} LOCATION_${CMAKE_BUILD_TYPE})
308       get_filename_component(BUILD_TARGET_FILE ${BUILD_TARGET_LOCATION} NAME)
309       CREATE_SYMLINK(${BUILD_TARGET_FILE} libpng${CMAKE_SHARED_LIBRARY_SUFFIX})
310       install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng${CMAKE_SHARED_LIBRARY_SUFFIX}
311          DESTINATION ${CMAKE_INSTALL_LIBDIR})
312     endif(NOT WIN32)
313   endif(PNG_SHARED)
314
315   if(PNG_STATIC)
316     install(TARGETS ${PNG_LIB_NAME_STATIC}
317         ${PNG_EXPORT_RULE}
318         LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
319         ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
320     if(NOT WIN32 OR CYGWIN OR MINGW)
321       get_target_property(BUILD_TARGET_LOCATION ${PNG_LIB_NAME_STATIC} LOCATION_${CMAKE_BUILD_TYPE})
322       get_filename_component(BUILD_TARGET_FILE ${BUILD_TARGET_LOCATION} NAME)
323       CREATE_SYMLINK(${BUILD_TARGET_FILE} libpng${CMAKE_STATIC_LIBRARY_SUFFIX})
324       install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng${CMAKE_STATIC_LIBRARY_SUFFIX}
325          DESTINATION ${CMAKE_INSTALL_LIBDIR})
326     endif(NOT WIN32 OR CYGWIN OR MINGW)
327  endif()
328 endif()
329
330 if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL )
331   install(FILES ${libpng_public_hdrs}   DESTINATION include)
332   install(FILES ${libpng_public_hdrs}   DESTINATION include/${PNGLIB_NAME})
333 endif()
334 if(NOT SKIP_INSTALL_EXECUTABLES AND NOT SKIP_INSTALL_ALL )
335   if(NOT WIN32 OR CYGWIN OR MINGW)
336     install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng-config DESTINATION bin)
337     install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config
338             DESTINATION bin)
339   endif(NOT WIN32 OR CYGWIN OR MINGW)
340 endif()
341
342 if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL )
343   # Install man pages
344   if(NOT PNG_MAN_DIR)
345     set(PNG_MAN_DIR "share/man")
346   endif()
347   install(FILES libpng.3 libpngpf.3      DESTINATION ${PNG_MAN_DIR}/man3)
348   install(FILES png.5                    DESTINATION ${PNG_MAN_DIR}/man5)
349   # Install pkg-config files
350   if(NOT WIN32 OR CYGWIN OR MINGW)
351     install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng.pc
352             DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
353     install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng-config
354             DESTINATION bin)
355     install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}.pc
356             DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
357     install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config
358             DESTINATION bin)
359   endif(NOT WIN32 OR CYGWIN OR MINGW)
360 endif()
361
362 # On versions of CMake that support it, create an export file CMake
363 # users can include() to import our targets
364 if(PNG_EXPORT_RULE AND NOT SKIP_INSTALL_EXPORT AND NOT SKIP_INSTALL_ALL )
365   install(EXPORT libpng DESTINATION lib/libpng FILE lib${PNG_LIB_NAME}.cmake)
366 endif()
367
368 # what's with libpng-$VER%.txt and all the extra files?
369
370 # UNINSTALL
371 # do we need this?
372
373 # DIST
374 # do we need this?
375
376 # to create msvc import lib for mingw compiled shared lib
377 # pexports libpng.dll > libpng.def
378 # lib /def:libpng.def /machine:x86
379