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