blob: 928707c8e3d7d1feef874bff8d801c0c0819ad4e [file] [log] [blame]
# 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