File size: 5,568 Bytes
b7b614e |
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(RECURSIVE_FIND_FILE_EXCLUDE_DIR return_list dir exclude_dir pattern)
FILE(GLOB_RECURSE new_list "${dir}/${pattern}")
SET(dir_list "")
FOREACH(file_path ${new_list})
IF (file_path MATCHES ".*\/${exclude_dir}\/.*")
continue()
endif()
SET(dir_list ${dir_list} ${file_path})
ENDFOREACH()
LIST(REMOVE_DUPLICATES dir_list)
SET(${return_list} ${dir_list})
ENDMACRO()
MACRO(RECURSIVE_FIND_FILE_APPEND return_list dir pattern)
RECURSIVE_FIND_FILE( append_list ${dir} ${pattern} )
LIST(APPEND ${return_list} ${append_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()
|