1 | macro(internal_set VARIABLE REASON) |
1 | macro(set_feature_switch_default VARIABLE REASON ENABLE)
|
2 | if (NOT DEFINED ${VARIABLE}) |
2 | if ((NOT DEFINED ${VARIABLE}) # variable not in cache (first run)
|
|
|
3 | OR ((DEFINED ${VARIABLE}_AUTODETECTED_VALUE) AND # variable in cache -> different from autodetected value?
|
|
|
4 | ((${VARIABLE}_AUTODETECTED_VALUE AND ${VARIABLE}) OR # poor man's boolean equal
|
|
|
5 | (NOT ${VARIABLE}_AUTODETECTED_VALUE AND NOT ${VARIABLE}))))
|
3 | set(${VARIABLE} ${ARGN}) |
6 | set(${VARIABLE}_REASON ${REASON})
|
4 | set(${VARIABLE}_REASON ${REASON} CACHE STRING "reason") |
7 | set(${VARIABLE} ${ENABLE} CACHE BOOL "feature switch" FORCE)
|
5 | else() |
8 | else()
|
6 | set(${VARIABLE}_REASON "User defined" CACHE STRING "reason") |
9 | set(${VARIABLE}_REASON "User defined")
|
7 | endif() |
10 | endif()
|
|
|
11 | set(${VARIABLE}_AUTODETECTED_VALUE ${ENABLE} CACHE INTERNAL "value autodetected by build script")
|
8 | endmacro() |
12 | endmacro()
|
9 | |
13 |
|
10 | macro(set_with_reason VARIABLE REASON ENABLE) |
14 | macro(set_with_reason VARIABLE REASON ENABLE)
|
11 | if (DEFINED ${VARIABLE}_REASON AND NOT ${VARIABLE}_REASON STREQUAL "User defined") |
15 | if (DEFINED ${VARIABLE}_REASON AND NOT ${VARIABLE}_REASON STREQUAL "User defined")
|
12 | set(${VARIABLE} ${ENABLE}) |
16 | set(${VARIABLE} ${ENABLE} CACHE BOOL "feature switch" FORCE)
|
13 | set(${VARIABLE}_REASON ${REASON}) |
17 | set(${VARIABLE}_REASON ${REASON})
|
|
|
18 | endif()
|
14 | string(REPLACE "/" "_" VARIABLE_NAMES ${VARIABLE}) |
19 | string(REPLACE "/" "_" VARIABLE_NAMES ${VARIABLE})
|
15 | set(${VARIABLE_NAMES}_LIBS ${ARGN}) |
20 | set(${VARIABLE_NAMES}_LIBS ${ARGN})
|
16 | else() |
21 | set(${VARIABLE}_AUTODETECTED_VALUE ${ENABLE} CACHE INTERNAL "value autodetected by build script")
|
17 | message("Do not change user defined settings for ${VARIABLE}") |
|
|
18 | endif() |
|
|
19 | endmacro() |
22 | endmacro()
|
20 | |
23 |
|
21 | macro(add_feature FEATURE REASON ENABLE) |
24 | macro(add_feature FEATURE REASON ENABLE)
|
22 | list(APPEND ALL_FEATURES ${FEATURE}) |
25 | list(APPEND ALL_FEATURES ${FEATURE})
|
23 | internal_set(${FEATURE} ${REASON} ${ENABLE}) |
26 | set_feature_switch_default(${FEATURE} ${REASON} ${ENABLE})
|
24 | endmacro() |
27 | endmacro()
|
25 | |
28 |
|
26 | macro(cfg_feature FEATURE REASON ENABLE) |
29 | macro(cfg_feature FEATURE REASON ENABLE)
|
27 | set(${FEATURE} ${ENABLE}) |
30 | set(${FEATURE} ${ENABLE})
|
|
|
31 | if (${FEATURE}_REASON STREQUAL "User defined")
|
|
|
32 | set(${FEATURE}_REASON "${REASON} *user setting overridden*")
|
|
|
33 | else()
|
28 | set(${FEATURE}_REASON ${REASON}) |
34 | set(${FEATURE}_REASON ${REASON})
|
|
|
35 | endif()
|
29 | endmacro() |
36 | endmacro()
|
30 | |
37 |
|
31 | macro(add_module MODULE_PATH REASON ENABLE) |
38 | macro(add_module MODULE_PATH REASON ENABLE)
|
32 | list(APPEND ALL_MODULES ${MODULE_PATH}) |
39 | list(APPEND ALL_MODULES ${MODULE_PATH})
|
33 | internal_set(${MODULE_PATH} ${REASON} ${ENABLE}) |
40 | set_feature_switch_default(${MODULE_PATH} ${REASON} ${ENABLE})
|
34 | endmacro() |
41 | endmacro()
|
35 | |
42 |
|
36 | # plugins are always linked static |
43 | # plugins are always linked static
|
37 | macro(add_plugin PLUGIN_PATH REASON ENABLE) |
44 | macro(add_plugin PLUGIN_PATH REASON ENABLE)
|
38 | list(APPEND ALL_PLUGINS ${PLUGIN_PATH}) |
45 | list(APPEND ALL_PLUGINS ${PLUGIN_PATH})
|
39 | internal_set(${PLUGIN_PATH} ${REASON} ${ENABLE}) |
46 | set_feature_switch_default(${PLUGIN_PATH} ${REASON} ${ENABLE})
|
40 | endmacro() |
47 | endmacro()
|
41 | |
48 |
|
|
|
49 | # module plugins are always linked static
|
|
|
50 | macro(add_module_plugin PLUGIN_PATH REASON ENABLE)
|
|
|
51 | list(APPEND ALL_MODULE_PLUGINS ${PLUGIN_PATH})
|
|
|
52 | set_feature_switch_default(${PLUGIN_PATH} ${REASON} ${ENABLE})
|
|
|
53 | endmacro()
|
|
|
54 |
|
42 | macro(module_add_library MODULE_NAME ) |
55 | macro(module_add_library MODULE_NAME )
|
|
|
56 | LINK_DIRECTORIES(${${MODULE_NAME}_LIBRARY_DIRS})
|
43 | add_library(${MODULE_NAME} ${MODULE_BUILD_TYPE} ${ARGN}) |
57 | add_library(${MODULE_NAME} ${MODULE_BUILD_TYPE} ${ARGN})
|
44 | SET_TARGET_PROPERTIES(${MODULE_NAME} PROPERTIES COMPILE_DEFINITIONS "MODULE=${MODULE_NAME}") |
58 | SET_TARGET_PROPERTIES(${MODULE_NAME} PROPERTIES COMPILE_DEFINITIONS "MODULE=${MODULE_NAME}")
|
45 | TARGET_LINK_LIBRARIES(${MODULE_NAME} ${${MODULE_NAME}_LIBS}) |
59 | TARGET_LINK_LIBRARIES(${MODULE_NAME} ${${MODULE_NAME}_LIBS})
|
46 | SET_TARGET_PROPERTIES( ${MODULE_NAME} PROPERTIES COMPILE_FLAGS "${NAVIT_COMPILE_FLAGS}") |
60 | SET_TARGET_PROPERTIES( ${MODULE_NAME} PROPERTIES COMPILE_FLAGS "${NAVIT_COMPILE_FLAGS} ${${MODULE_NAME}_FLAGS}")
|
47 | |
61 | INCLUDE_DIRECTORIES(${${MODULE_NAME}_INCLUDES})
|
48 | if (USE_PLUGINS) |
62 | if (USE_PLUGINS)
|
49 | if (ANDROID) |
63 | if (ANDROID)
|
50 | TARGET_LINK_LIBRARIES(${MODULE_NAME} ${NAVIT_LIBNAME}) |
64 | TARGET_LINK_LIBRARIES(${MODULE_NAME} ${NAVIT_LIBNAME})
|
51 | endif() |
65 | endif()
|
|
|
66 | if (APPLE)
|
|
|
67 | set_target_properties( ${MODULE_NAME} PROPERTIES LINK_FLAGS "-Wl,-undefined -Wl,dynamic_lookup")
|
|
|
68 | endif()
|
52 | # workaround to be compatible with old paths |
69 | # workaround to be compatible with old paths
|
53 | set_target_properties( ${MODULE_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/.libs") |
70 | set_target_properties( ${MODULE_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/.libs")
|
54 | |
71 |
|
55 | install(TARGETS ${MODULE_NAME} |
72 | install(TARGETS ${MODULE_NAME}
|
56 | DESTINATION ${LIB_DIR}/navit/${${MODULE_NAME}_TYPE} |
73 | DESTINATION ${LIB_DIR}/navit/${${MODULE_NAME}_TYPE}
|
57 | PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) |
74 | PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
|
58 | endif() |
75 | endif()
|
59 | endmacro(module_add_library) |
76 | endmacro(module_add_library)
|
60 | |
77 |
|
61 | macro(supportlib_add_library LIB_NAME ) |
78 | macro(supportlib_add_library LIB_NAME )
|
62 | add_library(${LIB_NAME} ${ARGN}) |
79 | add_library(${LIB_NAME} ${ARGN})
|
63 | TARGET_LINK_LIBRARIES(${LIB_NAME} ${${LIB_NAME}_LIBS}) |
80 | TARGET_LINK_LIBRARIES(${LIB_NAME} ${${LIB_NAME}_LIBS})
|
64 | SET_TARGET_PROPERTIES( ${LIB_NAME} PROPERTIES COMPILE_FLAGS "${NAVIT_COMPILE_FLAGS}") |
81 | SET_TARGET_PROPERTIES( ${LIB_NAME} PROPERTIES COMPILE_FLAGS "${NAVIT_COMPILE_FLAGS}")
|
|
|
82 | SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES COMPILE_DEFINITIONS "MODULE=${LIB_NAME}")
|
65 | endmacro(supportlib_add_library) |
83 | endmacro(supportlib_add_library)
|
66 | |
84 |
|
67 | macro(message_error) |
85 | macro(message_error)
|
68 | set(NAVIT_DEPENDENCY_ERROR 1) |
86 | set(NAVIT_DEPENDENCY_ERROR 1)
|
69 | message( SEND_ERROR ${ARGN}) |
87 | message( SEND_ERROR ${ARGN})
|
70 | endmacro(message_error) |
88 | endmacro(message_error)
|
|
|
89 |
|
|
|
90 | include(CheckCCompilerFlag)
|
|
|
91 | include(CheckCXXCompilerFlag)
|
|
|
92 | function(add_compiler_flag_if_available FLAG)
|
|
|
93 | set(VAR_FLAG_AVAILABLE_C "FLAG_AVAILABLE_C_${FLAG}")
|
|
|
94 | check_c_compiler_flag(${FLAG} ${VAR_FLAG_AVAILABLE_C})
|
|
|
95 | if (${${VAR_FLAG_AVAILABLE_C}})
|
|
|
96 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLAG} ")
|
|
|
97 | endif()
|
|
|
98 | if(CMAKE_CXX_COMPILER_LOADED) # C++ compiler is optional
|
|
|
99 | set(VAR_FLAG_AVAILABLE_CXX "FLAG_AVAILABLE_CXX_${FLAG}")
|
|
|
100 | check_cxx_compiler_flag(${FLAG} ${VAR_FLAG_AVAILABLE_CXX})
|
|
|
101 | if (${${VAR_FLAG_AVAILABLE_CXX}})
|
|
|
102 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAG} ")
|
|
|
103 | endif()
|
|
|
104 | endif()
|
|
|
105 | endfunction(add_compiler_flag_if_available)
|