From ad972725dea62843b9a21142532e52b3a45b969d Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Sat, 25 Mar 2017 21:56:37 +0100 Subject: [PATCH] Added a script to build a single file distribution --- README.md | 2 +- include/ArduinoJson.h | 3 ++ include/ArduinoJson.hpp | 2 - .../StringTraits/ArduinoStream.hpp | 4 ++ .../ArduinoJson/StringTraits/FlashString.hpp | 4 ++ .../ArduinoJson/StringTraits/StdStream.hpp | 4 ++ .../ArduinoJson/StringTraits/StdString.hpp | 4 ++ .../ArduinoJson/StringTraits/StringTraits.hpp | 18 ++------ scripts/build-single-header.sh | 44 +++++++++++++++++++ 9 files changed, 67 insertions(+), 18 deletions(-) create mode 100644 scripts/build-single-header.sh diff --git a/README.md b/README.md index 39fb3048..337ad3b8 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,7 @@ root.printTo(Serial); Documentation ------------- -The documentation is available online in the [ArduinoJson wiki](https://github.com/bblanchon/ArduinoJson/wiki). +The documentation is available online in the [ArduinoJson Website](https://github.com/bblanchon/ArduinoJson/). The [ArduinoJson Assistant](https://bblanchon.github.io/ArduinoJson/assistant/) helps you get started with the library. diff --git a/include/ArduinoJson.h b/include/ArduinoJson.h index 48609d84..82629c94 100644 --- a/include/ArduinoJson.h +++ b/include/ArduinoJson.h @@ -5,5 +5,8 @@ // https://github.com/bblanchon/ArduinoJson // If you like this project, please add a star! +#pragma once + #include "ArduinoJson.hpp" + using namespace ArduinoJson; diff --git a/include/ArduinoJson.hpp b/include/ArduinoJson.hpp index 3031f592..8bf70539 100644 --- a/include/ArduinoJson.hpp +++ b/include/ArduinoJson.hpp @@ -19,5 +19,3 @@ #include "ArduinoJson/JsonObjectImpl.hpp" #include "ArduinoJson/JsonVariantImpl.hpp" #include "ArduinoJson/Serialization/JsonSerializerImpl.hpp" - -using namespace ArduinoJson; diff --git a/include/ArduinoJson/StringTraits/ArduinoStream.hpp b/include/ArduinoJson/StringTraits/ArduinoStream.hpp index aa59dca4..55d534d0 100644 --- a/include/ArduinoJson/StringTraits/ArduinoStream.hpp +++ b/include/ArduinoJson/StringTraits/ArduinoStream.hpp @@ -7,6 +7,8 @@ #pragma once +#if ARDUINOJSON_ENABLE_ARDUINO_STREAM + #include #include "../TypeTraits/EnableIf.hpp" @@ -59,3 +61,5 @@ struct StringTraits @@ -50,3 +52,5 @@ struct StringTraits { }; } } + +#endif diff --git a/include/ArduinoJson/StringTraits/StdStream.hpp b/include/ArduinoJson/StringTraits/StdStream.hpp index 50fceb92..3b4593d9 100644 --- a/include/ArduinoJson/StringTraits/StdStream.hpp +++ b/include/ArduinoJson/StringTraits/StdStream.hpp @@ -7,6 +7,8 @@ #pragma once +#if ARDUINOJSON_ENABLE_STD_STREAM + #include #include "../TypeTraits/EnableIf.hpp" #include "../TypeTraits/IsBaseOf.hpp" @@ -57,3 +59,5 @@ struct StringTraits #endif @@ -60,3 +62,5 @@ struct StringTraits : StdStringTraits {}; #endif } } + +#endif diff --git a/include/ArduinoJson/StringTraits/StringTraits.hpp b/include/ArduinoJson/StringTraits/StringTraits.hpp index 0e128e94..fc24504b 100644 --- a/include/ArduinoJson/StringTraits/StringTraits.hpp +++ b/include/ArduinoJson/StringTraits/StringTraits.hpp @@ -23,23 +23,11 @@ struct StringTraits : StringTraits {}; } } -#include "CharPointer.hpp" - -#if ARDUINOJSON_ENABLE_STD_STRING || ARDUINOJSON_ENABLE_ARDUINO_STRING -#include "StdString.hpp" -#endif - -#if ARDUINOJSON_ENABLE_STD_STREAM -#include "StdStream.hpp" -#endif - -#if ARDUINOJSON_ENABLE_ARDUINO_STREAM #include "ArduinoStream.hpp" -#endif - -#if ARDUINOJSON_ENABLE_PROGMEM +#include "CharPointer.hpp" #include "FlashString.hpp" -#endif +#include "StdStream.hpp" +#include "StdString.hpp" namespace ArduinoJson { namespace TypeTraits { diff --git a/scripts/build-single-header.sh b/scripts/build-single-header.sh new file mode 100644 index 00000000..c0cd2580 --- /dev/null +++ b/scripts/build-single-header.sh @@ -0,0 +1,44 @@ +#!/bin/bash + +TAG=$(git describe) +RE_INCLUDE='^#include[[:space:]]*["<](.*)[">]' +RE_EMPTY='^(#pragma[[:space:]]+once)?[[:space:]]*(//.*)?$' + +declare -A INCLUDED + +process() +{ + local PARENT=$1 + local FOLDER=$(dirname $1) + local SHOW_COMMENT=$2 + while IFS= read -r LINE; do + if [[ $LINE =~ $RE_INCLUDE ]]; then + local CHILD=${BASH_REMATCH[1]} + pushd "$FOLDER" > /dev/null + if [[ -e $CHILD ]]; then + local CHILD_PATH=$(realpath $CHILD) + if [[ ! ${INCLUDED[$CHILD_PATH]} ]]; then + #echo "// $PARENT -> $CHILD" + INCLUDED[$CHILD_PATH]=true + process "$CHILD" false + fi + else + if [[ ! ${INCLUDED[$CHILD]} ]]; then + echo "$LINE" + INCLUDED[$CHILD]=true + fi + fi + popd > /dev/null + elif [[ "${SHOW_COMMENT}" = "true" ]] ; then + echo "$LINE" + elif [[ ! $LINE =~ $RE_EMPTY ]]; then + echo "$LINE" + fi + done < $PARENT +} + +cd $(dirname $0)/../ +INCLUDED=() +process include/ArduinoJson.h true > ../ArduinoJson-$TAG.h +INCLUDED=() +process include/ArduinoJson.hpp true > ../ArduinoJson-$TAG.hpp \ No newline at end of file