You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.8 KiB
65 lines
1.8 KiB
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
RE_RELATIVE_INCLUDE='^#[[:space:]]*include[[:space:]]*"(.*)"'
|
|
RE_ABSOLUTE_INCLUDE='^#[[:space:]]*include[[:space:]]*<(ArduinoJson/.*)>'
|
|
RE_SYSTEM_INCLUDE='^#[[:space:]]*include[[:space:]]*<(.*)>'
|
|
RE_EMPTY='^(#[[:space:]]*pragma[[:space:]]+once)?[[:space:]]*(//.*)?$'
|
|
SRC_DIRECTORY="$(realpath "$(dirname $0)/../../src")"
|
|
|
|
|
|
declare -A INCLUDED
|
|
|
|
process()
|
|
{
|
|
local PARENT=$1
|
|
local FOLDER=$(dirname $1)
|
|
local SHOW_COMMENT=$2
|
|
while IFS= read -r LINE; do
|
|
if [[ $LINE =~ $RE_ABSOLUTE_INCLUDE ]]; then
|
|
local CHILD=${BASH_REMATCH[1]}
|
|
local CHILD_PATH
|
|
CHILD_PATH=$(realpath "$SRC_DIRECTORY/$CHILD")
|
|
echo "$PARENT -> $CHILD" >&2
|
|
if [[ ! ${INCLUDED[$CHILD_PATH]} ]]; then
|
|
INCLUDED[$CHILD_PATH]=true
|
|
process "$CHILD" false
|
|
fi
|
|
elif [[ $LINE =~ $RE_RELATIVE_INCLUDE ]]; then
|
|
local CHILD=${BASH_REMATCH[1]}
|
|
pushd "$FOLDER" > /dev/null
|
|
local CHILD_PATH
|
|
CHILD_PATH=$(realpath "$CHILD")
|
|
echo "$PARENT -> $CHILD" >&2
|
|
if [[ ! ${INCLUDED[$CHILD_PATH]} ]]; then
|
|
INCLUDED[$CHILD_PATH]=true
|
|
process "$CHILD" false
|
|
fi
|
|
popd > /dev/null
|
|
elif [[ $LINE =~ $RE_SYSTEM_INCLUDE ]]; then
|
|
local CHILD=${BASH_REMATCH[1]}
|
|
echo "$PARENT -> <$CHILD>" >&2
|
|
if [[ ! ${INCLUDED[$CHILD]} ]]; then
|
|
echo "#include <$CHILD>"
|
|
INCLUDED[$CHILD]=true
|
|
fi
|
|
elif [[ "${SHOW_COMMENT}" = "true" ]] ; then
|
|
echo "$LINE"
|
|
elif [[ ! $LINE =~ $RE_EMPTY ]]; then
|
|
echo "$LINE"
|
|
fi
|
|
done < $PARENT
|
|
}
|
|
|
|
simplify_namespaces() {
|
|
perl -p0i -e 's|ARDUINOJSON_END_PUBLIC_NAMESPACE\r?\nARDUINOJSON_BEGIN_PUBLIC_NAMESPACE\r?\n||igs' "$1"
|
|
perl -p0i -e 's|ARDUINOJSON_END_PRIVATE_NAMESPACE\r?\nARDUINOJSON_BEGIN_PRIVATE_NAMESPACE\r?\n||igs' "$1"
|
|
rm -f "$1.bak"
|
|
}
|
|
|
|
INCLUDED=()
|
|
INPUT=$1
|
|
OUTPUT=$2
|
|
process "$INPUT" true > "$OUTPUT"
|
|
simplify_namespaces "$OUTPUT"
|
|
|