mirror of https://github.com/ArduPilot/ardupilot
104 lines
3.3 KiB
CMake
104 lines
3.3 KiB
CMake
|
# 1. Concatenate all PDE files
|
||
|
# 2. Write #include "WProgram.h"
|
||
|
# 3. Write prototypes
|
||
|
# 4. Write original sources
|
||
|
#
|
||
|
#
|
||
|
# Prefix Writer
|
||
|
# 1. Scrub comments
|
||
|
# 2. Optionally subsitute Unicode
|
||
|
# 3. Find imports
|
||
|
# 4. Find prototypes
|
||
|
#
|
||
|
# Find prototypes
|
||
|
# 1. Strip comments, quotes, preprocessor directives
|
||
|
# 2. Collapse braches
|
||
|
# 3. Regex
|
||
|
|
||
|
|
||
|
set(SINGLE_QUOTES_REGEX "('.')")
|
||
|
set(DOUBLE_QUOTES_REGEX "(\"([^\"\\\\]|\\\\.)*\")")
|
||
|
set(SINGLE_COMMENT_REGEX "([ ]*//[^\n]*)")
|
||
|
set(MULTI_COMMENT_REGEX "(/[*][^/]*[*]/)")
|
||
|
set(PREPROC_REGEX "([ ]*#(\\\\[\n]|[^\n])*)")
|
||
|
|
||
|
#"[\w\[\]\*]+\s+[&\[\]\*\w\s]+\([&,\[\]\*\w\s]*\)(?=\s*\{)"
|
||
|
set(PROTOTPYE_REGEX "([a-zA-Z0-9]+[ ]*)*[a-zA-Z0-9]+[ ]*\([^{]*\)[ ]*{")
|
||
|
|
||
|
function(READ_SKETCHES VAR_NAME )
|
||
|
set(SKETCH_SOURCE)
|
||
|
foreach(SKETCH ${ARGN})
|
||
|
if(EXISTS ${SKETCH})
|
||
|
message(STATUS "${SKETCH}")
|
||
|
file(READ ${SKETCH} SKETCH_CONTENTS)
|
||
|
set(SKETCH_SOURCE "${SKETCH_SOURCE}\n${SKETCH_CONTENTS}")
|
||
|
else()
|
||
|
message(FATAL_ERROR "Sketch file does not exist: ${SKETCH}")
|
||
|
endif()
|
||
|
endforeach()
|
||
|
set(${VAR_NAME} "${SKETCH_SOURCE}" PARENT_SCOPE)
|
||
|
endfunction()
|
||
|
|
||
|
function(STRIP_SOURCES VAR_NAME SOURCES)
|
||
|
string(REGEX REPLACE "${SINGLE_QUOTES_REGEX}|${DOUBLE_QUOTES_REGEX}|${SINGLE_COMMENT_REGEX}|${MULTI_COMMENT_REGEX}|${PREPROC_REGEX}"
|
||
|
""
|
||
|
SOURCES
|
||
|
"${SOURCES}")
|
||
|
set(${VAR_NAME} "${SOURCES}" PARENT_SCOPE)
|
||
|
endfunction()
|
||
|
|
||
|
function(COLLAPSE_BRACES VAR_NAME SOURCES)
|
||
|
set(PARSED_SOURCES)
|
||
|
string(LENGTH "${SOURCES}" SOURCES_LENGTH)
|
||
|
math(EXPR SOURCES_LENGTH "${SOURCES_LENGTH}-1")
|
||
|
|
||
|
set(NESTING 0)
|
||
|
set(START 0)
|
||
|
foreach(INDEX RANGE ${SOURCES_LENGTH})
|
||
|
string(SUBSTRING "${SOURCES}" ${INDEX} 1 CURRENT_CHAR)
|
||
|
#message("${CURRENT_CHAR}")
|
||
|
if(CURRENT_CHAR STREQUAL "{")
|
||
|
if(NESTING EQUAL 0)
|
||
|
math(EXPR SUBLENGTH "${INDEX}-${START} +1")
|
||
|
string(SUBSTRING "${SOURCES}" ${START} ${SUBLENGTH} CURRENT_CHUNK)
|
||
|
set(PARSED_SOURCES "${PARSED_SOURCES}${CURRENT_CHUNK}")
|
||
|
#message("INDEX: ${INDEX} START: ${START} LENGTH: ${SUBLENGTH}")
|
||
|
endif()
|
||
|
math(EXPR NESTING "${NESTING}+1")
|
||
|
elseif(CURRENT_CHAR STREQUAL "}")
|
||
|
math(EXPR NESTING "${NESTING}-1")
|
||
|
if(NESTING EQUAL 0)
|
||
|
set(START ${INDEX})
|
||
|
endif()
|
||
|
endif()
|
||
|
endforeach()
|
||
|
|
||
|
math(EXPR SUBLENGTH "${SOURCES_LENGTH}-${START} +1")
|
||
|
string(SUBSTRING "${SOURCES}" ${START} ${SUBLENGTH} CURRENT_CHUNK)
|
||
|
set(PARSED_SOURCES "${PARSED_SOURCES}${CURRENT_CHUNK}")
|
||
|
|
||
|
set(${VAR_NAME} "${PARSED_SOURCES}" PARENT_SCOPE)
|
||
|
endfunction()
|
||
|
|
||
|
function(extract_prototypes VAR_NAME SOURCES)
|
||
|
string(REGEX MATCHALL "${PROTOTPYE_REGEX}"
|
||
|
SOURCES
|
||
|
"${SOURCES}")
|
||
|
set(${VAR_NAME} "${SOURCES}" PARENT_SCOPE)
|
||
|
endfunction()
|
||
|
|
||
|
read_sketches(SKETCH_SOURCE ${FILES})
|
||
|
strip_sources(SKETCH_SOURCE "${SKETCH_SOURCE}")
|
||
|
collapse_braces(SKETCH_SOURCE "${SKETCH_SOURCE}")
|
||
|
extract_prototypes(SKETCH_SOURCE "${SKETCH_SOURCE}")
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
message("===============")
|
||
|
foreach(ENTRY ${SKETCH_SOURCE})
|
||
|
message("START]]]${ENTRY}[[[END")
|
||
|
endforeach()
|
||
|
message("===============")
|
||
|
#message("${SKETCH_SOURCE}")
|