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 163 164 165 166 167 168 169 170 171 172 173 174
|
#!/usr/bin/make -f
# -*- mode: makefile; coding: utf-8 -*-
export DEB_BUILD_MAINT_OPTIONS = hardening=+all
# Pass hardening flags into distutils, explicitly
export CFLAGS = $(shell dpkg-buildflags --get CFLAGS)
export CPPFLAGS = $(shell dpkg-buildflags --get CPPFLAGS)
export CXXFLAGS = $(shell dpkg-buildflags --get CXXFLAGS)
PACKAGE2_NAME = python-pandas
PACKAGE3_NAME = python3-pandas
PACKAGE2_ROOT_DIR = debian/${PACKAGE2_NAME}
PACKAGE3_ROOT_DIR = debian/${PACKAGE3_NAME}
PYVERS = $(shell pyversions -vr)
PYVER = $(shell pyversions -vd)
PY3VERS = $(shell py3versions -vr)
PY3VER = $(shell py3versions -vd)
UVER := $(shell LC_ALL=C dpkg-parsechangelog | awk '/^Version:/{print $$2;}' | sed -e 's,-[^-]*$$,,g' | sed -e 's,+dfsg,,g')
# Python doesn't use ~ for rc
UVER_PY := $(shell echo $(UVER) | sed -e 's,[~],,g')
UVER_PYSHORT := $(shell echo $(UVER_PY) | sed -e 's,+git.*,,g')
MIN_CYTHONVER = 0.23
# Filter out tests with "marker expressions" and "keyword expressions". Ref: pytest(1)
ifeq ($(DEB_HOST_ARCH),$(filter $(DEB_HOST_ARCH), amd64 i386 kfreebsd-amd64 kfreebsd-i386 x32))
PYTEST_MARKER_ARCH :=
PYTEST_KEYWORD_ARCH :=
else
PYTEST_MARKER_ARCH := and not intel and not slow
PYTEST_KEYWORD_ARCH :=
endif
# Some unittests might need to be excluded for different Python versions
PYTEST_MARKER := not single and not network and not disabled $(PYTEST_MARKER_ARCH)
EXCLUDE_TESTS :=
EXCLUDE_TESTS2 :=
EXCLUDE_TESTS3.2 :=
EXCLUDE_TESTS3.3 :=
EXCLUDE_TESTS3.4 := $(EXCLUDE_TESTS3.3)
EXCLUDE_TESTS3.5 := $(EXCLUDE_TESTS3.3)
EXCLUDE_TESTS3.6 :=
EXCLUDE_TESTS3.7 :=
ADDPATCHES :=
# testing for version became fragile: https://github.com/pytest-dev/pytest/issues/3692
# PYTESTVER := $(shell python -c 'import pytest; print(pytest.__version__)')
# and there is way too many uses of pytest.param now, so we can't just easily patch for it... THINK!
# ADDPATCHES += $(shell dpkg --compare-versions $(PYTESTVER) ge 3.1.0 || echo "0001-TST-pytest-deprecation-warnings-GH17197-17253-reversed.patch" )
# MPLVER := $(shell dpkg -l python-matplotlib | awk '/^ii/{print $$3;}' || echo 0)
# $(shell dpkg --compare-versions $(MPLVER) lt 1.0 && echo '|test_hist|test_plot|test_boxplot|test_corr_rank' || echo '')
# try to prevent unsunctioned downloads
export http_proxy=http://127.0.0.1:9/
export https_proxy=http://127.0.0.1:9/
export SHELL=/bin/bash
# Mega rule
%:
: # Explicit build system to avoid use of all-in-1 Makefile
dh $@ --buildsystem=python_distutils --with python2,python3
clean_generated:
find pandas/ -regex '.*\.c\(\|pp\)' | xargs grep -l -e 'Generated by Cython' | xargs -r rm -f
_cythonize%:
debian/rules clean_generated # force removal of previous copies
python$(*:2=) setup.py cython
D=debian/cythonized-files$(*:2=) && \
git rm -rf $$D; \
find pandas/ -regex '.*\.c\(\|pp\)' | while read f; do \
grep -q 'Generated by Cython' "$$f" || continue; \
mkdir -p "$$D/$$(dirname $$f)"; \
cp "$$f" "$$D/$$(dirname $$f)"; \
git add -f "$$D/$$f"; \
done; \
echo "$(UVER)" >| $$D/VERSION; git add $$D/VERSION
_uncythonize%:
echo "$*" | grep -q '^3' && PY=3 || PY= ; \
CYTHONVER=$$(dpkg -l cython$$PY 2>/dev/null | awk '/^ii/{print $$3;}' || echo 0); \
dpkg --compare-versions "$$CYTHONVER" lt "$(MIN_CYTHONVER)" && { \
echo "I: Using pre-Cython-ed files for Python $*"; \
cd debian/cythonized-files$$PY/ ; \
find . -regex '.*\.c\(\|pp\)' | while read f; do cp $$f ../../$$f; done; } || :
cythonize: _cythonize2 _cythonize3
override_dh_clean: clean_generated
: # Make sure that cythonized sources are up-to-date
[ "$(UVER)" = "`cat debian/cythonized-files/VERSION`" ]
rm -rf build doc/_build *-stamp # pandas.egg-info pandas/datasets/__config__.py
dh_clean
version_py:
[ -e pandas/__version.py ] || \
echo -e "version = '$(UVER_PY)'\nshort_version = '$(UVER_PYSHORT)'" > pandas/__version.py
override_dh_auto_build: version_py debian/patch-stamp
# Override default build operation which --force's re-cythonization
# on elderly ubuntus
# Just build the version.py file
:
debian/patch-stamp:
if echo "${ADDPATCHES}" | sed -e 's,\s,,g' | grep '.' ; then \
echo ${ADDPATCHES} >> debian/patches/series; \
quilt push -a; \
fi
touch $@
override_dh_auto_install: ${PYVERS:%=python-install%} ${PY3VERS:%=python-install%} ${PYVERS:%=python-test%} ${PY3VERS:%=python-test%}
# Per Python version logic -- install, test, remomove .so (installed into -lib)
python-install%: _uncythonize%
python$* setup.py install --install-layout=deb --root=$(CURDIR)/debian/tmp
python-test%: python-install%
ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
echo "backend : Agg" >| $(CURDIR)/build/matplotlibrc
: # Run unittests here against installed pandas
echo "$*" | grep -q '^3' && PY=3 || PY=$*; \
export PYTHONPATH=`/bin/ls -d $$PWD/debian/tmp/usr/lib/python$$PY/*/`; \
export MPLCONFIGDIR=$(CURDIR)/build HOME=$(CURDIR)/build; \
python$* ci/print_versions.py; \
cd build/; LOCALE_OVERRIDE=C xvfb-run -a -s "-screen 0 1280x1024x24 -noreset" \
python$* -m pytest -s -v -m "$(PYTEST_MARKER)" $(EXCLUDE_TESTS) $(EXCLUDE_TESTS$*) $(EXCLUDE_TESTS_ARCH) $$PYTHONPATH/pandas;
else
: # Skip unittests due to nocheck
endif
override_dh_installdocs:
: # Build Documentation using installed pandas
ifeq (,$(filter nodoc,$(DEB_BUILD_OPTIONS)))
ifneq (,$(findstring -a,$(DH_INTERNAL_OPTIONS)))
: # not building documentation in -a
else
cd doc && PYTHONPATH=$(CURDIR)/$(PACKAGE3_ROOT_DIR)-lib/usr/lib/python3/dist-packages:$(CURDIR)/$(PACKAGE3_ROOT_DIR)/usr/lib/python3/dist-packages MPLCONFIGDIR=$(CURDIR)/build HOME=$(CURDIR)/build LC_ALL=C python3 make.py html
endif
endif
: # Use jquery from Debian package, so prune shipped one
#TODO -rm doc/_build/html/_static/jquery.js
dh_installdocs -A *.md
override_dh_install:
dh_install
find debian -name __pycache__ | xargs rm -rf
## remove .so libraries from main package, and call dh_numpy*
## while removing 2 if not present
_dh_python%:
[ -e /usr/bin/dh_numpy$(*:2=) ] && dh_numpy$(*:2=) -p$(PACKAGE$*_NAME)-lib || :
dh_python$*
-find debian/python*-pandas -name "*.so" -delete
## "Instantiate" both rules so dh sees them
override_dh_python2: _dh_python2
override_dh_python3: _dh_python3
## immediately useable documentation and exemplar scripts/data
override_dh_compress:
dh_compress -X.py -X.html -X.pdf -X.css -X.jpg -X.txt -X.js -X.json -X.rtc -Xobjects.inv
# This has no effect at all since the tests are run in binary-arch instead of auto_test ...
#ifeq ($(DEB_HOST_ARCH),$(filter $(DEB_HOST_ARCH), armhf mips s390x hppa powerpc ppc64 sparc64))
#override_dh_auto_test:
# dh_auto_test || true
#endif
|