1##################################################################################
2# This currently sets up the options for the WARNING FLAGS for the compiler we are generating for.
3# Currently only have gnu
4##################################################################################
5MACRO(OSSIM_ADD_COMMON_LIBRARY_FLAGS)
6   OPTION(OSSIM_COMPILE_WITH_FULL_WARNING "OSSIM developers : Compilation with FULL warning (use only for ossim developers)." OFF)
7   MARK_AS_ADVANCED(OSSIM_COMPILE_WITH_FULL_WARNING)
8
9   IF(OSSIM_COMPILE_WITH_FULL_WARNING)
10     IF(CMAKE_COMPILER_IS_GNUCXX)
11       SET(OSSIM_COMMON_COMPILER_FLAGS "${OSSIM_COMMON_COMPILER_FLAGS} -Wall -Wunused  -Wunused-function  -Wunused-label  -Wunused-parameter -Wunused-value -Wunused-variable -Wuninitialized -Wsign-compare -Wparentheses -Wunknown-pragmas -Wswitch" CACHE STRING "List of compilation parameters.")
12     ENDIF(CMAKE_COMPILER_IS_GNUCXX)
13   ENDIF(OSSIM_COMPILE_WITH_FULL_WARNING)
14
15   IF(WIN32)
16      #---
17      # This option is to enable the /MP to compile multiple source files by using
18      # multiple processes.
19      #---
20      OPTION(WIN32_USE_MP "Set to ON to build OSSIM with the /MP option (Visual Studio 2005 and above)." OFF)
21      MARK_AS_ADVANCED(WIN32_USE_MP)
22      IF(WIN32_USE_MP)
23         SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
24      ENDIF(WIN32_USE_MP)
25
26      set(OSSIM_COMMON_COMPILER_FLAGS "${OSSIM_COMMON_COMPILER_FLAGS} -DNOMINMAX -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE")
27
28      set(DEBUG_BUILD OFF)
29      IF(CMAKE_BUILD_TYPE)
30         string ( COMPARE EQUAL ${CMAKE_BUILD_TYPE} "Debug" DEBUG_BUILD )
31      ENDIF(CMAKE_BUILD_TYPE)
32
33      ###
34      # Currently must set /FORCE:MULTIPLE for Visual Studio 2010. 29 October 2010 - drb
35      ###
36
37      IF(MSVC)
38         message("MSVC_VERSION: ${MSVC_VERSION}")
39
40         if( (MSVC_VERSION GREATER 1600) OR (MSVC_VERSION EQUAL 1600))
41            if (DEBUG_BUILD)
42               SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /NODEFAULTLIB:LIBCMTD /NODEFAULTLIB:MSVCRT /FORCE:MULTIPLE /MANIFEST:NO")
43               SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:LIBCMTD /FORCE:MULTIPLE /MANIFEST:NO")
44
45            else ( )
46               SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /NODEFAULTLIB:LIBCMTD /FORCE:MULTIPLE /MANIFEST:NO")
47               SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:LIBCMTD /FORCE:MULTIPLE /MANIFEST:NO")
48             endif (DEBUG_BUILD)
49
50            SET(OSSIM_COMMON_COMPILER_FLAGS "${OSSIM_COMMON_COMPILER_FLAGS} /EHsc")
51            SET(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /NODEFAULTLIB:LIBCMTD /FORCE:MULTIPLE")
52         else( )
53            SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /NODEFAULTLIB:LIBCMTD")
54         endif()
55      ENDIF(MSVC)
56   ENDIF(WIN32)
57
58   OPTION(OSSIM_ADD_FPIC "Compilation with FPIC flag if static library.  The default is on since we have plugins that need to be shared." ON)
59   MARK_AS_ADVANCED(OSSIM_ADD_FPIC)
60   IF(OSSIM_ADD_FPIC)
61       IF(UNIX AND NOT BUILD_SHARED_LIBS)
62          STRING(REGEX MATCH "fPIC" REG_MATCHED "${OSSIM_COMMON_COMPILER_FLAGS}")
63          if(NOT REG_MATCHED)
64             set(OSSIM_COMMON_COMPILER_FLAGS "${OSSIM_COMMON_COMPILER_FLAGS} -fPIC")
65          endif(NOT REG_MATCHED)
66       ENDIF(UNIX AND NOT BUILD_SHARED_LIBS)
67   ENDIF(OSSIM_ADD_FPIC)
68
69   MARK_AS_ADVANCED(OSSIM_COMMON_COMPILER_FLAGS)
70ENDMACRO(OSSIM_ADD_COMMON_LIBRARY_FLAGS)
71
72MACRO(USE_CXX11)
73  if (CMAKE_VERSION VERSION_LESS "3.1")
74    if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
75      set (CMAKE_CXX_FLAGS "--std=gnu++11 ${CMAKE_CXX_FLAGS}")
76    elseif (APPLE)
77      set (CMAKE_CXX_FLAGS "--std=gnu++11 ${CMAKE_CXX_FLAGS}")
78    endif()
79  else ()
80   set(CMAKE_CXX_STANDARD 11)
81   set(CMAKE_CXX_STANDARD_REQUIRED ON)
82   set(CMAKE_CXX_EXTENSIONS OFF)
83  endif ()
84ENDMACRO(USE_CXX11)
85
86MACRO(OSSIM_ADD_COMMON_SETTINGS)
87   ###################################################################################
88   # Set defaults for Universal Binaries. We want 32-bit Intel/PPC on 10.4
89   # and 32/64-bit Intel/PPC on >= 10.5. Anything <= 10.3 doesn't support.
90   # These are just defaults/recommendations, but how we want to build
91   # out of the box. But the user needs to be able to change these options.
92   # So we must only set the values the first time CMake is run, or we
93   # will overwrite any changes the user sets.
94   # FORCE is used because the options are not reflected in the UI otherwise.
95   # Seems like a good place to add version specific compiler flags too.
96   ###################################################################################
97
98   USE_CXX11()
99
100   IF(APPLE)
101      # use, i.e. don't skip the full RPATH for the build tree
102        SET(CMAKE_SKIP_BUILD_RPATH  FALSE)
103
104        # when building, don't use the install RPATH already
105        # (but later on when installing)
106        SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
107
108        SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}")
109
110        # add the automatically determined parts of the RPATH
111        # which point to directories outside the build tree to the install RPATH
112        SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
113
114
115        # the RPATH to be used when installing, but only if it's not a system directory
116        LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir)
117
118        IF("${isSystemDir}" STREQUAL "-1")
119           SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}")
120        ENDIF("${isSystemDir}" STREQUAL "-1")
121        SET(TEMP_CMAKE_OSX_ARCHITECTURES "")
122        SET(CMAKE_OSX_SYSROOT "${CMAKE_OSX_SYSROOT}")
123        # This is really fragile, but CMake doesn't provide the OS system
124        # version information we need. (Darwin versions can be changed
125        # independently of OS X versions.)
126        # It does look like CMake handles the CMAKE_OSX_SYSROOT automatically.
127        IF(EXISTS /Developer/SDKs/MacOSX10.6.sdk)
128            SET(TEMP_CMAKE_OSX_ARCHITECTURES "i386;x86_64")
129            IF(NOT ("${CMAKE_CXX_FLAGS}" MATCHES "mmacosx-version-min"))
130               SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=10.5 -ftree-vectorize -fvisibility-inlines-hidden" CACHE STRING "Flags used by the compiler during all build types.")
131            ENDIF()
132        ELSEIF(EXISTS /Developer/SDKs/MacOSX10.5.sdk)
133            # 64-bit compiles are not supported with Carbon. We should enable
134            SET(TEMP_CMAKE_OSX_ARCHITECTURES "i386;x86_64")
135            SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=10.5 -ftree-vectorize -fvisibility-inlines-hidden" CACHE STRING "Flags used by the compiler during all build types.")
136        ELSEIF(EXISTS /Developer/SDKs/MacOSX10.4u.sdk)
137            SET(TEMP_CMAKE_OSX_ARCHITECTURES "i386;ppc")
138            SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=10.4 -ftree-vectorize -fvisibility-inlines-hidden" CACHE STRING "Flags used by the compiler during all build types.")
139        ELSE()
140            # No Universal Binary support
141            # Should break down further to set the -mmacosx-version-min,
142            # but the SDK detection is too unreliable here.
143        ENDIF()
144        IF(NOT CMAKE_OSX_ARCHITECTURES)
145           SET(CMAKE_OSX_ARCHITECTURES "${TEMP_CMAKE_OSX_ARCHITECTURES}" CACHE STRING "Build architectures for OSX" FORCE)
146        ENDIF()
147        OPTION(OSSIM_BUILD_APPLICATION_BUNDLES "Enable the building of applications and examples as OSX Bundles" OFF)
148
149       MARK_AS_ADVANCED(CMAKE_OSX_ARCHITECTURES)
150       MARK_AS_ADVANCED(CMAKE_CXX_FLAGS)
151       MARK_AS_ADVANCED(CMAKE_OSX_SYSROOT)
152       MARK_AS_ADVANCED(OSSIM_BUILD_APPLICATION_BUNDLES)
153   ENDIF(APPLE)
154
155  SET(MAKE_APPENDS_BUILD_TYPE "NO")
156  IF(CMAKE_GENERATOR)
157     STRING(TOUPPER ${CMAKE_GENERATOR} CMAKE_GENERATOR_TEST_UPPER)
158     STRING(COMPARE EQUAL "${CMAKE_GENERATOR_TEST_UPPER}" "XCODE" CMAKE_GENERATOR_TEST)
159     IF(CMAKE_GENERATOR_TEST)
160          SET(MAKE_APPENDS_BUILD_TYPE "YES")
161     ELSE()
162          STRING(COMPARE NOTEQUAL "." "${CMAKE_CFG_INTDIR}" CMAKE_GENERATOR_TEST)
163          IF(CMAKE_GENERATOR_TEST)
164             SET(MAKE_APPENDS_BUILD_TYPE "YES")
165          ENDIF()
166     ENDIF()
167  ENDIF(CMAKE_GENERATOR)
168   OSSIM_ADD_COMMON_LIBRARY_FLAGS()
169
170   # Dynamic vs Static Linking
171   OPTION(BUILD_SHARED_LIBS "Set to ON to build OSSIM for dynamic linking.  Use OFF for static." ON)
172   OPTION(BUILD_OSSIM_FRAMEWORKS "Set to ON to build OSSIM for framework if BUILD_SHARED_LIBS is on.  Use OFF for dylib if BUILD_SHARED_LIBS is on." ON)
173   IF(BUILD_SHARED_LIBS)
174       SET(OSSIM_USER_DEFINED_DYNAMIC_OR_STATIC "SHARED")
175   ELSE ()
176       SET(OSSIM_USER_DEFINED_DYNAMIC_OR_STATIC "STATIC")
177   ENDIF()
178
179#   IF(NOT OSSIM_LIBRARY_BUILD_OUTPUT_DIRECTORY)
180#      SET(OSSIM_LIBRARY_BUILD_OUTPUT_DIRECTORY ${${PROJECT_NAME}_SOURCE_DIR}/lib)
181#   ENDIF(NOT OSSIM_LIBRARY_BUILD_OUTPUT_DIRECTORY)
182#   IF(NOT OSSIM_RUNTIME_BUILD_OUTPUT_DIRECTORY)
183#      SET(OSSIM_RUNTIME_BUILD_OUTPUT_DIRECTORY ${${PROJECT_NAME}_SOURCE_DIR}/bin)
184#   ENDIF(NOT OSSIM_RUNTIME_BUILD_OUTPUT_DIRECTORY)
185
186   # Libraries and archives go to lib or lib64.
187   get_property(LIB64 GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS)
188   if(LIB64)
189      set(LIBSUFFIX 64)
190   else()
191      set(LIBSUFFIX "")
192   endif()
193
194   IF(MAKE_APPENDS_BUILD_TYPE)
195      SET(BUILD_FRAMEWORK_DIR "")
196      SET(BUILD_RUNTIME_DIR   "bin")
197      SET(BUILD_LIBRARY_DIR lib${LIBSUFFIX})
198      SET(BUILD_ARCHIVE_DIR lib${LIBSUFFIX})
199      SET(BUILD_INCLUDE_DIR   "include")
200   ELSE()
201      IF(NOT DEFINED BUILD_FRAMEWORK_DIR)
202         SET(BUILD_FRAMEWORK_DIR "")
203      ENDIF()
204      IF(NOT DEFINED BUILD_RUNTIME_DIR)
205         SET(BUILD_RUNTIME_DIR   "bin")
206      ENDIF()
207      IF(NOT DEFINED BUILD_LIBRARY_DIR)
208         SET(BUILD_LIBRARY_DIR lib${LIBSUFFIX})
209      ENDIF()
210      IF(NOT DEFINED BUILD_ARCHIVE_DIR)
211         SET(BUILD_ARCHIVE_DIR lib${LIBSUFFIX})
212      ENDIF()
213      IF(NOT DEFINED BUILD_INCLUDE_DIR)
214         SET(BUILD_INCLUDE_DIR   "include")
215      ENDIF()
216   ENDIF()
217
218   SET(INSTALL_FRAMEWORK_DIR "Frameworks")
219   SET(INSTALL_RUNTIME_DIR   "bin")
220   SET(INSTALL_INCLUDE_DIR   "include")
221   set(INSTALL_LIBRARY_DIR lib${LIBSUFFIX} CACHE PATH "Installation directory for libraries")
222   set(INSTALL_ARCHIVE_DIR lib${LIBSUFFIX} CACHE PATH "Installation directory for archive")
223   mark_as_advanced(LIBSUFFIX)
224   mark_as_advanced(INSTALL_LIBRARY_DIR)
225   mark_as_advanced(INSTALL_ARCHIVE_DIR)
226
227   IF(WIN32)
228       IF(NOT DEFINED CMAKE_DEBUG_POSTFIX)
229          SET(CMAKE_DEBUG_POSTFIX "d" CACHE STRING "Debug variable used to add the postfix to dll's and exe's.  Defaults to 'd' on WIN32 builds and empty on all other platforms" FORCE)
230       ENDIF()
231   ENDIF()
232   IF(NOT CMAKE_BUILD_TYPE)
233     SET(CMAKE_BUILD_TYPE Release)
234   ENDIF(NOT CMAKE_BUILD_TYPE)
235
236   # force some variables that could be defined in the command line to be written to cache
237   SET( CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" CACHE PATH
238     "Where to install ${PROJECT_NAME}" FORCE )
239   SET( CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE}" CACHE STRING
240     "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE )
241   SET( CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" CACHE PATH
242     "Path to custom CMake Modules" FORCE )
243   SET( INSTALL_DOC "${INSTALL_DOC}" CACHE BOOL
244     "Set to OFF to skip build/install Documentation" FORCE )
245
246   IF(NOT OSSIM_DEV_HOME)
247      SET(OSSIM_DEV_HOME "$ENV{OSSIM_DEV_HOME}")
248      GET_FILENAME_COMPONENT(OSSIM_DEV_HOME "${OSSIM_DEV_HOME}" ABSOLUTE)
249   ENDIF(NOT OSSIM_DEV_HOME)
250   IF(NOT CMAKE_INSTALL_PREFIX)
251      SET(CMAKE_INSTALL_PREFIX "$ENV{OSSIM_INSTALL_PREFIX}")
252       GET_FILENAME_COMPONENT(CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" ABSOLUTE)
253   ENDIF(NOT CMAKE_INSTALL_PREFIX)
254   IF(NOT OSSIM_DEPENDENCIES)
255      SET(OSSIM_DEPENDENCIES "$ENV{OSSIM_DEPENDENCIES}")
256      GET_FILENAME_COMPONENT(OSSIM_DEPENDENCIES "${OSSIM_DEPENDENCIES}" ABSOLUTE)
257   ENDIF(NOT OSSIM_DEPENDENCIES)
258
259   # Define paths used by package finders defined in this directory:
260   IF(OSSIM_INSTALL_PREFIX)
261      SET(CMAKE_LIBRARY_PATH "${CMAKE_LIBRARY_PATH};${OSSIM_INSTALL_PREFIX}/lib${LIBSUFFIX}")
262      SET(CMAKE_INCLUDE_PATH "${CMAKE_INCLUDE_PATH};${OSSIM_INSTALL_PREFIX}/include")
263   ENDIF()
264   IF(OSSIM_DEPENDENCIES)
265      SET(CMAKE_LIBRARY_PATH "${CMAKE_LIBRARY_PATH};${OSSIM_DEPENDENCIES}/lib;${OSSIM_DEPENDENCIES}/lib64")
266      SET(CMAKE_INCLUDE_PATH "${CMAKE_INCLUDE_PATH};${OSSIM_DEPENDENCIES}/include;${OSSIM_DEPENDENCIES}/kakadu/include;${OSSIM_DEPENDENCIES}")
267   ENDIF()
268#   SET(CMAKE_LIBRARY_PATH "${CMAKE_LIBRARY_PATH};/usr/lib;/usr/local/lib;/usr/lib64;/usr/lib/x86_64-linux-gnu")
269   SET(CMAKE_INCLUDE_PATH "${CMAKE_INCLUDE_PATH};${OSSIM_DEV_HOME}/ossim/include;/usr/include;/usr/local/include")
270
271   #################################### ADd some common options for all modules to use ###################################
272   OPTION(BUILD_OSSIM_VIDEO "Set to ON to build the video decoding library.  Use OFF to skip this module." OFF)
273   OPTION(BUILD_OSSIM_PLANET "Set to ON to build the 3-D visualization module.  Use OFF to skip this module." OFF)
274   OPTION(BUILD_OSSIM_GUI "Set to ON to build the new ossimGui library and geocell application." ON)
275   OPTION(BUILD_OMS "Set to ON to build the oms api library." ON)
276   OPTION(BUILD_OSSIM_WMS "Set to ON to build the wms api library." ON)
277
278   SET(CMAKE_INCLUDE_DIRS_FILE "${CMAKE_BINARY_DIR}/CMakeIncludeDirs.txt")
279   SET(CMAKE_FILENAMES_FILE "${CMAKE_BINARY_DIR}/CMakeFileNames.txt")
280
281ENDMACRO(OSSIM_ADD_COMMON_SETTINGS)
282
283
284OSSIM_ADD_COMMON_SETTINGS()
285