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