build-single-header.sh 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #!/bin/bash
  2. TAG=$(git describe)
  3. RE_INCLUDE='^#include[[:space:]]*["<](.*)[">]'
  4. RE_EMPTY='^(#pragma[[:space:]]+once)?[[:space:]]*(//.*)?$'
  5. declare -A INCLUDED
  6. process()
  7. {
  8. local PARENT=$1
  9. local FOLDER=$(dirname $1)
  10. local SHOW_COMMENT=$2
  11. while IFS= read -r LINE; do
  12. if [[ $LINE =~ $RE_INCLUDE ]]; then
  13. local CHILD=${BASH_REMATCH[1]}
  14. pushd "$FOLDER" > /dev/null
  15. if [[ -e $CHILD ]]; then
  16. local CHILD_PATH=$(realpath $CHILD)
  17. if [[ ! ${INCLUDED[$CHILD_PATH]} ]]; then
  18. #echo "// $PARENT -> $CHILD"
  19. INCLUDED[$CHILD_PATH]=true
  20. process "$CHILD" false
  21. fi
  22. else
  23. if [[ ! ${INCLUDED[$CHILD]} ]]; then
  24. echo "$LINE"
  25. INCLUDED[$CHILD]=true
  26. fi
  27. fi
  28. popd > /dev/null
  29. elif [[ "${SHOW_COMMENT}" = "true" ]] ; then
  30. echo "$LINE"
  31. elif [[ ! $LINE =~ $RE_EMPTY ]]; then
  32. echo "$LINE"
  33. fi
  34. done < $PARENT
  35. }
  36. cd $(dirname $0)/../
  37. INCLUDED=()
  38. process src/ArduinoJson.h true > ../ArduinoJson-$TAG.h
  39. g++ -x c++ -c -o ../smoketest.o - <<END
  40. #include "../ArduinoJson-$TAG.h"
  41. int main() {}
  42. END
  43. INCLUDED=()
  44. process src/ArduinoJson.hpp true > ../ArduinoJson-$TAG.hpp
  45. g++ -x c++ -c -o ../smoketest.o - <<END
  46. #include "../ArduinoJson-$TAG.hpp"
  47. int main() {}
  48. END