| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 | #!/bin/bashset -eTAG=$(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 INCLUDEDprocess(){	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.hsimplify_namespaces ../ArduinoJson-$TAG.hg++ -x c++ -c -o ../smoketest.o - <<END#include "../ArduinoJson-$TAG.h"int main() {	StaticJsonDocument<300> doc;	deserializeJson(doc, "{}");}ENDINCLUDED=()process src/ArduinoJson.hpp true > ../ArduinoJson-$TAG.hppsimplify_namespaces ../ArduinoJson-$TAG.hppg++ -x c++ -c -o ../smoketest.o - <<END#include "../ArduinoJson-$TAG.hpp"int main() {	ArduinoJson::StaticJsonDocument<300> doc;	ArduinoJson::deserializeJson(doc, "{}");}END
 |