1 |
zoff99 |
56 |
macro(set_feature_switch_default VARIABLE REASON ENABLE)
|
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}))))
|
6 |
|
|
set(${VARIABLE}_REASON ${REASON})
|
7 |
|
|
set(${VARIABLE} ${ENABLE} CACHE BOOL "feature switch" FORCE)
|
8 |
|
|
else()
|
9 |
|
|
set(${VARIABLE}_REASON "User defined")
|
10 |
|
|
endif()
|
11 |
|
|
set(${VARIABLE}_AUTODETECTED_VALUE ${ENABLE} CACHE INTERNAL "value autodetected by build script")
|
12 |
|
|
endmacro()
|
13 |
|
|
|
14 |
|
|
macro(set_with_reason VARIABLE REASON ENABLE)
|
15 |
|
|
if (DEFINED ${VARIABLE}_REASON AND NOT ${VARIABLE}_REASON STREQUAL "User defined")
|
16 |
|
|
set(${VARIABLE} ${ENABLE} CACHE BOOL "feature switch" FORCE)
|
17 |
|
|
set(${VARIABLE}_REASON ${REASON})
|
18 |
|
|
endif()
|
19 |
|
|
string(REPLACE "/" "_" VARIABLE_NAMES ${VARIABLE})
|
20 |
|
|
set(${VARIABLE_NAMES}_LIBS ${ARGN})
|
21 |
|
|
set(${VARIABLE}_AUTODETECTED_VALUE ${ENABLE} CACHE INTERNAL "value autodetected by build script")
|
22 |
|
|
endmacro()
|
23 |
|
|
|
24 |
|
|
macro(add_feature FEATURE REASON ENABLE)
|
25 |
|
|
list(APPEND ALL_FEATURES ${FEATURE})
|
26 |
|
|
set_feature_switch_default(${FEATURE} ${REASON} ${ENABLE})
|
27 |
|
|
endmacro()
|
28 |
|
|
|
29 |
|
|
macro(cfg_feature FEATURE REASON ENABLE)
|
30 |
|
|
set(${FEATURE} ${ENABLE})
|
31 |
|
|
if (${FEATURE}_REASON STREQUAL "User defined")
|
32 |
|
|
set(${FEATURE}_REASON "${REASON} *user setting overridden*")
|
33 |
|
|
else()
|
34 |
|
|
set(${FEATURE}_REASON ${REASON})
|
35 |
|
|
endif()
|
36 |
|
|
endmacro()
|
37 |
|
|
|
38 |
|
|
macro(add_module MODULE_PATH REASON ENABLE)
|
39 |
|
|
list(APPEND ALL_MODULES ${MODULE_PATH})
|
40 |
|
|
set_feature_switch_default(${MODULE_PATH} ${REASON} ${ENABLE})
|
41 |
|
|
endmacro()
|
42 |
|
|
|
43 |
|
|
# plugins are always linked static
|
44 |
|
|
macro(add_plugin PLUGIN_PATH REASON ENABLE)
|
45 |
|
|
list(APPEND ALL_PLUGINS ${PLUGIN_PATH})
|
46 |
|
|
set_feature_switch_default(${PLUGIN_PATH} ${REASON} ${ENABLE})
|
47 |
|
|
endmacro()
|
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 |
|
|
|
55 |
|
|
macro(module_add_library MODULE_NAME )
|
56 |
|
|
LINK_DIRECTORIES(${${MODULE_NAME}_LIBRARY_DIRS})
|
57 |
|
|
add_library(${MODULE_NAME} ${MODULE_BUILD_TYPE} ${ARGN})
|
58 |
|
|
SET_TARGET_PROPERTIES(${MODULE_NAME} PROPERTIES COMPILE_DEFINITIONS "MODULE=${MODULE_NAME}")
|
59 |
|
|
TARGET_LINK_LIBRARIES(${MODULE_NAME} ${${MODULE_NAME}_LIBS})
|
60 |
|
|
SET_TARGET_PROPERTIES( ${MODULE_NAME} PROPERTIES COMPILE_FLAGS "${NAVIT_COMPILE_FLAGS} ${${MODULE_NAME}_FLAGS}")
|
61 |
|
|
INCLUDE_DIRECTORIES(${${MODULE_NAME}_INCLUDES})
|
62 |
|
|
if (USE_PLUGINS)
|
63 |
|
|
if (ANDROID)
|
64 |
|
|
TARGET_LINK_LIBRARIES(${MODULE_NAME} ${NAVIT_LIBNAME})
|
65 |
|
|
endif()
|
66 |
|
|
if (APPLE)
|
67 |
|
|
set_target_properties( ${MODULE_NAME} PROPERTIES LINK_FLAGS "-Wl,-undefined -Wl,dynamic_lookup")
|
68 |
|
|
endif()
|
69 |
|
|
# workaround to be compatible with old paths
|
70 |
|
|
set_target_properties( ${MODULE_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/.libs")
|
71 |
|
|
|
72 |
|
|
install(TARGETS ${MODULE_NAME}
|
73 |
|
|
DESTINATION ${LIB_DIR}/navit/${${MODULE_NAME}_TYPE}
|
74 |
|
|
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
|
75 |
|
|
endif()
|
76 |
|
|
endmacro(module_add_library)
|
77 |
|
|
|
78 |
|
|
macro(supportlib_add_library LIB_NAME )
|
79 |
|
|
add_library(${LIB_NAME} ${ARGN})
|
80 |
|
|
TARGET_LINK_LIBRARIES(${LIB_NAME} ${${LIB_NAME}_LIBS})
|
81 |
|
|
SET_TARGET_PROPERTIES( ${LIB_NAME} PROPERTIES COMPILE_FLAGS "${NAVIT_COMPILE_FLAGS}")
|
82 |
|
|
SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES COMPILE_DEFINITIONS "MODULE=${LIB_NAME}")
|
83 |
|
|
endmacro(supportlib_add_library)
|
84 |
|
|
|
85 |
|
|
macro(message_error)
|
86 |
|
|
set(NAVIT_DEPENDENCY_ERROR 1)
|
87 |
|
|
message( SEND_ERROR ${ARGN})
|
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)
|