CMakeLists.txt 5.7 KB
Newer Older
1
                                             
2
project(PNG)
3

4 5 6
# Copyright (C) 2007 Glenn Randers-Pehrson
# For conditions of distribution and use, see copyright notice in png.h

7 8
set(PNGLIB_MAJOR 1)
set(PNGLIB_MINOR 2)
9
set(PNGLIB_RELEASE 25)
10 11
set(PNGLIB_NAME libpng${PNGLIB_MAJOR}${PNGLIB_MINOR})
set(PNGLIB_VERSION ${PNGLIB_MAJOR}.${PNGLIB_MINOR}.${PNGLIB_RELEASE})
12 13 14

# needed packages
find_package(ZLIB REQUIRED)
15 16 17 18 19 20
if(NOT WIN32)
 find_library(M_LIBRARY
     NAMES m
     PATHS /usr/lib /usr/local/lib
 )
 if(NOT M_LIBRARY)
21 22
   message(STATUS
     "math library 'libm' not found - floating point support disabled")
23 24 25 26 27
 endif(NOT M_LIBRARY)
else(NOT WIN32)
 # not needed on windows
 set(M_LIBRARY "")
endif(NOT WIN32)
28 29


30
# COMMAND LINE OPTIONS
31
option(PNG_SHARED "Build shared lib" YES)
32
option(PNG_STATIC "Build static lib" YES)
33
if(MINGW)
34
  option(PNG_TESTS  "Build pngtest" NO)
35
else(MINGW)
36
  option(PNG_TESTS  "Build pngtest" YES)
37
endif(MINGW)
38 39 40 41
option(PNG_NO_CONSOLE_IO "FIXME" YES)
option(PNG_NO_STDIO      "FIXME" YES)
option(PNG_DEBUG         "Build with debug output" YES)
option(PNGARG            "FIXME" YES)
42 43 44
#TODO:
# PNG_CONSOLE_IO_SUPPORTED

45
# maybe needs improving, but currently I don't know when we can enable what :)
46 47
set(png_asm_tmp "OFF")
if(NOT WIN32)
48 49 50 51 52 53 54 55 56
 find_program(uname_executable NAMES uname PATHS /bin /usr/bin /usr/local/bin)
 if(uname_executable)
   EXEC_PROGRAM(${uname_executable} ARGS --machine OUTPUT_VARIABLE uname_output)
   if("uname_output" MATCHES "^.*i[1-9]86.*$")
      set(png_asm_tmp "ON")
   else("uname_output" MATCHES "^.*i[1-9]86.*$")
      set(png_asm_tmp "OFF")
   endif("uname_output" MATCHES "^.*i[1-9]86.*$")
 endif(uname_executable)
57 58 59 60 61 62
else(NOT WIN32)
 # this env var is normally only set on win64
 SET(TEXT "ProgramFiles(x86)")
 if("$ENV{${TEXT}}" STREQUAL "")
  set(png_asm_tmp "ON")
 endif("$ENV{${TEXT}}" STREQUAL "")
63 64
endif(NOT WIN32)

65
# SET LIBNAME
66 67
# msvc does not append 'lib' - do it here to have consistent name
if(MSVC)
68
 set(PNG_LIB_NAME lib)
69
endif(MSVC)
70
set(PNG_LIB_NAME ${PNG_LIB_NAME}png${PNGLIB_MAJOR}${PNGLIB_MINOR})
71 72 73 74 75

# to distinguish between debug and release lib
set(CMAKE_DEBUG_POSTFIX "d")


76
# OUR SOURCES
77
set(libpng_sources
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
 png.h
 pngconf.h
 png.c
 pngerror.c
 pngget.c
 pngmem.c
 pngpread.c
 pngread.c
 pngrio.c
 pngrtran.c
 pngrutil.c
 pngset.c
 pngtrans.c
 pngwio.c
 pngwrite.c
 pngwtran.c
 pngwutil.c
95 96
)
set(pngtest_sources
97
       pngtest.c
98
)
99
# SOME NEEDED DEFINITIONS
100 101 102 103
if(MSVC)
  add_definitions(-DPNG_NO_MODULEDEF -D_CRT_SECURE_NO_DEPRECATE)
endif(MSVC)

104 105
add_definitions(-DZLIB_DLL)

106 107
add_definitions(-DLIBPNG_NO_MMX)
add_definitions(-DPNG_NO_MMX_CODE)
108

109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
if(PNG_CONSOLE_IO_SUPPORTED)
 add_definitions(-DPNG_CONSOLE_IO_SUPPORTED)
endif(PNG_CONSOLE_IO_SUPPORTED)

if(PNG_NO_CONSOLE_IO)
 add_definitions(-DPNG_NO_CONSOLE_IO)
endif(PNG_NO_CONSOLE_IO)

if(PNG_NO_STDIO)
 add_definitions(-DPNG_NO_STDIO)
endif(PNG_NO_STDIO)

if(PNG_DEBUG)
 add_definitions(-DPNG_DEBUG)
endif(PNG_DEBUG)

125
if(NOT M_LIBRARY AND NOT WIN32)
126
 add_definitions(-DPNG_NO_FLOATING_POINT_SUPPORTED)
127
endif(NOT M_LIBRARY AND NOT WIN32)
128 129 130

# NOW BUILD OUR TARGET
include_directories(${PNG_SOURCE_DIR} ${ZLIB_INCLUDE_DIR})
131 132

if(PNG_SHARED)
133
 add_library(${PNG_LIB_NAME} SHARED ${libpng_sources})
134
 target_link_libraries(${PNG_LIB_NAME} ${ZLIB_LIBRARY} ${M_LIBRARY})
135
endif(PNG_SHARED)
136 137 138 139 140
if(PNG_STATIC)
# does not work without changing name
 set(PNG_LIB_NAME_STATIC ${PNG_LIB_NAME}_static)
 add_library(${PNG_LIB_NAME_STATIC} STATIC ${libpng_sources})
endif(PNG_STATIC)
141

142
if(PNG_SHARED AND WIN32)
143
 set_target_properties(${PNG_LIB_NAME} PROPERTIES DEFINE_SYMBOL PNG_BUILD_DLL)
144
endif(PNG_SHARED AND WIN32)
145 146 147

if(PNG_TESTS)
# does not work with msvc due to png_lib_ver issue
148 149 150
 add_executable(pngtest ${pngtest_sources})
 target_link_libraries(pngtest ${PNG_LIB_NAME})
#  add_test(pngtest ${PNG_SOURCE_DIR}/pngtest.png)
151 152 153
endif(PNG_TESTS)


154 155
# CREATE PKGCONFIG FILES
# we use the same files like ./configure, so we have to set its vars
156 157
set(prefix      ${CMAKE_INSTALL_PREFIX})
set(exec_prefix ${CMAKE_INSTALL_PREFIX})
158 159 160
set(libdir      ${CMAKE_INSTALL_PREFIX}/lib)
set(includedir  ${CMAKE_INSTALL_PREFIX}/include)

161 162 163 164 165 166 167 168 169 170 171
configure_file(${PNG_SOURCE_DIR}/scripts/libpng.pc.in
  ${PNG_BINARY_DIR}/libpng.pc)
configure_file(${PNG_SOURCE_DIR}/scripts/libpng-config.in
  ${PNG_BINARY_DIR}/libpng-config)
configure_file(${PNG_SOURCE_DIR}/scripts/libpng.pc.in
  ${PNG_BINARY_DIR}/${PNGLIB_NAME}.pc)
configure_file(${PNG_SOURCE_DIR}/scripts/libpng-config.in
  ${PNG_BINARY_DIR}/${PNGLIB_NAME}-config)

# SET UP LINKS
set_target_properties(${PNG_LIB_NAME} PROPERTIES
172
#    VERSION 0.${PNGLIB_RELEASE}.1.2.25
173 174 175
     VERSION 0.${PNGLIB_RELEASE}.0
     SOVERSION 0
     CLEAN_DIRECT_OUTPUT 1)
176 177 178
if(NOT WIN32)
  # that's uncool on win32 - it overwrites our static import lib...
  set_target_properties(${PNG_LIB_NAME_STATIC} PROPERTIES
179 180
     OUTPUT_NAME ${PNG_LIB_NAME}
     CLEAN_DIRECT_OUTPUT 1)
181
endif(NOT WIN32)
182
# INSTALL
183 184 185 186 187
install_targets(/lib ${PNG_LIB_NAME})
if(PNG_STATIC)
  install_targets(/lib ${PNG_LIB_NAME_STATIC})
endif(PNG_STATIC)

188 189
install(FILES png.h pngconf.h         DESTINATION include)
install(FILES png.h pngconf.h         DESTINATION include/${PNGLIB_NAME})
190
install(FILES libpng.3 libpngpf.3             DESTINATION man/man3)
191
install(FILES png.5                           DESTINATION man/man5)
192
install(FILES ${PNG_BINARY_DIR}/libpng.pc     DESTINATION lib/pkgconfig)
193 194
install(FILES ${PNG_BINARY_DIR}/libpng-config      DESTINATION bin)
install(FILES ${PNG_BINARY_DIR}/${PNGLIB_NAME}.pc  DESTINATION lib/pkgconfig)
195 196
install(FILES ${PNG_BINARY_DIR}/${PNGLIB_NAME}-config DESTINATION bin)

197 198 199
# what's with libpng.txt and all the extra files?


200
# UNINSTALL
201 202 203
# do we need this?


204
# DIST
205 206 207 208 209
# do we need this?

# to create msvc import lib for mingw compiled shared lib
# pexports libpng.dll > libpng.def
# lib /def:libpng.def /machine:x86
210