3 cmake_minimum_required(VERSION 2.6)
4 cmake_policy(VERSION 2.6)
6 set(PACKAGE_VERSION "0.5.0")
7 set(PACKAGE_NAME "navit-svn")
9 set(PACKAGE_STRING "${PACKAGE} ${PACKAGE_VERSION}")
11 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")
12 include("${PROJECT_SOURCE_DIR}/cmake/navit_macros.cmake")
14 IF(NOT CMAKE_BUILD_TYPE)
15 SET(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE)
16 ENDIF(NOT CMAKE_BUILD_TYPE)
20 set(SHARE_DIR share/navit)
22 set(IMAGE_DIR share/navit/xpm)
25 ### Detect environment
26 foreach(EXTRA_MODULE ${EXTRA_MODULES})
27 add_module(${EXTRA_MODULE} "extra module specified" TRUE)
30 add_plugin(support/ezxml "native Glib found" FALSE)
31 add_plugin(support/glib "native Glib found" FALSE)
32 add_plugin(support/zlib "native zlib found" FALSE)
33 add_plugin(support/libpng "native libpng found" FALSE)
34 add_plugin(support/wordexp "native wordexp found" FALSE)
35 add_module(font/freetype "freetype not found" FALSE)
36 add_module(graphics/android "FreeType library not found" FALSE)
37 add_module(graphics/gd "FreeType library not found" FALSE)
38 add_module(graphics/gtk_drawing_area "FreeType library not found" FALSE)
39 add_module(graphics/opengl "FreeType library not found" FALSE)
40 add_module(graphics/sdl "FreeType library not found" FALSE)
41 add_module(graphics/qt_qpainter "Qt libraries not found" FALSE)
42 add_module(gui/qml "Qt Declarative not found" FALSE)
43 add_module(gui/gtk "GTK libs not found" FALSE)
44 add_module(vehicle/gpsd "gpsd lib not found" FALSE)
45 add_module(vehicle/gypsy "gypsy lib not found" FALSE)
46 add_module(binding/dbus "dbus-glib-1 not found" FALSE)
47 add_module(speech/dbus "dbus-glib-1 not found" FALSE)
48 add_module(vehicle/gpsd_dbus "dbus-glib-1 not found" FALSE)
49 add_module(speech/speech_dispatcher "speech_dispatcher lib not found" FALSE)
52 INCLUDE (CheckIncludeFiles)
53 INCLUDE (CheckLibraryExists)
54 INCLUDE (CheckFunctionExists)
58 find_package(Freetype)
61 find_package(SDL_image)
64 find_package(GTK2 2.6 COMPONENTS gtk)
67 find_package(DBusGLib)
69 libfind_pkg_check_modules(FONTCONFIG fontconfig)
71 SET(QT_USE_QTSVG TRUE)
72 SET(QT_USE_QTXML TRUE)
73 SET(QT_USE_QTDECLARATIVE TRUE)
74 find_package(Qt4 COMPONENTS QtCore QtGui QtXml QtDeclarative QtSvg OPTIONAL)
75 #pkg-config based detection
76 find_package(PkgConfig)
78 pkg_check_modules(QUESOGLC quesoglc)
79 pkg_check_modules(LIBGPSD libgpsd)
80 endif(PKG_CONFIG_FOUND)
82 CHECK_INCLUDE_FILES(wordexp.h HAVE_WORDEXP)
83 CHECK_INCLUDE_FILES(stdint.h HAVE_STDINT_H)
84 CHECK_INCLUDE_FILES(byteswap.h HAVE_BYTESWAP_H)
85 CHECK_LIBRARY_EXISTS(gypsy gypsy_control_get_default "" GYPSY_FOUND)
86 CHECK_INCLUDE_FILES(libspeechd.h HAVE_LIBSPEECHD)
89 #Required libraries, supplied with navit
92 include_directories(${Glib_INCLUDE_DIRS})
93 list(APPEND NAVIT_LIBS ${Glib_LIBRARIES})
95 set_with_reason(support/glib "Glib not found" TRUE)
99 include_directories(${Gmodule_INCLUDE_DIRS})
100 list(APPEND NAVIT_LIBS ${Gmodule_LIBRARIES})
104 include_directories(${ZLIB_INCLUDE_DIRS})
105 list(APPEND NAVIT_LIBS ${ZLIB_LIBRARIES})
107 message(STATUS "using internal zlib")
108 set_with_reason(support/zlib "native zlib missing" TRUE)
110 if(OPENSSL_CRYPTO_LIBRARIES)
111 set(HAVE_LIBCRYPTO 1)
112 include_directories(${OPENSSL_INCLUDE_DIR})
113 list(APPEND NAVIT_LIBS ${OPENSSL_CRYPTO_LIBRARIES})
117 # include_directories(${PNG_INCLUDE_DIRS})
118 # list(APPEND NAVIT_LIBS ${PNG_LIBRARY})
120 message(STATUS "using internal libpng")
121 set_with_reason(support/libpng "native libpng missing" TRUE)
123 if (NOT HAVE_WORDEXP)
124 message(STATUS "wordexp.h not found. use internal wordexp")
125 set_with_reason(support/wordexp "native wordexp missing" TRUE)
128 set_with_reason(support/ezxml "Glib not found" TRUE)
129 add_definitions(-DEZXML_NOMMAP)
133 include_directories(${FREETYPE_INCLUDE_DIRS})
134 set_with_reason(font/freetype "freetype found" TRUE "${FREETYPE_LIBRARY};${FONTCONFIG_LIBRARIES}")
135 add_subdirectory( "${CMAKE_CURRENT_SOURCE_DIR}/navit/fonts")
137 MESSAGE("No freetype library found, graphics modules may not be available")
138 set_with_reason(graphics/android "FreeType library not found" FALSE)
139 set_with_reason(graphics/gd "FreeType library not found" FALSE)
140 set_with_reason(graphics/gtk_drawing_area "FreeType library not found" FALSE)
141 set_with_reason(graphics/opengl "FreeType library not found" FALSE)
142 set_with_reason(graphics/sdl "FreeType library not found" FALSE)
143 endif(FREETYPE_FOUND)
146 set(HAVE_FONTCONFIG 1)
147 endif(FONTCONFIG_FOUND)
150 if (QT_QTCORE_FOUND AND QT_QTGUI_FOUND AND FREETYPE_FOUND)
151 include(${QT_USE_FILE})
152 set_with_reason(graphics/qt_qpainter "Qt libraries found" TRUE ${QT_LIBRARIES})
154 if (QT_QTDECLARATIVE_FOUND AND QT_QTXML_FOUND)
155 set_with_reason(gui/qml "Qt Declarative found" TRUE ${QT_LIBRARIES})
160 elseif( USE_SVG AND graphics/qt_qpainter)
161 message( WARNING "QT compiled without SVG support")
167 include_directories(${GTK2_INCLUDE_DIRS})
169 set_with_reason(gui/gtk "GTK libs found" TRUE ${GTK2_LIBRARIES})
171 set_with_reason(graphics/gtk_drawing_area "GTK libs found" TRUE ${GTK2_LIBRARIES})
172 endif(FREETYPE_FOUND)
175 CHECK_LIBRARY_EXISTS(freeimage FreeImage_Load "" FREEIMAGE_FOUND)
176 if (QUESOGLC_FOUND AND FREETYPE_FOUND)
177 if (OPENGL_FOUND AND OPENGL_GLU_FOUND AND OPENGL_INCLUDE_DIR AND FREEIMAGE_FOUND)
178 message (STATUS "opengl found: ${OPENGL_gl_LIBRARY}")
179 include_directories(${OPENGL_INCLUDE_DIR})
180 set_with_reason(graphics/opengl "Found OpenGL and Quesoglc" TRUE ${OPENGL_gl_LIBRARY};${OPENGL_glu_LIBRARY};${GLUT_glut_LIBRARY};freeimage)
182 message (STATUS "opengl not found")
185 message (STATUS "no glc implementation found. Install Quesoglc for OpenGL support")
186 endif(QUESOGLC_FOUND AND FREETYPE_FOUND)
188 if(SDL_FOUND AND SDLIMAGE_FOUND AND FREETYPE_FOUND)
192 list(APPEND SDL_LIBRARY ${SDLTTF_LIBRARY})
194 set_with_reason(graphics/sdl "SDL/SDL_image libs found" TRUE ${SDL_LIBRARY} ${SDLIMAGE_LIBRARY})
195 endif(SDL_FOUND AND SDLIMAGE_FOUND AND FREETYPE_FOUND)
198 set_with_reason(vehicle/gpsd "gpsd lib found" TRUE)
202 set_with_reason(vehicle/gypsy "gypsy lib found" TRUE)
206 include_directories(${DBusGLib_INCLUDE_DIRS})
207 set_with_reason(binding/dbus "dbus-glib-1 found" TRUE ${DBusGLib_LIBRARIES})
208 set_with_reason(speech/dbus "dbus-glib-1 found" TRUE ${DBusGLib_LIBRARIES})
209 set_with_reason(vehicle/gpsd_dbus "dbus-glib-1 found" TRUE ${DBusGLib_LIBRARIES})
213 set_with_reason(speech/speech_dispatcher "speech_dispatcher lib found" TRUE speechd)
214 endif(HAVE_LIBSPEECHD)
217 add_module(graphics/null "Default" TRUE)
218 add_module(osd/core "Default" TRUE)
219 add_module(vehicle/demo "Default" TRUE)
220 add_module(vehicle/file "Default" TRUE)
221 add_module(vehicle/null "Default" FALSE)
222 add_module(gui/internal "Default" TRUE)
223 add_module(map/binfile "Default" TRUE)
224 add_module(map/filter "Default" TRUE)
225 add_module(map/mg "Default" TRUE)
226 add_module(map/shapefile "Default" TRUE)
227 add_module(map/textfile "Default" TRUE)
228 add_module(map/csv "Default" TRUE)
229 add_module(speech/cmdline "Default" TRUE)
231 #Modules without test yet
232 add_module(plugin/pedestrian "Default" FALSE)
233 add_module(speech/android "Default" FALSE)
234 add_module(speech/espeak "Default" FALSE)
235 add_plugin(support/espeak "Default" FALSE)
236 add_module(vehicle/android "Default" FALSE)
237 add_module(vehicle/iphone "Default" FALSE)
238 add_module(vehicle/maemo "Default" FALSE)
239 add_module(vehicle/wince "Default" FALSE)
242 add_feature(USE_PLUGINS "default" TRUE)
243 add_feature(SHARED_LIBNAVIT "default" FALSE)
244 add_feature(USE_ROUTING "default" TRUE)
245 add_feature(USE_SVG "default" TRUE)
246 add_feature(SVG2PNG "default" TRUE)
247 add_feature(SAMPLE_MAP "default" TRUE)
249 IF(NOT svg2png_scaling)
250 set(svg2png_scaling 32 48 96)
252 IF(NOT svg2png_scaling_flag)
253 set(svg2png_scaling_flag 32 48 96)
255 IF(NOT svg2png_scaling_nav)
256 set(svg2png_scaling_nav 32 48 96)
259 add_feature(DBUS_USE_SYSTEM_BUS "default" FALSE)
260 add_feature(BUILD_MAPTOOL "default" TRUE)
261 add_feature(XSL_PROCESSING "default" TRUE)
263 ### Platform specific settings
265 SET(CMAKE_EXECUTABLE_SUFFIX ".exe")
266 add_module(graphics/win32 "Windows detected" TRUE)
267 add_plugin(support/win32 "Windows detected" TRUE)
269 set_with_reason(support/ezxml "Windows detected" TRUE)
270 set_with_reason(speech/espeak "Windows detected" TRUE)
271 set_with_reason(support/espeak "Windows detected" TRUE)
273 # vehicle_file is broken for windows. use vehicle_wince instead
274 # whicle_wince isn't buildable on non-CE windows ssytems
276 # plugins currently not supported on windows
277 set_with_reason(USE_PLUGINS "win32: currently not supported" FALSE)
279 set(HAVE_API_WIN32_BASE 1)
282 if(NOT graphics/qt_qpainter)
283 set_with_reason(USE_SVG "win32: SVGs currently not supported" FALSE)
284 else(NOT graphics/qt_qpainter)
285 MESSAGE(STATUS "win32: SVGs may not be supported by every available graphics")
286 endif(NOT graphics/qt_qpainter)
294 if(HAVE_GTK2 AND NOT MSVC)
295 #GTK requires special compile flags
296 add_definitions("-mms-bitfields")
297 endif(HAVE_GTK2 AND NOT MSVC)
298 if(MSVC AND support/espeak)
299 add_definitions(-DPLATFORM_WINDOWS)
300 endif(MSVC AND support/espeak)
302 add_plugin(intl_cmake "windows detected" TRUE)
303 set(USE_LIBGNUINTL TRUE)
306 set(HAVE_API_WIN32 1)
307 list(APPEND NAVIT_LIBS winmm)
310 add_plugin(support/libc "wince detected" TRUE)
311 set(HAVE_API_WIN32_CE 1)
312 set(BUILD_MAPTOOL FALSE)
313 set_with_reason(vehicle/file "wince: currently broken" FALSE)
316 set(LOCALEDIR "${LOCALE_DIR}/locale")
318 find_program(BZCAT NAMES bzcat)
320 if(CMAKE_CROSSCOMPILING)
321 cfg_feature(SAMPLE_MAP "downloading binary map because of cross compiling" TRUE)
323 cfg_feature(SAMPLE_MAP "downloading binary map because of missing bzcat" TRUE)
324 endif(CMAKE_CROSSCOMPILING)
327 find_program(SAXON NAMES saxon saxon8 saxon-xslt)
329 cfg_feature(XSL_PROCESSING "Saxon missing" FALSE)
333 find_program(ANDROID_LOCATION NAMES android android.bat)
334 find_program(ANT_LOCATION NAMES ant)
335 if (NOT ANT_LOCATION)
336 message_error("Could not find ant. Please install ant and add it to the search path.")
338 if (NOT ANDROID_LOCATION)
339 message_error( "Could not find 'Android SDK and AVD Manager'. Please install the android sdk and add the <android-sdk>/tools directory to the search path.")
341 if (NOT XSL_PROCESSING)
342 message(WARNING "XSLT processing disabled. You have to configure navit.xml yourself, or enable XSLT processing.")
344 set(XSLTS "android;${XSLTS}" CACHE STRING "define a semicolon seperated list of XSLTs to process")
345 list(APPEND NAVIT_LIBS log)
346 set(HAVE_API_ANDROID 1)
347 set_with_reason(graphics/android "Android detected" TRUE)
348 set_with_reason(speech/android "Android detected" TRUE)
349 set_with_reason(vehicle/android "Android detected" TRUE)
350 cfg_feature(SHARED_LIBNAVIT "Android detected" TRUE)
352 add_feature(XPM2PNG "Android detected" TRUE)
353 # todo: fixe undef. ref to timegm (->timegm64)
354 cfg_feature(BUILD_MAPTOOL "Android detected" FALSE)
355 set(NAVIT_COMPILE_FLAGS "${NAVIT_COMPILE_FLAGS} -fPIC")
360 find_program(IMAGE_CONVERTER NAMES convert)
361 execute_process(COMMAND ${IMAGE_CONVERTER} -list format OUTPUT_VARIABLE CONVERT_FORMATS)
362 if(CONVERT_FORMATS MATCHES ".*XPM[ *][ ]*XPM[ ]*r[w-].*")
363 message(STATUS ${IMAGE_CONVERTER})
364 set(IMAGE_CONVERTER_XPM ${IMAGE_CONVERTER})
368 if (NOT IMAGE_CONVERTER_SVGZ)
369 set (SVG_CONVERTER_PROGS rsvg-convert ksvgtopng ksvgtopng4 convert)
370 find_program(IMAGE_CONVERTER_SVGZ NAMES ${SVG_CONVERTER_PROGS})
371 endif(NOT IMAGE_CONVERTER_SVGZ)
372 if (NOT IMAGE_CONVERTER_SVG)
373 set(IMAGE_CONVERTER_SVG ${IMAGE_CONVERTER_SVGZ})
374 endif(NOT IMAGE_CONVERTER_SVG)
376 message(STATUS "SVG2PNG-Converter: ${IMAGE_CONVERTER_SVGZ}")
377 if (NOT IMAGE_CONVERTER_SVGZ)
378 message(WARNING "No SVG2PNG converter found. Please install one of the following tools: ${SVG_CONVERTER_PROGS}, or imagemagick with svg support")
379 set_with_reason(SVG2PNG "no converter found" FALSE)
380 endif(NOT IMAGE_CONVERTER_SVGZ)
384 message(STATUS "XPM2PNG-Converter: ${IMAGE_CONVERTER_XPM}")
385 if (NOT IMAGE_CONVERTER_XPM)
386 message(WARNING "No XPM2PNG converter found. Please install imagemagick with xpm support")
387 set_with_reason(XPM2PNG "no converter found" FALSE)
388 endif(NOT IMAGE_CONVERTER_XPM)
391 foreach(PLUMO ${ALL_PLUGINS} ${ALL_MODULES} ${ALL_FEATURES})
392 set(OLDVALUE ${${PLUMO}})
393 OPTION(${PLUMO} "Enable/Disable module/plugin/support" ${${PLUMO}})
394 if ( (OLDVALUE AND NOT ${PLUMO}) OR (${PLUMO} AND NOT OLDVALUE))
395 set(${PLUMO}_REASON "User defined")
398 set(XSLTS ${XSLTS} CACHE STRING "define a semicolon seperated list of XSLTs to process")
402 set(MODULE_BUILD_TYPE "MODULE")
403 add_definitions("-fPIC")
404 list(APPEND NAVIT_LIBS dl)
406 set(MODULE_BUILD_TYPE "STATIC")
408 message(STATUS "Use plugins: ${MODULE_BUILD_TYPE}")
411 set(NAVIT_CORE_BUILD_TYPE "STATIC")
412 else(SHARED_LIBNAVIT)
413 set(NAVIT_CORE_BUILD_TYPE "SHARED")
414 endif(SHARED_LIBNAVIT)
416 CHECK_INCLUDE_FILES (malloc.h HAVE_MALLOC_H)
417 CHECK_INCLUDE_FILES ("sys/param.h;sys/mount.h" HAVE_SYS_MOUNT_H)
418 CHECK_INCLUDE_FILES (unistd.h HAVE_UNISTD_H)
419 CHECK_FUNCTION_EXISTS (getcwd HAVE_GETCWD)
421 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
423 add_definitions("-Wall")
425 if (NOT NAVIT_DEPENDENCY_ERROR)
426 message("\nSummary:\n")
428 set(SUMMARY_COMPONENTS ${ALL_PLUGINS} ${ALL_MODULES})
429 list(SORT SUMMARY_COMPONENTS)
432 foreach ( SUMMARY_COMP ${SUMMARY_COMPONENTS})
433 # split path to type and name
434 string(REPLACE "/" ";" SUMMARY_COMP_LIST ${SUMMARY_COMP})
435 list(GET SUMMARY_COMP_LIST 0 SUMMARY_COMP_TYPE)
436 list(LENGTH SUMMARY_COMP_LIST SUMMARY_COMP_LIST_LENGTH)
437 if ( SUMMARY_COMP_LIST_LENGTH GREATER 1 )
438 list(GET SUMMARY_COMP_LIST 1 SUMMARY_COMP_NAME)
440 set(SUMMARY_COMP_NAME ${SUMMARY_COMP})
442 if ( NOT ${LAST_TYPE} STREQUAL ${SUMMARY_COMP_TYPE})
443 message("\n--->>> ${SUMMARY_COMP_TYPE}")
444 set(LAST_TYPE ${SUMMARY_COMP_TYPE})
447 message("Enabled ${SUMMARY_COMP_NAME} ( ${${SUMMARY_COMP}_REASON} )")
449 message("Disabled ${SUMMARY_COMP_NAME} ( ${${SUMMARY_COMP}_REASON} )")
453 list(SORT ALL_FEATURES)
454 message("\n--->>> Features")
455 foreach ( FEATURE ${ALL_FEATURES})
457 message("Enabled ${FEATURE} ( ${${FEATURE}_REASON} )")
459 message("Disabled ${FEATURE} ( ${${FEATURE}_REASON} )")
465 message("\nProcessing XSLTS: ${XSLTS}")
467 message("\nProcessing XSLTS: NONE")
469 endif(XSL_PROCESSING)
471 message("\nTo configure your build use 'cmake -L' to find changeable variables and run cmake again with 'cmake -D <var-name>=<your value> ...'.")
472 endif(NOT NAVIT_DEPENDENCY_ERROR)
474 add_subdirectory (navit)
475 add_subdirectory (man)
478 execute_process(COMMAND echo "<test/>" COMMAND xgettext -L glade - RESULT_VARIABLE GETTEXT_RET)
479 if ("${GETTEXT_RET}" STREQUAL "0")
480 set(XGETTEXT_GLADE TRUE)
482 set(XGETTEXT_GLADE FALSE)
484 add_subdirectory (po)
487 install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/locale DESTINATION ${LOCALE_DIR})