|  | #!/bin/sh | 
|  |  | 
|  | # | 
|  | # Purpose: test with and without contextvar, all machine configurations, pydebug, | 
|  | #          refleaks, release build and release build with valgrind. | 
|  | # | 
|  | # Synopsis: ./runall-memorydebugger.sh [--all-configs64 | --all-configs32] | 
|  | # | 
|  | # Requirements: valgrind | 
|  | # | 
|  |  | 
|  | # Set additional CFLAGS and LDFLAGS for ./configure | 
|  | ADD_CFLAGS= | 
|  | ADD_LDFLAGS= | 
|  |  | 
|  |  | 
|  | CONFIGS_64="x64 uint128 ansi64 universal" | 
|  | CONFIGS_32="ppro ansi32 ansi-legacy universal" | 
|  |  | 
|  | VALGRIND="valgrind --tool=memcheck --leak-resolution=high \ | 
|  | --suppressions=Misc/valgrind-python.supp" | 
|  |  | 
|  | # Get args | 
|  | case $@ in | 
|  | *--all-configs64*) | 
|  | CONFIGS=$CONFIGS_64 | 
|  | ;; | 
|  | *--all-configs32*) | 
|  | CONFIGS=$CONFIGS_32 | 
|  | ;; | 
|  | *) | 
|  | CONFIGS="auto" | 
|  | ;; | 
|  | esac | 
|  |  | 
|  | # gmake required | 
|  | GMAKE=`which gmake` | 
|  | if [ X"$GMAKE" = X"" ]; then | 
|  | GMAKE=make | 
|  | fi | 
|  |  | 
|  | # Pretty print configurations | 
|  | print_config () | 
|  | { | 
|  | len=`echo $@ | wc -c` | 
|  | margin="#%"`expr \( 74 - $len \) / 2`"s" | 
|  |  | 
|  | echo "" | 
|  | echo "# ========================================================================" | 
|  | printf $margin "" | 
|  | echo $@ | 
|  | echo "# ========================================================================" | 
|  | echo "" | 
|  | } | 
|  |  | 
|  |  | 
|  | cd .. | 
|  |  | 
|  | # test_decimal: refleak, regular and Valgrind tests | 
|  | for args in "--without-decimal-contextvar" ""; do | 
|  | for config in $CONFIGS; do | 
|  |  | 
|  | unset PYTHON_DECIMAL_WITH_MACHINE | 
|  | libmpdec_config=$config | 
|  | if [ X"$config" != X"auto" ]; then | 
|  | PYTHON_DECIMAL_WITH_MACHINE=$config | 
|  | export PYTHON_DECIMAL_WITH_MACHINE | 
|  | else | 
|  | libmpdec_config="" | 
|  | fi | 
|  |  | 
|  | ############ refleak tests ########### | 
|  | print_config "refleak tests: config=$config" $args | 
|  | printf "\nbuilding python ...\n\n" | 
|  |  | 
|  | cd ../../ | 
|  | $GMAKE distclean > /dev/null 2>&1 | 
|  | ./configure CFLAGS="$ADD_CFLAGS" LDFLAGS="$ADD_LDFLAGS" --with-pydebug $args > /dev/null 2>&1 | 
|  | $GMAKE | grep _decimal | 
|  |  | 
|  | printf "\n\n# ======================== refleak tests ===========================\n\n" | 
|  | ./python -m test -uall -R 3:3 test_decimal | 
|  |  | 
|  |  | 
|  | ############ regular tests ########### | 
|  | print_config "regular tests: config=$config" $args | 
|  | printf "\nbuilding python ...\n\n" | 
|  |  | 
|  | $GMAKE distclean > /dev/null 2>&1 | 
|  | ./configure CFLAGS="$ADD_CFLAGS" LDFLAGS="$ADD_LDFLAGS" $args > /dev/null 2>&1 | 
|  | $GMAKE | grep _decimal | 
|  |  | 
|  | printf "\n\n# ======================== regular tests ===========================\n\n" | 
|  | ./python -m test -uall test_decimal | 
|  |  | 
|  |  | 
|  | ########### valgrind tests ########### | 
|  | valgrind=$VALGRIND | 
|  | case "$config" in | 
|  | # Valgrind has no support for 80 bit long double arithmetic. | 
|  | ppro) valgrind= ;; | 
|  | auto) case `uname -m` in | 
|  | i386|i486|i586|i686) valgrind= ;; | 
|  | esac | 
|  | esac | 
|  |  | 
|  | print_config "valgrind tests: config=$config" $args | 
|  | printf "\nbuilding python ...\n\n" | 
|  | $GMAKE distclean > /dev/null 2>&1 | 
|  | ./configure CFLAGS="$ADD_CFLAGS" LDFLAGS="$ADD_LDFLAGS" --without-pymalloc $args > /dev/null 2>&1 | 
|  | $GMAKE | grep _decimal | 
|  |  | 
|  | printf "\n\n# ======================== valgrind tests ===========================\n\n" | 
|  | $valgrind ./python -m test -uall test_decimal | 
|  |  | 
|  | cd Modules/_decimal | 
|  | done | 
|  | done | 
|  |  | 
|  | # deccheck | 
|  | cd ../../ | 
|  | for args in "--without-decimal-contextvar" ""; do | 
|  | for config in $CONFIGS; do | 
|  |  | 
|  | unset PYTHON_DECIMAL_WITH_MACHINE | 
|  | if [ X"$config" != X"auto" ]; then | 
|  | PYTHON_DECIMAL_WITH_MACHINE=$config | 
|  | export PYTHON_DECIMAL_WITH_MACHINE | 
|  | fi | 
|  |  | 
|  | ############ debug ############ | 
|  | print_config "deccheck: config=$config --with-pydebug" $args | 
|  | printf "\nbuilding python ...\n\n" | 
|  |  | 
|  | $GMAKE distclean > /dev/null 2>&1 | 
|  | ./configure CFLAGS="$ADD_CFLAGS" LDFLAGS="$ADD_LDFLAGS" --with-pydebug $args > /dev/null 2>&1 | 
|  | $GMAKE | grep _decimal | 
|  |  | 
|  | printf "\n\n# ========================== debug ===========================\n\n" | 
|  | ./python Modules/_decimal/tests/deccheck.py | 
|  |  | 
|  | ########### regular ########### | 
|  | print_config "deccheck: config=$config" $args | 
|  | printf "\nbuilding python ...\n\n" | 
|  |  | 
|  | $GMAKE distclean > /dev/null 2>&1 | 
|  | ./configure CFLAGS="$ADD_CFLAGS" LDFLAGS="$ADD_LDFLAGS" $args > /dev/null 2>&1 | 
|  | $GMAKE | grep _decimal | 
|  |  | 
|  | printf "\n\n# ======================== regular ===========================\n\n" | 
|  | ./python Modules/_decimal/tests/deccheck.py | 
|  |  | 
|  | ########### valgrind ########### | 
|  | valgrind=$VALGRIND | 
|  | case "$config" in | 
|  | # Valgrind has no support for 80 bit long double arithmetic. | 
|  | ppro) valgrind= ;; | 
|  | auto) case `uname -m` in | 
|  | i386|i486|i586|i686) valgrind= ;; | 
|  | esac | 
|  | esac | 
|  |  | 
|  | print_config "valgrind deccheck: config=$config" $args | 
|  | printf "\nbuilding python ...\n\n" | 
|  |  | 
|  | $GMAKE distclean > /dev/null 2>&1 | 
|  | ./configure CFLAGS="$ADD_CFLAGS" LDFLAGS="$ADD_LDFLAGS" --without-pymalloc $args > /dev/null 2>&1 | 
|  | $GMAKE | grep _decimal | 
|  |  | 
|  | printf "\n\n# ======================== valgrind ==========================\n\n" | 
|  | $valgrind ./python Modules/_decimal/tests/deccheck.py | 
|  | done | 
|  | done | 
|  |  | 
|  |  | 
|  |  |