X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=CMakeLists.txt;h=72f985f6596a504df53441f71f495bff5e90557c;hb=ff1a30d80a8b9817f00656173a2a883bb47ffaee;hp=df1230e7a1d49948cb04a58b31dd058d83c0a7a3;hpb=4619a94ebfe4af25f3fd95074b02b7d8ad50ac88;p=openjpeg.git diff --git a/CMakeLists.txt b/CMakeLists.txt index df1230e7..72f985f6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,121 +6,346 @@ # you will eventually like to prefix the library to avoid linking confusion # For this purpose you can define a CMake var: OPENJPEG_NAMESPACE to whatever you like # e.g.: -# SET(OPENJPEG_NAMESPACE "GDCMOPENJPEG") -CMAKE_MINIMUM_REQUIRED(VERSION 2.4) +# set(OPENJPEG_NAMESPACE "GDCMOPENJPEG") +cmake_minimum_required(VERSION 2.8.2) -IF(NOT OPENJPEG_NAMESPACE) - SET(OPENJPEG_NAMESPACE "OPENJPEG") - SET(OPENJPEG_STANDALONE 1) -ENDIF(NOT OPENJPEG_NAMESPACE) +if(COMMAND CMAKE_POLICY) + cmake_policy(SET CMP0003 NEW) +endif() + +if(NOT OPENJPEG_NAMESPACE) + set(OPENJPEG_NAMESPACE "OPENJPEG") + set(OPENJPEG_STANDALONE 1) +endif() # In all cases: -STRING(TOLOWER ${OPENJPEG_NAMESPACE} OPENJPEG_LIBRARY_NAME) +#string(TOLOWER ${OPENJPEG_NAMESPACE} OPENJPEG_LIBRARY_NAME) +set(OPENJPEG_LIBRARY_NAME openjp2) -PROJECT(${OPENJPEG_NAMESPACE} C) +project(${OPENJPEG_NAMESPACE} C) # Do full dependency headers. -INCLUDE_REGULAR_EXPRESSION("^.*$") +include_regular_expression("^.*$") #----------------------------------------------------------------------------- # OPENJPEG version number, useful for packaging and doxygen doc: -SET(OPENJPEG_VERSION_MAJOR 1) -SET(OPENJPEG_VERSION_MINOR 3) -SET(OPENJPEG_VERSION_BUILD 0) -SET(OPENJPEG_VERSION +set(OPENJPEG_VERSION_MAJOR 2) +set(OPENJPEG_VERSION_MINOR 0) +set(OPENJPEG_VERSION_BUILD 0) +set(OPENJPEG_VERSION + "${OPENJPEG_VERSION_MAJOR}.${OPENJPEG_VERSION_MINOR}.${OPENJPEG_VERSION_BUILD}") +set(PACKAGE_VERSION "${OPENJPEG_VERSION_MAJOR}.${OPENJPEG_VERSION_MINOR}.${OPENJPEG_VERSION_BUILD}") -# This setting of SOVERSION assumes that any API change -# will increment either the minor or major version number of openjpeg -SET(OPENJPEG_LIBRARY_PROPERTIES +# Because autotools does not support X.Y notation for SOVERSION, we have to use +# two numbering, one for the openjpeg version and one for openjpeg soversion +# version | soversion +# 1.0 | 0 +# 1.1 | 1 +# 1.2 | 2 +# 1.3 | 3 +# 1.4 | 4 +# 1.5 | 5 +# 1.5.1 | 5 +# 2.0 | 6 +# above is the recommendation by the OPJ team. If you really need to override this default, +# you can specify your own OPENJPEG_SOVERSION at cmake configuration time: +# cmake -DOPENJPEG_SOVERSION:STRING=42 /path/to/openjpeg +if(NOT OPENJPEG_SOVERSION) + SET(OPENJPEG_SOVERSION 6) +endif(NOT OPENJPEG_SOVERSION) +set(OPENJPEG_LIBRARY_PROPERTIES VERSION "${OPENJPEG_VERSION_MAJOR}.${OPENJPEG_VERSION_MINOR}.${OPENJPEG_VERSION_BUILD}" - SOVERSION "${OPENJPEG_VERSION_MAJOR}.${OPENJPEG_VERSION_MINOR}" + SOVERSION "${OPENJPEG_SOVERSION}" ) +# -------------------------------------------------------------------------- +# Path to additional CMake modules +set(CMAKE_MODULE_PATH + ${CMAKE_SOURCE_DIR}/cmake + ${CMAKE_MODULE_PATH}) -#----------------------------------------------------------------------------- -# OpenJPEG build configuration options. -OPTION(BUILD_SHARED_LIBS "Build OpenJPEG with shared libraries." OFF) +# -------------------------------------------------------------------------- +# On Visual Studio 8 MS deprecated C. This removes all 1.276E1265 security +# warnings +if(WIN32) + if(NOT BORLAND) + if(NOT CYGWIN) + if(NOT MINGW) + if(NOT ITK_ENABLE_VISUAL_STUDIO_DEPRECATED_C_WARNINGS) + add_definitions( + -D_CRT_FAR_MAPPINGS_NO_DEPRECATE + -D_CRT_IS_WCTYPE_NO_DEPRECATE + -D_CRT_MANAGED_FP_NO_DEPRECATE + -D_CRT_NONSTDC_NO_DEPRECATE + -D_CRT_SECURE_NO_DEPRECATE + -D_CRT_SECURE_NO_DEPRECATE_GLOBALS + -D_CRT_SETERRORMODE_BEEP_SLEEP_NO_DEPRECATE + -D_CRT_TIME_FUNCTIONS_NO_DEPRECATE + -D_CRT_VCCLRIT_NO_DEPRECATE + -D_SCL_SECURE_NO_DEPRECATE + ) + endif() + endif() + endif() + endif() +endif() -#----------------------------------------------------------------------------- -SET (EXECUTABLE_OUTPUT_PATH ${OPENJPEG_BINARY_DIR}/bin CACHE PATH "Single output directory for building all executables.") -SET (LIBRARY_OUTPUT_PATH ${OPENJPEG_BINARY_DIR}/bin CACHE PATH "Single output directory for building all libraries.") -MARK_AS_ADVANCED(LIBRARY_OUTPUT_PATH EXECUTABLE_OUTPUT_PATH) +# -------------------------------------------------------------------------- +# Install directories + +string(TOLOWER ${PROJECT_NAME} projectname) +set(OPENJPEG_INSTALL_SUBDIR "${projectname}-${OPENJPEG_VERSION_MAJOR}.${OPENJPEG_VERSION_MINOR}") + +if(NOT OPENJPEG_INSTALL_BIN_DIR) + set(OPENJPEG_INSTALL_BIN_DIR "bin") +endif() + +if(NOT OPENJPEG_INSTALL_LIB_DIR) + set(OPENJPEG_INSTALL_LIB_DIR "lib") +endif() + +if(NOT OPENJPEG_INSTALL_SHARE_DIR) + set(OPENJPEG_INSTALL_SHARE_DIR "share") +endif() + +if(NOT OPENJPEG_INSTALL_DATA_DIR) + set(OPENJPEG_INSTALL_DATA_DIR "${OPENJPEG_INSTALL_SHARE_DIR}/${OPENJPEG_INSTALL_SUBDIR}") +endif() + +if(NOT OPENJPEG_INSTALL_INCLUDE_DIR) + set(OPENJPEG_INSTALL_INCLUDE_DIR "include/${OPENJPEG_INSTALL_SUBDIR}") +endif() + +if(NOT OPENJPEG_INSTALL_MAN_DIR) + set(OPENJPEG_INSTALL_MAN_DIR "share/man/") +endif() + +if(NOT OPENJPEG_INSTALL_DOC_DIR) + set(OPENJPEG_INSTALL_DOC_DIR "share/doc/${OPENJPEG_INSTALL_SUBDIR}") +endif() + +if(NOT OPENJPEG_INSTALL_JNI_DIR) + if(WIN32) + set(OPENJPEG_INSTALL_JNI_DIR ${OPENJPEG_INSTALL_BIN_DIR}) + else() + set(OPENJPEG_INSTALL_JNI_DIR ${OPENJPEG_INSTALL_LIB_DIR}) + endif() +endif() + +if(NOT OPENJPEG_INSTALL_PACKAGE_DIR) + # We could install *.cmake files in share/ however those files contains + # hardcoded path to libraries on a multi-arch system (fedora/debian) those + # path will be different (lib/i386-linux-gnu vs lib/x86_64-linux-gnu) + set(OPENJPEG_INSTALL_PACKAGE_DIR "${OPENJPEG_INSTALL_LIB_DIR}/${OPENJPEG_INSTALL_SUBDIR}") +endif() #----------------------------------------------------------------------------- -# For the codec... -OPTION(BUILD_EXAMPLES "Build the Examples (codec...)." OFF) +# Big endian test: +include (${CMAKE_ROOT}/Modules/TestBigEndian.cmake) +TEST_BIG_ENDIAN(OPJ_BIG_ENDIAN) +#----------------------------------------------------------------------------- +# Setup file for setting custom ctest vars +configure_file( + ${CMAKE_SOURCE_DIR}/cmake/CTestCustom.cmake.in + ${CMAKE_BINARY_DIR}/CTestCustom.cmake + @ONLY + ) +#----------------------------------------------------------------------------- +# OpenJPEG build configuration options. +option(BUILD_SHARED_LIBS "Build OpenJPEG shared library and link executables against it." ON) +set (EXECUTABLE_OUTPUT_PATH ${OPENJPEG_BINARY_DIR}/bin CACHE PATH "Single output directory for building all executables.") +set (LIBRARY_OUTPUT_PATH ${OPENJPEG_BINARY_DIR}/bin CACHE PATH "Single output directory for building all libraries.") +mark_as_advanced(LIBRARY_OUTPUT_PATH EXECUTABLE_OUTPUT_PATH) + +#----------------------------------------------------------------------------- # configure name mangling to allow multiple libraries to coexist # peacefully -IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/openjpeg_mangle.h.in) -SET(MANGLE_PREFIX ${OPENJPEG_LIBRARY_NAME}) -CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/openjpeg_mangle.h.in +if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/openjpeg_mangle.h.in) +set(MANGLE_PREFIX ${OPENJPEG_LIBRARY_NAME}) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/openjpeg_mangle.h.in ${CMAKE_CURRENT_BINARY_DIR}/openjpeg_mangle.h - @ONLY IMMEDIATE) -ENDIF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/openjpeg_mangle.h.in) + @ONLY) +endif() #----------------------------------------------------------------------------- -# Always build the library -INCLUDE_DIRECTORIES(BEFORE ${CMAKE_CURRENT_BINARY_DIR}) -SUBDIRS( - libopenjpeg - mj2 - # cmake 2.4.5 has poor java support - #j2kviewer/src - ) +# Compiler specific flags: +if(CMAKE_COMPILER_IS_GNUCC) + # For all builds, make sure openjpeg is std99 compliant: + # set(CMAKE_C_FLAGS "-Wall -std=c99 ${CMAKE_C_FLAGS}") # FIXME: this setting prevented us from setting a coverage build. + # Do not use ffast-math for all build, it would produce incorrect results, only set for release: + set(CMAKE_C_FLAGS_RELEASE "-ffast-math ${CMAKE_C_FLAGS_RELEASE}") +endif() -IF(NOT UNIX) -SUBDIRS( - jpwl - jp3d - indexer_JPIP - ) -ENDIF(NOT UNIX) +#----------------------------------------------------------------------------- +# opj_config.h generation (1/2) + +# Check if some include files are provided by the system +include(EnsureFileInclude) +# These files are mandatory +ensure_file_include("string.h" HAVE_STRING_H YES) +ensure_file_include("memory.h" HAVE_MEMORY_H YES) +ensure_file_include("stdlib.h" HAVE_STDLIB_H YES) +ensure_file_include("stdio.h" HAVE_STDIO_H YES) +ensure_file_include("math.h" HAVE_MATH_H YES) +ensure_file_include("float.h" HAVE_FLOAT_H YES) +ensure_file_include("time.h" HAVE_TIME_H YES) +ensure_file_include("stdarg.h" HAVE_STDARG_H YES) +ensure_file_include("ctype.h" HAVE_CTYPE_H YES) +ensure_file_include("assert.h" HAVE_ASSERT_H YES) + +# For the following files, we provide an alternative, they are not mandatory +ensure_file_include("stdint.h" OPJ_HAVE_STDINT_H NO) +ensure_file_include("inttypes.h" OPJ_HAVE_INTTYPES_H NO) + +# why check this one ? for openjpip ? +include (${CMAKE_ROOT}/Modules/CheckIncludeFile.cmake) +CHECK_INCLUDE_FILE("strings.h" HAVE_STRINGS_H) +CHECK_INCLUDE_FILE("sys/stat.h" HAVE_SYS_STAT_H) +CHECK_INCLUDE_FILE("sys/types.h" HAVE_SYS_TYPES_H) +CHECK_INCLUDE_FILE("unistd.h" HAVE_UNISTD_H) + +# Enable Large file support +include(TestLargeFiles) +OPJ_TEST_LARGE_FILES(OPJ_HAVE_LARGEFILES) #----------------------------------------------------------------------------- -# Build example only if requested -IF(BUILD_EXAMPLES) - SUBDIRS(codec) -ENDIF(BUILD_EXAMPLES) +# Build Library +if(BUILD_JPIP_SERVER) + find_package(CURL REQUIRED) + find_package(FCGI REQUIRED) + find_package(Threads REQUIRED) + if(NOT CMAKE_USE_PTHREADS_INIT) + message(FATAL_ERROR "Only pthread are supported") + endif() +endif() +add_subdirectory(src/lib) #----------------------------------------------------------------------------- -# For the documentation -OPTION(BUILD_DOCUMENTATION "Build the doxygen documentation" OFF) -IF(BUILD_DOCUMENTATION) - SUBDIRS(doc) -ENDIF(BUILD_DOCUMENTATION) +# Build Applications +option(BUILD_CODEC "Build the CODEC executables" ON) +option(BUILD_MJ2 "Build the MJ2 executables." OFF) +option(BUILD_JPWL "Build the JPWL library and executables" OFF) +option(BUILD_JPIP "Build the JPIP library and executables." OFF) +if(BUILD_JPIP) + option(BUILD_JPIP_SERVER "Build the JPIP server." OFF) +endif() +option(BUILD_VIEWER "Build the OPJViewer executable (C++)" OFF) +option(BUILD_JAVA "Build the openjpeg jar (Java)" OFF) +option(BUILD_JP3D "Build the JP3D comp" OFF) +mark_as_advanced(BUILD_VIEWER) +mark_as_advanced(BUILD_JAVA) +mark_as_advanced(BUILD_JP3D) + +if(BUILD_CODEC OR BUILD_MJ2) + # OFF: It will only build 3rd party libs if they are not found on the system + # ON: 3rd party libs will ALWAYS be build, and used + option(BUILD_THIRDPARTY "Build the thirdparty executables if it is needed" OFF) + add_subdirectory(thirdparty) + add_subdirectory(src/bin) +endif () +add_subdirectory(wrapping) #----------------------------------------------------------------------------- -# For openjpeg team if they ever want Dart+CMake -IF(OPENJPEG_STANDALONE) - INCLUDE(Dart) - MARK_AS_ADVANCED(BUILD_TESTING DART_ROOT TCL_TCLSH) - IF(BUILD_TESTING) - ENABLE_TESTING() - SET(BUILDNAME "OpenJPEG-${CMAKE_SYSTEM}-${CMAKE_C_COMPILER}" CACHE STRING "Name of build on the dashboard") - MARK_AS_ADVANCED(BUILDNAME) - ENDIF(BUILD_TESTING) -ENDIF(OPENJPEG_STANDALONE) +# opj_config.h generation (2/2) +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/openjp2/opj_config.h.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/src/lib/openjp2/opj_config.h + @ONLY + ) + + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/openjp2/opj_config_private.h.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/src/lib/openjp2/opj_config_private.h + @ONLY + ) -# Adding test with dataset from: -# http://www.crc.ricoh.com/~gormish/jpeg2000conformance/ -# http://www.jpeg.org/jpeg2000guide/testimages/testimages.html +#----------------------------------------------------------------------------- +# Build DOCUMENTATION (not in ALL target and only if Doxygen is found) +option(BUILD_DOC "Build the HTML documentation (with doxygen if available)." OFF) +if(BUILD_DOC) + add_subdirectory(doc) +endif() #----------------------------------------------------------------------------- -# Adding JPEG2000_CONFORMANCE_DATA_ROOT -FIND_PATH(JPEG2000_CONFORMANCE_DATA_ROOT testimages.html - ${OPENJPEG_SOURCE_DIR}/../jpeg2000testimages - $ENV{JPEG2000_CONFORMANCE_DATA_ROOT} +# Buld Testing +option(BUILD_TESTING "Build the tests." OFF) +if(BUILD_TESTING) + if(BUILD_CODEC) + enable_testing() + include(CTest) + + # Search openjpeg data needed for the tests + # They could be found via svn on the OpenJPEG google code project + # svn checkout http://openjpeg.googlecode.com/svn/data (about 70 Mo) + find_path(OPJ_DATA_ROOT README-OPJ-Data + PATHS + $ENV{OPJ_DATA_ROOT} + ${CMAKE_SOURCE_DIR}/../data + ) + + # Add repository where to find tests + add_subdirectory(tests) + + else() + message(FATAL_ERROR "You need build codec to run the tests") + endif() +endif() + +#----------------------------------------------------------------------------- +# install all targets referenced as OPENJPEGTargets +install(EXPORT OpenJPEGTargets DESTINATION ${OPENJPEG_INSTALL_PACKAGE_DIR}) +configure_file( ${OPENJPEG_SOURCE_DIR}/cmake/OpenJPEGConfig.cmake.in + ${OPENJPEG_BINARY_DIR}/OpenJPEGConfig.cmake + @ONLY +) +install( FILES ${OPENJPEG_BINARY_DIR}/OpenJPEGConfig.cmake + DESTINATION ${OPENJPEG_INSTALL_PACKAGE_DIR} ) #----------------------------------------------------------------------------- -# Compiler specific flags: -IF(CMAKE_COMPILER_IS_GNUCC) - # For all builds, make sure openjpeg is std99 compliant: - SET(CMAKE_C_FLAGS "-Wall -std=c99 ${CMAKE_C_FLAGS}") - # Do not use ffast-math for all build, it would produce incorrect results, only set for release: - SET(CMAKE_C_FLAGS_RELEASE "-ffast-math ${CMAKE_C_FLAGS_RELEASE}") -ENDIF(CMAKE_COMPILER_IS_GNUCC) +# install CHANGES and LICENSE +if(EXISTS ${OPENJPEG_SOURCE_DIR}/CHANGES) + install(FILES CHANGES DESTINATION ${OPENJPEG_INSTALL_DOC_DIR}) +endif() +install(FILES LICENSE DESTINATION ${OPENJPEG_INSTALL_DOC_DIR}) + +include (cmake/OpenJPEGCPack.cmake) +#----------------------------------------------------------------------------- +# pkgconfig support +if(UNIX) + # install in lib and not share (see multi-arch note above) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/lib/openjp2/libopenjp2.pc.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/libopenjp2.pc @ONLY) + install( FILES ${CMAKE_CURRENT_BINARY_DIR}/libopenjp2.pc DESTINATION + ${OPENJPEG_INSTALL_LIB_DIR}/pkgconfig ) +# + if(BUILD_JPWL) + # install in lib and not share (see multi-arch note above) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/lib/openjpwl/libopenjpwl.pc.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/libopenjpwl.pc @ONLY) + install( FILES ${CMAKE_CURRENT_BINARY_DIR}/libopenjpwl.pc DESTINATION + ${OPENJPEG_INSTALL_LIB_DIR}/pkgconfig ) + endif() +# + if(BUILD_JPIP) + # install in lib and not share (see multi-arch note above) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/lib/openjpip/libopenjpip.pc.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/libopenjpip.pc @ONLY) + install( FILES ${CMAKE_CURRENT_BINARY_DIR}/libopenjpip.pc DESTINATION + ${OPENJPEG_INSTALL_LIB_DIR}/pkgconfig ) + endif() +# + if(BUILD_JP3D) + # install in lib and not share (see multi-arch note above) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/lib/openjp3d/libopenjp3d.pc.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/libopenjp3d.pc @ONLY) + install( FILES ${CMAKE_CURRENT_BINARY_DIR}/libopenjp3d.pc DESTINATION + ${OPENJPEG_INSTALL_LIB_DIR}/pkgconfig ) + endif() +endif() + +#-----------------------------------------------------------------------------