Files
UnrealEngine/Engine/Source/ThirdParty/OpenVDB/openvdb-12.0.0/ci/extract_test_examples.sh
2025-05-18 13:04:45 +08:00

93 lines
3.3 KiB
Bash

#!/usr/bin/env bash
#################################################################################
# This script extracts all code blocks from AX documentation which are NOT #
# marked as cpp/sh/unparsed and attempts to parse or compile them through the #
# vdb_ax command line binary. Code blocks can be marked with a preceding #
# notation to determine compilation mode: #
# <!--- P ---> = points #
# <!--- V ---> = volumes #
# <!--- A ---> = all #
# If not marked, code is only parsed (though ideally all code blocks should be #
# compiled) #
#################################################################################
set -e
ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )/../"
VDB_AX=$ROOT/build/openvdb_cmd/vdb_ax/vdb_ax
DOCS=()
DOCS+=($ROOT/doc/ax/ax.txt)
DOCS+=($ROOT/doc/ax/axcplusplus.txt)
DOCS+=($ROOT/doc/ax/axexamples.txt)
# DOCS+=($ROOT/doc/ax/axfunctionlist.txt) do not test this file
DOCS+=($ROOT/doc/ax/doc.txt)
uncompiled=0
for DOC in "${DOCS[@]}"; do
echo "Checking doxygen code in '$DOC...'"
# Make sure the file exists
if [ ! -f $DOC ]; then
echo "Could not find '$DOC.'"
exit -1
fi
# Extract all code segments from doxygen documentation in between @code and @endcode
data=$(sed -n '/@code.* *$/,/^ *@endcode *$/p' $DOC)
str=""
compile=""
skip=false
count=0
# For each extracted line, rebuild each code segment from @code and @endcode and
# run it through a vdb_ax binary if necessary
while IFS= read -r line; do
# If the code is marked as unparsed, c++ or shell, skip
if [[ "$line" == "@code{.unparsed}" ]]; then
skip=true
elif [[ "$line" == "@code{.cpp}" ]]; then
skip=true
elif [[ "$line" == "@code{.sh}" ]]; then
skip=true
elif [[ $line == @code* ]]; then
str=""
compile="none"
elif [[ $line == "<!-- V -->@code"* ]]; then
str=""
compile="volumes"
elif [[ $line == "<!-- P -->@code"* ]]; then
str=""
compile="points"
elif [[ $line == "<!-- A -->@code"* ]]; then
str=""
compile=""
elif [[ $line == @endcode ]]; then
echo -e "\nTesting [$count]:"
if [ "$skip" = true ]; then
echo "Skipping the following unparsed/c++/shell code:"
echo -e "$str" | sed 's/^/ /'
else
# parse
if [ "$compile" = "none" ]; then
$VDB_AX analyze -s "$str" -v
uncompiled=$((uncompiled+1))
else
$VDB_AX analyze -s "$str" --try-compile $compile -v
fi
fi
skip=false
count=$((count+1))
str=""
compile="none"
else
str+="$line"$'\n'
fi
done <<< "$data"
done
echo ""
echo "Extract test examples completed successfully"
if [ $uncompiled -gt 0 ]; then
echo " with $uncompiled uncompiled tests"
fi