blob: 7999220b9ad4f4354e1f340478aa013dbc14d1fb [file] [log] [blame] [edit]
#!/bin/bash
# Copyright 2010-2014 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# These are the versions we care about. The rest are just "nice to have".
PYTHON_SUPPORTED_VERSIONS="2.6 2.7 3.2 3.3 3.4"
PYTHON_VERSIONS="2.6 2.7 2.7-pypy-1.8 2.7-pypy-1.9 2.7-pypy-2.0 3.1 3.2 3.3 3.4 3.5"
# has to be run from portage root dir
cd "${0%/*}" || exit 1
case "${NOCOLOR:-false}" in
yes|true)
GOOD=
BAD=
NORMAL=
;;
no|false)
GOOD=$'\e[1;32m'
BAD=$'\e[1;31m'
NORMAL=$'\e[0m'
;;
esac
interrupted() {
echo "interrupted." >&2
exit 1
}
trap interrupted SIGINT
unused_args=()
IGNORE_MISSING_VERSIONS=true
while [ $# -gt 0 ] ; do
case "$1" in
--python-versions=*)
PYTHON_VERSIONS=${1#--python-versions=}
IGNORE_MISSING_VERSIONS=false
;;
--python-versions)
shift
PYTHON_VERSIONS=$1
IGNORE_MISSING_VERSIONS=false
;;
*)
unused_args[${#unused_args[@]}]=$1
;;
esac
shift
done
if [[ ${PYTHON_VERSIONS} == "supported" ]] ; then
PYTHON_VERSIONS=${PYTHON_SUPPORTED_VERSIONS}
fi
set -- "${unused_args[@]}"
eprefix=${PORTAGE_OVERRIDE_EPREFIX}
exit_status="0"
found_versions=()
status_array=()
for version in ${PYTHON_VERSIONS}; do
if [[ $version =~ ^([[:digit:]]+\.[[:digit:]]+)-pypy-([[:digit:]]+\.[[:digit:]]+)$ ]] ; then
executable=${eprefix}/usr/bin/pypy-c${BASH_REMATCH[2]}
else
executable=${eprefix}/usr/bin/python${version}
fi
if [[ -x "${executable}" ]]; then
echo -e "${GOOD}Testing with Python ${version}...${NORMAL}"
"${executable}" -b -Wd pym/portage/tests/runTests "$@"
status=$?
status_array[${#status_array[@]}]=${status}
found_versions[${#found_versions[@]}]=${version}
if [ ${status} -ne 0 ] ; then
echo -e "${BAD}Testing with Python ${version} failed${NORMAL}"
exit_status="1"
fi
echo
elif [[ ${IGNORE_MISSING_VERSIONS} != "true" ]] ; then
echo -e "${BAD}Could not find requested Python ${version}${NORMAL}"
exit_status="1"
fi
done
if [ ${#status_array[@]} -gt 0 ] ; then
max_len=0
for version in ${found_versions[@]} ; do
[ ${#version} -gt ${max_len} ] && max_len=${#version}
done
(( columns = max_len + 2 ))
(( columns >= 7 )) || columns=7
printf "\nSummary:\n\n"
printf "| %-${columns}s | %s\n|" "Version" "Status"
(( total_cols = columns + 11 ))
eval "printf -- '-%.0s' {1..${total_cols}}"
printf "\n"
row=0
for version in ${found_versions[@]} ; do
if [ ${status_array[${row}]} -eq 0 ] ; then
status="success"
else
status="fail"
fi
printf "| %-${columns}s | %s\n" "${version}" "${status}"
(( row++ ))
done
fi
exit ${exit_status}