-
-
Notifications
You must be signed in to change notification settings - Fork 4k
Expand file tree
/
Copy pathbuild.sh
More file actions
197 lines (170 loc) · 8.24 KB
/
build.sh
File metadata and controls
197 lines (170 loc) · 8.24 KB
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
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
TERMUX_PKG_HOMEPAGE=https://python.org/
TERMUX_PKG_DESCRIPTION="Python 3 programming language intended to enable clear programs"
# License: PSF-2.0
TERMUX_PKG_LICENSE="custom"
TERMUX_PKG_LICENSE_FILE="LICENSE"
TERMUX_PKG_MAINTAINER="Yaksh Bariya <[email protected]>"
TERMUX_PKG_VERSION="3.13.12"
TERMUX_PKG_REVISION=5
_DEBPYTHON_COMMIT=f358ab52bf2932ad55b1a72a29c9762169e6ac47
TERMUX_PKG_SRCURL=(
https://www.python.org/ftp/python/${TERMUX_PKG_VERSION}/Python-${TERMUX_PKG_VERSION}.tar.xz
https://salsa.debian.org/cpython-team/python3-defaults/-/archive/${_DEBPYTHON_COMMIT}/python3-defaults-${_DEBPYTHON_COMMIT}.tar.gz
)
TERMUX_PKG_SHA256=(
2a84cd31dd8d8ea8aaff75de66fc1b4b0127dd5799aa50a64ae9a313885b4593
3b7a76c144d39f5c4a2c7789fd4beb3266980c2e667ad36167e1e7a357c684b0
)
TERMUX_PKG_AUTO_UPDATE=false
TERMUX_PKG_DEPENDS="gdbm, libandroid-posix-semaphore, libandroid-support, libbz2, libcrypt, libexpat, libffi, liblzma, libsqlite, ncurses, ncurses-ui-libs, openssl, readline, zlib"
TERMUX_PKG_BUILD_DEPENDS="tk"
TERMUX_PKG_RECOMMENDS="python-ensurepip-wheels, python-pip"
TERMUX_PKG_SUGGESTS="python-tkinter"
TERMUX_PKG_BREAKS="python2 (<= 2.7.15), python-dev"
TERMUX_PKG_REPLACES="python-dev"
# Let "python3" will be alias to this package.
TERMUX_PKG_PROVIDES="python3"
_MAJOR_VERSION="${TERMUX_PKG_VERSION%.*}"
# Set ac_cv_func_wcsftime=no to avoid errors such as "character U+ca0025 is not in range [U+0000; U+10ffff]"
# when executing e.g. "from time import time, strftime, localtime; print(strftime(str('%Y-%m-%d %H:%M'), localtime()))"
TERMUX_PKG_EXTRA_CONFIGURE_ARGS="ac_cv_file__dev_ptmx=yes ac_cv_file__dev_ptc=no ac_cv_func_wcsftime=no"
# Avoid trying to include <sys/timeb.h> which does not exist on android-21:
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" ac_cv_func_ftime=no"
# Avoid trying to use AT_EACCESS which is not defined:
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" ac_cv_func_faccessat=no"
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" --build=$TERMUX_BUILD_TUPLE --with-system-ffi --with-system-expat --without-ensurepip"
# Hard links does not work on Android 6:
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" ac_cv_func_linkat=no"
# Do not assume getaddrinfo is buggy when cross compiling:
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" ac_cv_buggy_getaddrinfo=no"
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" --enable-loadable-sqlite-extensions"
# Fix https://github.com/termux/termux-packages/issues/2236:
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" ac_cv_little_endian_double=yes"
# Force enable posix semaphores.
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" ac_cv_posix_semaphores_enabled=yes"
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" ac_cv_func_sem_open=yes"
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" ac_cv_func_sem_timedwait=yes"
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" ac_cv_func_sem_getvalue=yes"
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" ac_cv_func_sem_unlink=yes"
# Force enable posix shared memory.
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" ac_cv_func_shm_open=yes"
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" ac_cv_func_shm_unlink=yes"
# Assume tzset() works
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" ac_cv_working_tzset=yes"
# prevents 'configure: error: Cross compiling requires --with-build-python' (even during on-device build)
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" --with-build-python=python$_MAJOR_VERSION"
# https://github.com/termux/termux-packages/issues/16879
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" ac_cv_header_sys_xattr_h=no"
# https://github.com/termux/termux-packages/issues/28684 (termux has inline getgrent stub in grp.h header patch)
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" ac_cv_func_getgrent=yes"
TERMUX_PKG_RM_AFTER_INSTALL="
lib/python${_MAJOR_VERSION}/test
lib/python${_MAJOR_VERSION}/*/test
lib/python${_MAJOR_VERSION}/*/tests
lib/python${_MAJOR_VERSION}/site-packages/*/
"
termux_step_post_get_source() {
patch="$TERMUX_PKG_BUILDER_DIR/0012-hardcode-android-api-level.diff"
echo "Applying patch: $(basename "$patch")"
test -f "$patch" && sed \
-e "s%\@TERMUX_PKG_API_LEVEL\@%${TERMUX_PKG_API_LEVEL}%g" \
"$patch" | patch --silent -p1
mv "$TERMUX_PKG_SRCDIR/python3-defaults-$_DEBPYTHON_COMMIT" "$TERMUX_PKG_SRCDIR/debpython"
}
termux_step_pre_configure() {
termux_setup_build_python
# -O3 gains some additional performance on at least aarch64.
CFLAGS="${CFLAGS/-Oz/-O3}"
# Needed when building with clang, as setup.py only probes
# gcc for include paths when finding headers for determining
# if extension modules should be built (specifically, the
# zlib extension module is not built without this):
CPPFLAGS+=" -I$TERMUX_STANDALONE_TOOLCHAIN/sysroot/usr/include"
# Without this all symbols are removed from the built libpython3.so
LDFLAGS="${LDFLAGS/-Wl,--as-needed/}"
LDFLAGS+=" -L$TERMUX_STANDALONE_TOOLCHAIN/sysroot/usr/lib"
if [ $TERMUX_ARCH = x86_64 ]; then LDFLAGS+=64; fi
# these prevent errors like "call to undeclared function 'sem_clockwait'" during on-device build
# on devices that have API levels newer than $TERMUX_PKG_API_LEVEL
if [[ "$TERMUX_PKG_API_LEVEL" -lt 28 ]]; then
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" ac_cv_func_fexecve=no"
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" ac_cv_func_getlogin_r=no"
fi
if [[ "$TERMUX_PKG_API_LEVEL" -lt 29 ]]; then
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" ac_cv_func_getloadavg=no"
fi
if [[ "$TERMUX_PKG_API_LEVEL" -lt 30 ]]; then
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" ac_cv_func_sem_clockwait=no"
fi
if [[ "$TERMUX_PKG_API_LEVEL" -lt 33 ]]; then
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" ac_cv_func_preadv2=no"
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" ac_cv_func_pwritev2=no"
fi
if [[ "$TERMUX_PKG_API_LEVEL" -lt 34 ]]; then
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" ac_cv_func_close_range=no"
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" ac_cv_func_copy_file_range=no"
fi
# For multiprocessing libs
export LDFLAGS+=" -landroid-posix-semaphore"
export LIBCRYPT_LIBS="-lcrypt"
sed -i -e "s|@TERMUX_PYTHON_VERSION@|${_MAJOR_VERSION}|g" \
-e "s|@TERMUX_PKG_FULLVERSION@|$(test ${TERMUX_PACKAGE_FORMAT} = pacman && echo ${TERMUX_PKG_FULLVERSION_FOR_PACMAN} || echo ${TERMUX_PKG_FULLVERSION})|g" \
$(find "$TERMUX_PKG_SRCDIR/debpython" -type f)
autoreconf -fi
}
termux_step_post_make_install() {
(cd $TERMUX_PREFIX/bin
ln -sf idle${_MAJOR_VERSION} idle
ln -sf python${_MAJOR_VERSION} python
ln -sf python${_MAJOR_VERSION}-config python-config
ln -sf pydoc${_MAJOR_VERSION} pydoc)
(cd $TERMUX_PREFIX/share/man/man1
ln -sf python${_MAJOR_VERSION}.1 python.1)
install -m 755 -d "$TERMUX_PREFIX/lib/python$_MAJOR_VERSION/debpython"
install -m 644 "$TERMUX_PKG_SRCDIR/debpython/debpython/"* \
"$TERMUX_PREFIX/lib/python$_MAJOR_VERSION/debpython/"
for prog in py3compile py3clean; do
install -m 755 "$TERMUX_PKG_SRCDIR/debpython/$prog" "$TERMUX_PREFIX/bin/"
done
}
termux_step_post_massage() {
# Verify that desired modules have been included:
for module in _bz2 _curses _lzma _sqlite3 _ssl _tkinter zlib; do
if [ ! -f "${TERMUX_PREFIX}/lib/python${_MAJOR_VERSION}/lib-dynload/${module}".*.so ]; then
termux_error_exit "Python module library $module not built"
fi
done
}
termux_step_create_debscripts() {
# This is a temporary script and will therefore be removed when python is updated to 3.12
cat <<- POSTINST_EOF > ./postinst
#!$TERMUX_PREFIX/bin/bash
if [[ -f "$TERMUX_PREFIX/bin/pip" && \
! (("$TERMUX_PACKAGE_FORMAT" = "debian" && -f $TERMUX_PREFIX/var/lib/dpkg/info/python-pip.list) || \
("$TERMUX_PACKAGE_FORMAT" = "pacman" && \$(ls $TERMUX_PREFIX/var/lib/pacman/local/python-pip-* 2>/dev/null))) ]]; then
echo "Removing pip..."
rm -f $TERMUX_PREFIX/bin/pip $TERMUX_PREFIX/bin/pip3* $TERMUX_PREFIX/bin/easy_install $TERMUX_PREFIX/bin/easy_install-3*
rm -Rf $TERMUX_PREFIX/lib/python${_MAJOR_VERSION}/site-packages/pip
rm -Rf ${TERMUX_PREFIX}/lib/python${_MAJOR_VERSION}/site-packages/pip-*.dist-info
fi
if [ ! -f "$TERMUX_PREFIX/bin/pip" ]; then
echo
echo "== Note: pip is now separate from python =="
echo "To install, enter the following command:"
echo " pkg install python-pip"
echo
fi
if [[ -d $TERMUX_PREFIX/lib/python3.11/site-packages || -d $TERMUX_PREFIX/lib/python3.12/site-packages ]]; then
echo
echo "NOTE: The system python package has been updated to 3.13."
echo "NOTE: Run 'pkg upgrade' to update system python packages."
echo "NOTE: Packages installed using pip needs to be re-installed."
echo
fi
exit 0
POSTINST_EOF
chmod 0755 postinst
if [ "$TERMUX_PACKAGE_FORMAT" = "pacman" ]; then
echo "post_install" > postupg
fi
}