Skip to content
Snippets Groups Projects
CMakeLists.txt 27.1 KiB
Newer Older
  • Learn to ignore specific revisions
  • Thomas Feuvrier's avatar
    Thomas Feuvrier committed
    # This is the root OTB CMakeLists file.
    # $Id$
    #
    
    CMAKE_MINIMUM_REQUIRED(VERSION 2.4)
    IF(COMMAND CMAKE_POLICY)
    
      CMAKE_POLICY(SET CMP0003 NEW)
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
    
    PROJECT(OTB)
    
    INCLUDE_REGULAR_EXPRESSION("^(otb|itk|vtk|vnl|vcl|vxl|f2c|netlib|ce|itpack|DICOM|meta|png|dbh|tif|jpeg|zlib).*$")
    SOURCE_GROUP("XML Files" REGULAR_EXPRESSION "[.]xml$")
    
    # 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(NOT ITK_ENABLE_VISUAL_STUDIO_DEPRECATED_C_WARNINGS)
          ENDIF(NOT MINGW)
        ENDIF(NOT CYGWIN)
      ENDIF(NOT BORLAND)
    ENDIF(WIN32)
    
    # __CYGWIN__ must be define for ossim (ex: ossimCommon.h, isnan definition, .. )
    #IF(CYGWIN)
    #  ADD_DEFINITIONS(-D__CYGWIN__)
    #ENDIF(CYGWIN)
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
    
    # If CMake is the version we're expecting, don't show the
    
    # CMAKE_BACKWARDS_COMPATIBILITY option. If the version is higher than the
    # minimal version required, then show the backward compatibility option.
    IF("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" MATCHES "^2\\.4$")
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
      MARK_AS_ADVANCED(FORCE CMAKE_BACKWARDS_COMPATIBILITY)
    
    ELSE("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" MATCHES "^2\\.4$")
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
      MARK_AS_ADVANCED(CLEAR CMAKE_BACKWARDS_COMPATIBILITY)
    
    ENDIF("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" MATCHES "^2\\.4$")
    
    #-----------------------------------------------------------------------------
    # OTB option to access large file (> 4Go).
    ADD_DEFINITIONS(
    	-D_LARGEFILE_SOURCE
    
    	-D_FILE_OFFSET_BITS=64
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
    
    #-----------------------------------------------------------------------------
    # OTB version number.  An even minor number corresponds to releases.
    
    SET(OTB_VERSION_MAJOR "2")
    
    SET(OTB_VERSION_MINOR "9")
    
    Julien Michel's avatar
    Julien Michel committed
    SET(OTB_VERSION_PATCH "0")
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
    # Version string should not include patch level.  The major.minor is
    # enough to distinguish available features of the toolkit.
    SET(OTB_VERSION_STRING "${OTB_VERSION_MAJOR}.${OTB_VERSION_MINOR}.${OTB_VERSION_PATCH}")
    
    
    OPTION(BUILD_TESTING "Build testing." OFF)
    
    #-----------------------------------------------------------------------------
    # OTB build configuration options.
    IF(WIN32)
    # do not build shared lib under windows
    SET(BUILD_SHARED_LIBS OFF)
    MESSAGE("Disabling build shared lib option on windows like OS.")
    ELSE(WIN32)
    OPTION(BUILD_SHARED_LIBS "Build OTB with shared libraries." ON)
    ENDIF(WIN32)
    SET(OTB_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS})
    
    
    #-----------------------------------------------------------------------------
    
    # Case for release 2.2.1
    # Use the openjpeg library.
    
    OPTION(OTB_USE_JPEG2000 "Use to support jpeg2000 image file format." ON)
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
    #-----------------------------------------------------------------------------
    
    #-------------------------------
    # EXPAT Library
    #-------------------------------
    
    
    OPTION(OTB_USE_EXTERNAL_EXPAT "Use an outside build of EXPAT." OFF)
    MARK_AS_ADVANCED(OTB_USE_EXTERNAL_EXPAT)
    
    IF(OTB_USE_EXTERNAL_EXPAT)
        FIND_PACKAGE(EXPAT)
        IF(EXPAT_FOUND)
    
            # Control expat compatibility
            INCLUDE_DIRECTORIES(BEFORE ${EXPAT_INCLUDE_DIR})
            LINK_DIRECTORIES( ${EXPAT_LIBRARY} )
    
        ELSE(EXPAT_FOUND)
            MESSAGE(FATAL_ERROR
                      "Cannot build OTB project without lib EXPAT.  Please set EXPAT_DIR or set OTB_USE_EXTERNAL_EXPAT OFF to use INTERNAL EXPAT set on OTB/Utilities repository.")
        ENDIF(EXPAT_FOUND)
    ELSE(OTB_USE_EXTERNAL_EXPAT)
    
            ADD_DEFINITIONS(-DOTB_USE_INTERNAL_EXPAT)
            INCLUDE_DIRECTORIES(BEFORE "${OTB_SOURCE_DIR}/Utilities/otbexpat")
            INCLUDE_DIRECTORIES(BEFORE "${OTB_BINARY_DIR}/Utilities/otbexpat")
    
    	IF(NOT BUILD_SHARED_LIBS)
            	ADD_DEFINITIONS(-DXML_STATIC)
            ENDIF(NOT BUILD_SHARED_LIBS)
    
    #-------------------------------
    # ITK Library
    #-------------------------------
    
    OPTION(OTB_USE_EXTERNAL_ITK "Use an outside build of ITK." OFF)
    IF(OTB_USE_EXTERNAL_ITK)
      FIND_PACKAGE(ITK)
      IF(ITK_FOUND)
    
            # Builf ITK_INCLUDE_DIRS list wihout expat path
            SET(new_list "")
            FOREACH(files_h ${ITK_INCLUDE_DIRS})
                    IF(NOT "${files_h}" MATCHES "expat")
                            SET(new_list "${new_list};${files_h}")
                    ENDIF(NOT "${files_h}" MATCHES "expat")
            ENDFOREACH(files_h ${ITK_INCLUDE_DIRS})
            SET(ITK_INCLUDE_DIRS "${new_list}")
    
    
            INCLUDE(${ITK_USE_FILE})
      ELSE(ITK_FOUND)
            MESSAGE(FATAL_ERROR
                      "Cannot build OTB project without ITK.  Please set ITK_DIR or set OTB_USE_EXTERNAL_ITK OFF to use INTERNAL ITK set on OTB/Utilities repository.")
      ENDIF(ITK_FOUND)
    
    ENDIF(OTB_USE_EXTERNAL_ITK)
    
    
    # JPEG2000 specification control
    
    OTB Bot's avatar
    OTB Bot committed
    SET(OTB_COMPILE_JPEG2000 0)
    
    IF( OTB_USE_JPEG2000 )
      SET(OTB_COMPILE_JPEG2000 1)
      IF(OTB_USE_EXTERNAL_ITK)
            MESSAGE(STATUS "WARNING: Due to conflicting libraries, jpeg2000 support is disabled when using external ITK.")
            SET(OTB_COMPILE_JPEG2000 0)
      ENDIF(OTB_USE_EXTERNAL_ITK)
      IF(CMAKE_GENERATOR MATCHES "^Visual Studio 7$")
    
    Julien Michel's avatar
    Julien Michel committed
            MESSAGE(STATUS "WARNING: For Visual Studio 7, jpeg2000 support is disabled.")
    
            SET(OTB_COMPILE_JPEG2000 0)
      ENDIF(CMAKE_GENERATOR MATCHES "^Visual Studio 7$")
      IF(CMAKE_GENERATOR MATCHES "^Visual Studio 7 .NET 2003$")
    
    Julien Michel's avatar
    Julien Michel committed
            MESSAGE(STATUS "WARNING: For Visual Studio 7, jpeg2000 support is disabled.")
    
            SET(OTB_COMPILE_JPEG2000 0)
      ENDIF(CMAKE_GENERATOR MATCHES "^Visual Studio 7 .NET 2003$")
    
    Julien Michel's avatar
    Julien Michel committed
            MESSAGE(STATUS "WARNING: For cygwin, jpeg2000 support is disabled.")
    
            SET(OTB_COMPILE_JPEG2000 0)
      ENDIF(CYGWIN)
    
    
    ENDIF( OTB_USE_JPEG2000 )
    
    IF(OTB_COMPILE_JPEG2000)
      ADD_DEFINITIONS(-DOTB_COMPILE_JPEG2000 -DUSE_OPJ_DEPRECATED)
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
      IF(NOT BUILD_SHARED_LIBS)
            ADD_DEFINITIONS(-DOPJ_STATIC)
      ENDIF(NOT BUILD_SHARED_LIBS)
    
    #-----------------------------------------------------------------------------
    # Option for OpenThreads (necessary because used by the new version of OSSIM library
    # Find OpenThread library
    
    IF(EXISTS "${CMAKE_ROOT}/Modules/FindOpenThreads.cmake")
    
    ELSE(EXISTS "${CMAKE_ROOT}/Modules/FindOpenThreads.cmake")
    
            INCLUDE(${OTB_SOURCE_DIR}/FindOpenThreads.cmake)
    
    ENDIF(EXISTS "${CMAKE_ROOT}/Modules/FindOpenThreads.cmake")
    
    
    SET(OTB_USE_EXTERNAL_OPENTHREADS 1)
    IF(OPENTHREADS_FOUND)
            INCLUDE_DIRECTORIES(${OPENTHREADS_INCLUDE_DIR})
            LINK_DIRECTORIES( ${OPENTHREADS_LIBRARY} )
    ELSE(OPENTHREADS_FOUND)
            ADD_DEFINITIONS(-DOTB_USE_INTERNAL_OPENTHREADS)
            SET(OTB_USE_EXTERNAL_OPENTHREADS 0)
            SET(OPENTHREADS_INCLUDE_DIR "${OTB_SOURCE_DIR}/Utilities/otbopenthreads/OpenThreads/include")
            SET(OPENTHREADS_LIBRARY "OpenThreads" )
            INCLUDE_DIRECTORIES(${OPENTHREADS_INCLUDE_DIR})
    
    	IF(NOT BUILD_SHARED_LIBS)
             ADD_DEFINITIONS(-DOT_LIBRARY_STATIC)
            ENDIF(NOT BUILD_SHARED_LIBS)
    
    IF(NOT BUILD_SHARED_LIBS)
      ADD_DEFINITIONS(-DOSSIM_STATIC)
    ENDIF(NOT BUILD_SHARED_LIBS)
    
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
    #-----------------------------------------------------------------------------
    # Option for generate Visu tools !!!
    
    OPTION(OTB_USE_VISU_GUI "Generate Gui/Visu tools directory. If ON, find OpenGL and FLTK packages." ON)
    
    MARK_AS_ADVANCED(OTB_USE_VISU_GUI)
    
    OTB Bot's avatar
    OTB Bot committed
    SET(OTB_GLU_INCLUDE_PATH "")
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
    
            #-------------------------------
    
            # OpenGL Library
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
            #-------------------------------
            FIND_PACKAGE(OpenGL)
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
            IF( NOT OPENGL_FOUND )
                    MESSAGE(FATAL_ERROR "Impossible to find OpenGL on your system.\nCannot build OTB Visu module without OpenGL library.\nInstall OpenGL on your system OR set OTB_USE_VISU to OFF to disable OTB Visu module generation !")
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
            IF( NOT OPENGL_GLU_FOUND )
                    MESSAGE(FATAL_ERROR "Impossible to find GLU library on your system.\nCannot build OTB Visu module without GLU library.\nInstall GLU library on your system OR set OTB_USE_VISU to OFF to disable OTB Visu module generation !")
            ENDIF( NOT OPENGL_GLU_FOUND )
    
            IF(OPENGL_INCLUDE_DIR)
                    INCLUDE_DIRECTORIES(${OPENGL_INCLUDE_DIR})
            ENDIF(OPENGL_INCLUDE_DIR)
    
    
    	#-------------------------------
            # Display images using textures using video card acceleration
            #-------------------------------
    
    	OPTION(OTB_GL_USE_ACCEL "Use video card acceleration." ON)
    	MARK_AS_ADVANCED(OTB_GL_USE_ACCEL)
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
            #-------------------------------
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
            # FLTK Library
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
            #-------------------------------
    
            # Option for internal/external FLTK
    
            OPTION(OTB_USE_EXTERNAL_FLTK "Use an outside build of FLTK." ON)
            MARK_AS_ADVANCED(OTB_USE_EXTERNAL_FLTK)
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
            # Add an option to use or not use FLTK (http://www.fltk.org)
    
                    # Mingw Option doesn't exist in the FindFLTK.cmake default configuration file in CMake installationj directory.
    
                    # Copy  FLTK_PLATFORM_DEPENDENT_LIBS from FLTK CmakeList.txt
                    IF(MINGW)
                        ADD_DEFINITIONS(-DWIN32)
                        SET( FLTK_PLATFORM_DEPENDENT_LIBS ole32 uuid wsock32 gdi32 comdlg32)
                    ENDIF(MINGW)
    
                    IF (NOT FLTK_INCLUDE_DIR)
    		        SET( FLTK_INCLUDE_DIR /usr/include )
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
                    IF(FLTK_FOUND)
    
    		        INCLUDE_DIRECTORIES(${FLTK_INCLUDE_DIRS})
    		        LINK_DIRECTORIES(${FLTK_LIBRARY_DIRS})
                    ELSE(FLTK_FOUND)
                            MESSAGE(FATAL_ERROR
    	                        "Cannot build OTB project without FLTK.  Please set FLTK_DIR  or  set OTB_USE_VISU to OFF  or  set OTB_USE_EXTERNAL_FLTK OFF to use INTERNAL FLTK set on OTB/Utilities repository.")
                    ENDIF(FLTK_FOUND)
    
            ELSE(OTB_USE_EXTERNAL_FLTK)
    
                    SET( FLTK_PLATFORM_DEPENDENT_LIBS "")
    
                    IF(EXISTS "${OTB_BINARY_DIR}/Utilities/FLTK/FLTKConfig.cmake")
    
                            INCLUDE(${OTB_BINARY_DIR}/Utilities/FLTK/FLTKConfig.cmake)
    
                    ENDIF(EXISTS "${OTB_BINARY_DIR}/Utilities/FLTK/FLTKConfig.cmake")
    
                    #----------------------------------------------------------------
                    # RESUME Alls VISU GUI libraries use by OTB in a single VARIABLE
                    SET(OTB_VISU_GUI_LIBRARIES "${FLTK_LIBRARIES};${OPENGL_LIBRARIES} ")
    
    #-------------------------------
    # CURL Library
    #-------------------------------
    OPTION(OTB_USE_CURL "Use curl library." OFF)
    MARK_AS_ADVANCED(OTB_USE_CURL)
    IF(OTB_USE_CURL)
    
            FIND_PATH(CURL_INCLUDE_DIR curl/curl.h PATHS)
            MARK_AS_ADVANCED(CURL_INCLUDE_DIR)
            IF (NOT CURL_INCLUDE_DIR)
                    MESSAGE(FATAL_ERROR
                            "Cannot find CURL include directory. Please set CURL_INCLUDE_DIR or SET OTB_USE_CURL OFF.")
            ENDIF (NOT CURL_INCLUDE_DIR)
    
            FIND_LIBRARY(CURL_LIBRARY curl )
            MARK_AS_ADVANCED(CURL_LIBRARY)
            IF (NOT CURL_LIBRARY)
                    MESSAGE(FATAL_ERROR
                            "Cannot find CURL library. Please set CURL_LIBRARY or SET OTB_USE_CURL OFF.")
            ENDIF (NOT CURL_LIBRARY)
    
    
            ADD_DEFINITIONS(-DOTB_USE_CURL)
    
            INCLUDE_DIRECTORIES(${CURL_INCLUDE_DIR})
    
    ENDIF(OTB_USE_CURL)
    
    #-------------------------------
    # GDAL Library
    #-------------------------------
    
    
    #FIND_LIBRARY(GDAL_LIBRARY_DIRS gdal PATHS $ENV{GDAL_LIBRARY_DIRS} )
    
    
    FIND_PATH(GDAL_LIBRARY_DIRS gdal PATHS $ENV{GDAL_LIBRARY_DIRS} )
    FIND_PATH(GDAL_INCLUDE_DIRS gdal.h $ENV{GDAL_INCLUDE_DIRS} /usr/include/gdal)
    IF (NOT GDAL_LIBRARY_DIRS)
    MESSAGE(FATAL_ERROR
             "Cannot find GDAL library directory. Please set GDAL_LIBRARY_DIRS.")
    ENDIF (NOT GDAL_LIBRARY_DIRS)
    IF (NOT GDAL_INCLUDE_DIRS)
    MESSAGE(FATAL_ERROR
             "Cannot find GDAL include directory. Please set GDAL_INCLUDE_DIRS.")
    ENDIF (NOT GDAL_INCLUDE_DIRS)
    
    INCLUDE_DIRECTORIES(${GDAL_INCLUDE_DIRS})
    LINK_DIRECTORIES( ${GDAL_LIBRARY_DIRS} )
    
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
    #-------------------------------
    # End connections whith external libraries
    #-------------------------------
    
    # The fluid-generated fltk sources have many warnings.  This macro
    # will disable warnings for the generated files on some compilers.
    MACRO(OTB_DISABLE_FLTK_GENERATED_WARNINGS files)
      IF(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 1.6)
        IF(CMAKE_COMPILER_IS_GNUCXX)
          FOREACH(f ${files})
            STRING(REGEX REPLACE "\\.fl$" ".cxx" SRC "${f}")
            STRING(REGEX REPLACE ".*/([^/]*)$" "\\1" SRC "${SRC}")
            SET_SOURCE_FILES_PROPERTIES(${SRC} PROPERTIES COMPILE_FLAGS -w)
          ENDFOREACH(f)
        ENDIF(CMAKE_COMPILER_IS_GNUCXX)
      ENDIF(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 1.6)
    ENDMACRO(OTB_DISABLE_FLTK_GENERATED_WARNINGS)
    
    # Macro for adding resources to GUI application on the Mac
    #
    IF(APPLE AND NOT FLTK_USE_X)
        FIND_PROGRAM(ITK_APPLE_RESOURCE Rez /Developer/Tools)
        FIND_FILE(ITK_FLTK_RESOURCE mac.r /usr/local/include/FL)
        IF(NOT ITK_FLTK_RESOURCE)
          MESSAGE("Fltk resources not found, GUI application will not respond to mouse events")
        ENDIF(NOT ITK_FLTK_RESOURCE)
    
        MACRO(ADD_GUI_EXECUTABLE name sources)
          ADD_EXECUTABLE(${name} ${sources})
          INSTALL_TARGETS(/bin ${name})
          SET(EXEC_PATH ${EXECUTABLE_OUTPUT_PATH})
          IF(NOT EXEC_PATH)
            SET(EXEC_PATH ${CMAKE_CURRENT_BINARY_DIR})
          ENDIF(NOT EXEC_PATH)
            IF(ITK_APPLE_RESOURCE)
              ADD_CUSTOM_COMMAND(SOURCE ${name}
                                 COMMAND ${ITK_APPLE_RESOURCE}
                                 ARGS -t APPL ${ITK_FLTK_RESOURCE} -o
                                 ${EXEC_PATH}/${name}
                                 TARGET ${name})
            ENDIF(ITK_APPLE_RESOURCE)
        ENDMACRO(ADD_GUI_EXECUTABLE)
    ELSE(APPLE AND NOT FLTK_USE_X)
      MACRO(ADD_GUI_EXECUTABLE name sources)
        ADD_EXECUTABLE(${name} ${sources})
        INSTALL_TARGETS(/bin ${name})
      ENDMACRO(ADD_GUI_EXECUTABLE)
    ENDIF(APPLE AND NOT FLTK_USE_X)
    
    
    INCLUDE_DIRECTORIES (
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
      ${OTB_SOURCE_DIR}
    )
    
    INCLUDE_DIRECTORIES( ${OTB_INCLUDE_DIRS} )
    
    
    #-----------------------------------------------------------------------------
    # Test for some required system information.
    INCLUDE (${CMAKE_ROOT}/Modules/CMakeBackwardCompatibilityC.cmake)
    INCLUDE (${CMAKE_ROOT}/Modules/CMakeBackwardCompatibilityCXX.cmake)
    
    #-----------------------------------------------------------------------------
    # Configure Dart testing support.  This should be done before any
    # MESSAGE(FATAL_ERROR ...) commands are invoked.
    INCLUDE(${CMAKE_ROOT}/Modules/Dart.cmake)
    MARK_AS_ADVANCED(TCL_TCLSH DART_ROOT)
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
      ENABLE_TESTING()
      SET(BUILDNAME "${BUILDNAME}" CACHE STRING "Name of build on the dashboard")
      MARK_AS_ADVANCED(BUILDNAME)
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
    
    
    #-----------------------------------------------------------------------------
    # Output directories.
    
    
    IF(NOT LIBRARY_OUTPUT_PATH)
       SET (LIBRARY_OUTPUT_PATH ${OTB_BINARY_DIR}/bin CACHE INTERNAL "Single output directory for building all libraries.")
    ENDIF(NOT LIBRARY_OUTPUT_PATH)
    IF(NOT EXECUTABLE_OUTPUT_PATH)
       SET (EXECUTABLE_OUTPUT_PATH ${OTB_BINARY_DIR}/bin CACHE INTERNAL "Single output directory for building all executables.")
    ENDIF(NOT EXECUTABLE_OUTPUT_PATH)
    
    IF(NOT OTB_NO_LIBRARY_VERSION)
       # This setting of SOVERSION assumes that any API change
       # will increment either the minor or major version number of OTB.
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
           VERSION   "${OTB_VERSION_MAJOR}.${OTB_VERSION_MINOR}.${OTB_VERSION_PATCH}"
           SOVERSION "${OTB_VERSION_MAJOR}.${OTB_VERSION_MINOR}")
    ENDIF(NOT OTB_NO_LIBRARY_VERSION)
    
    
    
    
    MARK_AS_ADVANCED(LIBRARY_OUTPUT_PATH EXECUTABLE_OUTPUT_PATH)
    
    SET(OTB_LIBRARY_PATH "${LIBRARY_OUTPUT_PATH}")
    SET(OTB_EXECUTABLE_PATH "${EXECUTABLE_OUTPUT_PATH}")
    SET(CXX_TEST_PATH ${EXECUTABLE_OUTPUT_PATH})
    
    INCLUDE_DIRECTORIES( ${OTB_LIBRARY_PATH} )
    
    # Put "." in the rpath of all OTB shared libraries.
    LINK_DIRECTORIES(.)
    
    #-----------------------------------------------------------------------------
    # Option for display all developpment message !!!
    
    OPTION(OTB_SHOW_ALL_MSG_DEBUG "OTB developers : Show all messages (debug, dev, etc...) use only for otb developers." OFF)
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
    MARK_AS_ADVANCED(OTB_SHOW_ALL_MSG_DEBUG)
    
    # IF( OTB_SHOW_ALL_MSG_DEBUG )
    #  ADD_DEFINITIONS(-DOTB_SHOW_ALL_MSG_DEBUG)
    # ENDIF( OTB_SHOW_ALL_MSG_DEBUG )
    
    #-----------------------------------------------------------------------------
    # Advanced option to avoid recompiling utilities at each cmake reconfiguration
    OPTION(OTB_DISABLE_UTILITIES_COMPILATION "Disable utilities compilation (developpers only - use at you own risk)" OFF)
    MARK_AS_ADVANCED(OTB_DISABLE_UTILITIES_COMPILATION)
    
    IF(OTB_DISABLE_UTILITIES_COMPILATION)
    
    MESSAGE("Warning: utilities compilation is disabled.")
    
    LINK_DIRECTORIES("${OTB_BINARY_DIR}/bin")
    ENDIF(OTB_DISABLE_UTILITIES_COMPILATION)
    
    
    
    #-----------------------------------------------------------------------------
    # Option to define streaming activation in applications
    # Use by otbConfigure.h.in
    
    SET(OTB_STREAM_IMAGE_SIZE_TO_ACTIVATE_STREAMING 8*4000*4000 CACHE STRING "Image size to activate using streaming for applications.")
    
    MARK_AS_ADVANCED(OTB_STREAM_IMAGE_SIZE_TO_ACTIVATE_STREAMING)
    
    SET(OTB_STREAM_MAX_SIZE_BUFFER_FOR_STREAMING 8*4000*4000 CACHE STRING "Max size buffer for streaming.")
    
    MARK_AS_ADVANCED(OTB_STREAM_MAX_SIZE_BUFFER_FOR_STREAMING)
    
    
    
    
    #-----------------------------------------------------------------------------
    # Perform a setup of OTB Wrapping. This will provide CMake options for
    # individual wrapping as well as determine if CableSwig is required. If it is,
    # OTB_NEED_CableSwig will be set. This file also tries to locate CableSwig by
    # searching first in the source tree of OTB, and if that fails, it searches
    # for a binary built of CableSwig.
    #
    
    Julien Michel's avatar
    Julien Michel committed
    INCLUDE(${OTB_SOURCE_DIR}/Wrapping/otbWrapSetup.cmake)
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
    #-----------------------------------------------------------------------------
    # Option for generate Patented examples  !!!
    OPTION(OTB_USE_PATENTED "Build patented examples. ITK must be genereted whith patented option (ITK_USE_PATENTED = ON)." OFF)
    MARK_AS_ADVANCED(OTB_USE_PATENTED)
    
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
    IF(OTB_USE_VISU_GUI)
        SET(OTB_VISU_GUI_LIBRARIES "${FLTK_LIBRARIES};${OPENGL_LIBRARIES};${FLTK_PLATFORM_DEPENDENT_LIBS}")
            IF(APPLE)
    
                SET(OTB_VISU_GUI_LIBRARIES "${OTB_VISU_GUI_LIBRARIES};-Wl,-dylib_file,/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib:/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib")
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
            ENDIF(APPLE)
    ELSE(OTB_USE_VISU_GUI)
            SET(OTB_VISU_GUI_LIBRARIES "")
    ENDIF(OTB_USE_VISU_GUI)
    
    
    #-----------------------------------------------------------------------------
    # List of alls basics OTB libraries used for any applications
    # Use OTB_IO_UTILITIES_DEPENDENT_LIBRARIES to LINK IO libraries into your executable
    # Use OTB_ALGO_UTILITIES_DEPENDENT_LIBRARIES to LINK Utilities Algo libraries into your executable
    # Use OTB_ALLS_UTILITIES_DEPENDENT_LIBRARIES to LINK Utilities Algo libraries into your executable
    # => Create OTB_IO_UTILITIES_DEPENDENT_LIBRARIES
    
    SET(OTB_IO_UTILITIES_DEPENDENT_LIBRARIES "gdal;dxf;tinyXML;otbgeotiff;otbxtiff;otbliblas;otbossim;otbossimplugins" )
    
    
    IF(NOT OTB_USE_EXTERNAL_OPENTHREADS)
            SET(OTB_IO_UTILITIES_DEPENDENT_LIBRARIES  "${OTB_IO_UTILITIES_DEPENDENT_LIBRARIES};${OPENTHREADS_LIBRARY}")
    ENDIF(NOT OTB_USE_EXTERNAL_OPENTHREADS)
    
            SET(OTB_IO_UTILITIES_DEPENDENT_LIBRARIES  "${OTB_IO_UTILITIES_DEPENDENT_LIBRARIES};expat")
    
            SET(OTB_IO_UTILITIES_DEPENDENT_LIBRARIES  "${OTB_IO_UTILITIES_DEPENDENT_LIBRARIES};otbexpat")
    
    # Add Open Jpeg library
    IF( OTB_COMPILE_JPEG2000 )
    
         SET(OTB_IO_UTILITIES_DEPENDENT_LIBRARIES "${OTB_IO_UTILITIES_DEPENDENT_LIBRARIES};otbopenjpeg")
    
    # => Create OTB_ALGO_UTILITIES_DEPENDENT_LIBRARIES
    
    SET(OTB_ALGO_UTILITIES_DEPENDENT_LIBRARIES "otb6S;otbgalib;InsightJournal;otbsvm")
    
    
    
    # => Create OTB_ALLS_UTILITIES_DEPENDENT_LIBRARIES
    SET(OTB_ALLS_UTILITIES_DEPENDENT_LIBRARIES "${OTB_IO_UTILITIES_DEPENDENT_LIBRARIES} ${OTB_ALGO_UTILITIES_DEPENDENT_LIBRARIES}")
    
    
    #-----------------------------------------------------------------------------
    
    OPTION(BUILD_EXAMPLES "Build the Examples directory." OFF)
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
    
    #-----------------------------------------------------------------------------
    # Dispatch the build into the proper subdirectories.
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
    SUBDIRS(Utilities Code)
    
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
    IF (BUILD_EXAMPLES)
      SUBDIRS(Examples)
    ENDIF (BUILD_EXAMPLES)
    
    IF (BUILD_TESTING)
      SUBDIRS(Testing)
    ENDIF (BUILD_TESTING)
    
    #-----------------------------------------------------------------------------
    
    # => Comment for OTB 2.6.0: simplification : copy ITK values
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
    # OTB requires special compiler flags on some platforms.
    
    SET(OTB_REQUIRED_C_FLAGS "${ITK_REQUIRED_C_FLAGS}")
    SET(OTB_REQUIRED_CXX_FLAGS "${ITK_REQUIRED_CXX_FLAGS}")
    SET(OTB_REQUIRED_LINK_FLAGS "${ITK_REQUIRED_LINK_FLAGS}")
    
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
    IF(MINGW)
      LINK_LIBRARIES(gdi32)
    ENDIF(MINGW)
    
    
    #-----------------------------------------------------------------------------
    # Test for an Objective-C++ compiler.
    SET(OTB_OBJCXX_COMPILER_WORKS 0)
    IF(APPLE)
      TRY_COMPILE(OTB_OBJCXX_COMPILER_WORKS
                  ${OTB_BINARY_DIR}/CMakeTmp
                  ${OTB_SOURCE_DIR}/CMake/otbTestObjCxxCompiler.mm
                  OUTPUT_VARIABLE OTB_OBJCXX_TRY_COMPILE_OUTPUT)
      IF( OTB_OBJCXX_COMPILER_WORKS )
        FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
            "Determining if the Objective-C compiler works passed with "
            "the following output:\n${OTB_OBJCXX_TRY_COMPILE_OUTPUT}\n\n")
      ELSE( OTB_OBJCXX_COMPILER_WORKS )
        FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
          "Determining if the Objective-C compiler works failed with "
          "the following output:\n${OTB_OBJCXX_TRY_COMPILE_OUTPUT}\n\n")
      ENDIF( OTB_OBJCXX_COMPILER_WORKS )
    ENDIF(APPLE)
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
    
    
    INCLUDE(CheckTypeSize)
    
    CHECK_TYPE_SIZE("long long" OTB_SIZEOF_LONG_LONG)
    CHECK_TYPE_SIZE("__int64"   OTB_SIZEOF___INT64)
    
    Julien Michel's avatar
    Julien Michel committed
    CHECK_TYPE_SIZE("long int" OTB_SIZEOF_LONG_INT)
    CHECK_TYPE_SIZE("short int" OTB_SIZEOF_SHORT_INT)
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
    
    #-----------------------------------------------------------------------------
    # Configure the default OTB_DATA_ROOT for the location of OTB Data.
    FIND_PATH(OTB_DATA_ROOT OTBData.readme $ENV{OTB_DATA_ROOT})
    MARK_AS_ADVANCED(OTB_DATA_ROOT)
    
    
    OPTION(OTB_DATA_USE_LARGEINPUT "Use Large inputs images test." OFF)
    MARK_AS_ADVANCED(OTB_DATA_USE_LARGEINPUT)
    IF(OTB_DATA_USE_LARGEINPUT)
      FIND_PATH(OTB_DATA_LARGEINPUT_ROOT OTBData.readme $ENV{OTB_DATA_LARGEINPUT_ROOT})
      MARK_AS_ADVANCED(OTB_DATA_LARGEINPUT_ROOT)
    ENDIF(OTB_DATA_USE_LARGEINPUT)
    
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
    
    #-----------------------------------------------------------------------------
    # Configure files with settings for use by the build.
    
    CONFIGURE_FILE(${OTB_SOURCE_DIR}/otbConfigure.h.in
    
    Thomas Feuvrier's avatar
    Thomas Feuvrier committed
                   ${OTB_BINARY_DIR}/otbConfigure.h)
    
    #-----------------------------------------------------------------------------
    # The entire OTB tree should use the same include path, except for the
    # Wrapping directory.
    
    # Create the list of include directories needed for OTB header files.
    INCLUDE(${OTB_SOURCE_DIR}/otbIncludeDirectories.cmake)
    
    # This should be the only INCLUDE_DIRECTORIES command in the entire
    # tree, except for the Utilities and Wrapping directories.  We need to
    # do this in one place to make sure the order is correct.
    INCLUDE_DIRECTORIES(
      ${OTB_INCLUDE_DIRS_BUILD_TREE}
      ${OTB_INCLUDE_DIRS_BUILD_TREE_CXX}
      ${OTB_INCLUDE_DIRS_SYSTEM}
    )
    
    #-----------------------------------------------------------------------------
    # Uninstall cmake use to uninstall OTB.
    CONFIGURE_FILE(
      "${CMAKE_CURRENT_SOURCE_DIR}/CMake/cmake_uninstall.cmake.in"
      "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
      IMMEDIATE @ONLY)
    
    ADD_CUSTOM_TARGET(uninstall
      "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
    
    #-----------------------------------------------------------------------------
    # Help other projects use OTB.
    
    # Copy the UseOTB.cmake file to the binary tree for backward compatability.
    CONFIGURE_FILE(${OTB_SOURCE_DIR}/UseOTB.cmake.in
                   ${OTB_BINARY_DIR}/UseOTB.cmake COPYONLY IMMEDIATE)
    
    # Save the compiler settings so another project can import them.
    INCLUDE(${CMAKE_ROOT}/Modules/CMakeExportBuildSettings.cmake)
    CMAKE_EXPORT_BUILD_SETTINGS(${OTB_BINARY_DIR}/OTBBuildSettings.cmake)
    INSTALL_FILES(/lib/otb .cmake OTBBuildSettings)
    
    # Save library dependencies.
    EXPORT_LIBRARY_DEPENDENCIES(${OTB_BINARY_DIR}/OTBLibraryDepends.cmake)
    
    # Create the OTBConfig.cmake file containing the OTB configuration.
    INCLUDE (${OTB_SOURCE_DIR}/otbGenerateOTBConfig.cmake)
    
    # Install some files.
    INSTALL_FILES(/include/otb .h otbConfigure)
    INSTALL_FILES(/lib/otb .cmake UseOTB OTBLibraryDepends OTBConfig )
    
    #-----------------------------------------------------------------------------
    # Add compiler flags OTB needs to work on this platform.  This must be
    # done AFTER the call to CMAKE_EXPORT_BUILD_SETTINGS.
    
    SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OTB_REQUIRED_C_FLAGS}")
    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OTB_REQUIRED_CXX_FLAGS}")
    SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OTB_REQUIRED_LINK_FLAGS}")
    SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${OTB_REQUIRED_LINK_FLAGS}")
    SET(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${OTB_REQUIRED_LINK_FLAGS}")
    
    
    #-----------------------------------------------------------------------------
    
    # Set up CPack support, to be able to distribute OTB binary packages. It will
    # be particulary useful to distributed prebuilt OTB.
    #
    
    
    #INCLUDE(InstallRequiredSystemLibraries)
    
    SET(CPACK_PACKAGE_NAME "OTB" CACHE STRING "Package name")
    MARK_AS_ADVANCED(CPACK_PACKAGE_NAME)
    
    
    SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Orfeo Toolbox")
    MARK_AS_ADVANCED(CPACK_PACKAGE_DESCRIPTION_SUMMARY)
    
    SET(CPACK_PACKAGE_VERSION  "${OTB_VERSION_STRING}")
    SET(CPACK_PACKAGE_VERSION_MAJOR "${OTB_VERSION_MAJOR}")
    SET(CPACK_PACKAGE_VERSION_MINOR "${OTB_VERSION_MINOR}")
    SET(CPACK_PACKAGE_VERSION_PATCH "${OTB_VERSION_PATCH}")
    
    
    SET(CPACK_PACKAGE_CONTACT "debian@orfeo-toolbox.org" CACHE STRING  "Debian package maintainer email")
    MARK_AS_ADVANCED(CPACK_PACKAGE_CONTACT)
    
    
    SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/Description.txt")
    
    SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libgdal1-1.5.0 (>= 1.5.1-0), libfltk1.1 (>= 1.1.7-3), libcurl3 (>=7.15.5-1etch1), libfftw3-3 (>=3.1.2-3.1)" CACHE STRING "Debian package dependance" )
    
    MARK_AS_ADVANCED(CPACK_DEBIAN_PACKAGE_DEPENDS)
    
    
    SET(CPACK_PACKAGE_INSTALL_DIRECTORY "OrfeoToolbox-${OTB_VERSION_MAJOR}.${OTB_VERSION_MINOR}")
    
    SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/Copyright/OTBCopyright.txt")
    
    
    FILE(READ ${CPACK_PACKAGE_DESCRIPTION_FILE} CPACK_RPM_PACKAGE_DESCRIPTION)
    FILE(READ ${CPACK_PACKAGE_DESCRIPTION_FILE} CPACK_DEBIAN_PACKAGE_DESCRIPTION)