MapWizard: move most recently used URL on top of static server history (and make...
[marble:marble.git] / CMakeLists.txt
1 project(marble)
2
3 ####################################################
4 # CMake Settings 
5 SET(CMAKE_COLOR_MAKEFILE ON)
6 # SET(CMAKE_SKIP_RPATH ON)
7
8 ####################################################
9 # Generate the tiles with the tilecreator at compile time
10 # if this option is set, srtm.jpg will not be installed but the generated tiles instead
11 option(TILES_AT_COMPILETIME "generate the srtm tiles at compiletime" ON)
12
13 ####################################################
14 # Build a D-Bus interface for marble
15 # This is disabled by default for all win32, apple and Qt-Only builds  
16 if( QTONLY OR WIN32 OR APPLE)
17     option(BUILD_WITH_DBUS "Build the D-Bus interface for the Marble widget" OFF)
18 else( QTONLY OR WIN32 OR APPLE )
19     option(BUILD_WITH_DBUS "Build the D-Bus interface for the Marble widget" ON)
20 endif( QTONLY OR WIN32 OR APPLE )
21
22 ###################################################
23 # Check if KDE4 is available
24 if( NOT QTONLY AND NOT KDE4_FOUND )
25     find_package(KDE4 REQUIRED)
26     include (KDE4Defaults)
27     include (MacroLibrary)
28 endif( NOT QTONLY AND NOT KDE4_FOUND) 
29
30 ####################################################
31 # build unit tests
32
33 INCLUDE (CTest)
34 ENABLE_TESTING()
35
36
37 if( QTONLY AND NOT WIN32 )
38     option( BUILD_MARBLE_TESTS "build marble tests if building QTONLY " ON )
39     if( BUILD_MARBLE_TESTS )
40         INCLUDE(CTest)
41     endif( BUILD_MARBLE_TESTS )
42 else()
43     # for KDE builds this gets set in the kdeedu CMakeLists.txt
44     set( BUILD_MARBLE_TESTS OFF )
45 endif()
46
47 if( BUILD_MARBLE_TESTS )
48 #  SET (TEST_DATA_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/tests/test_data")
49   #where unit test binaries should be installed to and run from
50 #  SET (MARBLE_TEST_DIR   ${CMAKE_CURRENT_BINARY_DIR}/tests)
51 endif( BUILD_MARBLE_TESTS )
52
53 ####################################################
54 # minimum required cmake version
55 if( QTONLY )
56     # all previous releases lack QT_QTSCRIPT_LIBRARY needed for panoramio
57     # this might be replaced by a workaround
58     cmake_minimum_required( VERSION 2.4.8 )
59
60     #suppress the policy warnings while keeping the same behaviour
61     if( COMMAND cmake_policy )    
62     cmake_policy( SET CMP0005 OLD )
63     cmake_policy( SET CMP0003 OLD )
64     endif( COMMAND cmake_policy )
65     
66 endif( QTONLY )
67
68 ####################################################
69 # User configurable options
70 if(KDE4_FOUND)
71   set (QTONLY FALSE CACHE BOOL "Determines if we should compile for Qt only.")
72 else(KDE4_FOUND)
73   set (QTONLY TRUE CACHE BOOL "Determines if we should compile for Qt only.")
74 endif(KDE4_FOUND)
75
76 set (PEDANTIC FALSE CACHE BOOL "Determines if we should compile with -Wall -Werror.")
77 set (ENABLE_TESTS FALSE CACHE BOOL "Build unit tests?")
78 set (WITH_DESIGNER_PLUGIN FALSE CACHE BOOL "Build designer plugin?")
79 if (QTONLY)
80     set(LIB_SUFFIX "" CACHE STRING "Define suffix of directory name (32/64)" )
81     set(EXEC_INSTALL_PREFIX  ${CMAKE_INSTALL_PREFIX} CACHE PATH  "Base directory for executables and libraries" FORCE)
82 endif (QTONLY)
83 ####################################################
84 # Detect default for the user configurable MARBLE_DATA_PATH option
85
86 if(WIN32)
87   if(QTONLY)
88     set(data_dir data)
89     set(plugin_dir plugins)
90     set(CMAKE_MODULES_INSTALL_PATH ${CMAKE_ROOT}/Modules)
91   else(QTONLY)
92     set(data_dir ${DATA_INSTALL_DIR}/marble/data)
93     set(plugin_dir ${PLUGIN_INSTALL_DIR}/plugins/marble)
94     set(CMAKE_MODULES_INSTALL_PATH ${DATA_INSTALL_DIR}/cmake/modules)
95   endif(QTONLY)
96 else(WIN32)
97   if(APPLE)
98     # needed for finding bundle path in e.g. katlasdir.h
99     FIND_LIBRARY(APP_SERVICES_LIBRARY ApplicationServices )
100     MARK_AS_ADVANCED (APP_SERVICES_LIBRARY)
101     SET(MAC_EXTRA_LIBS ${APP_SERVICES_LIBRARY})
102     if (QTONLY)
103       # for Mac OS X, everything is put inside an application bundle
104       SET (CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}/)
105       # path for library references
106       SET (CMAKE_INSTALL_NAME_DIR @executable_path/lib)
107       #set info.plist properties on mac
108       SET( PROGNAME ${PROJECT_NAME})
109       SET( MACOSX_BUNDLE_ICON_FILE Marble.icns)
110       SET( MACOSX_BUNDLE_SHORT_VERSION_STRING 0.3.0 )
111       SET( MACOSX_BUNDLE_VERSION 0.3.0 )
112       SET( MACOSX_BUNDLE_LONG_VERSION_STRING Version 0.3.0 )
113       SET( MACOSX_BUNDLE_BUNDLE_NAME Marble)
114       #SET( CMAKE_OSX_ARCHITECTURES ppc;i386 ) #Comment out if not universal binary
115       SET( CMAKE_OSX_ARCHITECTURES i386 ) #Comment out if universal binary
116       #SET (lib_dir ${CMAKE_INSTALL_PREFIX}/Marble.app/Contents/MacOS/lib)
117       SET (data_dir   ${CMAKE_INSTALL_PREFIX}/Marble.app/Contents/MacOS/resources/data)
118       SET (plugin_dir   ${CMAKE_INSTALL_PREFIX}/Marble.app/Contents/MacOS/resources/plugins)
119     else (QTONLY) # KDE4 on Mac...
120       set(data_dir ${DATA_INSTALL_DIR}/marble/data)
121       set(plugin_dir ${PLUGIN_INSTALL_DIR}/plugins/marble)
122     endif (QTONLY)
123   else(APPLE) # Linux / bsd etc...
124     if (QTONLY)
125       set(data_dir ${CMAKE_INSTALL_PREFIX}/share/marble/data)
126       set(plugin_dir ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}/marble/plugins)
127       set(CMAKE_MODULES_INSTALL_PATH ${CMAKE_INSTALL_PREFIX}/share/marble/cmake)
128     else (QTONLY)
129       set(data_dir ${DATA_INSTALL_DIR}/marble/data)
130       set(plugin_dir ${PLUGIN_INSTALL_DIR}/plugins/marble)
131       set(CMAKE_MODULES_INSTALL_PATH ${DATA_INSTALL_DIR}/cmake/modules)
132     endif (QTONLY)
133   endif(APPLE)
134 endif(WIN32)
135
136 if (NOT MARBLE_DATA_PATH)
137   set (MARBLE_DATA_PATH ${data_dir})
138 endif (NOT MARBLE_DATA_PATH)
139
140 if (NOT MARBLE_PLUGIN_PATH)
141   set (MARBLE_PLUGIN_PATH ${plugin_dir})
142 endif (NOT MARBLE_PLUGIN_PATH)
143
144 if (NOT MARBLE_DATA_INSTALL_PATH)
145   set (MARBLE_DATA_INSTALL_PATH ${MARBLE_DATA_PATH})
146 endif (NOT MARBLE_DATA_INSTALL_PATH)
147
148 if (NOT MARBLE_PLUGIN_INSTALL_PATH)
149   set (MARBLE_PLUGIN_INSTALL_PATH ${MARBLE_PLUGIN_PATH})
150 endif (NOT MARBLE_PLUGIN_INSTALL_PATH)
151
152 #MESSAGE( STATUS, "MARBLE_PLUGIN_INSTALL_PATH: ${MARBLE_PLUGIN_INSTALL_PATH}" )
153
154 if(WIN32)
155   set (STATIC_BUILD FALSE CACHE BOOL "Link to static Qt libs (win32 only)?")
156 endif(WIN32)
157
158 # Variables to test new kml implementation
159 # Will removed in feature after success
160 #add_definitions(-DKML_DEBUG)
161 #add_definitions(-DKML_GSOC)
162
163 ####################################################
164 # Where to look first for cmake modules, 
165 # before ${CMAKE_ROOT}/Modules/ is checked
166 set ( CMAKE_MODULE_PATH 
167      ${CMAKE_SOURCE_DIR}/cmake/Modules 
168      ${CMAKE_CURRENT_SOURCE_DIR}
169      ${CMAKE_CURRENT_SOURCE_DIR}/src
170      ${CMAKE_CURRENT_SOURCE_DIR}/cmake_find_rules
171      ${CMAKE_CURRENT_SOURCE_DIR}/cmake_scripts
172      )
173
174 ####################################################
175 # Options for static build
176 if(STATIC_BUILD)
177   add_definitions(-DSTATIC_BUILD=1)
178 endif(STATIC_BUILD)
179
180 ####################################################
181 # Workaround FindQt4.cmake bug not finding 
182 # QtDesigner includes
183 if(APPLE)
184   if (NOT DEFINED ${QT_QTDESIGNER_INCLUDE_DIR})
185     set ( QT_QTDESIGNER_INCLUDE_DIR 
186     ${QT_LIBRARY_DIR}/QtDesigner.framework/Headers 
187     )
188   endif(NOT DEFINED ${QT_QTDESIGNER_INCLUDE_DIR})
189 endif(APPLE)
190
191 ####################################################
192 # Specific options for if building with Qt or kde4 libs
193
194 if(QTONLY)
195   find_package(Qt4 REQUIRED)
196   set( QT_USE_QTXML      ON )
197   set( QT_USE_QTNETWORK  ON )
198   set( QT_USE_QTTEST     ON )
199   set( QT_USE_QTSCRIPT   ON )
200   include( ${QT_USE_FILE} )
201
202   # add a flag to be able to distinguish between qt 
203   # and kde mode in the sources
204   add_definitions(-DQTONLY)
205
206   # Use M_PI under Windows
207   if( WIN32 )
208     add_definitions( -D_USE_MATH_DEFINES )
209   endif( WIN32 )
210 endif (QTONLY)
211
212 #############################################################
213 # Create marblesvnversion.h
214 # see http://public.kitware.com/pipermail/cmake/2006-July/010299.html
215 # We only do this if we are in a .svn dir
216
217 FIND_FILE(SVN_MARKER entries PATHS ${CMAKE_SOURCE_DIR}/.svn)
218
219 IF (NOT EXISTS SVN_MARKER)
220   SET (SVN_MARKER ${CMAKE_SOURCE_DIR}/CMakeLists.txt)  # Dummy file
221 ENDIF (NOT EXISTS SVN_MARKER)
222 # Add a custom command to drive the svn script whenever the svn entries
223 # file changes.
224 CONFIGURE_FILE(
225        "${CMAKE_CURRENT_SOURCE_DIR}/cmake_templates/svnscript.cmake.in_cmake"
226        "${CMAKE_CURRENT_BINARY_DIR}/svnscript.cmake"
227        @ONLY)
228
229 ADD_CUSTOM_COMMAND (
230   OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/marblesvnversion.h"
231   DEPENDS ${SVN_MARKER}
232   COMMAND ${CMAKE_COMMAND} -P "${CMAKE_CURRENT_BINARY_DIR}/svnscript.cmake"
233 )
234
235 # Add a custom target to drive the custom command.
236 ADD_CUSTOM_TARGET(svnversion 
237        ALL DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/marblesvnversion.h")
238
239
240 #############################################################
241 if (NOT MSVC)
242     # Its good programming practice to build with no warnings...
243     add_definitions( -Wall -Wextra -Wundef -Wnon-virtual-dtor -Woverloaded-virtual -Wno-long-long
244                      -Wchar-subscripts -Wcast-align -Wpointer-arith -Wformat-security )
245
246     # In pedantic mode, treat warnings as errors
247     if (PEDANTIC)
248         add_definitions( -Werror )
249     endif (PEDANTIC)
250 endif (NOT MSVC)
251
252 #############################################################
253 # Add a compiler def so that we can conditionally compile
254 # code in debug mode only (e.g. extra console messages)
255 IF (CMAKE_BUILD_TYPE MATCHES Debug)
256     IF(NOT MINGW)
257         ADD_DEFINITIONS(-DDEBUG)
258     ELSE(NOT MINGW)
259         REMOVE_DEFINITIONS( -DQT_NO_DEBUG )
260     ENDIF(NOT MINGW)
261 ENDIF (CMAKE_BUILD_TYPE MATCHES Debug)
262
263 ####################################################
264 # on Win32 set the debug postfix
265 if(WIN32)
266   # distinguish between debug and release plugin
267   SET(CMAKE_DEBUG_POSTFIX "d")
268 endif(WIN32)
269 # reenable this if you want to debug kml tags
270 #add_definitions("-DDEBUG_TAGS")
271 ####################################################
272 # add cmake macros
273 include( MarbleMacros )
274
275 ####################################################
276 # Add the include directories
277
278 include_directories(
279   ${CMAKE_CURRENT_SOURCE_DIR}
280   ${CMAKE_CURRENT_SOURCE_DIR}/src/lib
281   ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/Projections
282   ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/geodata
283   ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/geodata/data
284   ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/geodata/graphicsitem
285   ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/geodata/handlers/dgml
286   ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/geodata/parser
287   ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/geodata/writer
288   ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/geodata/scene
289   ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/graphicsview
290   ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/graphicsview/screengraphicsitem
291   ${CMAKE_CURRENT_BINARY_DIR}/src
292   ${CMAKE_CURRENT_BINARY_DIR}/src/lib
293 )
294 ####################################################
295 # Descend into subdirectories
296 IF( NOT QTONLY )
297   add_subdirectory(doc)
298 ENDIF()
299 add_subdirectory(src)
300 add_subdirectory(data)
301
302 include(DistTarget)
303
304 add_subdirectory(tests)
305
306 ####################################################
307 # Install extra files
308 install(FILES LICENSE.txt DESTINATION ${MARBLE_DATA_INSTALL_PATH})
309
310 ####################################################
311 # Install CMake module
312 if( CMAKE_MODULES_INSTALL_PATH )
313   install( FILES FindMarble.cmake
314            DESTINATION ${CMAKE_MODULES_INSTALL_PATH}  )
315 endif( CMAKE_MODULES_INSTALL_PATH )
316
317 ############################################################
318 # Uninstall stuff
319 if(QTONLY)
320     # only add the uninstall target for qt-only builds
321     CONFIGURE_FILE(
322         "${CMAKE_CURRENT_SOURCE_DIR}/cmake_templates/cmake_uninstall.cmake.in"
323         "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
324         IMMEDIATE @ONLY)
325
326     ADD_CUSTOM_TARGET(uninstall
327         "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
328 endif(QTONLY)
329
330 include(MarbleCPackOptions)
331 include(CPack)