CMakeLists.txt 7.0 KB
Newer Older
1
cmake_minimum_required(VERSION 2.4.3)
2 3 4 5 6 7 8 9
if(UNIX AND NOT DEFINED CMAKE_BUILD_TYPE)
   set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "Choose the type of
   build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug
   Release RelWithDebInfo MinSizeRel.")
endif()

project(PNG C)
enable_testing()
10

11
# Copyright (C) 2007 Glenn Randers-Pehrson
12

13
# This code is released under the libpng license.
14
# For conditions of distribution and use, see the disclaimer
15
# and license in png.h
16

17 18 19 20 21
set(PNGLIB_MAJOR 1)
set(PNGLIB_MINOR 4)
set(PNGLIB_RELEASE 0)
set(PNGLIB_NAME libpng${PNGLIB_MAJOR}${PNGLIB_MINOR})
set(PNGLIB_VERSION ${PNGLIB_MAJOR}.${PNGLIB_MINOR}.${PNGLIB_RELEASE})
22

23 24
set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)

25 26
# needed packages
find_package(ZLIB REQUIRED)
27 28
include_directories(${ZLIB_INCLUDE_DIR})

29 30 31 32 33 34 35 36
if(NOT WIN32)
 find_library(M_LIBRARY
     NAMES m
     PATHS /usr/lib /usr/local/lib
 )
 if(NOT M_LIBRARY)
   message(STATUS
     "math library 'libm' not found - floating point support disabled")
37 38
 endif()
else()
39 40
 # not needed on windows
 set(M_LIBRARY "")
41
endif()
42

43
# COMMAND LINE OPTIONS
44 45 46 47 48 49 50 51 52 53 54
if(DEFINED PNG_SHARED)
  option(PNG_SHARED "Build shared lib" ${PNG_SHARED})
else()
  option(PNG_SHARED "Build shared lib" ON)
endif()
if(DEFINED PNG_STATIC)
  option(PNG_STATIC "Build static lib" ${PNG_STATIC})
else()
  option(PNG_STATIC "Build static lib" ON)
endif()

55 56 57 58 59
if(MINGW)
  option(PNG_TESTS  "Build pngtest" NO)
else(MINGW)
  option(PNG_TESTS  "Build pngtest" YES)
endif(MINGW)
60

61 62
option(PNG_NO_CONSOLE_IO "FIXME" YES)
option(PNG_NO_STDIO      "FIXME" YES)
63
option(PNG_DEBUG         "Build with debug output" NO)
64
option(PNGARG            "FIXME" YES)
65 66 67
#TODO:
# PNG_CONSOLE_IO_SUPPORTED

68
# maybe needs improving, but currently I don't know when we can enable what :)
69 70
set(png_asm_tmp "OFF")
if(NOT WIN32)
71 72 73 74 75 76 77 78 79
 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)
80
else()
81 82 83 84 85
 # 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 "")
86
endif()
87

88
# SET LIBNAME
89
set(PNG_LIB_NAME png${PNGLIB_MAJOR}${PNGLIB_MINOR})
90 91 92 93 94

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


95
# OUR SOURCES
96
set(libpng_sources
97 98
 png.h
 pngconf.h
99
 pngpriv.h
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
 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
115 116
)
set(pngtest_sources
117
       pngtest.c
118
)
119
# SOME NEEDED DEFINITIONS
120
if(MSVC)
121
  add_definitions(-DPNG_NO_MODULEDEF -D_CRT_SECURE_NO_DEPRECATE)
122 123
endif(MSVC)

124 125 126 127
if(PNG_SHARED OR  NOT MSVC)
	#if building msvc static this has NOT do be defined
	add_definitions(-DZLIB_DLL)
endif()
128

129 130
if(PNG_CONSOLE_IO_SUPPORTED)
 add_definitions(-DPNG_CONSOLE_IO_SUPPORTED)
131
endif()
132 133 134

if(PNG_NO_CONSOLE_IO)
 add_definitions(-DPNG_NO_CONSOLE_IO)
135
endif()
136 137 138

if(PNG_NO_STDIO)
 add_definitions(-DPNG_NO_STDIO)
139
endif()
140 141 142

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

145
if(NOT M_LIBRARY AND NOT WIN32)
146
 add_definitions(-DPNG_NO_FLOATING_POINT_SUPPORTED)
147
endif()
148 149 150

# NOW BUILD OUR TARGET
include_directories(${PNG_SOURCE_DIR} ${ZLIB_INCLUDE_DIR})
151 152

if(PNG_SHARED)
153
 add_library(${PNG_LIB_NAME} SHARED ${libpng_sources})
154 155 156 157
 if(MSVC)
   # msvc does not append 'lib' - do it here to have consistent name
   set_target_properties(${PNG_LIB_NAME} PROPERTIES PREFIX "lib")
 endif()
158
 target_link_libraries(${PNG_LIB_NAME} ${ZLIB_LIBRARY} ${M_LIBRARY})
159 160
endif()

161 162 163 164
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})
165 166 167 168 169 170
 if(MSVC)
   # msvc does not append 'lib' - do it here to have consistent name
   set_target_properties(${PNG_LIB_NAME_STATIC} PROPERTIES PREFIX "lib")
 endif()
endif()

171 172

if(PNG_SHARED AND WIN32)
173
 set_target_properties(${PNG_LIB_NAME} PROPERTIES DEFINE_SYMBOL PNG_BUILD_DLL)
174
endif()
175

176
if(PNG_TESTS AND PNG_SHARED)
177
# does not work with msvc due to png_lib_ver issue
178 179
 add_executable(pngtest ${pngtest_sources})
 target_link_libraries(pngtest ${PNG_LIB_NAME})
180
 add_test(pngtest pngtest ${PNG_SOURCE_DIR}/pngtest.png)
181
endif()
182 183


184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200
# CREATE PKGCONFIG FILES
# we use the same files like ./configure, so we have to set its vars
set(prefix      ${CMAKE_INSTALL_PREFIX})
set(exec_prefix ${CMAKE_INSTALL_PREFIX})
set(libdir      ${CMAKE_INSTALL_PREFIX}/lib)
set(includedir  ${CMAKE_INSTALL_PREFIX}/include)

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
201 202
if(PNG_SHARED)
  set_target_properties(${PNG_LIB_NAME} PROPERTIES
203
#    VERSION 14.${PNGLIB_RELEASE}.1.4.0beta89
204 205
     VERSION 14.${PNGLIB_RELEASE}.0
     SOVERSION 14
206
     CLEAN_DIRECT_OUTPUT 1)
207
endif()
208
if(PNG_STATIC)
209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232
  if(NOT WIN32)
    # that's uncool on win32 - it overwrites our static import lib...
    set_target_properties(${PNG_LIB_NAME_STATIC} PROPERTIES
       OUTPUT_NAME ${PNG_LIB_NAME}
       CLEAN_DIRECT_OUTPUT 1)
  endif()
endif()

# INSTALL
if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL )
    if(PNG_SHARED)
        install(TARGETS ${PNG_LIB_NAME}
            RUNTIME DESTINATION bin
            LIBRARY DESTINATION lib
            ARCHIVE DESTINATION lib)
    endif()
    if(PNG_STATIC)
        install(TARGETS ${PNG_LIB_NAME_STATIC}
            LIBRARY DESTINATION lib
            ARCHIVE DESTINATION lib)
    endif()
endif()

if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL )
233 234 235 236 237 238
    install(FILES png.h pngconf.h pngpriv.h  DESTINATION include)
    install(FILES png.h pngconf.h pngpriv.h  DESTINATION include/${PNGLIB_NAME})
endif()
if(NOT SKIP_INSTALL_EXECUTABLES AND NOT SKIP_INSTALL_ALL )
    install(PROGRAMS ${PNG_BINARY_DIR}/libpng-config      DESTINATION bin)
    install(PROGRAMS ${PNG_BINARY_DIR}/${PNGLIB_NAME}-config DESTINATION bin)
239 240 241 242 243 244 245 246 247
endif()
if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL )
    install(FILES libpng.3 libpngpf.3             DESTINATION man/man3)
    install(FILES png.5                           DESTINATION man/man5)
    install(FILES ${PNG_BINARY_DIR}/libpng.pc     DESTINATION lib/pkgconfig)
    install(FILES ${PNG_BINARY_DIR}/libpng-config      DESTINATION bin)
    install(FILES ${PNG_BINARY_DIR}/${PNGLIB_NAME}.pc  DESTINATION lib/pkgconfig)
    install(FILES ${PNG_BINARY_DIR}/${PNGLIB_NAME}-config DESTINATION bin)
endif()
248

249 250 251
# what's with libpng.txt and all the extra files?


252
# UNINSTALL
253 254 255
# do we need this?


256
# DIST
257 258 259 260 261
# 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
262