123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- #!/bin/bash
- set -e
- TAG=$(git describe)
- RE_RELATIVE_INCLUDE='^#include[[:space:]]*"(.*)"'
- RE_ABSOLUTE_INCLUDE='^#include[[:space:]]*<(ArduinoJson/.*)>'
- RE_SYSTEM_INCLUDE='^#include[[:space:]]*<(.*)>'
- RE_EMPTY='^(#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|\} // namespace ARDUINOJSON_NAMESPACE\r?\nnamespace ARDUINOJSON_NAMESPACE \{\r?\n||igs' "$1"
- }
- cd $(dirname $0)/../..
- INCLUDED=()
- process src/ArduinoJson.h true > ../ArduinoJson-$TAG.h
- simplify_namespaces ../ArduinoJson-$TAG.h
- g++ -x c++ -c -o ../smoketest.o - <<END
- #include "../ArduinoJson-$TAG.h"
- int main() {
- StaticJsonDocument<300> doc;
- deserializeJson(doc, "{}");
- }
- END
- INCLUDED=()
- process src/ArduinoJson.hpp true > ../ArduinoJson-$TAG.hpp
- simplify_namespaces ../ArduinoJson-$TAG.hpp
- g++ -x c++ -c -o ../smoketest.o - <<END
- #include "../ArduinoJson-$TAG.hpp"
- int main() {
- ArduinoJson::StaticJsonDocument<300> doc;
- ArduinoJson::deserializeJson(doc, "{}");
- }
- END
|