Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. # Main CMakeLists.txt to build the OpenJPEG project using CMake (www.cmake.org)
  2. # Written by Mathieu Malaterre
  3.  
  4. # This CMake project will by default create a library called openjpeg
  5. # But if you want to use this project within your own (CMake) project
  6. # you will eventually like to prefix the library to avoid linking confusion
  7. # For this purpose you can define a CMake var: OPENJPEG_NAMESPACE to whatever you like
  8. # e.g.:
  9. # SET(OPENJPEG_NAMESPACE "GDCMOPENJPEG")
  10. CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
  11.  
  12. IF(COMMAND CMAKE_POLICY)
  13.   CMAKE_POLICY(SET CMP0003 NEW)
  14. ENDIF(COMMAND CMAKE_POLICY)
  15.  
  16. IF(NOT OPENJPEG_NAMESPACE)
  17.   SET(OPENJPEG_NAMESPACE "OPENJPEG")
  18.   SET(OPENJPEG_STANDALONE 1)
  19. ENDIF(NOT OPENJPEG_NAMESPACE)
  20. # In all cases:
  21. STRING(TOLOWER ${OPENJPEG_NAMESPACE} OPENJPEG_LIBRARY_NAME)
  22.  
  23. PROJECT(${OPENJPEG_NAMESPACE} C)
  24.  
  25. # Do full dependency headers.
  26. INCLUDE_REGULAR_EXPRESSION("^.*$")
  27.  
  28. #-----------------------------------------------------------------------------
  29. # OPENJPEG version number, useful for packaging and doxygen doc:
  30. SET(OPENJPEG_VERSION_MAJOR 1)
  31. SET(OPENJPEG_VERSION_MINOR 4)
  32. SET(OPENJPEG_VERSION_BUILD 0)
  33. SET(OPENJPEG_VERSION
  34.   "${OPENJPEG_VERSION_MAJOR}.${OPENJPEG_VERSION_MINOR}.${OPENJPEG_VERSION_BUILD}")
  35. SET(PACKAGE_VERSION
  36.   "${OPENJPEG_VERSION_MAJOR}.${OPENJPEG_VERSION_MINOR}.${OPENJPEG_VERSION_BUILD}")
  37. # This setting of SOVERSION assumes that any API change
  38. # will increment either the minor or major version number of openjpeg
  39. SET(OPENJPEG_LIBRARY_PROPERTIES
  40.   VERSION   "${OPENJPEG_VERSION_MAJOR}.${OPENJPEG_VERSION_MINOR}.${OPENJPEG_VERSION_BUILD}"
  41.   SOVERSION "${OPENJPEG_VERSION_MAJOR}.${OPENJPEG_VERSION_MINOR}"
  42. )
  43. # You will also need to define a value for the following variables:
  44. # OPENJPEG_INSTALL_BIN_DIR          - binary dir (executables)
  45. # OPENJPEG_INSTALL_LIB_DIR          - library dir (libs)
  46. # OPENJPEG_INSTALL_DATA_DIR         - share dir (say, examples, data, etc)
  47. # OPENJPEG_INSTALL_INCLUDE_DIR      - include dir (headers)
  48.  
  49.  
  50. # On Visual Studio 8 MS deprecated C. This removes all 1.276E1265 security
  51. # warnings
  52. IF(WIN32)
  53.   IF(NOT BORLAND)
  54.     IF(NOT CYGWIN)
  55.       IF(NOT MINGW)
  56.         IF(NOT ITK_ENABLE_VISUAL_STUDIO_DEPRECATED_C_WARNINGS)
  57.           ADD_DEFINITIONS(
  58.             -D_CRT_FAR_MAPPINGS_NO_DEPRECATE
  59.             -D_CRT_IS_WCTYPE_NO_DEPRECATE
  60.             -D_CRT_MANAGED_FP_NO_DEPRECATE
  61.             -D_CRT_NONSTDC_NO_DEPRECATE
  62.             -D_CRT_SECURE_NO_DEPRECATE
  63.             -D_CRT_SECURE_NO_DEPRECATE_GLOBALS
  64.             -D_CRT_SETERRORMODE_BEEP_SLEEP_NO_DEPRECATE
  65.             -D_CRT_TIME_FUNCTIONS_NO_DEPRECATE
  66.             -D_CRT_VCCLRIT_NO_DEPRECATE
  67.             -D_SCL_SECURE_NO_DEPRECATE
  68.             )
  69.         ENDIF(NOT ITK_ENABLE_VISUAL_STUDIO_DEPRECATED_C_WARNINGS)
  70.       ENDIF(NOT MINGW)
  71.     ENDIF(NOT CYGWIN)
  72.   ENDIF(NOT BORLAND)
  73. ENDIF(WIN32)
  74.  
  75.  
  76. # --------------------------------------------------------------------------
  77. # Install directories
  78.  
  79. STRING(TOLOWER ${PROJECT_NAME} projectname)
  80. SET(subdir "${projectname}-${OPENJPEG_VERSION_MAJOR}.${OPENJPEG_VERSION_MINOR}")
  81.  
  82. IF(NOT OPENJPEG_INSTALL_BIN_DIR)
  83.   SET(OPENJPEG_INSTALL_BIN_DIR "bin")
  84. ENDIF(NOT OPENJPEG_INSTALL_BIN_DIR)
  85.  
  86. IF(NOT OPENJPEG_INSTALL_LIB_DIR)
  87.   SET(OPENJPEG_INSTALL_LIB_DIR "lib")
  88. ENDIF(NOT OPENJPEG_INSTALL_LIB_DIR)
  89.  
  90. IF(NOT OPENJPEG_INSTALL_DATA_DIR)
  91.   SET(OPENJPEG_INSTALL_DATA_DIR "share/${subdir}")
  92. ENDIF(NOT OPENJPEG_INSTALL_DATA_DIR)
  93.  
  94. IF(NOT OPENJPEG_INSTALL_INCLUDE_DIR)
  95.   SET(OPENJPEG_INSTALL_INCLUDE_DIR "include/")
  96. ENDIF(NOT OPENJPEG_INSTALL_INCLUDE_DIR)
  97.  
  98. IF(NOT OPENJPEG_INSTALL_MAN_DIR)
  99.   SET(OPENJPEG_INSTALL_MAN_DIR "share/man/")
  100. ENDIF(NOT OPENJPEG_INSTALL_MAN_DIR)
  101.  
  102. IF(NOT OPENJPEG_INSTALL_DOC_DIR)
  103.   SET(OPENJPEG_INSTALL_DOC_DIR "share/doc/${subdir}")
  104. ENDIF(NOT OPENJPEG_INSTALL_DOC_DIR)
  105.  
  106. IF(NOT OPENJPEG_INSTALL_PACKAGE_DIR)
  107.   SET(OPENJPEG_INSTALL_PACKAGE_DIR ${OPENJPEG_INSTALL_LIB_DIR}/${subdir}
  108.     CACHE INTERNAL "")
  109. ENDIF(NOT OPENJPEG_INSTALL_PACKAGE_DIR)
  110.  
  111. #-----------------------------------------------------------------------------
  112. # Test for some required system information.
  113. INCLUDE (${CMAKE_ROOT}/Modules/CMakeBackwardCompatibilityC.cmake)
  114.  
  115. #-----------------------------------------------------------------------------
  116. # Test for getopt being available in this system
  117. INCLUDE (${PROJECT_SOURCE_DIR}/CMake/CheckHaveGetopt.cmake )
  118.  
  119. #-----------------------------------------------------------------------------
  120. # Setup file for setting custom ctest vars
  121. CONFIGURE_FILE(
  122.   ${CMAKE_CURRENT_SOURCE_DIR}/CMake/CTestCustom.cmake.in
  123.   ${CMAKE_CURRENT_BINARY_DIR}/CTestCustom.cmake
  124.   @ONLY
  125.   )
  126.  
  127. #-----------------------------------------------------------------------------
  128. # OpenJPEG build configuration options.
  129. OPTION(BUILD_SHARED_LIBS "Build OpenJPEG shared library and link executables against it." ON)
  130.  
  131. #-----------------------------------------------------------------------------
  132. SET (EXECUTABLE_OUTPUT_PATH ${OPENJPEG_BINARY_DIR}/bin CACHE PATH "Single output directory for building all executables.")
  133. SET (LIBRARY_OUTPUT_PATH ${OPENJPEG_BINARY_DIR}/bin CACHE PATH "Single output directory for building all libraries.")
  134. MARK_AS_ADVANCED(LIBRARY_OUTPUT_PATH EXECUTABLE_OUTPUT_PATH)
  135.  
  136.  
  137. # configure name mangling to allow multiple libraries to coexist
  138. # peacefully
  139. IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/openjpeg_mangle.h.in)
  140. SET(MANGLE_PREFIX ${OPENJPEG_LIBRARY_NAME})
  141. CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/openjpeg_mangle.h.in
  142.                ${CMAKE_CURRENT_BINARY_DIR}/openjpeg_mangle.h
  143.                @ONLY IMMEDIATE)
  144. ENDIF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/openjpeg_mangle.h.in)
  145.  
  146. #-----------------------------------------------------------------------------
  147. # Always build the library
  148. INCLUDE_DIRECTORIES(BEFORE ${CMAKE_CURRENT_BINARY_DIR})
  149. SUBDIRS(libopenjpeg)
  150.  
  151. #-----------------------------------------------------------------------------
  152. # Build CODEC executables ?
  153. OPTION(BUILD_CODEC "Build the CODEC executables" ON)
  154. IF(BUILD_CODEC)
  155.   SUBDIRS(codec)
  156. ENDIF(BUILD_CODEC)
  157.  
  158. #-----------------------------------------------------------------------------
  159. # Build MJ2 executables ?
  160. OPTION(BUILD_MJ2 "Build the MJ2 executables." OFF)
  161. IF(BUILD_MJ2)
  162.   SUBDIRS(mj2)
  163. ENDIF(BUILD_MJ2)
  164.  
  165. #-----------------------------------------------------------------------------
  166. # Build JPWL executables ?
  167. OPTION(BUILD_JPWL "Build the JPWL executables" OFF)
  168. IF(BUILD_JPWL)
  169.   SUBDIRS(jpwl)
  170. ENDIF(BUILD_JPWL)
  171.  
  172. #-----------------------------------------------------------------------------
  173. # Build JP3D executables ?
  174. OPTION(BUILD_JP3D "Build the JP3D executables" OFF)
  175. IF(BUILD_JP3D)
  176.   SUBDIRS(jp3d)
  177. ENDIF(BUILD_JP3D)
  178.  
  179. #-----------------------------------------------------------------------------
  180. # Build INDEXER_JPIP executables ?
  181. OPTION(BUILD_INDEXER_JPIP "Build the INDEXER_JPIP executables" OFF)
  182. IF(BUILD_INDEXER_JPIP AND NOT UNIX)
  183.   SUBDIRS(indexer_JPIP)
  184. ENDIF(BUILD_INDEXER_JPIP AND NOT UNIX)
  185.  
  186. #-----------------------------------------------------------------------------
  187. # Build DOCUMENTATION ?
  188. OPTION(BUILD_DOC "Build the doxygen documentation" OFF)
  189. IF(BUILD_DOC)
  190.   SUBDIRS(doc)
  191. ENDIF(BUILD_DOC)
  192.  
  193. #-----------------------------------------------------------------------------
  194. # For openjpeg team if they ever want CDash+CMake
  195. OPTION(BUILD_TESTING "Build the tests." OFF)
  196. IF(BUILD_TESTING)
  197.   ENABLE_TESTING()
  198.   INCLUDE(CTest)
  199. ENDIF(BUILD_TESTING)
  200.  
  201. # Adding test with dataset from:
  202. # http://www.crc.ricoh.com/~gormish/jpeg2000conformance/
  203. # -> wget http://www.crc.ricoh.com/~gormish/jpeg2000conformance/j2kp4files_v1_5.zip
  204. # http://www.jpeg.org/jpeg2000guide/testimages/testimages.html
  205. #-----------------------------------------------------------------------------
  206. # Adding JPEG2000_CONFORMANCE_DATA_ROOT
  207. FIND_PATH(JPEG2000_CONFORMANCE_DATA_ROOT testimages.html
  208.   ${OPENJPEG_SOURCE_DIR}/../jpeg2000testimages
  209.   $ENV{JPEG2000_CONFORMANCE_DATA_ROOT}
  210. )
  211.  
  212. #-----------------------------------------------------------------------------
  213. # Compiler specific flags:
  214. IF(CMAKE_COMPILER_IS_GNUCC)
  215.   # For all builds, make sure openjpeg is std99 compliant:
  216.   # SET(CMAKE_C_FLAGS "-Wall -std=c99 ${CMAKE_C_FLAGS}") # FIXME: this setting prevented us from setting a coverage build.
  217.   # Do not use ffast-math for all build, it would produce incorrect results, only set for release:
  218.   SET(CMAKE_C_FLAGS_RELEASE "-ffast-math ${CMAKE_C_FLAGS_RELEASE}")
  219. ENDIF(CMAKE_COMPILER_IS_GNUCC)
  220.  
  221. # install all targets referenced as OPENJPEGTargets
  222. install(EXPORT OpenJPEGTargets DESTINATION ${OPENJPEG_INSTALL_PACKAGE_DIR})
  223. CONFIGURE_FILE( ${OPENJPEG_SOURCE_DIR}/CMake/OpenJPEGConfig.cmake.in
  224.   ${OPENJPEG_BINARY_DIR}/OpenJPEGConfig.cmake
  225.   @ONLY
  226. )
  227. INSTALL( FILES ${OPENJPEG_BINARY_DIR}/OpenJPEGConfig.cmake
  228.   DESTINATION ${OPENJPEG_INSTALL_PACKAGE_DIR}
  229. )
  230. # install CHANGES and LICENSE
  231. INSTALL(
  232.   FILES       CHANGES
  233.               LICENSE
  234.   DESTINATION ${OPENJPEG_INSTALL_DOC_DIR})
  235. #
  236. IF(UNIX OR CYGWIN)
  237.   SET(CMAKE_INCLUDE_PATH /usr/include /usr/local/include /opt/include
  238.         /opt/local/include /usr/include/libpng /usr/include/libpng14
  239.         /usr/include/libpng12 /usr/local/include/libpng
  240.         /usr/local/include/libpng14 /usr/local/include/libpng12
  241.         /opt/include/libpng /opt/include/libpng14 /opt/include/libpng12
  242.         /opt/local/include/libpng /opt/local/include/libpng14
  243.         /opt/local/include/libpng12 )
  244.   SET(CMAKE_LIBRARY_PATH /usr/lib /usr/local/lib /opt/lib /opt/local/lib)
  245. ELSEIF(WIN32)
  246.   SET(CMAKE_INCLUDE_PATH ${OPENJPEG_SOURCE_DIR}/libs/libtiff
  247.         ${OPENJPEG_SOURCE_DIR}/libs/png ${OPENJPEG_SOURCE_DIR}/libs/lcms2
  248.         C:/WINDOWS/system32/user )
  249.   SET(CMAKE_LIBRARY_PATH ${OPENJPEG_SOURCE_DIR}/libs/libtiff
  250.         ${OPENJPEG_SOURCE_DIR}/libs/png ${OPENJPEG_SOURCE_DIR}/libs/lcms2
  251.         C:/WINDOWS/system32/user )
  252. ENDIF()
  253. #
  254. FIND_FILE(HAVE_STRINGS_H_FOUND strings.h)
  255. IF(NOT HAVE_STRINGS_H_FOUND STREQUAL "HAVE_STRINGS_H_FOUND-NOTFOUND")
  256.   FIND_FILE(HAVE_STRINGS_H strings.h)
  257.   SET(HAS_STRINGS_H 1)
  258. ENDIF()
  259. FIND_FILE(HAVE_INTTYPES_H_FOUND inttypes.h)
  260. IF(NOT HAVE_INTTYPES_H_FOUND STREQUAL "HAVE_INTTYPES_H_FOUND-NOTFOUND")
  261.   FIND_FILE(HAVE_INTTYPES_H inttypes.h)
  262.   SET(HAS_INTTYPES_H 1)
  263. ENDIF()
  264. FIND_FILE(HAVE_MEMORY_H_FOUND memory.h)
  265. IF(NOT HAVE_MEMORY_H_FOUND STREQUAL "HAVE_MEMORY_H_FOUND-NOTFOUND")
  266.   FIND_FILE(HAVE_MEMORY_H memory.h)
  267.   SET(HAS_MEMORY_H 1)
  268. ENDIF()
  269. FIND_FILE(HAVE_STDINT_H_FOUND stdint.h)
  270. IF(NOT HAVE_STDINT_H_FOUND STREQUAL "HAVE_STDINT_H_FOUND-NOTFOUND")
  271.   FIND_FILE(HAVE_STDINT_H stdint.h)
  272.   SET(HAS_STDINT_H 1)
  273. ENDIF()
  274. FIND_FILE(HAVE_STDLIB_H_FOUND stdlib.h)
  275. IF(NOT HAVE_STDLIB_H_FOUND STREQUAL "HAVE_STDLIB_H_FOUND-NOTFOUND")
  276.   FIND_FILE(HAVE_STDLIB_H stdlib.h)
  277.   SET(HAS_STDLIB_H 1)
  278. ENDIF()
  279. FIND_FILE(HAVE_STRING_H_FOUND string.h)
  280. IF(NOT HAVE_STRING_H_FOUND STREQUAL "HAVE_STRING_H_FOUND-NOTFOUND")
  281.   FIND_FILE(HAVE_STRING_H string.h)
  282.   SET(HAS_STRING_H 1)
  283. ENDIF()
  284. FIND_FILE(HAVE_SYS_STAT_H_FOUND sys/stat.h)
  285. IF(NOT HAVE_SYS_STAT_H_FOUND STREQUAL "HAVE_SYS_STAT_H_FOUND-NOTFOUND")
  286.   FIND_FILE(HAVE_SYS_STAT_H sys/stat.h)
  287.   SET(HAS_SYS_STAT_H 1)
  288. ENDIF()
  289. FIND_FILE(HAVE_SYS_TYPES_H_FOUND sys/types.h)
  290. IF(NOT HAVE_SYS_TYPES_H_FOUND STREQUAL "HAVE_SYS_TYPES_H_FOUND-NOTFOUND")
  291.   FIND_FILE(HAVE_SYS_TYPES_H sys/types.h)
  292.   SET(HAS_SYS_TYPES_H 1)
  293. ENDIF()
  294. FIND_FILE(HAVE_UNISTD_H_FOUND unistd.h)
  295. IF(NOT HAVE_UNISTD_H_FOUND STREQUAL "HAVE_UNISTD_H_FOUND-NOTFOUND")
  296.   FIND_FILE(HAVE_UNISTD_H unistd.h)
  297.   SET(HAS_UNISTD_H 1)
  298. ENDIF()
  299. #
  300. # Does the system have png library installed ?
  301. #
  302. FIND_PACKAGE(PNG)
  303. #
  304. IF(PNG_FOUND)
  305.   SET(HAVE_PNG_H 1)
  306.   SET(HAVE_LIBPNG 1)
  307. ENDIF()
  308. #
  309. # Does the system have tiff library installed ?
  310. #
  311. FIND_PACKAGE(TIFF)
  312. #
  313. IF(TIFF_FOUND)
  314.   SET(HAVE_TIFF_H 1)
  315.   SET(HAVE_LIBTIFF 1)
  316. ENDIF()
  317. #
  318. #
  319. # Does the system have lcms library installed ?
  320. #
  321. SET(LCMS_LIB "")
  322. FIND_FILE(LCMS2_HEADER_FOUND lcms2.h)
  323. #
  324. IF(LCMS2_HEADER_FOUND STREQUAL "LCMS2_HEADER_FOUND-NOTFOUND")
  325.  SET(LCMS2_HEADER_FOUND "")
  326. ENDIF()
  327. IF(LCMS2_HEADER_FOUND)
  328.  FIND_PATH(LCMS_INCLUDE_DIR  lcms2.h)
  329.  IF(UNIX OR CYGWIN)
  330.    FIND_LIBRARY(HAVE_LIBLCMS2 lcms2)
  331.  ELSE()
  332.    FIND_LIBRARY(HAVE_LIBLCMS2 lcms2_static.lib)
  333.  ENDIF()
  334.  IF(HAVE_LIBLCMS2 STREQUAL "HAVE_LIBLCMS2-NOTFOUND")
  335.   SET(HAVE_LIBLCMS2 "")
  336.  ENDIF()
  337.  IF(HAVE_LIBLCMS2)
  338.   SET(LCMS_LIB "${HAVE_LIBLCMS2}")
  339.   SET(HAVE_LCMS2_LIB 1)
  340.   SET(HAVE_LCMS2_H 1)
  341.  ENDIF()
  342. ENDIF()
  343. IF(NOT LCMS2_HEADER_FOUND)
  344.  FIND_FILE(LCMS1_HEADER_FOUND lcms.h)
  345.  IF(LCMS1_HEADER_FOUND STREQUAL "LCMS1_HEADER_FOUND-NOTFOUND")
  346.   SET(LCMS1_HEADER_FOUND "")
  347.  ENDIF()
  348.  IF(LCMS1_HEADER_FOUND)
  349.   FIND_PATH(LCMS_INCLUDE_DIR  lcms.h)
  350.   FIND_LIBRARY(HAVE_LIBLCMS1 lcms)
  351.   IF(HAVE_LIBLCMS1 STREQUAL "HAVE_LIBLCMS1-NOTFOUND")
  352.    SET(HAVE_LIBLCMS1 "")
  353.   ENDIF()
  354.   IF(HAVE_LIBLCMS1)
  355.    SET(LCMS_LIB "${HAVE_LIBLCMS1}")
  356.    SET(HAVE_LCMS1_LIB 1)
  357.    SET(HAVE_LCMS1_H 1)
  358.   ENDIF()
  359.  ENDIF()
  360. ENDIF()
  361. #
  362. # generate opj_config.h
  363. CONFIGURE_FILE("${OPENJPEG_SOURCE_DIR}/opj_configh.cmake.in"
  364.   "${OPENJPEG_BINARY_DIR}/opj_config.h"
  365.   @ONLY
  366. )
  367.  
  368.