2a69b93b69b1f8b307fabd5d42bd75166d7a48fd
[profile/ivi/navit.git] / navit / CMakeLists.txt
1 set(MACOSX_BUNDLE_GUI_IDENTIFIER "org.navitproject.navit")
2 set(MACOSX_BUNDLE_BUNDLE_NAME "Navit")
3 project(navit C)
4
5 if(DEFINED CMAKE_CXX_COMPILER AND CMAKE_CXX_COMPILER MATCHES "^$")
6   set(CMAKE_CXX_COMPILER CMAKE_CXX_COMPILER-NOTFOUND)
7 endif(DEFINED CMAKE_CXX_COMPILER AND CMAKE_CXX_COMPILER MATCHES "^$") 
8 if (NOT DISABLE_CXX)
9   enable_language(CXX OPTIONAL)
10 endif(NOT DISABLE_CXX)
11
12 cmake_minimum_required(VERSION 2.6)
13 cmake_policy(VERSION 2.6)
14
15 set(PACKAGE_VERSION "0.5.0")
16 set(PACKAGE_NAME "navit-svn")
17 set(PACKAGE "navit")
18 set(PACKAGE_STRING "${PACKAGE} ${PACKAGE_VERSION}")
19
20 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")
21 include("${PROJECT_SOURCE_DIR}/cmake/navit_macros.cmake")
22
23 IF(NOT CMAKE_BUILD_TYPE)
24    SET(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE)
25 ENDIF(NOT CMAKE_BUILD_TYPE)
26
27 # install path
28 set(BIN_DIR bin)
29 set(SHARE_DIR share/navit)
30 set(LOCALE_DIR share/locale)
31 set(IMAGE_DIR share/navit/xpm)
32 set(LIB_DIR lib)
33
34 foreach(EXTRA_MODULE ${EXTRA_MODULES}) 
35    add_module(${EXTRA_MODULE} "extra module specified" TRUE)
36 endforeach()
37
38 if (EXTRA_LIBS)
39         list(APPEND NAVIT_LIBS ${EXTRA_LIBS})
40 endif(EXTRA_LIBS)
41
42 if (EXTRA_INCLUDES)
43     include_directories(${EXTRA_INCLUDES})
44 endif(EXTRA_INCLUDES)
45
46 ### Detect environment
47
48 add_plugin(support/ezxml "native Glib found" FALSE)
49 add_plugin(support/glib "native Glib found" FALSE)
50 add_plugin(support/zlib "native zlib found" FALSE)
51 add_plugin(support/libpng "native libpng found" FALSE)
52 add_plugin(support/wordexp "native wordexp found" FALSE)
53 add_module(font/freetype "freetype not found" FALSE)
54 add_module(graphics/android "FreeType library not found" FALSE)
55 add_module(graphics/gd "FreeType library not found" FALSE)
56 add_module(graphics/gtk_drawing_area "FreeType library not found" FALSE)
57 add_module(graphics/opengl "FreeType library not found" FALSE)
58 add_module(graphics/sdl "FreeType library not found" FALSE)
59 add_module(graphics/qt_qpainter "Qt libraries not found" FALSE)
60 add_module(gui/qml "Qt Declarative not found" FALSE)
61 add_module(gui/gtk "GTK libs not found" FALSE)
62 add_module(vehicle/gpsd "gpsd lib not found" FALSE)
63 add_module(vehicle/gypsy "gypsy lib not found" FALSE)
64 add_module(vehicle/maemo "Default" FALSE)
65 add_module(binding/win32 "Default" FALSE)
66 add_module(binding/dbus "dbus-glib-1 not found" FALSE)
67 add_module(speech/dbus "dbus-glib-1 not found" FALSE)
68 add_module(speech/cmdline "neither system() nor CreateProcess() found" FALSE)
69 add_module(vehicle/gpsd_dbus "dbus-glib-1 not found" FALSE)
70 add_module(speech/speech_dispatcher "speech_dispatcher lib not found" FALSE)
71 add_module(autoload/osso "Default" FALSE)
72 add_module(map/garmin "Garmin library not found" FALSE)
73 add_feature(ENABLE_NLS "default" TRUE)
74
75 INCLUDE (CPack)
76 INCLUDE (CheckIncludeFiles)
77 INCLUDE (CheckLibraryExists)
78 INCLUDE (CheckFunctionExists)
79 INCLUDE (CheckSymbolExists)
80 find_package(Glib)
81 find_package(Gmodule)
82 find_package(ZLIB)
83 find_package(Freetype)
84 find_package(SDL)
85 find_package(SDL_ttf)
86 find_package(SDL_image)
87 find_package(OpenGL)
88 find_package(GLUT)
89 find_package(GTK2 2.6 COMPONENTS gtk)
90 find_package(Gettext)
91 find_package(PNG)
92 find_package(DBusGLib)
93 find_package(OpenSSL)
94 find_package(Threads)
95 libfind_pkg_check_modules(FONTCONFIG fontconfig)
96 #Qt detection
97 if (NOT DISABLE_QT)
98    SET(QT_USE_QTSVG TRUE)
99    SET(QT_USE_QTXML TRUE)
100    SET(QT_USE_QTDECLARATIVE TRUE)
101    find_package(Qt4 COMPONENTS QtCore QtGui QtXml QtDeclarative QtSvg OPTIONAL)
102 endif (NOT DISABLE_QT)
103 #pkg-config based detection
104 find_package(PkgConfig)
105 if(PKG_CONFIG_FOUND)
106    pkg_check_modules(QUESOGLC quesoglc)
107    pkg_check_modules(LIBGPS libgps)
108    pkg_check_modules(LIBLOCATION liblocation)
109    pkg_check_modules(LIBOSSO libosso)
110    pkg_check_modules(LIBGPS19 libgps>=2.90)
111    pkg_check_modules(LIBGARMIN libgarmin)
112 endif(PKG_CONFIG_FOUND)
113 #Simple checks
114 CHECK_INCLUDE_FILES(wordexp.h HAVE_WORDEXP)
115 CHECK_INCLUDE_FILES(endian.h HAVE_ENDIAN_H)
116 CHECK_INCLUDE_FILES(stdint.h HAVE_STDINT_H)
117 CHECK_INCLUDE_FILES(byteswap.h HAVE_BYTESWAP_H)
118 CHECK_LIBRARY_EXISTS(gypsy gypsy_control_get_default "" GYPSY_FOUND)
119 CHECK_INCLUDE_FILES(libspeechd.h HAVE_LIBSPEECHD)
120 CHECK_INCLUDE_FILES(sys/socket.h HAVE_SOCKET)
121 CHECK_FUNCTION_EXISTS(snprintf   HAVE_SNPRINTF)
122 CHECK_INCLUDE_FILES(locale.h HAVE_LC_MESSAGES)
123 CHECK_INCLUDE_FILES(libintl.h HAVE_LIBINTL)
124 CHECK_INCLUDE_FILES(sys/time.h HAVE_SYS_TIME_H)
125 CHECK_INCLUDE_FILES(getopt.h HAVE_GETOPT_H)
126 CHECK_INCLUDE_FILES(string.h HAVE_STRING_H)
127 CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
128 CHECK_SYMBOL_EXISTS(system stdlib.h HAVE_SYSTEM)
129 CHECK_SYMBOL_EXISTS(CreateProcess windows.h HAVE_CREATEPROCESS)
130 CHECK_SYMBOL_EXISTS(stpcpy string.h HAVE_STPCPY)
131 CHECK_FUNCTION_EXISTS(sbrk HAVE_SBRK)
132 CHECK_FUNCTION_EXISTS(getdelim HAVE_GETDELIM)
133 CHECK_FUNCTION_EXISTS(getline HAVE_GETLINE)
134
135
136 ### Configure build
137 #Required libraries, supplied with navit
138 if (NOT HAVE_LIBINTL)
139    add_plugin(intl_cmake "native libintl missing" TRUE)
140    set(USE_LIBGNUINTL TRUE)
141 else()
142    CHECK_LIBRARY_EXISTS(intl libintl_fprintf "" NEEDS_LIBINTL)
143    if (NEEDS_LIBINTL)
144       list(APPEND NAVIT_LIBS intl)
145       set(INTL_LIBS intl)
146    endif(NEEDS_LIBINTL)
147 endif(NOT HAVE_LIBINTL)
148
149
150 if (CMAKE_USE_PTHREADS_INIT)
151    set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_THREAD_LIBS_INIT}")
152    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_THREAD_LIBS_INIT}")
153    set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${CMAKE_THREAD_LIBS_INIT}")
154 endif(CMAKE_USE_PTHREADS_INIT)
155 if (Glib_FOUND)
156    set(HAVE_GLIB 1)
157    include_directories(${Glib_INCLUDE_DIRS})
158    list(APPEND NAVIT_LIBS ${Glib_LIBRARIES})
159 else(Glib_FOUND)
160    set_with_reason(support/glib "Glib not found" TRUE ${INTL_LIBS})
161 endif(Glib_FOUND)
162 if (Gmodule_FOUND)
163    set(HAVE_GMODULE 1)
164    include_directories(${Gmodule_INCLUDE_DIRS})
165    list(APPEND NAVIT_LIBS ${Gmodule_LIBRARIES})
166 endif(Gmodule_FOUND)
167 if(ZLIB_FOUND)
168    set(HAVE_ZLIB 1)
169    include_directories(${ZLIB_INCLUDE_DIRS})
170    list(APPEND NAVIT_LIBS ${ZLIB_LIBRARIES})
171 else(ZLIB_FOUND)
172    message(STATUS "using internal zlib")
173    set_with_reason(support/zlib "native zlib missing" TRUE)
174 endif(ZLIB_FOUND)
175 if(OPENSSL_CRYPTO_LIBRARIES)
176    set(HAVE_LIBCRYPTO 1)
177    include_directories(${OPENSSL_INCLUDE_DIR})
178    list(APPEND NAVIT_LIBS ${OPENSSL_CRYPTO_LIBRARIES})
179 endif()
180 if(PNG_FOUND)
181    set(HAVE_PNG 1)
182    include_directories(${PNG_INCLUDE_DIR})
183    list(APPEND NAVIT_LIBS ${PNG_LIBRARIES})
184 else(PNG_FOUND)
185    message(STATUS "using internal libpng")
186    set_with_reason(support/libpng "native libpng missing" TRUE)
187 endif(PNG_FOUND)
188 if (NOT HAVE_WORDEXP)
189    message(STATUS "wordexp.h not found. use internal wordexp")
190    set_with_reason(support/wordexp "native wordexp missing" TRUE)
191 endif()
192 if (NOT Glib_FOUND)
193    set_with_reason(support/ezxml "Glib not found" TRUE)
194 endif()
195
196 if(FREETYPE_FOUND)
197    pkg_check_modules(FRIBIDI fribidi)
198    pkg_check_modules(FRIBIDI2 fribidi>=0.19.0)
199    include_directories(${FREETYPE_INCLUDE_DIRS})
200    set_with_reason(font/freetype "freetype found" TRUE "${FREETYPE_LIBRARY};${FONTCONFIG_LDFLAGS};${FRIBIDI_LIBRARIES}")
201 else(FREETYPE_FOUND)
202    MESSAGE("No freetype library found, graphics modules may not be available")
203    set_with_reason(graphics/android "FreeType library not found" FALSE)
204    set_with_reason(graphics/gd "FreeType library not found" FALSE)
205    set_with_reason(graphics/gtk_drawing_area "FreeType library not found" FALSE)
206    set_with_reason(graphics/opengl "FreeType library not found" FALSE)
207    set_with_reason(graphics/sdl "FreeType library not found" FALSE)
208 endif(FREETYPE_FOUND)
209
210 if(FONTCONFIG_FOUND)
211    set(HAVE_FONTCONFIG 1)
212 endif(FONTCONFIG_FOUND)
213
214 if (QT_FOUND)
215    if (QT_QTCORE_FOUND AND QT_QTGUI_FOUND AND FREETYPE_FOUND)
216       include(${QT_USE_FILE})
217       set_with_reason(graphics/qt_qpainter "Qt libraries found" TRUE ${QT_LIBRARIES})
218
219       if (QT_QTDECLARATIVE_FOUND AND QT_QTXML_FOUND)
220          set_with_reason(gui/qml "Qt Declarative found" TRUE ${QT_LIBRARIES}) 
221       endif()
222
223       if (QT_QTSVG_FOUND)
224          set(HAVE_QT_SVG 1)
225       elseif( USE_SVG AND graphics/qt_qpainter)
226          message( WARNING "QT compiled without SVG support")
227       endif()
228    endif()
229 endif(QT_FOUND)
230
231 if(GTK2_FOUND)
232    include_directories(${GTK2_INCLUDE_DIRS})
233    set(HAVE_GTK2 1)
234    set_with_reason(gui/gtk "GTK libs found" TRUE ${GTK2_LIBRARIES})
235    if(FREETYPE_FOUND)
236       set_with_reason(graphics/gtk_drawing_area "GTK libs found" TRUE ${GTK2_LIBRARIES})
237    endif(FREETYPE_FOUND)
238 endif(GTK2_FOUND)
239
240 CHECK_LIBRARY_EXISTS(freeimage FreeImage_Load "" HAVE_FREEIMAGE)
241 if (FREETYPE_FOUND)
242    if (OPENGL_FOUND AND OPENGL_GLU_FOUND AND GLUT_FOUND AND OPENGL_INCLUDE_DIR)
243       message (STATUS "opengl found: ${OPENGL_gl_LIBRARY}")
244       include_directories(${OPENGL_INCLUDE_DIR})
245       set(GRAPHICS_OPENGL_LIBRARY ${OPENGL_gl_LIBRARY};${OPENGL_glu_LIBRARY};${GLUT_glut_LIBRARY})
246       if (HAVE_FREEIMAGE)
247          list(APPEND GRAPHICS_OPENGL_LIBRARY freeimage)
248       endif(HAVE_FREEIMAGE)
249       set_with_reason(graphics/opengl "Found OpenGL" TRUE ${GRAPHICS_OPENGL_LIBRARY})
250    else()
251       message (STATUS "opengl not found")
252    endif()
253 else()
254    message (STATUS "no glc implementation found. Install Quesoglc for OpenGL support")
255 endif(QUESOGLC_FOUND AND FREETYPE_FOUND)
256
257 if(SDL_FOUND AND SDLIMAGE_FOUND AND FREETYPE_FOUND)
258    set(SDL_IMAGE 1)
259    if(SDLTTF_FOUND)
260       set(SDL_TTF 1)
261       list(APPEND SDL_LIBRARY ${SDLTTF_LIBRARY})
262    endif(SDLTTF_FOUND)
263    set_with_reason(graphics/sdl "SDL/SDL_image libs found" TRUE ${SDL_LIBRARY} ${SDLIMAGE_LIBRARY})
264 endif(SDL_FOUND AND SDLIMAGE_FOUND AND FREETYPE_FOUND)
265
266 if (LIBGPS_FOUND)
267    set_with_reason(vehicle/gpsd "gpsd lib found" TRUE ${LIBGPS_LDFLAGS})
268 endif(LIBGPS_FOUND)
269
270 if (GYPSY_FOUND)
271    set_with_reason(vehicle/gypsy "gypsy lib found" TRUE)
272 endif(GYPSY_FOUND)
273
274 if (LIBGARMIN_FOUND)
275    include_directories(${LIBGARMIN_INCLUDE_DIRS})
276    set_with_reason(map/garmin "Garmin library found" TRUE ${LIBGARMIN_LDFLAGS})
277 endif(LIBGARMIN_FOUND)
278
279 if(DBusGLib_FOUND)
280    include_directories(${DBusGLib_INCLUDE_DIRS})
281    set_with_reason(binding/dbus "dbus-glib-1 found" TRUE ${DBusGLib_LIBRARIES})
282    set_with_reason(speech/dbus "dbus-glib-1 found" TRUE ${DBusGLib_LIBRARIES})
283    set_with_reason(vehicle/gpsd_dbus "dbus-glib-1 found" TRUE ${DBusGLib_LIBRARIES})
284 endif()
285
286 if (HAVE_LIBSPEECHD)
287    set_with_reason(speech/speech_dispatcher "speech_dispatcher lib found" TRUE speechd)
288 endif(HAVE_LIBSPEECHD)
289
290 if (HAVE_SYSTEM)
291    set_with_reason(speech/cmdline "system() call is available" TRUE)
292 endif(HAVE_SYSTEM)
293
294 if (HAVE_CREATEPROCESS)
295    set_with_reason(speech/cmdline "CreateProcess() call is available" TRUE)
296 endif(HAVE_CREATEPROCESS)
297
298 if (GETTEXT_FOUND)
299    execute_process(COMMAND echo "<test/>" COMMAND xgettext -L glade - RESULT_VARIABLE GETTEXT_RET)
300    if ("${GETTEXT_RET}" STREQUAL "0")
301       set(XGETTEXT_GLADE TRUE)
302    else()
303       set(XGETTEXT_GLADE FALSE)
304    endif()
305 endif(GETTEXT_FOUND)
306
307 if (LIBLOCATION_FOUND)
308     set_with_reason(vehicle/maemo "Maemo location library found" TRUE ${LIBLOCATION_LIBRARIES})
309 endif(LIBLOCATION_FOUND)
310
311 if (LIBOSSO_FOUND)
312     set_with_reason(autoload/osso "Maemo osso library found" TRUE ${LIBOSSO_LIBRARIES})
313 endif(LIBOSSO_FOUND)
314
315 #Independent modules
316 add_module(graphics/null "Default" TRUE)
317 add_module(osd/core "Default" TRUE)
318 add_module(vehicle/demo "Default" TRUE)
319 add_module(vehicle/file "Default" TRUE)
320 add_module(vehicle/null "Default" FALSE)
321 add_module(gui/internal "Default" TRUE)
322 add_module(map/binfile "Default" TRUE)
323 add_module(map/filter "Default" TRUE)
324 if(NOT MSVC)
325 add_module(map/mg "Default" TRUE)
326 endif(NOT MSVC)
327 add_module_plugin(support/shapefile "Default" TRUE)
328 set(map_shapefile_INCLUDES "${CMAKE_SOURCE_DIR}/navit/support/shapefile")
329 #set(map_shapefile_LIBRARY_DIRS "${CMAKE_BINARY_DIR}/navit/support/shapefile")
330 set(map_shapefile_LIBS "support_shapefile")
331 add_module(map/shapefile "Default" TRUE)
332 add_module(map/textfile "Default" TRUE)
333 add_module(map/csv "Default" TRUE)
334
335 #Modules without test yet
336 add_module(plugin/pedestrian "Default" FALSE)
337 add_module(speech/android "Default" FALSE)
338 add_module(speech/espeak "Default" FALSE)
339 add_plugin(support/espeak "Default" FALSE)
340 add_module(vehicle/android "Default" FALSE)
341 add_module(vehicle/iphone "Default" FALSE)
342 add_module(vehicle/wince "Default" FALSE)
343 add_module(graphics/cocoa "Default" FALSE)
344
345 # other features
346 add_feature(USE_PLUGINS "default" TRUE)
347 add_feature(SHARED_LIBNAVIT "default" FALSE)
348 add_feature(USE_ROUTING "default" TRUE)
349 add_feature(USE_SVG "default" TRUE)
350 add_feature(SVG2PNG "default" TRUE)
351 add_feature(SAMPLE_MAP "default" TRUE)
352
353 IF(NOT svg2png_scaling)
354    set(svg2png_scaling 0 32 48 64)
355 ENDIF()
356 IF(NOT svg2png_scaling_flag)
357    set(svg2png_scaling_flag 32)
358 ENDIF()
359 IF(NOT svg2png_scaling_nav)
360    set(svg2png_scaling_nav 64)
361 ENDIF()
362
363 add_feature(DBUS_USE_SYSTEM_BUS "default" FALSE)
364 add_feature(BUILD_MAPTOOL "default" TRUE)
365 add_feature(XSL_PROCESSING "default" TRUE)
366
367 find_program(XSLT_PROCESSOR NAMES saxon saxon8 saxon-xslt saxonb-xslt xsltproc transform.exe)
368 if(XSLT_PROCESSOR)
369    execute_process(COMMAND ${XSLT_PROCESSOR} -snone ${CMAKE_CURRENT_SOURCE_DIR}/cmake/test.xml ${CMAKE_CURRENT_SOURCE_DIR}/cmake/test.xslt
370       RESULT_VARIABLE SAXON_ERROR ERROR_QUIET)
371    if (NOT SAXON_ERROR)
372       set (XSLT_PROCESSOR_OPTIONS -snone)
373    endif()
374 else()
375    cfg_feature(XSL_PROCESSING "Saxon missing" FALSE)
376 endif(XSLT_PROCESSOR)
377
378 if (NOT XSL_PROCESSING)
379    message(WARNING "XSLT processing disabled. You have to configure navit.xml yourself, or enable XSLT processing.")
380 endif()
381
382 ### Platform specific settings
383 if(NOT CACHE_SIZE)
384    SET(CACHE_SIZE 1048576)
385 endif(NOT CACHE_SIZE)
386
387 if(WIN32 OR WINCE)
388    SET(CMAKE_EXECUTABLE_SUFFIX ".exe")
389    add_module(graphics/win32 "Windows detected" TRUE)
390    add_plugin(support/win32 "Windows detected" TRUE)
391
392    SET(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> -O coff -I ${CMAKE_CURRENT_SOURCE_DIR}/navit/gui/win32/resources <DEFINES> -i <SOURCE> -o <OBJECT>")
393    set_with_reason(support/ezxml "Windows detected" TRUE)
394    set_with_reason(speech/espeak "Windows detected" TRUE)
395    set_with_reason(support/espeak "Windows detected" TRUE)
396    set_with_reason(binding/win32 "Windows detected" TRUE)
397
398    # vehicle_file is broken for windows. use vehicle_wince instead
399    # whicle_wince isn't buildable on non-CE windows ssytems
400
401    # plugins currently not supported on windows
402    set_with_reason(USE_PLUGINS "win32: currently not supported" FALSE)
403
404    set(HAVE_API_WIN32_BASE 1)
405    set(EZXML_NOMMAP 1)
406
407    # Image stuff
408    if(NOT graphics/qt_qpainter)
409       set_with_reason(USE_SVG "win32: SVGs currently not supported" FALSE)
410    else(NOT graphics/qt_qpainter)
411       MESSAGE(STATUS "win32: SVGs may not be supported by every available graphics")
412    endif(NOT graphics/qt_qpainter)
413
414    set(BIN_DIR bin)
415    set(SHARE_DIR ./)
416    set(LOCALE_DIR locale)
417    set(IMAGE_DIR xpm)
418
419    
420    if(HAVE_GTK2 AND NOT MSVC)
421       #GTK requires special compile flags
422       add_definitions("-mms-bitfields")
423    endif(HAVE_GTK2 AND NOT MSVC)
424    if(MSVC AND support/espeak)
425       add_definitions(-DPLATFORM_WINDOWS)
426    endif(MSVC AND support/espeak)
427    CHECK_LIBRARY_EXISTS(ws2_32 WSAStartup "" HAVE_WINSOCK)
428    if(HAVE_WINSOCK)
429       list(APPEND NAVIT_LIBS ws2_32)
430    else()
431       CHECK_LIBRARY_EXISTS(ws2 WSAStartup "" HAVE_WINSOCK_2)
432       if(HAVE_WINSOCK_2)
433          set(HAVE_WINSOCK 1)
434          list(APPEND NAVIT_LIBS ws2)
435       endif()
436    endif(HAVE_WINSOCK)
437
438    if(MSVC)
439        set(HAVE_PRAGMA_PACK 1)
440        add_plugin(support/xgetopt "Windows detected" TRUE)
441    endif(MSVC)
442    set(ENABLE_NLS TRUE)
443    enable_language(RC)
444
445    set(XSLTS "windows;${XSLTS}" CACHE STRING "define a semicolon seperated list of XSLTs to process")
446 endif()
447 if (WIN32 AND NOT WINCE)
448    set(HAVE_PRAGMA_PACK 1)
449    set(HAVE_API_WIN32 1)
450    set(HAVE_STDINT_H 1)
451    #set(BUILD_MAPTOOL FALSE)
452    set(SAMPLE_MAP FALSE)
453    list(APPEND NAVIT_LIBS winmm)
454 endif()
455 if(WINCE)
456    add_plugin(support/libc "wince detected" TRUE)
457    set(HAVE_PRAGMA_PACK 1)
458    set(HAVE_API_WIN32_CE 1)
459    set(BUILD_MAPTOOL FALSE)
460    set_with_reason(vehicle/file "wince: currently broken" FALSE)
461    set_with_reason(vehicle/wince "wince detected" TRUE)
462 endif()
463 if (APPLE OR USE_UIKIT)
464    set_with_reason(vehicle/iphone "apple detected" TRUE)
465    set_with_reason(graphics/cocoa "apple detected" TRUE)
466    set(BUILD_BUNDLE TRUE CACHE BOOLEAN "build an osx bundle")
467 endif()
468
469 set(LOCALEDIR "${LOCALE_DIR}/locale")
470
471 find_program(BZCAT NAMES bzcat)
472 if (SAMPLE_MAP)
473    if(CMAKE_CROSSCOMPILING)
474       cfg_feature(SAMPLE_MAP "downloading binary map because of cross compiling" TRUE)
475       set(DOWNLOAD_SAMPLE_MAP TRUE)
476    elseif(NOT BZCAT)
477       cfg_feature(SAMPLE_MAP "downloading binary map because of missing bzcat" TRUE)
478       set(DOWNLOAD_SAMPLE_MAP TRUE)
479    endif(CMAKE_CROSSCOMPILING)
480 endif(SAMPLE_MAP)
481
482 if(ANDROID)
483    # for android API 3 compatiblity
484    SET(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-Wl,-soname,/data/data/org.navitproject.navit/lib/")
485    
486    find_program(ANDROID_LOCATION NAMES android android.bat)
487    find_program(ANT_LOCATION NAMES ant)
488    if (NOT ANT_LOCATION)
489       message_error("Could not find ant. Please install ant and add it to the search path.")
490    endif()
491    if (NOT ANDROID_LOCATION)
492       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.")
493    endif()
494    if (NOT XSL_PROCESSING)
495       message(WARNING "XSLT processing disabled. You have to configure navit.xml yourself, or enable XSLT processing.")
496    endif()
497    set(XSLTS "android;${XSLTS}" CACHE STRING "define a semicolon seperated list of XSLTs to process")
498    list(APPEND NAVIT_LIBS log)
499    set(HAVE_API_ANDROID 1)
500    set_with_reason(graphics/android "Android detected" TRUE)
501    set_with_reason(speech/android "Android detected" TRUE)
502    set_with_reason(vehicle/android "Android detected" TRUE)
503    set_with_reason(plugin/pedestrian "Android detected" TRUE)
504    cfg_feature(SHARED_LIBNAVIT "Android detected" TRUE)
505    
506    add_feature(XPM2PNG "Android detected" TRUE)
507    set(NAVIT_COMPILE_FLAGS "${NAVIT_COMPILE_FLAGS} -fPIC")
508
509 endif(ANDROID)
510
511 if(FREETYPE_FOUND AND NOT FONTCONFIG_FOUND)
512    add_subdirectory( "${CMAKE_CURRENT_SOURCE_DIR}/navit/fonts")
513 endif()
514
515 # Image conversion
516 find_program(IMAGE_CONVERTER NAMES convert)
517 execute_process(COMMAND ${IMAGE_CONVERTER} -list format OUTPUT_VARIABLE CONVERT_FORMATS)
518 if(CONVERT_FORMATS MATCHES ".*XPM[ *][ ]*XPM[ ]*r[w-].*")
519    set(IMAGE_CONVERTER_XPM ${IMAGE_CONVERTER})
520 endif()
521
522 set(CMAKE_APPBUNDLE_PATH "")
523 if (SVG2PNG)
524    if (NOT IMAGE_CONVERTER_SVGZ)
525       set (SVG_CONVERTER_PROGS rsvg-convert ksvgtopng ksvgtopng4 inkscape)
526       set (CMAKE_FIND_APPBUNDLE "NEVER")
527       find_program(IMAGE_CONVERTER_SVGZ NAMES ${SVG_CONVERTER_PROGS} PATHS /Applications/Inkscape.app/Contents/Resources/bin)
528       if (NOT IMAGE_CONVERTER_SVGZ)
529          if(CONVERT_FORMATS MATCHES ".*[ ]*SVG[ ]*r[w-].*")
530             set(IMAGE_CONVERTER_SVGZ ${IMAGE_CONVERTER})
531          endif()
532       endif()
533    endif(NOT IMAGE_CONVERTER_SVGZ)
534    if (NOT IMAGE_CONVERTER_SVG)
535       set(IMAGE_CONVERTER_SVG ${IMAGE_CONVERTER_SVGZ})
536    endif(NOT IMAGE_CONVERTER_SVG)
537
538    message(STATUS "SVG2PNG-Converter: ${IMAGE_CONVERTER_SVGZ}")
539    if (NOT IMAGE_CONVERTER_SVGZ)
540       message(WARNING "No SVG2PNG converter found. Please install one of the following tools: ${SVG_CONVERTER_PROGS}, or imagemagick with svg support")
541       set_with_reason(SVG2PNG "no converter found" FALSE)
542    endif(NOT IMAGE_CONVERTER_SVGZ)
543 endif(SVG2PNG)
544
545 if (XPM2PNG)
546    message(STATUS "XPM2PNG-Converter: ${IMAGE_CONVERTER_XPM}")
547    if (NOT IMAGE_CONVERTER_XPM)
548       message(WARNING "No XPM2PNG converter found. Please install imagemagick with xpm support")
549       set_with_reason(XPM2PNG "no converter found" FALSE)
550    endif(NOT IMAGE_CONVERTER_XPM)
551 endif(XPM2PNG)
552
553 set(XSLTS ${XSLTS} CACHE STRING "define a semicolon seperated list of XSLTs to process")
554
555 # Plugins
556 if(USE_PLUGINS)
557    set(MODULE_BUILD_TYPE "MODULE")
558    add_definitions("-fPIC")
559    list(APPEND NAVIT_LIBS dl)
560 else()
561    set(MODULE_BUILD_TYPE "STATIC")
562 endif(USE_PLUGINS)
563 message(STATUS "Use plugins: ${MODULE_BUILD_TYPE}")
564
565 if (SHARED_LIBNAVIT)
566   set(NAVIT_CORE_BUILD_TYPE "STATIC")
567 else(SHARED_LIBNAVIT)
568   set(NAVIT_CORE_BUILD_TYPE "SHARED")
569 endif(SHARED_LIBNAVIT)
570
571 CHECK_INCLUDE_FILES (malloc.h HAVE_MALLOC_H)
572 CHECK_INCLUDE_FILES ("sys/param.h;sys/mount.h" HAVE_SYS_MOUNT_H)
573 CHECK_INCLUDE_FILES (unistd.h HAVE_UNISTD_H)
574 CHECK_FUNCTION_EXISTS (getcwd HAVE_GETCWD)
575 CHECK_FUNCTION_EXISTS (memalign HAVE_MEMALIGN)
576 CHECK_FUNCTION_EXISTS (valloc HAVE_VALLOC)
577 CHECK_FUNCTION_EXISTS (posix_memalign HAVE_POSIX_MEMALIGN)
578 CHECK_FUNCTION_EXISTS (popen HAVE_POPEN)
579 CHECK_FUNCTION_EXISTS (_atoi64 HAVE__ATOI64)
580
581 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
582
583 add_definitions("-Wall")
584 if (EXTRA_DEFINES)
585         add_definitions("${EXTRA_DEFINES}")
586 endif(EXTRA_DEFINES)
587
588 if (NOT NAVIT_DEPENDENCY_ERROR)
589    message("\nSummary:\n")
590
591    set(SUMMARY_COMPONENTS ${ALL_PLUGINS} ${ALL_MODULE_PLUGINS} ${ALL_MODULES})
592    list(SORT SUMMARY_COMPONENTS)
593
594    set(LAST_TYPE NONE)
595    foreach ( SUMMARY_COMP ${SUMMARY_COMPONENTS})
596       # split path to type and name
597       string(REPLACE "/" ";" SUMMARY_COMP_LIST ${SUMMARY_COMP})
598       list(GET SUMMARY_COMP_LIST 0 SUMMARY_COMP_TYPE)
599       list(LENGTH SUMMARY_COMP_LIST SUMMARY_COMP_LIST_LENGTH)
600       if ( SUMMARY_COMP_LIST_LENGTH GREATER 1 )
601          list(GET SUMMARY_COMP_LIST 1 SUMMARY_COMP_NAME)
602       else()
603          set(SUMMARY_COMP_NAME ${SUMMARY_COMP})
604       endif()
605       if ( NOT ${LAST_TYPE} STREQUAL ${SUMMARY_COMP_TYPE})
606          message("\n--->>> ${SUMMARY_COMP_TYPE}")
607          set(LAST_TYPE ${SUMMARY_COMP_TYPE})
608       endif()
609       if (${SUMMARY_COMP})
610          message("Enabled   ${SUMMARY_COMP_NAME} ( ${${SUMMARY_COMP}_REASON} )")
611       else()
612          message("Disabled  ${SUMMARY_COMP_NAME} ( ${${SUMMARY_COMP}_REASON} )")
613       endif()
614    endforeach()
615
616    list(SORT ALL_FEATURES)
617    message("\n--->>> Features")
618    foreach ( FEATURE ${ALL_FEATURES})
619       if ( ${FEATURE} )
620          message("Enabled   ${FEATURE} ( ${${FEATURE}_REASON} )")
621       else()
622          message("Disabled  ${FEATURE} ( ${${FEATURE}_REASON} )")
623       endif()
624    endforeach()
625    
626    if (XSL_PROCESSING)
627       if (XSLTS)
628          message("\nProcessing XSLTS: ${XSLTS}")
629       else()
630          message("\nProcessing XSLTS: NONE")
631       endif(XSLTS)
632    endif(XSL_PROCESSING)
633    
634    message("\nTo configure your build use 'cmake -L' to find changeable variables and run cmake again with 'cmake -D <var-name>=<your value> ...'.")
635 endif(NOT NAVIT_DEPENDENCY_ERROR)
636
637 add_subdirectory (navit)
638 add_subdirectory (man)
639
640
641 if (GETTEXT_FOUND)
642    add_subdirectory (po)
643 endif(GETTEXT_FOUND)
644
645