Add:Build:Save more state for plugins
[profile/ivi/navit.git] / navit / navit / CMakeLists.txt
1 include_directories( "${PROJECT_BINARY_DIR}")
2 include_directories( "${PROJECT_SOURCE_DIR}")
3 include_directories( "${CMAKE_CURRENT_SOURCE_DIR}")
4 include_directories( "${CMAKE_CURRENT_BINARY_DIR}")
5 include_directories( "${CMAKE_CURRENT_SOURCE_DIR}/support")
6
7 # navit cre
8 set(NAVIT_SRC announcement.c atom.c attr.c cache.c callback.c command.c compass.c config_.c coord.c country.c data_window.c debug.c 
9    event.c file.c graphics.c gui.c item.c layout.c log.c main.c map.c obj_filter.c
10    linguistics.c mapset.c maptype.c menu.c messages.c bookmarks.c navit.c navigation.c osd.c param.c phrase.c plugin.c popup.c
11    profile.c projection.c roadprofile.c route.c routech.c search.c speech.c start_real.c sunriset.c transform.c track.c 
12    util.c vehicle.c vehicleprofile.c xmlconfig.c )
13
14 if(NOT USE_PLUGINS)
15   list(APPEND NAVIT_SRC  ${CMAKE_CURRENT_BINARY_DIR}/builtin.c)
16 endif(NOT USE_PLUGINS)
17
18 if (${HAVE_GLIB})
19    list(APPEND NAVIT_SRC event_glib.c)
20 endif()
21
22 if(ANDROID)
23    list(APPEND NAVIT_SRC android.c)
24    set(NAVIT_LIBNAME navit)
25 else()
26    set(NAVIT_LIBNAME navit_core)
27 endif()
28
29
30 foreach ( PLUGIN_PATH ${ALL_PLUGINS})
31    if (${PLUGIN_PATH})
32       include_directories( "${CMAKE_CURRENT_SOURCE_DIR}/${PLUGIN_PATH}")
33       
34       string(REPLACE "/" "_" MODULE_INC ${PLUGIN_PATH})
35       list(APPEND NAVIT_SUPPORT_LIBS ${MODULE_INC})
36    endif()
37 endforeach()
38
39 foreach ( MODULE_PATH ${ALL_MODULES})
40    if ( ${MODULE_PATH} )
41       include_directories( "${CMAKE_CURRENT_SOURCE_DIR}/${MODULE_PATH}")
42       
43       string(REPLACE "/" "_" MODULE_INC ${MODULE_PATH})
44       list(APPEND MODULES_PROTOTYPE "\nvoid\tmodule_${MODULE_INC}_init(void)")
45       list(APPEND MODULES_FUNC "\nmodule_${MODULE_INC}_init()")
46       
47       if (NOT USE_PLUGINS)
48          list(APPEND MODULES_NAME ${MODULE_INC})
49       else()
50          string(REGEX REPLACE "(^[^/]*)/.*" "\\1" ${MODULE_INC}_TYPE ${MODULE_PATH})
51       endif()
52    endif()
53 endforeach()
54
55 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/builtin.c.in ${CMAKE_CURRENT_BINARY_DIR}/builtin.c)
56
57 include_directories( "${CMAKE_CURRENT_SOURCE_DIR}/fib-1.1")
58
59 # Add module paths
60 foreach (CURRENT_MODULE ${ALL_PLUGINS} ${ALL_MODULE_PLUGINS} ${ALL_MODULES})
61    if (${CURRENT_MODULE})
62       add_subdirectory( "${CMAKE_CURRENT_SOURCE_DIR}/${CURRENT_MODULE}")
63    endif()
64 endforeach()
65
66 add_subdirectory (fib-1.1)
67
68 if(NOT ANDROID)
69    set(NAVIT_START_SRC start.c)
70    if(WIN32 OR WINCE AND NOT WIN_OMIT_RESOURCES)
71       list(APPEND NAVIT_START_SRC ${CMAKE_CURRENT_SOURCE_DIR}/gui/win32/resources/resource.rc)
72    else()
73       if (APPLE)
74           set(NAVIT_START_SRC start_apple.m)
75       endif()
76    endif()
77    if (BUILD_BUNDLE)
78       list(APPEND NAVIT_START_SRC resources/share)
79    endif()
80    add_executable(navit ${NAVIT_START_SRC})
81    target_link_libraries (navit ${NAVIT_LIBNAME})
82    set_target_properties(navit PROPERTIES COMPILE_DEFINITIONS "MODULE=${MODULE_NAME}")
83    if (BUILD_BUNDLE)
84       add_custom_command(OUTPUT resources/share COMMAND mkdir -p resources/share)
85       set_source_files_properties(resources/share PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
86       set_target_properties(navit PROPERTIES MACOSX_BUNDLE TRUE)
87       add_dependencies(navit navit_config_xml_resource)
88       add_dependencies(navit images_resource)
89    endif()
90 endif()
91
92 if (SHARED_LIBNAVIT)
93   add_library (${NAVIT_LIBNAME} SHARED ${NAVIT_SRC} )
94 else(SHARED_LIBNAVIT)
95   add_library (${NAVIT_LIBNAME} STATIC ${NAVIT_SRC} )
96 endif(SHARED_LIBNAVIT)
97 if(NOT MSVC)
98     SET(NAVIT_LIBS ${NAVIT_LIBS} m)
99 endif(NOT MSVC)
100 target_link_libraries(${NAVIT_LIBNAME}  ${MODULES_NAME} ${NAVIT_SUPPORT_LIBS} fib ${NAVIT_LIBS} ) 
101 set_target_properties(${NAVIT_LIBNAME} PROPERTIES COMPILE_DEFINITIONS "MODULE=navit;LIBDIR=\"${CMAKE_INSTALL_PREFIX}/${LIB_DIR}\";PREFIX=\"${CMAKE_INSTALL_PREFIX}\"")
102 if (DEFINED NAVIT_COMPILE_FLAGS)
103    set_target_properties(${NAVIT_LIBNAME} PROPERTIES COMPILE_FLAGS "${NAVIT_COMPILE_FLAGS}")
104 endif()
105
106 # Subversion revision
107 ADD_CUSTOM_TARGET(
108    version
109    ${CMAKE_COMMAND} -D SRC=${CMAKE_CURRENT_SOURCE_DIR}/version.h.in
110                     -D DST=${CMAKE_CURRENT_BINARY_DIR}/version.h
111                     -D NAME=SVN_VERSION
112                     -P ${PROJECT_SOURCE_DIR}/cmake/version.cmake
113 )
114
115 # additional parameter are passed to the stylesheet processor as parameter
116 macro(process_xslt SRC_XML DEST_XML)
117    set(XSLT_COMMANDS COMMAND ${CMAKE_COMMAND} -E copy ${SRC_XML} ${DEST_XML}
118                      COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/navit/navit.dtd ${CMAKE_CURRENT_BINARY_DIR}/navit.dtd)
119    if(XSL_PROCESSING AND XSLTS)
120        string(REPLACE "," ";" XSLTS "${XSLTS}")
121        foreach(tmp ${XSLTS})
122           set (XSLT_FILE "${PROJECT_SOURCE_DIR}/navit/xslt/${tmp}.xslt")
123           list(APPEND XSLT_FILES "${XSLT_FILE}")
124           list(APPEND XSLT_COMMANDS COMMAND ${CMAKE_COMMAND} -E echo  Applying ${tmp}.xslt)
125           if(${XSLT_PROCESSOR} MATCHES "xsltproc")
126              list(APPEND XSLT_COMMANDS COMMAND ${XSLT_PROCESSOR} ${XSLT_PROCESSOR_OPTIONS} ${XSLT_FILE} ${DEST_XML} > ${DEST_XML}.tmp)
127           else()
128              list(APPEND XSLT_COMMANDS COMMAND ${XSLT_PROCESSOR} ${XSLT_PROCESSOR_OPTIONS} ${DEST_XML} ${XSLT_FILE} ${ARGN} > ${DEST_XML}.tmp)
129           endif()
130           list(APPEND XSLT_COMMANDS COMMAND ${CMAKE_COMMAND} -E rename ${DEST_XML}.tmp ${DEST_XML})
131        endforeach()
132    endif()
133    ADD_CUSTOM_COMMAND(
134       OUTPUT ${DEST_XML}
135       DEPENDS ${SRC_XML} ${XSLT_FILES}
136       ${XSLT_COMMANDS}
137    )
138 endmacro()
139
140 if(ANDROID)
141    process_xslt(${CMAKE_CURRENT_SOURCE_DIR}/navit_shipped.xml ${CMAKE_CURRENT_BINARY_DIR}/navithdpi.xml OSD_SIZE=2 ICON_MEDIUM=48)
142    process_xslt(${CMAKE_CURRENT_SOURCE_DIR}/navit_shipped.xml ${CMAKE_CURRENT_BINARY_DIR}/navitmdpi.xml OSD_SIZE=1.33)
143    process_xslt(${CMAKE_CURRENT_SOURCE_DIR}/navit_shipped.xml ${CMAKE_CURRENT_BINARY_DIR}/navitldpi.xml OSD_SIZE=1)
144    add_custom_target( navit_config_xml ALL DEPENDS navithdpi.xml navitmdpi.xml navitldpi.xml)
145 else()
146    process_xslt(${CMAKE_CURRENT_SOURCE_DIR}/navit_shipped.xml ${CMAKE_CURRENT_BINARY_DIR}/navit.xml "")
147    add_custom_target( navit_config_xml_resource DEPENDS navit.xml COMMAND mkdir -p resources/share/navit COMMAND cp navit.xml resources/share/navit)
148    add_custom_target( navit_config_xml ALL DEPENDS navit.xml)
149 endif()
150
151 ADD_DEPENDENCIES(${NAVIT_LIBNAME} version)
152 if (USE_LIBGNUINTL AND NOT HAVE_GLIB)
153    ADD_DEPENDENCIES(support_glib intl_cmake)
154 endif()
155
156
157 add_subdirectory (maptool)
158 add_subdirectory (xpm)
159 add_subdirectory (maps)
160 if(ANDROID)
161    add_subdirectory (android)
162 endif()
163
164 install(TARGETS navit
165         DESTINATION ${BIN_DIR}
166         PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
167
168 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/navit.xml
169         DESTINATION ${SHARE_DIR}
170         PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)
171
172 get_directory_property(INCLUDE_DIRECTORIES INCLUDE_DIRECTORIES)
173 WRITE_FILE("cmake_plugin_settings.txt"
174         "set(APPLE ${APPLE} CACHE BOOL init)\n" 
175         "set(ANDROID ${ANDROID} CACHE BOOL init)\n"
176         "set(USE_PLUGINS ${USE_PLUGINS} CACHE BOOL init)\n"
177         "set(MODULE_BUILD_TYPE \"${MODULE_BUILD_TYPE}\" CACHE STRING init)\n"
178         "set(NAVIT_COMPILE_FLAGS \"${NAVIT_COMPILE_FLAGS}\" CACHE STRING init)\n"
179         "set(navit_SOURCE_DIR \"${navit_SOURCE_DIR}\" CACHE STRING init)\n"
180         "set(NAVIT_LIBNAME \"${NAVIT_LIBNAME}\" CACHE STRING init)\n"
181         "set(ANDROID_API_VERSION \"${ANDROID_API_VERSION}\" CACHE STRING init)\n"
182         "set(ANDROID_NDK_API_VERSION \"${ANDROID_NDK_API_VERSION}\" CACHE STRING init)\n"
183         "set(CMAKE_TOOLCHAIN_FILE \"${CMAKE_TOOLCHAIN_FILE}\" CACHE STRING init)\n"
184         "set(INCLUDE_DIRECTORIES \"${INCLUDE_DIRECTORIES}\" CACHE STRING init)\n"
185         )