blob: 6e3a8150c3e0dc53a098b54e39790d660e7bc6e1 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
MACRO(RECURSIVE_FIND_DIR return_list dir pattern)
FILE(GLOB_RECURSE new_list "${dir}/${pattern}")
SET(dir_list "")
FOREACH(file_path ${new_list})
GET_FILENAME_COMPONENT(dir_path ${file_path} PATH)
SET(dir_list ${dir_list} ${dir_path})
ENDFOREACH()
LIST(REMOVE_DUPLICATES dir_list)
SET(${return_list} ${dir_list})
ENDMACRO()
MACRO(RECURSIVE_FIND_FILE return_list dir pattern)
FILE(GLOB_RECURSE new_list "${dir}/${pattern}")
SET(dir_list "")
FOREACH(file_path ${new_list})
SET(dir_list ${dir_list} ${file_path})
ENDFOREACH()
LIST(REMOVE_DUPLICATES dir_list)
SET(${return_list} ${dir_list})
ENDMACRO()
MACRO(SOURCE_FILES return_list dir pattern)
FILE(GLOB new_list "${dir}/${pattern}")
SET(dir_list "")
FOREACH(file_path ${new_list})
LIST(APPEND dir_list ${file_path})
ENDFOREACH()
LIST(REMOVE_DUPLICATES dir_list)
SET(${return_list} ${dir_list})
ENDMACRO()
function(EXTRACT_JSON_ARRAY json_file json_field_path fields values)
set(VALUES "")
set(FIELDS "")
foreach(var ${${json_file}})
# extract any cmd line definitions specified in the json object, and add them
# if it is not prefixed by json_field_path, do not consider the key.
if("${var}" MATCHES "${json_field_path}")
string(REGEX MATCH "[^${json_field_path}]([A-Z,a-z,0-9,_,]+)" VALUE "${var}")
# never quote the value - gives more flexibility
list(APPEND FIELDS ${VALUE})
list(APPEND VALUES "${${var}}")
endif()
endforeach()
set(${fields} ${FIELDS} PARENT_SCOPE)
set(${values} ${VALUES} PARENT_SCOPE)
endfunction()
function(FORM_DEFINITIONS fields values definitions)
set(DEFINITIONS "")
list(LENGTH ${fields} LEN)
# - 1 for for loop index...
MATH(EXPR LEN "${LEN}-1")
foreach(i RANGE ${LEN})
list(GET ${fields} ${i} DEFINITION)
list(GET ${values} ${i} VALUE)
set(DEFINITIONS "${DEFINITIONS} #define ${DEFINITION}\t ${VALUE}\n")
endforeach()
set(${definitions} ${DEFINITIONS} PARENT_SCOPE)
endfunction()
function(UNIQUE_JSON_KEYS priority_fields priority_values secondary_fields secondary_values merged_fields merged_values)
# always keep the first fields and values
set(MERGED_FIELDS ${${priority_fields}})
set(MERGED_VALUES ${${priority_values}})
# measure the second set...
list(LENGTH ${secondary_fields} LEN)
# - 1 for for loop index...
MATH(EXPR LEN "${LEN}-1")
# iterate, dropping any duplicate fields regardless of the value
foreach(i RANGE ${LEN})
list(GET ${secondary_fields} ${i} FIELD)
list(GET ${secondary_values} ${i} VALUE)
list(FIND MERGED_FIELDS ${FIELD} INDEX)
if (${INDEX} GREATER -1)
continue()
endif()
list(APPEND MERGED_FIELDS ${FIELD})
list(APPEND MERGED_VALUES ${VALUE})
endforeach()
set(${merged_fields} ${MERGED_FIELDS} PARENT_SCOPE)
set(${merged_values} ${MERGED_VALUES} PARENT_SCOPE)
endfunction()
MACRO(HEADER_FILES return_list dir)
FILE(GLOB new_list "${dir}/*.h")
SET(${return_list} ${new_list})
ENDMACRO()
function(INSTALL_DEPENDENCY dir name url branch type)
if(NOT EXISTS "${CMAKE_CURRENT_LIST_DIR}/${dir}")
message("Creating libraries folder")
FILE(MAKE_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}/${dir}")
endif()
if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/${dir}/${name}")
message("${name} is already installed")
return()
endif()
if(${type} STREQUAL "git")
message("Cloning into: ${url}")
# git clone -b doesn't work with SHAs
execute_process(
COMMAND git clone --recurse-submodules ${url} ${name}
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/${dir}
)
if(NOT "${branch}" STREQUAL "")
message("Checking out branch: ${branch}")
execute_process(
COMMAND git -c advice.detachedHead=false checkout ${branch}
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/${dir}/${name}
)
execute_process(
COMMAND git submodule update --init
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/${dir}/${name}
)
execute_process(
COMMAND git submodule sync
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/${dir}/${name}
)
execute_process(
COMMAND git submodule update
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/${dir}/${name}
)
endif()
else()
message("No mechanism exists to install this library.")
endif()
endfunction()
MACRO(SUB_DIRS return_dirs dir)
FILE(GLOB list "${PROJECT_SOURCE_DIR}/${dir}/*")
SET(dir_list "")
FOREACH(file_path ${list})
SET(dir_list ${dir_list} ${file_path})
ENDFOREACH()
set(${return_dirs} ${dir_list})
ENDMACRO()
|