-
Notifications
You must be signed in to change notification settings - Fork 64
/
pybuild.sh
executable file
·143 lines (112 loc) · 4.82 KB
/
pybuild.sh
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
#!/bin/bash
# exit in case of any errors
set -e
################################################################################
# help #
################################################################################
function print_help() {
# Display Help
echo "Build script for keopscore/pykeops packages."
echo
echo "Usage: $0 [option...]"
echo
echo " -h Print the help"
echo " -l Build in local mode (without hard-coded keopscore version requirement in pykeops)"
echo " -v Verbose mode"
echo
echo "Note: by default, the keopscore version requirement is hard-coded in pykeops."
echo
exit 1
}
################################################################################
# utils #
################################################################################
# log with verbosity management
function logging() {
if [[ ${PYBUILD_VERBOSE} == 1 ]]; then
echo -e $1
fi
}
################################################################################
# process script options #
################################################################################
# default options
LOCAL_PYBUILD=0
PYBUILD_VERBOSE=0
# Get the options
while getopts 'hlv' option; do
case $option in
h) # display Help
print_help
;;
l) # local build (no hard-coded keopscore version requirements)
LOCAL_PYBUILD=1
logging "## local build (keopscore version requirements is NOT hard-coded in pykeops)"
;;
v) # enable verbosity
PYBUILD_VERBOSE=1
logging "## verbose mode"
;;
\?) # Invalid option
echo "Error: Invalid option"
exit 1
;;
esac
done
################################################################################
# script setup #
################################################################################
# project root directory
PROJDIR=$(git rev-parse --show-toplevel)
# python exec
PYTHON="python3"
# python environment for build
BUILD_VENV=${PROJDIR}/.build_venv
# python build requirements (names of packages to be installed with pip)
BUILD_REQ="pip build pyclean"
# KeOps current version
VERSION=$(cat ./keops_version)
################################################################################
# prepare build (and cleanup after) #
################################################################################
# prepare setup and clean up on exit
function prepare_setup() {
logging "-- Preparing setup..."
# hard-code keopscore requirements
if [[ ${LOCAL_PYBUILD} == 0 ]]; then
cp ${PROJDIR}/pykeops/setup.py ${PROJDIR}/pykeops/setup.py.pybuild.bak
sed -i -e "s/\"keopscore\"/\"keopscore==\" + current_version/" ${PROJDIR}/pykeops/setup.py
fi
}
function cleanup_setup() {
logging "-- Cleaning up setup..."
cp ${PROJDIR}/pykeops/setup.py.pybuild.bak ${PROJDIR}/pykeops/setup.py
rm ${PROJDIR}/pykeops/setup.py.pybuild.bak
}
prepare_setup
trap cleanup_setup EXIT
################################################################################
# prepare python environment #
################################################################################
logging "-- Preparing python environment for build..."
${PYTHON} -m venv --clear ${BUILD_VENV}
source ${BUILD_VENV}/bin/activate
logging "---- Python version = $(python -V)"
pip install -U ${BUILD_REQ}
################################################################################
# clean before build #
################################################################################
logging "-- Cleaning Python sources before build..."
# remove __pycache__ *.pyc
pyclean ${PROJDIR}/keopscore
pyclean ${PROJDIR}/pykeops
################################################################################
# build keopscore #
################################################################################
logging "-- Building keopscore..."
python -m build --sdist --outdir ${PROJDIR}/build/dist ${PROJDIR}/keopscore
################################################################################
# build pykeops #
################################################################################
logging "-- Building pykeops..."
python -m build --sdist --outdir ${PROJDIR}/build/dist ${PROJDIR}/pykeops