# Copyright © 2019 and later: Unicode, Inc. and others.
# License & terms of use: http://www.unicode.org/copyright.html

# Run this script from $ICU_ROOT/icu4c.
# ~/icu/mine/src/icu4c$ source/test/hdrtest/testtagsguards.sh

# set -x # echo on

DEF=-DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1
INCL="-Isource/common -Isource/i18n -Isource/io"
TMPDIR=`mktemp -d`
DIFF="diff -u --minimal"

echo "*** testtagsguards.sh TMPDIR=$TMPDIR"

for file in source/common/unicode/*.h source/i18n/unicode/*.h source/io/unicode/*.h ; do
    base=`basename $file`
    echo $file
    echo '#include "unicode/'$base'"' > $TMPDIR/ht-$base.cpp
    # Preprocess only.
    clang++ $INCL -C -E $DEF -o $TMPDIR/ht-$base-normal.i $TMPDIR/ht-$base.cpp

    # When hiding @draft, none should be in the output.
    TAG=draft
    GUARD=DRAFT
    echo "    @$TAG"
    clang++ $INCL -C -E -DU_HIDE_${GUARD}_API=1 -DU_FORCE_HIDE_${GUARD}_API=1 $DEF -o $TMPDIR/ht-$base-$TAG.i $TMPDIR/ht-$base.cpp
    if grep "@$TAG" -C 5 $TMPDIR/ht-$base-$TAG.i; then
        echo "*** error: @$TAG not hidden in $TMPDIR/ht-$base-$TAG.i"
        exit 1
    fi
    # Only @draft should be hidden.
    # Except: Ok to hide nested @internal/@system/@obsolete.
    $DIFF $TMPDIR/ht-$base-normal.i $TMPDIR/ht-$base-$TAG.i > $TMPDIR/ht-$base-normal-$TAG.txt
    if egrep '^-.*@(stable|deprecated)' -C 5 $TMPDIR/ht-$base-normal-$TAG.txt; then
        echo "*** error: Non-@$TAG hidden in $TMPDIR/ht-$base-$TAG.i see $TMPDIR/ht-$base-normal-$TAG.txt"
        cat $TMPDIR/ht-$base-normal-$TAG.txt
        exit 1
    fi

    # @deprecated
    TAG=deprecated
    GUARD=DEPRECATED
    echo "    @$TAG"
    clang++ $INCL -C -E -DU_HIDE_${GUARD}_API=1 -DU_FORCE_HIDE_${GUARD}_API=1 $DEF -o $TMPDIR/ht-$base-$TAG.i $TMPDIR/ht-$base.cpp
    if grep "@$TAG" -C 5 $TMPDIR/ht-$base-$TAG.i; then
        echo "*** error: @$TAG not hidden in $TMPDIR/ht-$base-$TAG.i"
        exit 1
    fi
    # In the egrep: All tags except $TAG and @internal & similar.
    $DIFF $TMPDIR/ht-$base-normal.i $TMPDIR/ht-$base-$TAG.i > $TMPDIR/ht-$base-normal-$TAG.txt
    if egrep '^-.*@(stable|draft)' -C 5 $TMPDIR/ht-$base-normal-$TAG.txt; then
        echo "*** error: Non-@$TAG hidden in $TMPDIR/ht-$base-$TAG.i see $TMPDIR/ht-$base-normal-$TAG.txt"
        cat $TMPDIR/ht-$base-normal-$TAG.txt
        exit 1
    fi

    # TODO: @internal
    # Hiding some @internal definitions, in particular in platform.h and similar,
    # tends to break even preprocessing of other headers.

    # @system
    TAG=system
    GUARD=SYSTEM
    echo "    @$TAG"
    clang++ $INCL -C -E -DU_HIDE_${GUARD}_API=1 -DU_FORCE_HIDE_${GUARD}_API=1 $DEF -o $TMPDIR/ht-$base-$TAG.i $TMPDIR/ht-$base.cpp
    if grep "@$TAG" -C 5 $TMPDIR/ht-$base-$TAG.i; then
        echo "*** error: @$TAG not hidden in $TMPDIR/ht-$base-$TAG.i"
        exit 1
    fi
    # @system is orthogonal to @stable / @deprecated etc.,
    # so we don't check that none of those are hidden.

    # @obsolete
    TAG=obsolete
    GUARD=OBSOLETE
    echo "    @$TAG"
    clang++ $INCL -C -E -DU_HIDE_${GUARD}_API=1 -DU_FORCE_HIDE_${GUARD}_API=1 $DEF -o $TMPDIR/ht-$base-$TAG.i $TMPDIR/ht-$base.cpp
    if grep "@$TAG" -C 5 $TMPDIR/ht-$base-$TAG.i; then
        echo "*** error: @$TAG not hidden in $TMPDIR/ht-$base-$TAG.i"
        exit 1
    fi
    # In the egrep: All tags except $TAG and @internal & similar.
    $DIFF $TMPDIR/ht-$base-normal.i $TMPDIR/ht-$base-$TAG.i > $TMPDIR/ht-$base-normal-$TAG.txt
    if egrep '^-.*@(stable|draft|deprecated)' -C 5 $TMPDIR/ht-$base-normal-$TAG.txt; then
        echo "*** error: Non-@$TAG hidden in $TMPDIR/ht-$base-$TAG.i see $TMPDIR/ht-$base-normal-$TAG.txt"
        cat $TMPDIR/ht-$base-normal-$TAG.txt
        exit 1
    fi
done

echo "pass"
rm -rf $TMPDIR

