#!/bin/bash set -ex SOURCE_DIR="$1" ASTYLE="$2" APIDSL="$3" # Go to the source root. if [ -z "$SOURCE_DIR" ]; then SOURCE_DIR=. fi cd "$SOURCE_DIR" if [ -z "$ASTYLE" ] || ! which "$ASTYLE"; then ASTYLE=astyle fi if ! which "$ASTYLE"; then # If we couldn't find or install an astyle binary, don't do anything. echo "Could not find an astyle binary; please install astyle." exit 1 fi if ! which "$APIDSL"; then if [ -f ../apidsl/apigen.native ]; then APIDSL=../apidsl/apigen.native else APIDSL=apidsl_curl fi fi TO_JSON='s/\\/\\\\/g;s/\n/\\n/g;s/"/\\"/g;s/^(.*)$/"$1"/' FROM_JSON='s/\\"/"/g;s/^"(.*)"$/$1/;s/\\\\/\\/g;s/\\n/\n/g' apidsl_request() { TMPFILE=$(mktemp /tmp/apidsl.XXXXXX) curl -s -o "$TMPFILE" -X POST --data @<( echo '["Request",' cat "$2" echo ']' ) "https://apidsl.herokuapp.com/$1" if grep '\[1,"' "$TMPFILE" >/dev/null; then echo "Error: $(grep -o '".*"' /tmp/apidsl-$$ | perl -0777 -pe "$FROM_JSON")" >&2 rm "$TMPFILE" exit 1 fi perl -0777 -pe 's/^\[0,(.*)\]$/$1/' "$TMPFILE" rm "$TMPFILE" } apidsl_curl() { echo "apidsl_curl $*" >&2 apidsl_request "c" <( apidsl_request "parse" <( perl -0777 -pe "$TO_JSON" "$1" ) ) | perl -0777 -pe "$FROM_JSON" } # Check if apidsl generated sources are up to date. set +x "$APIDSL" toxcore/LAN_discovery.api.h >toxcore/LAN_discovery.h & "$APIDSL" toxcore/crypto_core.api.h >toxcore/crypto_core.h & "$APIDSL" toxcore/ping.api.h >toxcore/ping.h & "$APIDSL" toxcore/ping_array.api.h >toxcore/ping_array.h & "$APIDSL" toxcore/tox.api.h >toxcore/tox.h & "$APIDSL" toxav/toxav.api.h >toxav/toxav.h & "$APIDSL" toxencryptsave/toxencryptsave.api.h >toxencryptsave/toxencryptsave.h & set -x wait wait wait wait wait wait wait if grep '' ./*/*.h; then echo "error: some apidsl references were unresolved" exit 1 fi readarray -t CC_SOURCES <<<"$(find . '(' -name '*.cc' ')')" CC_SOURCES+=(toxcore/crypto_core.c) CC_SOURCES+=(toxcore/ping_array.c) for bin in clang-format-6.0 clang-format-5.0 clang-format; do if which "$bin"; then "$bin" -i -style='{BasedOnStyle: Google, ColumnLimit: 100}' "${CC_SOURCES[@]}" break fi done FIND="find ." FIND="$FIND '(' -name '*.[ch]' ')'" FIND="$FIND -and -not -name '*.api.h'" FIND="$FIND -and -not -wholename './super_donators/*'" FIND="$FIND -and -not -wholename './third_party/*'" FIND="$FIND -and -not -wholename './toxencryptsave/crypto_pwhash*'" readarray -t C_SOURCES <<<"$(eval "$FIND")" "$ASTYLE" -n --options=other/astyle/astylerc "${C_SOURCES[@]}" git diff --color=always --exit-code