blob: 3de1ca78de2bc64db7f086c24031c49c1c21bd22 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
|
#!/bin/bash
set -ex
# Travis legacy boxes give you 1.5 CPUs, container-based boxes give you 2 CPUs
export NPY_NUM_BUILD_JOBS=2
# setup env
if [ -r /usr/lib/libeatmydata/libeatmydata.so ]; then
# much faster package installation
export LD_PRELOAD=/usr/lib/libeatmydata/libeatmydata.so
fi
# travis venv tests override python
PYTHON=${PYTHON:-python}
PIP=${PIP:-pip}
# explicit python version needed here
if [ -n "$USE_DEBUG" ]; then
PYTHON="python3-dbg"
fi
if [ -n "$PYTHON_OO" ]; then
PYTHON="${PYTHON} -OO"
fi
# make some warnings fatal, mostly to match windows compilers
werrors="-Werror=declaration-after-statement -Werror=vla "
werrors+="-Werror=nonnull -Werror=pointer-arith"
setup_base()
{
# We used to use 'setup.py install' here, but that has the terrible
# behaviour that if a copy of the package is already installed in the
# install location, then the new copy just gets dropped on top of it.
# Travis typically has a stable numpy release pre-installed, and if we
# don't remove it, then we can accidentally end up e.g. running old
# test modules that were in the stable release but have been removed
# from master. (See gh-2765, gh-2768.) Using 'pip install' also has
# the advantage that it tests that numpy is 'pip install' compatible,
# see e.g. gh-2766...
if [ -z "$USE_DEBUG" ]; then
if [ -z "$IN_CHROOT" ]; then
$PIP install .
else
sysflags="$($PYTHON -c "from distutils import sysconfig; \
print (sysconfig.get_config_var('CFLAGS'))")"
CFLAGS="$sysflags $werrors -Wlogical-op" $PIP install . 2>&1 | tee log
grep -v "_configtest" log \
| grep -vE "ld returned 1|no previously-included files matching" \
| grep -E "warning\>" \
| tee warnings
# Check for an acceptable number of warnings. Some warnings are out of
# our control, so adjust the number as needed. At the moment a
# cython generated code produces a warning about '-2147483648L', but
# the code seems to compile OK.
[[ $(wc -l < warnings) -lt 2 ]]
fi
else
sysflags="$($PYTHON -c "from distutils import sysconfig; \
print (sysconfig.get_config_var('CFLAGS'))")"
CFLAGS="$sysflags $werrors" $PYTHON setup.py build_ext --inplace
fi
}
setup_chroot()
{
# this can all be replaced with:
# apt-get install libpython2.7-dev:i386
# CC="gcc -m32" LDSHARED="gcc -m32 -shared" LDFLAGS="-m32 -shared" \
# linux32 python setup.py build
# when travis updates to ubuntu 14.04
#
# Numpy may not distinquish between 64 and 32 bit atlas in the
# configuration stage.
DIR=$1
set -u
sudo debootstrap --variant=buildd --include=fakeroot,build-essential \
--arch=$ARCH --foreign $DIST $DIR
sudo chroot $DIR ./debootstrap/debootstrap --second-stage
# put the numpy repo in the chroot directory
sudo rsync -a $TRAVIS_BUILD_DIR $DIR/
# set up repos in the chroot directory for installing packages
echo deb http://archive.ubuntu.com/ubuntu/ \
$DIST main restricted universe multiverse \
| sudo tee -a $DIR/etc/apt/sources.list
echo deb http://archive.ubuntu.com/ubuntu/ \
$DIST-updates main restricted universe multiverse \
| sudo tee -a $DIR/etc/apt/sources.list
echo deb http://security.ubuntu.com/ubuntu \
$DIST-security main restricted universe multiverse \
| sudo tee -a $DIR/etc/apt/sources.list
# install needed packages
sudo chroot $DIR bash -c "apt-get update"
sudo chroot $DIR bash -c "apt-get install -qq -y --force-yes \
eatmydata libatlas-dev libatlas-base-dev gfortran \
python-dev python-nose python-pip cython"
# faster operation with preloaded eatmydata
echo /usr/lib/libeatmydata/libeatmydata.so | \
sudo tee -a $DIR/etc/ld.so.preload
}
run_test()
{
if [ -n "$USE_DEBUG" ]; then
export PYTHONPATH=$PWD
fi
# We change directories to make sure that python won't find the copy
# of numpy in the source directory.
mkdir -p empty
cd empty
INSTALLDIR=$($PYTHON -c \
"import os; import numpy; print(os.path.dirname(numpy.__file__))")
export PYTHONWARNINGS=default
$PYTHON ../tools/test-installed-numpy.py
if [ -n "$USE_ASV" ]; then
pushd ../benchmarks
$PYTHON `which asv` machine --machine travis
$PYTHON `which asv` dev 2>&1| tee asv-output.log
if grep -q Traceback asv-output.log; then
echo "Some benchmarks have errors!"
exit 1
fi
popd
fi
}
export PYTHON
export PIP
$PIP install setuptools
if [ -n "$USE_WHEEL" ] && [ $# -eq 0 ]; then
# Build wheel
$PIP install wheel
# ensure that the pip / setuptools versions deployed inside
# the venv are recent enough
$PIP install -U virtualenv
$PYTHON setup.py bdist_wheel
# Make another virtualenv to install into
virtualenv --python=`which $PYTHON` venv-for-wheel
. venv-for-wheel/bin/activate
# Move out of source directory to avoid finding local numpy
pushd dist
pip install --pre --no-index --upgrade --find-links=. numpy
pip install nose
popd
run_test
elif [ -n "$USE_CHROOT" ] && [ $# -eq 0 ]; then
DIR=/chroot
setup_chroot $DIR
# run again in chroot with this time testing
sudo linux32 chroot $DIR bash -c \
"cd numpy && PYTHON=python PIP=pip IN_CHROOT=1 $0 test"
else
setup_base
run_test
fi
|