Skip to content
This repository was archived by the owner on Apr 17, 2023. It is now read-only.

Commit 20174fe

Browse files
committed
Converted all regex from cache variables to global properties
1 parent bff2591 commit 20174fe

10 files changed

+64
-70
lines changed

cmake/Platform/Project/ProjectSetup.cmake

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,4 @@ function(arduino_cmake_project _project_name)
1111

1212
setup_project_core_lib(${_project_name})
1313

14-
set(ARDUINO_CMAKE_FUNCTION_DEFINITION_REGEX_PATTERN
15-
"^([A-Za-z0-9_][ \t\r\n]*)+\\(.*\\)$" PARENT_SCOPE)
16-
set(ARDUINO_CMAKE_FUNCTION_DECLARATION_REGEX_PATTERN
17-
"^([A-Za-z0-9_])+.+([A-Za-z0-9_])+[ \t\r\n]*\\((.*)\\);$" PARENT_SCOPE)
18-
set(ARDUINO_CMAKE_FUNCTION_NAME_REGEX_PATTERN "(([A-Za-z0-9_])+)[ \t\r\n]*\\(.*\\)" PARENT_SCOPE)
19-
set(ARDUINO_CMAKE_FUNCTION_ARGS_REGEX_PATTERN "\\((.*)\\)" PARENT_SCOPE)
20-
set(ARDUINO_CMAKE_FUNCTION_SINGLE_ARG_REGEX_PATTERN "([A-Za-z0-9_]+)[^,]*" PARENT_SCOPE)
21-
set(ARDUINO_CMAKE_FUNCTION_ARG_TYPE_REGEX_PATTERN "[A-Za-z0-9_]+.*[ \t\r\n]+" PARENT_SCOPE)
22-
2314
endfunction()

cmake/Platform/Sketches/FunctionPrototypeGenerator.cmake

Lines changed: 0 additions & 4 deletions
This file was deleted.

cmake/Platform/Sketches/SketchSourceConverter.cmake

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,16 @@ endfunction()
1616

1717
macro(_setup_regex_patterns)
1818

19-
string(CONCAT function_prototype_pattern
20-
"${ARDUINO_CMAKE_FUNCTION_DECLARATION_REGEX_PATTERN}"
21-
"|${ARDUINO_CMAKE_FUNCTION_DEFINITION_REGEX_PATTERN}")
19+
get_property(function_declaration_regex GLOBAL PROPERTY ARDUINO_CMAKE_FUNCTION_DECLARATION_REGEX_PATTERN)
20+
get_property(function_definition_regex GLOBAL PROPERTY ARDUINO_CMAKE_FUNCTION_DEFINITION_REGEX_PATTERN)
21+
get_property(preprocessor_regex GLOBAL PROPERTY ARDUINO_CMAKE_PREPROCESSOR_REGEX_PATTERN)
22+
23+
string(CONCAT function_prototype_regex
24+
"${function_declaration_regex}"
25+
"|${function_definition_regex}")
2226
string(CONCAT code_pattern
23-
"${ARDUINO_CMAKE_PREPROCESSOR_REGEX_PATTERN}"
24-
"|${function_prototype_pattern}")
27+
"${preprocessor_regex}"
28+
"|${function_prototype_regex}")
2529

2630
set(comment_line_pattern "\\/\\/")
2731
set(comment_block_start_pattern "\\/\\*")
@@ -31,7 +35,9 @@ endmacro()
3135

3236
macro(_insert_platform_header _current_line _line_index)
3337

34-
if ("${_current_line}" MATCHES "${ARDUINO_CMAKE_HEADER_INCLUDE_REGEX_PATTERN}")
38+
get_property(header_include_regex GLOBAL PROPERTY ARDUINO_CMAKE_HEADER_INCLUDE_REGEX_PATTERN)
39+
40+
if ("${_current_line}" MATCHES "${header_include_regex}")
3541
set(include_line "${ARDUINO_CMAKE_PLATFORM_HEADER_INCLUDE_LINE}\n")
3642
else ()
3743
set(include_line "${ARDUINO_CMAKE_PLATFORM_HEADER_INCLUDE_LINE}\n\n")
@@ -73,7 +79,9 @@ endmacro()
7379

7480
macro(_handle_prototype_generation)
7581

76-
if (NOT "${line}" MATCHES "${ARDUINO_CMAKE_HEADER_INCLUDE_REGEX_PATTERN}")
82+
get_property(header_include_regex GLOBAL PROPERTY ARDUINO_CMAKE_HEADER_INCLUDE_REGEX_PATTERN)
83+
84+
if (NOT "${line}" MATCHES "${header_include_regex}")
7785
if (NOT "${line}" STREQUAL "") # Not a newline
7886

7987
if (NOT header_inclusion_block)

cmake/Platform/Sources/FunctionDeclarationMatcher.cmake

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
#=============================================================================#
1111
function(match_function_declaration _definition_signature _included_headers _return_var)
1212

13+
get_property(function_declaration_regex GLOBAL PROPERTY ARDUINO_CMAKE_FUNCTION_DECLARATION_REGEX_PATTERN)
14+
1315
# Get function name and list of argument-types
1416
strip_function_signature("${_definition_signature}" original_stripped_function)
1517
list(GET original_stripped_function 0 original_function_name)
@@ -22,7 +24,7 @@ function(match_function_declaration _definition_signature _included_headers _ret
2224
foreach (line ${header_lines})
2325

2426
# Search for function declarations
25-
if ("${line}" MATCHES "${ARDUINO_CMAKE_FUNCTION_DECLARATION_REGEX_PATTERN}")
27+
if ("${line}" MATCHES "${function_declaration_regex}")
2628

2729
# Get function name and list of argument-types
2830
strip_function_signature("${line}" iterated_stripped_function)

cmake/Platform/Sources/FunctionSignatureStripper.cmake

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,17 @@
66
#=============================================================================#
77
function(_get_function_arguments_types _signature _return_var)
88

9-
string(REGEX MATCH ${ARDUINO_CMAKE_FUNCTION_ARGS_REGEX_PATTERN} function_args_string "${_signature}")
10-
string(REGEX MATCHALL ${ARDUINO_CMAKE_FUNCTION_SINGLE_ARG_REGEX_PATTERN}
9+
get_property(function_args_regex GLOBAL PROPERTY ARDUINO_CMAKE_FUNCTION_ARGS_REGEX_PATTERN)
10+
get_property(function_single_arg_regex GLOBAL PROPERTY ARDUINO_CMAKE_FUNCTION_SINGLE_ARG_REGEX_PATTERN)
11+
get_property(function_arg_type_regex GLOBAL PROPERTY ARDUINO_CMAKE_FUNCTION_ARG_TYPE_REGEX_PATTERN)
12+
13+
string(REGEX MATCH ${function_args_regex} function_args_string "${_signature}")
14+
string(REGEX MATCHALL ${function_single_arg_regex}
1115
function_arg_list "${function_args_string}")
1216
# Iterate through all arguments to extract only their type
1317
foreach (arg ${function_arg_list})
1418

15-
string(REGEX MATCH ${ARDUINO_CMAKE_FUNCTION_ARG_TYPE_REGEX_PATTERN} arg_type "${arg}")
19+
string(REGEX MATCH ${function_arg_type_regex} arg_type "${arg}")
1620
string(STRIP "${arg_type}" arg_type) # Strip remaining whitespaces
1721

1822
if (NOT "${arg_type}" STREQUAL "void") # Do NOT append 'void' arguments - they're meaningless
@@ -33,8 +37,10 @@ endfunction()
3337
#=============================================================================#
3438
function(strip_function_signature _signature _return_var)
3539

40+
get_property(function_name_regex GLOBAL PROPERTY ARDUINO_CMAKE_FUNCTION_NAME_REGEX_PATTERN)
41+
3642
# Strip function's name
37-
string(REGEX MATCH ${ARDUINO_CMAKE_FUNCTION_NAME_REGEX_PATTERN} function_name_match "${_signature}")
43+
string(REGEX MATCH ${function_name_regex} function_name_match "${_signature}")
3844
set(function_name ${CMAKE_MATCH_1})
3945
list(APPEND stripped_signature ${function_name})
4046

cmake/Platform/Sources/SourceFunctionsRetriever.cmake

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
function(get_source_function_definitions _source_file _return_var)
22

3+
get_property(function_definition_regex GLOBAL PROPERTY ARDUINO_CMAKE_FUNCTION_DEFINITION_REGEX_PATTERN)
4+
35
file(STRINGS "${_source_file}" source_lines)
46

57
foreach (line ${source_lines})
6-
if ("${line}" MATCHES "${ARDUINO_CMAKE_FUNCTION_DEFINITION_REGEX_PATTERN}")
8+
if ("${line}" MATCHES "${function_definition_regex}")
79
list(APPEND definitions "${line}")
810
endif ()
911
endforeach ()

cmake/Platform/Sources/SourceHeadersRetriever.cmake

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,17 @@ function(_get_source_included_headers _source_file _return_var)
1010

1111
cmake_parse_arguments(parsed_args "WE" "" "" ${ARGN})
1212

13+
get_property(header_include_regex GLOBAL PROPERTY ARDUINO_CMAKE_HEADER_INCLUDE_REGEX_PATTERN)
14+
get_property(header_name_regex GLOBAL PROPERTY ARDUINO_CMAKE_HEADER_NAME_REGEX_PATTERN)
15+
1316
file(STRINGS "${_source_file}" source_lines) # Loc = Lines of code
1417

15-
list(FILTER source_lines INCLUDE REGEX ${ARDUINO_CMAKE_HEADER_INCLUDE_REGEX_PATTERN})
18+
list(FILTER source_lines INCLUDE REGEX ${header_include_regex})
1619

1720
# Extract header names from inclusion
1821
foreach (loc ${source_lines})
1922

20-
string(REGEX MATCH ${ARDUINO_CMAKE_HEADER_NAME_REGEX_PATTERN} match ${loc})
23+
string(REGEX MATCH ${header_name_regex} match ${loc})
2124

2225
if (parsed_args_WE)
2326
get_name_without_file_extension("${CMAKE_MATCH_1}" header_name)

cmake/Platform/Sources/SourcesManager.cmake

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,9 @@ function(get_source_file_includes _source_file _return_var)
7878
endif ()
7979

8080
file(STRINGS "${_source_file}" source_lines)
81-
82-
list(FILTER source_lines INCLUDE REGEX "${ARDUINO_CMAKE_HEADER_INCLUDE_REGEX_PATTERN}")
81+
82+
get_property(header_include_regex GLOBAL PROPERTY ARDUINO_CMAKE_HEADER_INCLUDE_REGEX_PATTERN)
83+
list(FILTER source_lines INCLUDE REGEX "${header_include_regex}")
8384

8485
set(${_return_var} ${source_lines} PARENT_SCOPE)
8586

@@ -94,8 +95,10 @@ endfunction()
9495
#=============================================================================#
9596
function(get_headers_parent_directories _sources _return_var)
9697

98+
get_property(header_file_extension_regex GLOBAL PROPERTY ARDUINO_CMAKE_HEADER_FILE_EXTENSION_REGEX_PATTERN)
99+
97100
# Extract header files
98-
list(FILTER _sources INCLUDE REGEX "${ARDUINO_CMAKE_HEADER_FILE_EXTENSION_REGEX_PATTERN}")
101+
list(FILTER _sources INCLUDE REGEX "${header_file_extension_regex}")
99102

100103
foreach (header_source ${_sources})
101104
get_filename_component(header_parent_dir ${header_source} DIRECTORY)

cmake/Platform/System/DefaultsManager.cmake

Lines changed: 15 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -3,46 +3,25 @@
33
#=============================================================================#
44
function(set_internal_search_patterns)
55

6-
set(ARDUINO_CMAKE_SEMICOLON_REPLACEMENT "!@&#%" CACHE STRING
7-
"String replacement for the semicolon char, required when treating lists as code")
6+
set_property(GLOBAL PROPERTY ARDUINO_CMAKE_SEMICOLON_REPLACEMENT "!@&#%")
87

9-
set(ARDUINO_CMAKE_PREPROCESSOR_REGEX_PATTERN "^#([A-Za-z0-9_])+" CACHE STRING
10-
"Regex pattern matching preprocessor directives in source files")
8+
set_property(GLOBAL PROPERTY ARDUINO_CMAKE_PREPROCESSOR_REGEX_PATTERN "^#([A-Za-z0-9_])+")
9+
set(header_include_regex "^#include.*[<\"]")
10+
set_property(GLOBAL PROPERTY ARDUINO_CMAKE_HEADER_INCLUDE_REGEX_PATTERN "${header_include_regex}")
1111

12-
set(ARDUINO_CMAKE_HEADER_INCLUDE_REGEX_PATTERN "^#include.*[<\"]" CACHE STRING
13-
"Regex pattern matching header inclusion in a source file")
12+
set_property(GLOBAL PROPERTY ARDUINO_CMAKE_HEADER_NAME_REGEX_PATTERN "${header_include_regex}(.+)[>\"]$")
13+
set_property(GLOBAL PROPERTY ARDUINO_CMAKE_HEADER_FILE_EXTENSION_REGEX_PATTERN ".+\\.h.*$")
14+
set_property(GLOBAL PROPERTY ARDUINO_CMAKE_NAME_WE_REGEX_PATTERN "([^\\/]+)\\.")
1415

15-
set(ARDUINO_CMAKE_HEADER_NAME_REGEX_PATTERN
16-
"${ARDUINO_CMAKE_HEADER_INCLUDE_REGEX_PATTERN}(.+)[>\"]$" CACHE STRING
17-
"Regex pattern matching a header's name when wrapped in inclusion line")
16+
set_property(GLOBAL PROPERTY ARDUINO_CMAKE_FUNCTION_DEFINITION_REGEX_PATTERN
17+
"^([A-Za-z0-9_][ \t\r\n]*)+\\(.*\\)$")
18+
set_property(GLOBAL PROPERTY ARDUINO_CMAKE_FUNCTION_DECLARATION_REGEX_PATTERN
19+
"^([A-Za-z0-9_])+.+([A-Za-z0-9_])+[ \t\r\n]*\\((.*)\\);$")
1820

19-
set(ARDUINO_CMAKE_HEADER_FILE_EXTENSION_REGEX_PATTERN ".+\\.h.*$" CACHE STRING
20-
"Regex pattern matching all header file extensions")
21-
22-
set(ARDUINO_CMAKE_NAME_WE_REGEX_PATTERN "([^\\/]+)\\." CACHE STRING
23-
"Regex pattern matching name without file extension")
24-
25-
#[[set(ARDUINO_CMAKE_FUNCTION_DECLARATION_REGEX_PATTERN "^([A-Za-z0-9_])+.+([A-Za-z0-9_])+[ \t\r\\n]*\((.*)\);$"
26-
CACHE STRING "Regex pattern matching a function signature definition in a source file")
27-
28-
set(ARDUINO_CMAKE_FUNCTION_DEFINITION_REGEX_PATTERN "^([A-Za-z0-9_])+[ \t\r\n]*\(([A-Za-z0-9_])*\)$"
29-
CACHE STRING "Regex pattern matching a function signature definition in a source file")
30-
31-
set(ARDUINO_CMAKE_FUNCTION_NAME_REGEX_PATTERN "(([A-Za-z0-9_])+)[ \t\r\\n]*\(.*\)"
32-
CACHE STRING
33-
"Regex pattern matching a function's name (and everything following it), can be retrieved by the 1st group")
34-
35-
set(ARDUINO_CMAKE_FUNCTION_ARGS_REGEX_PATTERN "\((.*)\)"
36-
CACHE STRING
37-
"Regex pattern matching a function's argument list, i.e. What's inside the parentheses")
38-
39-
set(ARDUINO_CMAKE_FUNCTION_SINGLE_ARG_REGEX_PATTERN "([A-Za-z0-9_]+)[^,]*"
40-
CACHE STRING
41-
"Regex pattern matching a function's argument, requiring maximum matches to get all arguments")
42-
43-
set(ARDUINO_CMAKE_FUNCTION_ARG_TYPE_REGEX_PATTERN "[A-Za-z0-9_]+.*[ \t\r\\n]+"
44-
CACHE STRING
45-
"Regex pattern matching a function argument type, ommiting it's name")]]
21+
set_property(GLOBAL PROPERTY ARDUINO_CMAKE_FUNCTION_NAME_REGEX_PATTERN "(([A-Za-z0-9_])+)[ \t\r\n]*\\(.*\\)")
22+
set_property(GLOBAL PROPERTY ARDUINO_CMAKE_FUNCTION_ARGS_REGEX_PATTERN "\\((.*)\\)")
23+
set_property(GLOBAL PROPERTY ARDUINO_CMAKE_FUNCTION_SINGLE_ARG_REGEX_PATTERN "([A-Za-z0-9_]+)[^,]*")
24+
set_property(GLOBAL PROPERTY ARDUINO_CMAKE_FUNCTION_ARG_TYPE_REGEX_PATTERN "[A-Za-z0-9_]+.*[ \t\r\n]+")
4625

4726
endfunction()
4827

cmake/Platform/Utilities/StringUtils.cmake

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,9 @@ endfunction()
7979
#=============================================================================#
8080
function(get_name_without_file_extension _input_string _return_var)
8181

82-
string(REGEX MATCH "${ARDUINO_CMAKE_NAME_WE_REGEX_PATTERN}" match "${_input_string}")
82+
get_property(name_we_regex GLOBAL PROPERTY ARDUINO_CMAKE_NAME_WE_REGEX_PATTERN)
83+
84+
string(REGEX MATCH "${name_we_regex}" match "${_input_string}")
8385

8486
set(${_return_var} ${CMAKE_MATCH_1} PARENT_SCOPE)
8587

@@ -122,10 +124,12 @@ function(escape_semicolon_in_string _string _return_var)
122124

123125
cmake_parse_arguments(parsed_args "REVERSE" "" "" ${ARGN})
124126

127+
get_property(semicolon_replacement GLOBAL PROPERTY ARDUINO_CMAKE_SEMICOLON_REPLACEMENT)
128+
125129
if (parsed_args_REVERSE)
126-
string(REGEX REPLACE "^(.+)${ARDUINO_CMAKE_SEMICOLON_REPLACEMENT}(.*)$" "\\1;\\2" escaped_line "${_string}")
130+
string(REGEX REPLACE "^(.+)${semicolon_replacement}(.*)$" "\\1;\\2" escaped_line "${_string}")
127131
else ()
128-
string(REGEX REPLACE "^(.+);(.*)$" "\\1${ARDUINO_CMAKE_SEMICOLON_REPLACEMENT}\\2" escaped_line "${_string}")
132+
string(REGEX REPLACE "^(.+);(.*)$" "\\1${semicolon_replacement}\\2" escaped_line "${_string}")
129133
endif ()
130134

131135
set(${_return_var} ${escaped_line} PARENT_SCOPE)

0 commit comments

Comments
 (0)