/src/Image_LibPNG154/CMakeLists.txt

http://github.com/Akranar/daguerreo · CMake · 418 lines · 275 code · 47 blank · 96 comment · 36 complexity · e24aa402b0a236a04aac58f7dd931307 MD5 · raw file

  1. cmake_minimum_required(VERSION 2.4.4)
  2. set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)
  3. if(UNIX AND NOT DEFINED CMAKE_BUILD_TYPE)
  4. if(CMAKE_MAJOR_VERSION EQUAL 2 AND CMAKE_MINOR_VERSION EQUAL 4)
  5. # workaround CMake 2.4.x bug
  6. set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING
  7. "Choose the type of build, options are:
  8. None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used)
  9. Debug
  10. Release
  11. RelWithDebInfo
  12. MinSizeRel.")
  13. else()
  14. set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING
  15. "Choose the type of build, options are:
  16. None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used)
  17. Debug
  18. Release
  19. RelWithDebInfo
  20. MinSizeRel.")
  21. endif()
  22. endif()
  23. project(libpng C)
  24. enable_testing()
  25. # Copyright (C) 2007-2011 Glenn Randers-Pehrson
  26. # This code is released under the libpng license.
  27. # For conditions of distribution and use, see the disclaimer
  28. # and license in png.h
  29. set(PNGLIB_MAJOR 1)
  30. set(PNGLIB_MINOR 5)
  31. set(PNGLIB_RELEASE 4)
  32. set(PNGLIB_NAME libpng${PNGLIB_MAJOR}${PNGLIB_MINOR})
  33. set(PNGLIB_VERSION ${PNGLIB_MAJOR}.${PNGLIB_MINOR}.${PNGLIB_RELEASE})
  34. # needed packages
  35. ##Original:
  36. #find_package(ZLIB REQUIRED)
  37. #include_directories(${ZLIB_INCLUDE_DIR})
  38. ##Akranar Added Begin:
  39. SET(PNG_PROJECT_NAME Image_LibPNG154)
  40. SET(ZLIB_LIBRARY IO_ZLIB)
  41. SET(ZLIB_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../IO_ZLIB)
  42. SET(ZLIB_INCLUDE_DIR ${ZLIB_INCLUDE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/../IO_ZLIB)
  43. include_directories(${ZLIB_INCLUDE_DIR})
  44. SET(SKIP_INSTALL_ALL TRUE)
  45. ##Akranar Added End:
  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. # COMMAND LINE OPTIONS
  60. if(DEFINED PNG_SHARED)
  61. option(PNG_SHARED "Build shared lib" ${PNG_SHARED})
  62. else()
  63. option(PNG_SHARED "Build shared lib" OFF) #Akranar changed from ON to OFF
  64. endif()
  65. if(DEFINED PNG_STATIC)
  66. option(PNG_STATIC "Build static lib" ${PNG_STATIC})
  67. else()
  68. option(PNG_STATIC "Build static lib" ON)
  69. endif()
  70. ##Akranar Deleted Begin:
  71. #if(MINGW)
  72. # option(PNG_TESTS "Build pngtest" NO)
  73. #else()
  74. # option(PNG_TESTS "Build pngtest" YES)
  75. #endif()
  76. #
  77. #option(PNG_NO_CONSOLE_IO "FIXME" YES)
  78. #option(PNG_NO_STDIO "FIXME" YES)
  79. #option(PNG_DEBUG "Build with debug output" NO)
  80. #option(PNGARG "FIXME" YES)
  81. ##TODO:
  82. ## PNG_CONSOLE_IO_SUPPORTED
  83. #
  84. ## maybe needs improving, but currently I don't know when we can enable what :)
  85. #set(png_asm_tmp "OFF")
  86. #if(NOT WIN32)
  87. # find_program(uname_executable NAMES uname PATHS /bin /usr/bin /usr/local/bin)
  88. # if(uname_executable)
  89. # exec_program(${uname_executable}
  90. # ARGS --machine OUTPUT_VARIABLE uname_output)
  91. # if("uname_output" MATCHES "^.*i[1-9]86.*$")
  92. # set(png_asm_tmp "ON")
  93. # else("uname_output" MATCHES "^.*i[1-9]86.*$")
  94. # set(png_asm_tmp "OFF")
  95. # endif("uname_output" MATCHES "^.*i[1-9]86.*$")
  96. # endif(uname_executable)
  97. #else()
  98. # # this env var is normally only set on win64
  99. # set(TEXT "ProgramFiles(x86)")
  100. # if("$ENV{${TEXT}}" STREQUAL "")
  101. # set(png_asm_tmp "ON")
  102. # endif("$ENV{${TEXT}}" STREQUAL "")
  103. #endif()
  104. ##Akranar Delete End
  105. # SET LIBNAME
  106. set(PNG_LIB_NAME png${PNGLIB_MAJOR}${PNGLIB_MINOR})
  107. # to distinguish between debug and release lib
  108. set(CMAKE_DEBUG_POSTFIX "d")
  109. # Use the prebuilt pnglibconf.h file from the scripts folder
  110. configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.h.prebuilt
  111. ${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h)
  112. include_directories(${CMAKE_CURRENT_BINARY_DIR})
  113. # OUR SOURCES
  114. set(libpng_public_hdrs
  115. png.h
  116. pngconf.h
  117. ${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h
  118. )
  119. set(libpng_sources
  120. ${libpng_public_hdrs}
  121. pngdebug.h
  122. pnginfo.h
  123. pngpriv.h
  124. pngstruct.h
  125. png.c
  126. pngerror.c
  127. pngget.c
  128. pngmem.c
  129. pngpread.c
  130. pngread.c
  131. pngrio.c
  132. pngrtran.c
  133. pngrutil.c
  134. pngset.c
  135. pngtrans.c
  136. pngwio.c
  137. pngwrite.c
  138. pngwtran.c
  139. pngwutil.c
  140. )
  141. set(pngtest_sources
  142. pngtest.c
  143. )
  144. # SOME NEEDED DEFINITIONS
  145. add_definitions(-DPNG_CONFIGURE_LIBPNG)
  146. if(MSVC)
  147. add_definitions(-DPNG_NO_MODULEDEF -D_CRT_SECURE_NO_DEPRECATE)
  148. endif(MSVC)
  149. if(PNG_SHARED OR NOT MSVC)
  150. #if building msvc static this has NOT to be defined
  151. add_definitions(-DZLIB_DLL)
  152. endif()
  153. if(PNG_CONSOLE_IO_SUPPORTED)
  154. add_definitions(-DPNG_CONSOLE_IO_SUPPORTED)
  155. endif()
  156. if(PNG_NO_CONSOLE_IO)
  157. add_definitions(-DPNG_NO_CONSOLE_IO)
  158. endif()
  159. if(PNG_NO_STDIO)
  160. add_definitions(-DPNG_NO_STDIO)
  161. endif()
  162. if(PNG_DEBUG)
  163. add_definitions(-DPNG_DEBUG)
  164. endif()
  165. if(NOT M_LIBRARY AND NOT WIN32)
  166. add_definitions(-DPNG_NO_FLOATING_POINT_SUPPORTED)
  167. endif()
  168. # NOW BUILD OUR TARGET
  169. include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${ZLIB_INCLUDE_DIR})
  170. if(PNG_SHARED)
  171. add_library(${PNG_LIB_NAME} SHARED ${libpng_sources})
  172. if(MSVC)
  173. # msvc does not append 'lib' - do it here to have consistent name
  174. set_target_properties(${PNG_LIB_NAME} PROPERTIES PREFIX "lib")
  175. set_target_properties(${PNG_LIB_NAME} PROPERTIES IMPORT_PREFIX "lib")
  176. endif()
  177. target_link_libraries(${PNG_LIB_NAME} ${ZLIB_LIBRARY} ${M_LIBRARY})
  178. endif()
  179. if(PNG_STATIC)
  180. # does not work without changing name
  181. ##Original:
  182. # set(PNG_LIB_NAME_STATIC ${PNG_LIB_NAME}_static)
  183. # add_library(${PNG_LIB_NAME_STATIC} STATIC ${libpng_sources})
  184. # if(MSVC)
  185. # # msvc does not append 'lib' - do it here to have consistent name
  186. # set_target_properties(${PNG_LIB_NAME_STATIC} PROPERTIES PREFIX "lib")
  187. # endif()
  188. # target_link_libraries(${PNG_LIB_NAME_STATIC} ${ZLIB_LIBRARY} ${M_LIBRARY})
  189. ##Akranar Change Begin:
  190. SET(PNG_LIB_NAME_STATIC ${PNG_PROJECT_NAME})
  191. ADD_LIBRARY(${PNG_LIB_NAME_STATIC} STATIC ${libpng_sources})
  192. ##Akranar Change End:
  193. endif()
  194. if(PNG_SHARED AND WIN32)
  195. set_target_properties(${PNG_LIB_NAME} PROPERTIES DEFINE_SYMBOL PNG_BUILD_DLL)
  196. endif()
  197. if(PNG_TESTS AND PNG_SHARED)
  198. # does not work with msvc due to png_lib_ver issue
  199. add_executable(pngtest ${pngtest_sources})
  200. target_link_libraries(pngtest ${PNG_LIB_NAME})
  201. add_test(pngtest ./pngtest ${CMAKE_CURRENT_SOURCE_DIR}/pngtest.png)
  202. endif()
  203. #
  204. # Set a variable with CMake code which:
  205. # Creates a symlink from src to dest (if possible) or alternatively
  206. # copies if different.
  207. macro(_png_generate_symlink_code CODE SRC DEST)
  208. if(WIN32 AND NOT CYGWIN)
  209. set(_png_gsc_message "Copying ${SRC} to ${DEST} if needed")
  210. set(_png_gsc_operation "copy_if_different")
  211. else()
  212. set(_png_gsc_message "Symlinking ${SRC} to ${DEST}")
  213. set(_png_gsc_operation "create_symlink")
  214. endif()
  215. set(${CODE} "
  216. message(STATUS \"${_png_gsc_message}\")
  217. execute_process(COMMAND \${CMAKE_COMMAND} -E ${_png_gsc_operation}
  218. \"${SRC}\" \"${DEST}\")
  219. ")
  220. endmacro()
  221. # CREATE PKGCONFIG FILES
  222. # we use the same files like ./configure, so we have to set its vars
  223. if(NOT DEFINED CMAKE_INSTALL_LIBDIR)
  224. set(CMAKE_INSTALL_LIBDIR lib)
  225. endif(NOT DEFINED CMAKE_INSTALL_LIBDIR)
  226. set(prefix ${CMAKE_INSTALL_PREFIX})
  227. set(exec_prefix ${CMAKE_INSTALL_PREFIX})
  228. set(libdir ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR})
  229. set(includedir ${CMAKE_INSTALL_PREFIX}/include)
  230. set(LIBS "-lz -lm")
  231. configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libpng.pc.in
  232. ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}.pc @ONLY)
  233. _png_generate_symlink_code(PNG_PC_INSTALL_CODE
  234. ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}.pc
  235. ${CMAKE_CURRENT_BINARY_DIR}/libpng.pc)
  236. install(CODE ${PNG_PC_INSTALL_CODE})
  237. configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libpng-config.in
  238. ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config @ONLY)
  239. _png_generate_symlink_code(PNG_CONFIG_INSTALL_CODE
  240. ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config
  241. ${CMAKE_CURRENT_BINARY_DIR}/libpng-config)
  242. install(CODE ${PNG_CONFIG_INSTALL_CODE})
  243. # SET UP LINKS
  244. if(PNG_SHARED)
  245. set_target_properties(${PNG_LIB_NAME} PROPERTIES
  246. # VERSION 15.${PNGLIB_RELEASE}.1.5.4
  247. VERSION 15.${PNGLIB_RELEASE}.0
  248. SOVERSION 15
  249. CLEAN_DIRECT_OUTPUT 1)
  250. endif()
  251. if(PNG_STATIC)
  252. # MSVC doesn't use a different file extension for shared vs. static
  253. # libs. We are able to change OUTPUT_NAME to remove the _static
  254. # for all other platforms.
  255. if(NOT MSVC)
  256. set_target_properties(${PNG_LIB_NAME_STATIC} PROPERTIES
  257. OUTPUT_NAME ${PNG_LIB_NAME}
  258. CLEAN_DIRECT_OUTPUT 1)
  259. endif()
  260. endif()
  261. # If CMake > 2.4.x, we set a variable used below to export
  262. # targets to an export file.
  263. # TODO: Use VERSION_GREATER after our cmake_minimum_required >= 2.6.2
  264. if(CMAKE_MAJOR_VERSION GREATER 1 AND CMAKE_MINOR_VERSION GREATER 4)
  265. set(PNG_EXPORT_RULE EXPORT libpng)
  266. elseif(CMAKE_MAJOR_VERSION GREATER 2) # future proof
  267. set(PNG_EXPORT_RULE EXPORT libpng)
  268. endif()
  269. # INSTALL
  270. if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL )
  271. if(PNG_SHARED)
  272. install(TARGETS ${PNG_LIB_NAME}
  273. ${PNG_EXPORT_RULE}
  274. RUNTIME DESTINATION bin
  275. LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  276. ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
  277. # Create a symlink for libpng.dll.a => libpng15.dll.a on Cygwin
  278. if(CYGWIN)
  279. _png_generate_symlink_code(PNG_SHARED_IMPLIB_INSTALL_CODE
  280. ${PNGLIB_NAME}${CMAKE_IMPORT_LIBRARY_SUFFIX}
  281. libpng${CMAKE_IMPORT_LIBRARY_SUFFIX})
  282. install(CODE ${PNG_SHARED_IMPLIB_INSTALL_CODE})
  283. install(FILES
  284. ${CMAKE_CURRENT_BINARY_DIR}/libpng${CMAKE_IMPORT_LIBRARY_SUFFIX}
  285. DESTINATION ${CMAKE_INSTALL_LIBDIR})
  286. endif()
  287. if(NOT WIN32)
  288. IF(CMAKE_LIBRARY_OUTPUT_DIRECTORY)
  289. _png_generate_symlink_code(PNG_SHARED_INSTALL_CODE
  290. ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${PNGLIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}
  291. ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libpng${CMAKE_SHARED_LIBRARY_SUFFIX})
  292. install(CODE ${PNG_SHARED_INSTALL_CODE})
  293. install(FILES
  294. ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libpng${CMAKE_SHARED_LIBRARY_SUFFIX}
  295. DESTINATION ${CMAKE_INSTALL_LIBDIR})
  296. ELSE(CMAKE_LIBRARY_OUTPUT_DIRECTORY)
  297. _png_generate_symlink_code(PNG_SHARED_INSTALL_CODE
  298. ${PNGLIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}
  299. libpng${CMAKE_SHARED_LIBRARY_SUFFIX})
  300. install(CODE ${PNG_SHARED_INSTALL_CODE})
  301. install(FILES
  302. ${CMAKE_CURRENT_BINARY_DIR}/libpng${CMAKE_SHARED_LIBRARY_SUFFIX}
  303. DESTINATION ${CMAKE_INSTALL_LIBDIR})
  304. ENDIF(CMAKE_LIBRARY_OUTPUT_DIRECTORY)
  305. endif()
  306. endif()
  307. if(PNG_STATIC)
  308. install(TARGETS ${PNG_LIB_NAME_STATIC}
  309. ${PNG_EXPORT_RULE}
  310. LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  311. ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
  312. if(NOT WIN32 OR CYGWIN)
  313. IF(CMAKE_ARCHIVE_OUTPUT_DIRECTORY)
  314. _png_generate_symlink_code(PNG_STATIC_INSTALL_CODE
  315. ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}/${PNGLIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}
  316. ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}/libpng${CMAKE_STATIC_LIBRARY_SUFFIX})
  317. install(CODE ${PNG_STATIC_INSTALL_CODE})
  318. install(FILES
  319. ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}/libpng${CMAKE_STATIC_LIBRARY_SUFFIX}
  320. DESTINATION ${CMAKE_INSTALL_LIBDIR})
  321. ELSE(CMAKE_ARCHIVE_OUTPUT_DIRECTORY)
  322. _png_generate_symlink_code(PNG_STATIC_INSTALL_CODE
  323. ${PNGLIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}
  324. libpng${CMAKE_STATIC_LIBRARY_SUFFIX})
  325. install(CODE ${PNG_STATIC_INSTALL_CODE})
  326. install(FILES
  327. ${CMAKE_CURRENT_BINARY_DIR}/libpng${CMAKE_STATIC_LIBRARY_SUFFIX}
  328. DESTINATION ${CMAKE_INSTALL_LIBDIR})
  329. ENDIF(CMAKE_ARCHIVE_OUTPUT_DIRECTORY)
  330. endif()
  331. endif()
  332. endif()
  333. if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL )
  334. install(FILES ${libpng_public_hdrs} DESTINATION include)
  335. install(FILES ${libpng_public_hdrs} DESTINATION include/${PNGLIB_NAME})
  336. endif()
  337. if(NOT SKIP_INSTALL_EXECUTABLES AND NOT SKIP_INSTALL_ALL )
  338. install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng-config DESTINATION bin)
  339. install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config
  340. DESTINATION bin)
  341. endif()
  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. install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng.pc
  351. DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
  352. install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng-config
  353. DESTINATION bin)
  354. install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}.pc
  355. DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
  356. install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config
  357. DESTINATION bin)
  358. endif()
  359. # On versions of CMake that support it, create an export file CMake
  360. # users can include() to import our targets
  361. if(PNG_EXPORT_RULE AND NOT SKIP_INSTALL_EXPORT AND NOT SKIP_INSTALL_ALL )
  362. install(EXPORT libpng DESTINATION lib/libpng FILE lib${PNG_LIB_NAME}.cmake)
  363. endif()
  364. # what's with libpng-$VER%.txt and all the extra files?
  365. # UNINSTALL
  366. # do we need this?
  367. # DIST
  368. # do we need this?
  369. # to create msvc import lib for mingw compiled shared lib
  370. # pexports libpng.dll > libpng.def
  371. # lib /def:libpng.def /machine:x86