Python 3.9.6 (#11)
* build Python 3.9.6 * use Python 3.9 docker image * fix pyjnius recipe * remove unused dependencies from cryptography recipe * fix PYTHON3_DLL_REL_PATH value * add idna requirement * Remove m abi flag from python lib (https://docs.python.org/3/whatsnew/3.8.html#build-and-c-api-changes) * aiohttp==3.6.0 * Add base Dockerfiles for builds
This commit is contained in:
parent
304322858c
commit
b09e468ffb
34 changed files with 483 additions and 111 deletions
|
@ -6,7 +6,7 @@ stages:
|
||||||
|
|
||||||
build arm64 aar:
|
build arm64 aar:
|
||||||
stage: build
|
stage: build
|
||||||
image: lbry/android-base:latest
|
image: lbry/android-base:python39
|
||||||
before_script:
|
before_script:
|
||||||
- export BUILD_VERSION=$(cat $CI_PROJECT_DIR/src/main/python/main.py | grep --color=never -oP '([0-9]+\.?)+')
|
- export BUILD_VERSION=$(cat $CI_PROJECT_DIR/src/main/python/main.py | grep --color=never -oP '([0-9]+\.?)+')
|
||||||
artifacts:
|
artifacts:
|
||||||
|
@ -31,7 +31,7 @@ build arm64 aar:
|
||||||
|
|
||||||
build arm aar:
|
build arm aar:
|
||||||
stage: build2
|
stage: build2
|
||||||
image: lbry/android-base:latest
|
image: lbry/android-base:python39
|
||||||
before_script:
|
before_script:
|
||||||
- export BUILD_VERSION=$(cat $CI_PROJECT_DIR/src/main/python/main.py | grep --color=never -oP '([0-9]+\.?)+')
|
- export BUILD_VERSION=$(cat $CI_PROJECT_DIR/src/main/python/main.py | grep --color=never -oP '([0-9]+\.?)+')
|
||||||
artifacts:
|
artifacts:
|
||||||
|
|
|
@ -39,7 +39,7 @@ version.filename = %(source.dir)s/main.py
|
||||||
|
|
||||||
# (list) Application requirements
|
# (list) Application requirements
|
||||||
# comma seperated e.g. requirements = sqlite3,kivy
|
# comma seperated e.g. requirements = sqlite3,kivy
|
||||||
requirements = python3crystax, openssl, sqlite3, hostpython3crystax, android, distro==1.4.0, pyjnius, certifi==2021.5.30, appdirs==1.4.3, docopt==0.6.2, base58==1.0.0, colorama==0.3.7, ecdsa==0.13.3, jsonschema==2.6.0, pbkdf2==1.3, pyyaml, protobuf==3.6.1, keyring==10.4.0, defusedxml, aioupnp==0.0.17, asn1crypto, mock, netifaces, cryptography, aiohttp==3.5.4, multidict==4.5.2, yarl==1.3.0, chardet==3.0.4, async_timeout==3.0.1, coincurve, msgpack==0.6.1, six, attrs==18.2.0, pylru, hachoir, prometheus_client==0.8.0, "git+https://github.com/lbryio/lbry-sdk@v0.102.0#egg=lbry"
|
requirements = python3crystax, openssl, sqlite3, hostpython3crystax, android, distro==1.4.0, pyjnius, certifi==2021.5.30, appdirs==1.4.3, docopt==0.6.2, base58==1.0.0, colorama==0.3.7, ecdsa==0.13.3, jsonschema==2.6.0, pbkdf2==1.3, pyyaml, protobuf==3.6.1, keyring==10.4.0, defusedxml, aioupnp==0.0.17, asn1crypto, mock, netifaces, cryptography, aiohttp==3.6.0, multidict==4.5.2, idna, yarl==1.3.0, chardet==3.0.4, async_timeout==3.0.1, coincurve, msgpack==0.6.1, six, attrs==18.2.0, pylru, hachoir, prometheus_client==0.8.0, "git+https://github.com/lbryio/lbry-sdk@v0.102.0#egg=lbry"
|
||||||
|
|
||||||
# (str) Custom source folders for requirements
|
# (str) Custom source folders for requirements
|
||||||
# Sets custom source for any requirements with recipes
|
# Sets custom source for any requirements with recipes
|
||||||
|
|
|
@ -39,7 +39,7 @@ version.filename = %(source.dir)s/main.py
|
||||||
|
|
||||||
# (list) Application requirements
|
# (list) Application requirements
|
||||||
# comma seperated e.g. requirements = sqlite3,kivy
|
# comma seperated e.g. requirements = sqlite3,kivy
|
||||||
requirements = python3crystax, openssl, sqlite3, hostpython3crystax, android, distro==1.4.0, pyjnius, certifi==2021.5.30, appdirs==1.4.3, docopt==0.6.2, base58==1.0.0, colorama==0.3.7, ecdsa==0.13.3, jsonschema==2.6.0, pbkdf2==1.3, pyyaml, protobuf==3.6.1, keyring==10.4.0, defusedxml, aioupnp==0.0.17, asn1crypto, mock, netifaces, cryptography, aiohttp==3.5.4, multidict==4.5.2, yarl==1.3.0, chardet==3.0.4, async_timeout==3.0.1, coincurve, msgpack==0.6.1, six, attrs==18.2.0, pylru, hachoir, prometheus_client==0.8.0, "git+https://github.com/lbryio/lbry-sdk@v0.102.0#egg=lbry"
|
requirements = python3crystax, openssl, sqlite3, hostpython3crystax, android, distro==1.4.0, pyjnius, certifi==2021.5.30, appdirs==1.4.3, docopt==0.6.2, base58==1.0.0, colorama==0.3.7, ecdsa==0.13.3, jsonschema==2.6.0, pbkdf2==1.3, pyyaml, protobuf==3.6.1, keyring==10.4.0, defusedxml, aioupnp==0.0.17, asn1crypto, mock, netifaces, cryptography, aiohttp==3.6.0, multidict==4.5.2, idna, yarl==1.3.0, chardet==3.0.4, async_timeout==3.0.1, coincurve, msgpack==0.6.1, six, attrs==18.2.0, pylru, hachoir, prometheus_client==0.8.0, "git+https://github.com/lbryio/lbry-sdk@v0.102.0#egg=lbry"
|
||||||
|
|
||||||
# (str) Custom source folders for requirements
|
# (str) Custom source folders for requirements
|
||||||
# Sets custom source for any requirements with recipes
|
# Sets custom source for any requirements with recipes
|
||||||
|
|
|
@ -39,7 +39,7 @@ version.filename = %(source.dir)s/main.py
|
||||||
|
|
||||||
# (list) Application requirements
|
# (list) Application requirements
|
||||||
# comma seperated e.g. requirements = sqlite3,kivy
|
# comma seperated e.g. requirements = sqlite3,kivy
|
||||||
requirements = python3crystax, openssl, sqlite3, hostpython3crystax, android, distro==1.4.0, pyjnius, certifi==2021.5.30, appdirs==1.4.3, docopt==0.6.2, base58==1.0.0, colorama==0.3.7, ecdsa==0.13.3, jsonschema==2.6.0, pbkdf2==1.3, pyyaml, protobuf==3.6.1, keyring==10.4.0, defusedxml, aioupnp==0.0.17, asn1crypto, mock, netifaces, cryptography, aiohttp==3.5.4, multidict==4.5.2, yarl==1.3.0, chardet==3.0.4, async_timeout==3.0.1, coincurve, msgpack==0.6.1, six, attrs==18.2.0, pylru, hachoir, prometheus_client==0.8.0, "git+https://github.com/lbryio/lbry-sdk@v0.102.0#egg=lbry"
|
requirements = python3crystax, openssl, sqlite3, hostpython3crystax, android, distro==1.4.0, pyjnius, certifi==2021.5.30, appdirs==1.4.3, docopt==0.6.2, base58==1.0.0, colorama==0.3.7, ecdsa==0.13.3, jsonschema==2.6.0, pbkdf2==1.3, pyyaml, protobuf==3.6.1, keyring==10.4.0, defusedxml, aioupnp==0.0.17, asn1crypto, mock, netifaces, cryptography, aiohttp==3.6.0, multidict==4.5.2, idna, yarl==1.3.0, chardet==3.0.4, async_timeout==3.0.1, coincurve, msgpack==0.6.1, six, attrs==18.2.0, pylru, hachoir, prometheus_client==0.8.0, "git+https://github.com/lbryio/lbry-sdk@v0.102.0#egg=lbry"
|
||||||
|
|
||||||
# (str) Custom source folders for requirements
|
# (str) Custom source folders for requirements
|
||||||
# Sets custom source for any requirements with recipes
|
# Sets custom source for any requirements with recipes
|
||||||
|
|
|
@ -39,7 +39,7 @@ version.filename = %(source.dir)s/main.py
|
||||||
|
|
||||||
# (list) Application requirements
|
# (list) Application requirements
|
||||||
# comma seperated e.g. requirements = sqlite3,kivy
|
# comma seperated e.g. requirements = sqlite3,kivy
|
||||||
requirements = python3crystax, openssl, sqlite3, hostpython3crystax, android, distro==1.4.0, pyjnius, certifi==2021.5.30, appdirs==1.4.3, docopt==0.6.2, base58==1.0.0, colorama==0.3.7, ecdsa==0.13.3, jsonschema==2.6.0, pbkdf2==1.3, pyyaml, protobuf==3.6.1, keyring==10.4.0, defusedxml, git+https://github.com/lbryio/aioupnp.git@ab7ef0048bbce6404e463d20e8a15046ea6941f0#egg=aioupnp, asn1crypto, mock, netifaces, cryptography, aiohttp==3.5.4, multidict==4.5.2, yarl==1.3.0, chardet==3.0.4, async_timeout==3.0.1, coincurve, msgpack==0.6.1, six, attrs==18.2.0, pylru, hachoir, prometheus_client==0.7.1, "git+https://github.com/lbryio/lbry-sdk@v0.102.0#egg=lbry"
|
requirements = python3crystax, openssl, sqlite3, hostpython3crystax, android, distro==1.4.0, pyjnius, certifi==2021.5.30, appdirs==1.4.3, docopt==0.6.2, base58==1.0.0, colorama==0.3.7, ecdsa==0.13.3, jsonschema==2.6.0, pbkdf2==1.3, pyyaml, protobuf==3.6.1, keyring==10.4.0, defusedxml, git+https://github.com/lbryio/aioupnp.git@ab7ef0048bbce6404e463d20e8a15046ea6941f0#egg=aioupnp, asn1crypto, mock, netifaces, cryptography, aiohttp==3.6.0, multidict==4.5.2, idna, yarl==1.3.0, chardet==3.0.4, async_timeout==3.0.1, coincurve, msgpack==0.6.1, six, attrs==18.2.0, pylru, hachoir, prometheus_client==0.7.1, "git+https://github.com/lbryio/lbry-sdk@v0.102.0#egg=lbry"
|
||||||
|
|
||||||
# (str) Custom source folders for requirements
|
# (str) Custom source folders for requirements
|
||||||
# Sets custom source for any requirements with recipes
|
# Sets custom source for any requirements with recipes
|
||||||
|
|
36
docker/Dockerfile.python37.platform-28
Normal file
36
docker/Dockerfile.python37.platform-28
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
FROM ubuntu:18.04
|
||||||
|
|
||||||
|
RUN export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
|
||||||
|
RUN dpkg --add-architecture i386
|
||||||
|
RUN apt-get -y update && apt-get -y install curl ca-certificates software-properties-common gpg-agent wget
|
||||||
|
RUN add-apt-repository ppa:deadsnakes/ppa -y
|
||||||
|
RUN apt-get -y update && apt-get -y install autoconf autogen automake libtool libffi-dev \
|
||||||
|
build-essential python3.7 python3.7-dev python3.7-venv python3-pip ccache git libncurses5:i386 libstdc++6:i386 \
|
||||||
|
libgtk2.0-0:i386 libpangox-1.0-0:i386 libpangoxft-1.0-0:i386 libidn11:i386 python2.7 python2.7-dev \
|
||||||
|
python-pip openjdk-8-jdk unzip zlib1g-dev zlib1g:i386 m4 libc6-dev-i386 gawk
|
||||||
|
|
||||||
|
RUN pip install --upgrade cython==0.28.1 setuptools zipp==1.2.0 importlib-resources==1.0.2 importlib-metadata==0.20 virtualenv==20.4.7
|
||||||
|
|
||||||
|
RUN git clone https://github.com/lbryio/buildozer.git
|
||||||
|
RUN cd buildozer && python2 setup.py install && cd ..
|
||||||
|
|
||||||
|
RUN mkdir -p cd ~/.buildozer/android/platform/
|
||||||
|
|
||||||
|
RUN wget 'https://dl.google.com/android/android-sdk_r23-linux.tgz' -P ~/.buildozer/android/platform/ && \
|
||||||
|
wget 'https://dl.google.com/android/repository/platform-28_r06.zip' -P ~/.buildozer/android/platform/ && \
|
||||||
|
wget 'https://dl.google.com/android/repository/build-tools_r28.0.3-linux.zip' -P ~/.buildozer/android/platform/ && \
|
||||||
|
tar -xvf ~/.buildozer/android/platform/android-sdk_r23-linux.tgz -C ~/.buildozer/android/platform/ && \
|
||||||
|
mv ~/.buildozer/android/platform/android-sdk-linux ~/.buildozer/android/platform/android-sdk-23 && \
|
||||||
|
unzip ~/.buildozer/android/platform/platform-28_r06.zip -d ~/.buildozer/android/platform/android-sdk-23/platforms && \
|
||||||
|
mv ~/.buildozer/android/platform/android-sdk-23/platforms/android-9 ~/.buildozer/android/platform/android-sdk-23/platforms/android-28 && \
|
||||||
|
mkdir -p ~/.buildozer/android/platform/android-sdk-23/build-tools && \
|
||||||
|
unzip ~/.buildozer/android/platform/build-tools_r28.0.3-linux.zip -d ~/.buildozer/android/platform/android-sdk-23/build-tools && \
|
||||||
|
mv ~/.buildozer/android/platform/android-sdk-23/build-tools/android-9 ~/.buildozer/android/platform/android-sdk-23/build-tools/28.0.3 && \
|
||||||
|
rm ~/.buildozer/android/platform/android-sdk_r23-linux.tgz && \
|
||||||
|
rm ~/.buildozer/android/platform/platform-28_r06.zip && \
|
||||||
|
rm ~/.buildozer/android/platform/build-tools_r28.0.3-linux.zip
|
||||||
|
|
||||||
|
RUN mkdir -p ~/.buildozer/android/platform/android-sdk-23/licenses && \
|
||||||
|
echo $'\n8933bad161af4178b1185d1a37fbf41ea5269c55\nd56f5187479451eabf01fb78af6dfcb131a6481e\n24333f8a63b6825ea9c5514f83c2829b004d1fee' > ~/.buildozer/android/platform/android-sdk-23/licenses/android-sdk-license
|
||||||
|
|
||||||
|
CMD ["/bin/bash"]
|
41
docker/Dockerfile.python39.platform-28
Normal file
41
docker/Dockerfile.python39.platform-28
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
FROM ubuntu:18.04
|
||||||
|
|
||||||
|
RUN export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
|
||||||
|
RUN dpkg --add-architecture i386
|
||||||
|
RUN apt-get -y update && apt-get -y install curl ca-certificates software-properties-common gpg-agent wget
|
||||||
|
RUN add-apt-repository ppa:deadsnakes/ppa -y
|
||||||
|
RUN apt-get -y update && DEBIAN_FRONTEND=noninteractive apt-get -y install autoconf autogen automake libtool libffi-dev \
|
||||||
|
build-essential python3.9 python3.9-dev python3.9-venv python3-pip ccache git libncurses5:i386 libstdc++6:i386 \
|
||||||
|
libgtk2.0-0:i386 libpangox-1.0-0:i386 libpangoxft-1.0-0:i386 libidn11:i386 python2.7 python2.7-dev \
|
||||||
|
python-pip openjdk-8-jdk unzip zlib1g-dev zlib1g:i386 m4 libc6-dev-i386 gawk
|
||||||
|
|
||||||
|
RUN rm /usr/bin/python3 && ln -s /usr/bin/python3.9 /usr/bin/python3
|
||||||
|
RUN rm /usr/bin/python && ln -s /usr/bin/python2.7 /usr/bin/python
|
||||||
|
|
||||||
|
RUN pip install --upgrade cython==0.29.15 setuptools zipp==1.2.0 importlib-resources==1.0.2 importlib-metadata==0.20 virtualenv==20.4.7 appdirs sh colorama==0.3.3 jinja2 six pep517\<0.7.0 toml
|
||||||
|
|
||||||
|
RUN git clone https://github.com/lbryio/buildozer.git
|
||||||
|
RUN cd buildozer && python2 setup.py install && cd ..
|
||||||
|
|
||||||
|
RUN mkdir -p cd ~/.buildozer/android/platform/
|
||||||
|
|
||||||
|
RUN wget 'https://dl.google.com/android/android-sdk_r23-linux.tgz' -P ~/.buildozer/android/platform/ && \
|
||||||
|
wget 'https://dl.google.com/android/repository/platform-28_r06.zip' -P ~/.buildozer/android/platform/ && \
|
||||||
|
wget 'https://dl.google.com/android/repository/build-tools_r28.0.3-linux.zip' -P ~/.buildozer/android/platform/ && \
|
||||||
|
tar -xvf ~/.buildozer/android/platform/android-sdk_r23-linux.tgz -C ~/.buildozer/android/platform/ && \
|
||||||
|
mv ~/.buildozer/android/platform/android-sdk-linux ~/.buildozer/android/platform/android-sdk-23 && \
|
||||||
|
unzip ~/.buildozer/android/platform/platform-28_r06.zip -d ~/.buildozer/android/platform/android-sdk-23/platforms && \
|
||||||
|
mv ~/.buildozer/android/platform/android-sdk-23/platforms/android-9 ~/.buildozer/android/platform/android-sdk-23/platforms/android-28 && \
|
||||||
|
mkdir -p ~/.buildozer/android/platform/android-sdk-23/build-tools && \
|
||||||
|
unzip ~/.buildozer/android/platform/build-tools_r28.0.3-linux.zip -d ~/.buildozer/android/platform/android-sdk-23/build-tools && \
|
||||||
|
mv ~/.buildozer/android/platform/android-sdk-23/build-tools/android-9 ~/.buildozer/android/platform/android-sdk-23/build-tools/28.0.3 && \
|
||||||
|
rm ~/.buildozer/android/platform/android-sdk_r23-linux.tgz && \
|
||||||
|
rm ~/.buildozer/android/platform/platform-28_r06.zip && \
|
||||||
|
rm ~/.buildozer/android/platform/build-tools_r28.0.3-linux.zip
|
||||||
|
|
||||||
|
RUN mkdir -p ~/.buildozer/android/platform/android-sdk-23/licenses && \
|
||||||
|
echo $'\n8933bad161af4178b1185d1a37fbf41ea5269c55\nd56f5187479451eabf01fb78af6dfcb131a6481e\n24333f8a63b6825ea9c5514f83c2829b004d1fee' > ~/.buildozer/android/platform/android-sdk-23/licenses/android-sdk-license
|
||||||
|
|
||||||
|
RUN pip3 install --upgrade setuptools==51.0.0
|
||||||
|
|
||||||
|
CMD ["/bin/bash"]
|
|
@ -76,7 +76,7 @@ public class PythonActivity extends SDLActivity {
|
||||||
public void loadLibraries() {
|
public void loadLibraries() {
|
||||||
String app_root = new String(getAppRoot());
|
String app_root = new String(getAppRoot());
|
||||||
File app_root_file = new File(app_root);
|
File app_root_file = new File(app_root);
|
||||||
PythonUtil.loadLibraries(app_root_file);
|
PythonUtil.loadLibraries(app_root_file, new File(getApplicationInfo().nativeLibraryDir));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void recursiveDelete(File f) {
|
public void recursiveDelete(File f) {
|
||||||
|
|
|
@ -119,7 +119,7 @@ public class PythonService extends Service implements Runnable {
|
||||||
public void run(){
|
public void run(){
|
||||||
String app_root = getFilesDir().getAbsolutePath() + "/app";
|
String app_root = getFilesDir().getAbsolutePath() + "/app";
|
||||||
File app_root_file = new File(app_root);
|
File app_root_file = new File(app_root);
|
||||||
PythonUtil.loadLibraries(app_root_file);
|
PythonUtil.loadLibraries(app_root_file, new File(getApplicationInfo().nativeLibraryDir));
|
||||||
this.mService = this;
|
this.mService = this;
|
||||||
nativeStart(
|
nativeStart(
|
||||||
androidPrivate, androidArgument,
|
androidPrivate, androidArgument,
|
||||||
|
|
|
@ -1,34 +1,48 @@
|
||||||
package org.kivy.android;
|
package org.kivy.android;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
|
||||||
public class PythonUtil {
|
public class PythonUtil {
|
||||||
private static final String TAG = "PythonUtil";
|
private static final String TAG = "pythonutil";
|
||||||
|
|
||||||
protected static String[] getLibraries() {
|
protected static void addLibraryIfExists(ArrayList<String> libsList, String pattern, File libsDir) {
|
||||||
return new String[] {
|
// pattern should be the name of the lib file, without the
|
||||||
"SDL2",
|
// preceding "lib" or suffix ".so", for instance "ssl.*" will
|
||||||
"SDL2_image",
|
// match files of the form "libssl.*.so".
|
||||||
"SDL2_mixer",
|
File [] files = libsDir.listFiles();
|
||||||
"SDL2_ttf",
|
|
||||||
"python2.7",
|
pattern = "lib" + pattern + "\\.so";
|
||||||
"python3.5m",
|
Pattern p = Pattern.compile(pattern);
|
||||||
"python3.6m",
|
for (int i = 0; i < files.length; ++i) {
|
||||||
"python3.7m",
|
File file = files[i];
|
||||||
"main"
|
String name = file.getName();
|
||||||
};
|
Log.v(TAG, "Checking pattern " + pattern + " against " + name);
|
||||||
|
if (p.matcher(name).matches()) {
|
||||||
|
Log.v(TAG, "Pattern " + pattern + " matched file " + name);
|
||||||
|
libsList.add(name.substring(3, name.length() - 3));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void loadLibraries(File filesDir) {
|
protected static ArrayList<String> getLibraries(File libsDir) {
|
||||||
|
ArrayList<String> libsList = new ArrayList<String>();
|
||||||
|
libsList.add("python3.7m");
|
||||||
|
libsList.add("python3.8");
|
||||||
|
libsList.add("python3.9");
|
||||||
|
libsList.add("main");
|
||||||
|
return libsList;
|
||||||
|
}
|
||||||
|
|
||||||
String filesDirPath = filesDir.getAbsolutePath();
|
public static void loadLibraries(File filesDir, File libsDir) {
|
||||||
boolean foundPython = false;
|
boolean foundPython = false;
|
||||||
|
|
||||||
for (String lib : getLibraries()) {
|
for (String lib : getLibraries(libsDir)) {
|
||||||
try {
|
Log.v(TAG, "Loading library: " + lib);
|
||||||
|
try {
|
||||||
System.loadLibrary(lib);
|
System.loadLibrary(lib);
|
||||||
if (lib.startsWith("python")) {
|
if (lib.startsWith("python")) {
|
||||||
foundPython = true;
|
foundPython = true;
|
||||||
|
@ -37,27 +51,18 @@ public class PythonUtil {
|
||||||
// If this is the last possible libpython
|
// If this is the last possible libpython
|
||||||
// load, and it has failed, give a more
|
// load, and it has failed, give a more
|
||||||
// general error
|
// general error
|
||||||
if (lib.startsWith("python3.7") && !foundPython) {
|
Log.v(TAG, "Library loading error: " + e.getMessage());
|
||||||
throw new java.lang.RuntimeException("Could not load any libpythonXXX.so");
|
if (lib.startsWith("python3.9") && !foundPython) {
|
||||||
|
throw new RuntimeException("Could not load any libpythonXXX.so");
|
||||||
|
} else if (lib.startsWith("python")) {
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
Log.v(TAG, "An UnsatisfiedLinkError occurred loading " + lib);
|
||||||
|
throw e;
|
||||||
}
|
}
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
|
||||||
System.load(filesDirPath + "/lib/python2.7/lib-dynload/_io.so");
|
|
||||||
System.load(filesDirPath + "/lib/python2.7/lib-dynload/unicodedata.so");
|
|
||||||
} catch(UnsatisfiedLinkError e) {
|
|
||||||
Log.v(TAG, "Failed to load _io.so or unicodedata.so...but that's okay.");
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
// System.loadLibrary("ctypes");
|
|
||||||
System.load(filesDirPath + "/lib/python2.7/lib-dynload/_ctypes.so");
|
|
||||||
} catch(UnsatisfiedLinkError e) {
|
|
||||||
Log.v(TAG, "Unsatisfied linker when loading ctypes");
|
|
||||||
}
|
|
||||||
|
|
||||||
Log.v(TAG, "Loaded everything!");
|
Log.v(TAG, "Loaded everything!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -658,8 +658,8 @@ class BootstrapNDKRecipe(Recipe):
|
||||||
env['PYTHON_LINK_ROOT'] = self.ctx.python_recipe.link_root(arch.arch)
|
env['PYTHON_LINK_ROOT'] = self.ctx.python_recipe.link_root(arch.arch)
|
||||||
env['EXTRA_LDLIBS'] = ' -lpython{}'.format(
|
env['EXTRA_LDLIBS'] = ' -lpython{}'.format(
|
||||||
self.ctx.python_recipe.major_minor_version_string)
|
self.ctx.python_recipe.major_minor_version_string)
|
||||||
if 'python3' in self.ctx.python_recipe.name:
|
#if 'python3' in self.ctx.python_recipe.name:
|
||||||
env['EXTRA_LDLIBS'] += 'm'
|
# env['EXTRA_LDLIBS'] += 'm'
|
||||||
return env
|
return env
|
||||||
|
|
||||||
|
|
||||||
|
@ -803,7 +803,7 @@ class PythonRecipe(Recipe):
|
||||||
'python'))
|
'python'))
|
||||||
env['LDFLAGS'] += ' -L{}'.format(
|
env['LDFLAGS'] += ' -L{}'.format(
|
||||||
join(ndk_dir_python, 'libs', arch.arch))
|
join(ndk_dir_python, 'libs', arch.arch))
|
||||||
env['LDFLAGS'] += ' -lpython{}m'.format(python_short_version)
|
env['LDFLAGS'] += ' -lpython{}'.format(python_short_version)
|
||||||
|
|
||||||
hppath = []
|
hppath = []
|
||||||
hppath.append(join(dirname(self.hostpython_location), 'Lib'))
|
hppath.append(join(dirname(self.hostpython_location), 'Lib'))
|
||||||
|
|
|
@ -48,7 +48,7 @@ class CffiRecipe(CompiledComponentsPythonRecipe):
|
||||||
python_version = self.ctx.python_recipe.version[0:3]
|
python_version = self.ctx.python_recipe.version[0:3]
|
||||||
ndk_dir_python = os.path.join(self.ctx.ndk_dir, 'sources/python/', python_version)
|
ndk_dir_python = os.path.join(self.ctx.ndk_dir, 'sources/python/', python_version)
|
||||||
env['LDFLAGS'] += ' -L{}'.format(os.path.join(ndk_dir_python, 'libs', arch.arch))
|
env['LDFLAGS'] += ' -L{}'.format(os.path.join(ndk_dir_python, 'libs', arch.arch))
|
||||||
env['LDFLAGS'] += ' -lpython{}m'.format(python_version)
|
env['LDFLAGS'] += ' -lpython{}'.format(python_version)
|
||||||
# until `pythonforandroid/archs.py` gets merged upstream:
|
# until `pythonforandroid/archs.py` gets merged upstream:
|
||||||
# https://github.com/kivy/python-for-android/pull/1250/files#diff-569e13021e33ced8b54385f55b49cbe6
|
# https://github.com/kivy/python-for-android/pull/1250/files#diff-569e13021e33ced8b54385f55b49cbe6
|
||||||
env['CFLAGS'] += ' -I{}/include/python/'.format(ndk_dir_python)
|
env['CFLAGS'] += ' -I{}/include/python/'.format(ndk_dir_python)
|
||||||
|
|
|
@ -26,7 +26,7 @@ class CoincurveRecipe(CompiledComponentsPythonRecipe):
|
||||||
if self.ctx.ndk == 'crystax':
|
if self.ctx.ndk == 'crystax':
|
||||||
ndk_dir_python = os.path.join(self.ctx.ndk_dir, 'sources/python/', python_version)
|
ndk_dir_python = os.path.join(self.ctx.ndk_dir, 'sources/python/', python_version)
|
||||||
env['LDFLAGS'] += ' -L{}'.format(os.path.join(ndk_dir_python, 'libs', arch.arch))
|
env['LDFLAGS'] += ' -L{}'.format(os.path.join(ndk_dir_python, 'libs', arch.arch))
|
||||||
env['LDFLAGS'] += ' -lpython{}m'.format(python_version)
|
env['LDFLAGS'] += ' -lpython{}'.format(python_version)
|
||||||
# until `pythonforandroid/archs.py` gets merged upstream:
|
# until `pythonforandroid/archs.py` gets merged upstream:
|
||||||
# https://github.com/kivy/python-for-android/pull/1250/files#diff-569e13021e33ced8b54385f55b49cbe6
|
# https://github.com/kivy/python-for-android/pull/1250/files#diff-569e13021e33ced8b54385f55b49cbe6
|
||||||
env['CFLAGS'] += ' -I{}/include/python/'.format(ndk_dir_python)
|
env['CFLAGS'] += ' -I{}/include/python/'.format(ndk_dir_python)
|
||||||
|
|
|
@ -6,7 +6,7 @@ class CryptographyRecipe(CompiledComponentsPythonRecipe):
|
||||||
name = 'cryptography'
|
name = 'cryptography'
|
||||||
version = '3.1.1'
|
version = '3.1.1'
|
||||||
url = 'https://github.com/pyca/cryptography/archive/{version}.tar.gz'
|
url = 'https://github.com/pyca/cryptography/archive/{version}.tar.gz'
|
||||||
depends = [('python2', 'python3crystax'), 'openssl', 'idna', 'pyasn1', 'six', 'setuptools', 'ipaddress', 'cffi']
|
depends = [('python2', 'python3crystax'), 'openssl', 'six', 'setuptools', 'cffi']
|
||||||
call_hostpython_via_targetpython = False
|
call_hostpython_via_targetpython = False
|
||||||
patches = ['libpthread.patch']
|
patches = ['libpthread.patch']
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ class CryptographyRecipe(CompiledComponentsPythonRecipe):
|
||||||
python_version = self.ctx.python_recipe.version[0:3]
|
python_version = self.ctx.python_recipe.version[0:3]
|
||||||
ndk_dir_python = os.path.join(self.ctx.ndk_dir, 'sources/python/', python_version)
|
ndk_dir_python = os.path.join(self.ctx.ndk_dir, 'sources/python/', python_version)
|
||||||
env['LDFLAGS'] += ' -L{}'.format(os.path.join(ndk_dir_python, 'libs', arch.arch))
|
env['LDFLAGS'] += ' -L{}'.format(os.path.join(ndk_dir_python, 'libs', arch.arch))
|
||||||
env['LDFLAGS'] += ' -lpython{}m'.format(python_version)
|
env['LDFLAGS'] += ' -lpython{}'.format(python_version)
|
||||||
# until `pythonforandroid/archs.py` gets merged upstream:
|
# until `pythonforandroid/archs.py` gets merged upstream:
|
||||||
# https://github.com/kivy/python-for-android/pull/1250/files#diff-569e13021e33ced8b54385f55b49cbe6
|
# https://github.com/kivy/python-for-android/pull/1250/files#diff-569e13021e33ced8b54385f55b49cbe6
|
||||||
env['CFLAGS'] += ' -I{}/include/python/'.format(ndk_dir_python) + ' -L{}'.format(os.path.join(ndk_dir_python, 'libs', arch.arch))
|
env['CFLAGS'] += ' -I{}/include/python/'.format(ndk_dir_python) + ' -L{}'.format(os.path.join(ndk_dir_python, 'libs', arch.arch))
|
||||||
|
|
|
@ -23,7 +23,7 @@ class NetifacesRecipe(CompiledComponentsPythonRecipe):
|
||||||
python_version = self.ctx.python_recipe.version[0:3]
|
python_version = self.ctx.python_recipe.version[0:3]
|
||||||
ndk_dir_python = os.path.join(self.ctx.ndk_dir, 'sources/python/', python_version)
|
ndk_dir_python = os.path.join(self.ctx.ndk_dir, 'sources/python/', python_version)
|
||||||
env['LDFLAGS'] += ' -L{}'.format(os.path.join(ndk_dir_python, 'libs', arch.arch))
|
env['LDFLAGS'] += ' -L{}'.format(os.path.join(ndk_dir_python, 'libs', arch.arch))
|
||||||
env['LDFLAGS'] += ' -lpython{}m'.format(python_version)
|
env['LDFLAGS'] += ' -lpython{}'.format(python_version)
|
||||||
# until `pythonforandroid/archs.py` gets merged upstream:
|
# until `pythonforandroid/archs.py` gets merged upstream:
|
||||||
# https://github.com/kivy/python-for-android/pull/1250/files#diff-569e13021e33ced8b54385f55b49cbe6
|
# https://github.com/kivy/python-for-android/pull/1250/files#diff-569e13021e33ced8b54385f55b49cbe6
|
||||||
env['CFLAGS'] += ' -I{}/include/python/'.format(ndk_dir_python)
|
env['CFLAGS'] += ' -I{}/include/python/'.format(ndk_dir_python)
|
||||||
|
|
|
@ -6,9 +6,7 @@ from os.path import join
|
||||||
|
|
||||||
|
|
||||||
class PyjniusRecipe(CythonRecipe):
|
class PyjniusRecipe(CythonRecipe):
|
||||||
# "6553ad4" is one commit after last release (1.2.0)
|
version = '1.3.0'
|
||||||
# it fixes method resolution, required for resolving requestPermissions()
|
|
||||||
version = '6553ad4'
|
|
||||||
url = 'https://github.com/kivy/pyjnius/archive/{version}.zip'
|
url = 'https://github.com/kivy/pyjnius/archive/{version}.zip'
|
||||||
name = 'pyjnius'
|
name = 'pyjnius'
|
||||||
depends = [('genericndkbuild', 'sdl2', 'sdl'), 'six']
|
depends = [('genericndkbuild', 'sdl2', 'sdl'), 'six']
|
||||||
|
|
|
@ -10,16 +10,16 @@ index ac89fec..71daa43 100644
|
||||||
cdef JNIEnv *get_platform_jnienv():
|
cdef JNIEnv *get_platform_jnienv():
|
||||||
- return SDL_ANDROID_GetJNIEnv()
|
- return SDL_ANDROID_GetJNIEnv()
|
||||||
+ return <JNIEnv*>WebView_AndroidGetJNIEnv()
|
+ return <JNIEnv*>WebView_AndroidGetJNIEnv()
|
||||||
diff --git a/setup.py b/setup.py
|
diff --git a/jnius/env.py b/jnius/env.py
|
||||||
index 740510f..0c8e55f 100644
|
--- a/jnius/env.py
|
||||||
--- a/setup.py
|
+++ b/jnius/env.py
|
||||||
+++ b/setup.py
|
@@ -185,10 +185,10 @@ except ImportError:
|
||||||
@@ -53,7 +53,7 @@ except ImportError:
|
|
||||||
|
|
||||||
if PLATFORM == 'android':
|
def get_libraries(platform):
|
||||||
# for android, we use SDL...
|
if platform == 'android':
|
||||||
- LIBRARIES = ['sdl', 'log']
|
# for android, we use SDL...
|
||||||
+ LIBRARIES = ['main', 'log']
|
- return ['sdl', 'log']
|
||||||
LIBRARY_DIRS = ['libs/' + getenv('ARCH')]
|
+ return ['main', 'log']
|
||||||
elif PLATFORM == 'darwin':
|
|
||||||
import subprocess
|
elif platform == 'win32':
|
||||||
|
return ['jvm']
|
||||||
|
|
|
@ -10,16 +10,17 @@ index ac89fec..71daa43 100644
|
||||||
cdef JNIEnv *get_platform_jnienv():
|
cdef JNIEnv *get_platform_jnienv():
|
||||||
- return SDL_ANDROID_GetJNIEnv()
|
- return SDL_ANDROID_GetJNIEnv()
|
||||||
+ return <JNIEnv*>SDL_AndroidGetJNIEnv()
|
+ return <JNIEnv*>SDL_AndroidGetJNIEnv()
|
||||||
diff --git a/setup.py b/setup.py
|
diff --git a/env.py b/env.py
|
||||||
index 740510f..0c8e55f 100644
|
index 740510f..0c8e55f 100644
|
||||||
--- a/setup.py
|
--- a/jnius/env.py
|
||||||
+++ b/setup.py
|
+++ b/jnius/env.py
|
||||||
@@ -53,7 +53,7 @@ except ImportError:
|
@@ -185,10 +185,10 @@ except ImportError:
|
||||||
|
|
||||||
if PLATFORM == 'android':
|
def get_libraries(platform):
|
||||||
# for android, we use SDL...
|
if platform == 'android':
|
||||||
- LIBRARIES = ['sdl', 'log']
|
# for android, we use SDL...
|
||||||
+ LIBRARIES = ['SDL2', 'log']
|
- return ['sdl', 'log']
|
||||||
LIBRARY_DIRS = ['libs/' + getenv('ARCH')]
|
+ return ['SDL2', 'log']
|
||||||
elif PLATFORM == 'darwin':
|
|
||||||
import subprocess
|
elif platform == 'win32':
|
||||||
|
return ['jvm']
|
||||||
|
|
|
@ -33,7 +33,8 @@ OPENSSLCONF = """#if defined(__ARM_ARCH_5TE__)
|
||||||
LATEST_FULL_VERSION = {
|
LATEST_FULL_VERSION = {
|
||||||
'3.5': '3.5.1',
|
'3.5': '3.5.1',
|
||||||
'3.6': '3.6.6',
|
'3.6': '3.6.6',
|
||||||
'3.7': '3.7.1'
|
'3.7': '3.7.1',
|
||||||
|
'3.9': '3.9.6'
|
||||||
}
|
}
|
||||||
|
|
||||||
def realpath(fname):
|
def realpath(fname):
|
||||||
|
@ -61,7 +62,7 @@ def realpath(fname):
|
||||||
return os.sep.join(abs_path)
|
return os.sep.join(abs_path)
|
||||||
|
|
||||||
class Python3Recipe(TargetPythonRecipe):
|
class Python3Recipe(TargetPythonRecipe):
|
||||||
version = '3.7'
|
version = '3.9'
|
||||||
url = ''
|
url = ''
|
||||||
name = 'python3crystax'
|
name = 'python3crystax'
|
||||||
|
|
||||||
|
@ -71,7 +72,7 @@ class Python3Recipe(TargetPythonRecipe):
|
||||||
from_crystax = True
|
from_crystax = True
|
||||||
|
|
||||||
def download_if_necessary(self):
|
def download_if_necessary(self):
|
||||||
if 'openssl' in self.ctx.recipe_build_order or self.version == '3.6' or self.version == '3.7':
|
if 'openssl' in self.ctx.recipe_build_order or self.version == '3.6' or self.version == '3.7' or self.version == '3.9':
|
||||||
full_version = LATEST_FULL_VERSION[self.version]
|
full_version = LATEST_FULL_VERSION[self.version]
|
||||||
Python3Recipe.url = 'https://www.python.org/ftp/python/{0}.{1}.{2}/Python-{0}.{1}.{2}.tgz'.format(*full_version.split('.'))
|
Python3Recipe.url = 'https://www.python.org/ftp/python/{0}.{1}.{2}/Python-{0}.{1}.{2}.tgz'.format(*full_version.split('.'))
|
||||||
super(Python3Recipe, self).download_if_necessary()
|
super(Python3Recipe, self).download_if_necessary()
|
||||||
|
@ -168,8 +169,29 @@ class Python3Recipe(TargetPythonRecipe):
|
||||||
|
|
||||||
def prebuild_arch(self, arch):
|
def prebuild_arch(self, arch):
|
||||||
super(Python3Recipe, self).prebuild_arch(arch)
|
super(Python3Recipe, self).prebuild_arch(arch)
|
||||||
if self.version == '3.6' or self.version == '3.7':
|
if self.version == '3.6' or self.version == '3.7' or self.version == '3.9':
|
||||||
Python3Recipe.patches = ['patch_python3.6.patch', 'remove_android_api_check.patch', 'selectors.patch']
|
Python3Recipe.patches = [
|
||||||
|
'patch/patch_python3.6.patch',
|
||||||
|
'patch/remove_android_api_check.patch',
|
||||||
|
'patch/selectors.patch'
|
||||||
|
]
|
||||||
|
|
||||||
|
if self.version == '3.9':
|
||||||
|
Python3Recipe.patches = [
|
||||||
|
'patch/remove_android_api_check.patch',
|
||||||
|
'patch/patch_python3.9.patch',
|
||||||
|
'patch/platlibdir.patch',
|
||||||
|
'patch/strdup.patch',
|
||||||
|
|
||||||
|
# from https://github.com/kivy/python-for-android/blob/develop/pythonforandroid/recipes/python3/__init__.py#L63
|
||||||
|
'patch/pyconfig_detection.patch',
|
||||||
|
'patch/reproducible-buildinfo.diff',
|
||||||
|
'patch/py3.8.1.patch'
|
||||||
|
]
|
||||||
|
|
||||||
|
if sh.which('lld') is not None:
|
||||||
|
Python3Recipe.patches += ['patch/py3.8.1_fix_cortex_a8.patch']
|
||||||
|
|
||||||
build_dir = self.get_build_dir(arch.arch)
|
build_dir = self.get_build_dir(arch.arch)
|
||||||
|
|
||||||
# copy bundled libffi to _ctypes
|
# copy bundled libffi to _ctypes
|
||||||
|
@ -183,14 +205,18 @@ class Python3Recipe(TargetPythonRecipe):
|
||||||
python_build_files = ['android.mk', 'config.c', 'interpreter.c']
|
python_build_files = ['android.mk', 'config.c', 'interpreter.c']
|
||||||
ndk_build_tools_python_dir = join(self.ctx.ndk_dir, 'build', 'tools', 'build-target-python')
|
ndk_build_tools_python_dir = join(self.ctx.ndk_dir, 'build', 'tools', 'build-target-python')
|
||||||
for python_build_file in python_build_files:
|
for python_build_file in python_build_files:
|
||||||
shprint(sh.cp, join(self.get_recipe_dir(), python_build_file+'.3.7'),
|
shprint(sh.cp, join(self.get_recipe_dir(), python_build_file+'.3.9'),
|
||||||
join(ndk_build_tools_python_dir, python_build_file+'.3.7'))
|
join(ndk_build_tools_python_dir, python_build_file+'.3.9'))
|
||||||
ndk_sources_python_dir = join(self.ctx.ndk_dir, 'sources', 'python')
|
ndk_sources_python_dir = join(self.ctx.ndk_dir, 'sources', 'python')
|
||||||
if not os.path.exists(join(ndk_sources_python_dir, '3.7')):
|
if not os.path.exists(join(ndk_sources_python_dir, '3.9')):
|
||||||
os.mkdir(join(ndk_sources_python_dir, '3.7'))
|
os.mkdir(join(ndk_sources_python_dir, '3.9'))
|
||||||
sh.sed('s#3.5#3.7#',
|
sh.sed('s#3.5#3.9#',
|
||||||
join(ndk_sources_python_dir, '3.5/Android.mk'),
|
join(ndk_sources_python_dir, '3.5/Android.mk'),
|
||||||
_out=join(ndk_sources_python_dir, '3.7/Android.mk'))
|
_out=join(ndk_sources_python_dir, '3.9/Android.mk.tmp'))
|
||||||
|
sh.sed('s#3.9m#3.9#',
|
||||||
|
join(ndk_sources_python_dir, '3.9/Android.mk.tmp'),
|
||||||
|
_out=join(ndk_sources_python_dir, '3.9/Android.mk'))
|
||||||
|
shprint(sh.rm, '-f', join(ndk_sources_python_dir, '3.9/Android.mk.tmp'))
|
||||||
|
|
||||||
def build_arch(self, arch):
|
def build_arch(self, arch):
|
||||||
# If openssl is needed we may have to recompile cPython to get the
|
# If openssl is needed we may have to recompile cPython to get the
|
||||||
|
|
|
@ -27,14 +27,17 @@ LOCAL_SRC_FILES := config.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Python/getversion.c \
|
$(MY_PYTHON_SRC_ROOT)/Python/getversion.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Python/graminit.c \
|
$(MY_PYTHON_SRC_ROOT)/Python/graminit.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Python/hamt.c \
|
$(MY_PYTHON_SRC_ROOT)/Python/hamt.c \
|
||||||
|
$(MY_PYTHON_SRC_ROOT)/Python/hashtable.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Python/import.c \
|
$(MY_PYTHON_SRC_ROOT)/Python/import.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Python/importdl.c \
|
$(MY_PYTHON_SRC_ROOT)/Python/importdl.c \
|
||||||
|
$(MY_PYTHON_SRC_ROOT)/Python/initconfig.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Python/marshal.c \
|
$(MY_PYTHON_SRC_ROOT)/Python/marshal.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Python/modsupport.c \
|
$(MY_PYTHON_SRC_ROOT)/Python/modsupport.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Python/mysnprintf.c \
|
$(MY_PYTHON_SRC_ROOT)/Python/mysnprintf.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Python/mystrtoul.c \
|
$(MY_PYTHON_SRC_ROOT)/Python/mystrtoul.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Python/pathconfig.c \
|
$(MY_PYTHON_SRC_ROOT)/Python/pathconfig.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Python/peephole.c \
|
$(MY_PYTHON_SRC_ROOT)/Python/peephole.c \
|
||||||
|
$(MY_PYTHON_SRC_ROOT)/Python/preconfig.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Python/pyarena.c \
|
$(MY_PYTHON_SRC_ROOT)/Python/pyarena.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Python/pyctype.c \
|
$(MY_PYTHON_SRC_ROOT)/Python/pyctype.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Python/pyfpe.c \
|
$(MY_PYTHON_SRC_ROOT)/Python/pyfpe.c \
|
||||||
|
@ -57,17 +60,18 @@ LOCAL_SRC_FILES := config.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Python/_warnings.c \
|
$(MY_PYTHON_SRC_ROOT)/Python/_warnings.c \
|
||||||
\
|
\
|
||||||
$(MY_PYTHON_SRC_ROOT)/Parser/acceler.c \
|
$(MY_PYTHON_SRC_ROOT)/Parser/acceler.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Parser/bitset.c \
|
|
||||||
$(MY_PYTHON_SRC_ROOT)/Parser/firstsets.c \
|
|
||||||
$(MY_PYTHON_SRC_ROOT)/Parser/grammar.c \
|
|
||||||
$(MY_PYTHON_SRC_ROOT)/Parser/grammar1.c \
|
$(MY_PYTHON_SRC_ROOT)/Parser/grammar1.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Parser/listnode.c \
|
$(MY_PYTHON_SRC_ROOT)/Parser/listnode.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Parser/metagrammar.c \
|
|
||||||
$(MY_PYTHON_SRC_ROOT)/Parser/myreadline.c \
|
$(MY_PYTHON_SRC_ROOT)/Parser/myreadline.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Parser/node.c \
|
$(MY_PYTHON_SRC_ROOT)/Parser/node.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Parser/parser.c \
|
$(MY_PYTHON_SRC_ROOT)/Parser/parser.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Parser/parsetok.c \
|
$(MY_PYTHON_SRC_ROOT)/Parser/parsetok.c \
|
||||||
|
$(MY_PYTHON_SRC_ROOT)/Parser/token.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Parser/tokenizer.c \
|
$(MY_PYTHON_SRC_ROOT)/Parser/tokenizer.c \
|
||||||
|
$(MY_PYTHON_SRC_ROOT)/Parser/pegen/parse.c \
|
||||||
|
$(MY_PYTHON_SRC_ROOT)/Parser/pegen/parse_string.c \
|
||||||
|
$(MY_PYTHON_SRC_ROOT)/Parser/pegen/peg_api.c \
|
||||||
|
$(MY_PYTHON_SRC_ROOT)/Parser/pegen/pegen.c \
|
||||||
\
|
\
|
||||||
$(MY_PYTHON_SRC_ROOT)/Objects/abstract.c \
|
$(MY_PYTHON_SRC_ROOT)/Objects/abstract.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Objects/accu.c \
|
$(MY_PYTHON_SRC_ROOT)/Objects/accu.c \
|
||||||
|
@ -90,6 +94,8 @@ LOCAL_SRC_FILES := config.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Objects/frameobject.c \
|
$(MY_PYTHON_SRC_ROOT)/Objects/frameobject.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Objects/funcobject.c \
|
$(MY_PYTHON_SRC_ROOT)/Objects/funcobject.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Objects/genobject.c \
|
$(MY_PYTHON_SRC_ROOT)/Objects/genobject.c \
|
||||||
|
$(MY_PYTHON_SRC_ROOT)/Objects/genericaliasobject.c \
|
||||||
|
$(MY_PYTHON_SRC_ROOT)/Objects/interpreteridobject.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Objects/iterobject.c \
|
$(MY_PYTHON_SRC_ROOT)/Objects/iterobject.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Objects/listobject.c \
|
$(MY_PYTHON_SRC_ROOT)/Objects/listobject.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Objects/longobject.c \
|
$(MY_PYTHON_SRC_ROOT)/Objects/longobject.c \
|
||||||
|
@ -100,6 +106,7 @@ LOCAL_SRC_FILES := config.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Objects/object.c \
|
$(MY_PYTHON_SRC_ROOT)/Objects/object.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Objects/obmalloc.c \
|
$(MY_PYTHON_SRC_ROOT)/Objects/obmalloc.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Objects/odictobject.c \
|
$(MY_PYTHON_SRC_ROOT)/Objects/odictobject.c \
|
||||||
|
$(MY_PYTHON_SRC_ROOT)/Objects/picklebufobject.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Objects/rangeobject.c \
|
$(MY_PYTHON_SRC_ROOT)/Objects/rangeobject.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Objects/setobject.c \
|
$(MY_PYTHON_SRC_ROOT)/Objects/setobject.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Objects/sliceobject.c \
|
$(MY_PYTHON_SRC_ROOT)/Objects/sliceobject.c \
|
||||||
|
@ -131,10 +138,8 @@ LOCAL_SRC_FILES := config.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Modules/gcmodule.c \
|
$(MY_PYTHON_SRC_ROOT)/Modules/gcmodule.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Modules/getbuildinfo.c \
|
$(MY_PYTHON_SRC_ROOT)/Modules/getbuildinfo.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Modules/getpath.c \
|
$(MY_PYTHON_SRC_ROOT)/Modules/getpath.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Modules/hashtable.c \
|
|
||||||
$(MY_PYTHON_SRC_ROOT)/Modules/_heapqmodule.c \
|
$(MY_PYTHON_SRC_ROOT)/Modules/_heapqmodule.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Modules/itertoolsmodule.c \
|
$(MY_PYTHON_SRC_ROOT)/Modules/itertoolsmodule.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Modules/_json.c \
|
|
||||||
$(MY_PYTHON_SRC_ROOT)/Modules/_localemodule.c \
|
$(MY_PYTHON_SRC_ROOT)/Modules/_localemodule.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Modules/_lsprof.c \
|
$(MY_PYTHON_SRC_ROOT)/Modules/_lsprof.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Modules/main.c \
|
$(MY_PYTHON_SRC_ROOT)/Modules/main.c \
|
||||||
|
@ -146,7 +151,6 @@ LOCAL_SRC_FILES := config.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Modules/_operator.c \
|
$(MY_PYTHON_SRC_ROOT)/Modules/_operator.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Modules/ossaudiodev.c \
|
$(MY_PYTHON_SRC_ROOT)/Modules/ossaudiodev.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Modules/parsermodule.c \
|
$(MY_PYTHON_SRC_ROOT)/Modules/parsermodule.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Modules/_pickle.c \
|
|
||||||
$(MY_PYTHON_SRC_ROOT)/Modules/posixmodule.c \
|
$(MY_PYTHON_SRC_ROOT)/Modules/posixmodule.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Modules/_posixsubprocess.c \
|
$(MY_PYTHON_SRC_ROOT)/Modules/_posixsubprocess.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Modules/pwdmodule.c \
|
$(MY_PYTHON_SRC_ROOT)/Modules/pwdmodule.c \
|
||||||
|
@ -176,7 +180,6 @@ LOCAL_SRC_FILES := config.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Modules/xxlimited.c \
|
$(MY_PYTHON_SRC_ROOT)/Modules/xxlimited.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Modules/xxmodule.c \
|
$(MY_PYTHON_SRC_ROOT)/Modules/xxmodule.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Modules/xxsubtype.c \
|
$(MY_PYTHON_SRC_ROOT)/Modules/xxsubtype.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Modules/zipimport.c \
|
|
||||||
$(MY_PYTHON_SRC_ROOT)/Modules/zlibmodule.c \
|
$(MY_PYTHON_SRC_ROOT)/Modules/zlibmodule.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Modules/cjkcodecs/_codecs_cn.c \
|
$(MY_PYTHON_SRC_ROOT)/Modules/cjkcodecs/_codecs_cn.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Modules/cjkcodecs/_codecs_hk.c \
|
$(MY_PYTHON_SRC_ROOT)/Modules/cjkcodecs/_codecs_hk.c \
|
|
@ -26,7 +26,6 @@ extern PyObject* PyInit__thread(void);
|
||||||
extern PyObject* PyInit__codecs(void);
|
extern PyObject* PyInit__codecs(void);
|
||||||
extern PyObject* PyInit__weakref(void);
|
extern PyObject* PyInit__weakref(void);
|
||||||
extern PyObject* PyInit_xxsubtype(void);
|
extern PyObject* PyInit_xxsubtype(void);
|
||||||
extern PyObject* PyInit_zipimport(void);
|
|
||||||
extern PyObject* PyInit__random(void);
|
extern PyObject* PyInit__random(void);
|
||||||
extern PyObject* PyInit_itertools(void);
|
extern PyObject* PyInit_itertools(void);
|
||||||
extern PyObject* PyInit__collections(void);
|
extern PyObject* PyInit__collections(void);
|
||||||
|
@ -40,7 +39,6 @@ extern PyObject* PyInit_parser(void);
|
||||||
extern PyObject* PyInit__struct(void);
|
extern PyObject* PyInit__struct(void);
|
||||||
extern PyObject* PyInit__datetime(void);
|
extern PyObject* PyInit__datetime(void);
|
||||||
extern PyObject* PyInit__functools(void);
|
extern PyObject* PyInit__functools(void);
|
||||||
extern PyObject* PyInit__json(void);
|
|
||||||
extern PyObject* PyInit_zlib(void);
|
extern PyObject* PyInit_zlib(void);
|
||||||
extern PyObject* PyInit__multibytecodec(void);
|
extern PyObject* PyInit__multibytecodec(void);
|
||||||
extern PyObject* PyInit__codecs_cn(void);
|
extern PyObject* PyInit__codecs_cn(void);
|
||||||
|
@ -53,7 +51,6 @@ extern PyObject* PyInit__winapi(void);
|
||||||
extern PyObject* PyInit__lsprof(void);
|
extern PyObject* PyInit__lsprof(void);
|
||||||
extern PyObject* PyInit__ast(void);
|
extern PyObject* PyInit__ast(void);
|
||||||
extern PyObject* PyInit__io(void);
|
extern PyObject* PyInit__io(void);
|
||||||
extern PyObject* PyInit__pickle(void);
|
|
||||||
extern PyObject* PyInit_atexit(void);
|
extern PyObject* PyInit_atexit(void);
|
||||||
extern PyObject* _PyWarnings_Init(void);
|
extern PyObject* _PyWarnings_Init(void);
|
||||||
extern PyObject* PyInit__string(void);
|
extern PyObject* PyInit__string(void);
|
||||||
|
@ -103,10 +100,8 @@ struct _inittab _PyImport_Inittab[] = {
|
||||||
{"_struct", PyInit__struct},
|
{"_struct", PyInit__struct},
|
||||||
{"_datetime", PyInit__datetime},
|
{"_datetime", PyInit__datetime},
|
||||||
{"_functools", PyInit__functools},
|
{"_functools", PyInit__functools},
|
||||||
{"_json", PyInit__json},
|
|
||||||
|
|
||||||
{"xxsubtype", PyInit_xxsubtype},
|
{"xxsubtype", PyInit_xxsubtype},
|
||||||
{"zipimport", PyInit_zipimport},
|
|
||||||
{"zlib", PyInit_zlib},
|
{"zlib", PyInit_zlib},
|
||||||
|
|
||||||
/* CJK codecs */
|
/* CJK codecs */
|
||||||
|
@ -131,7 +126,6 @@ struct _inittab _PyImport_Inittab[] = {
|
||||||
{"_string", PyInit__string},
|
{"_string", PyInit__string},
|
||||||
|
|
||||||
{"_io", PyInit__io},
|
{"_io", PyInit__io},
|
||||||
{"_pickle", PyInit__pickle},
|
|
||||||
{"atexit", PyInit_atexit},
|
{"atexit", PyInit_atexit},
|
||||||
{"_stat", PyInit__stat},
|
{"_stat", PyInit__stat},
|
||||||
{"_opcode", PyInit__opcode},
|
{"_opcode", PyInit__opcode},
|
|
@ -9,7 +9,7 @@
|
||||||
|
|
||||||
#define PYTHON3_STDLIB_REL_PATH "stdlib.zip"
|
#define PYTHON3_STDLIB_REL_PATH "stdlib.zip"
|
||||||
#define PYTHON3_MODULES_REL_PATH "modules"
|
#define PYTHON3_MODULES_REL_PATH "modules"
|
||||||
#define PYTHON3_DLL_REL_PATH "libpython3.7m.so"
|
#define PYTHON3_DLL_REL_PATH "libpython3.9.so"
|
||||||
|
|
||||||
#define SYS_PATH_BUFFER_SIZE (2*(PATH_MAX + 1))
|
#define SYS_PATH_BUFFER_SIZE (2*(PATH_MAX + 1))
|
||||||
|
|
93
recipes/python3crystax/patch/patch_python3.9.patch
Normal file
93
recipes/python3crystax/patch/patch_python3.9.patch
Normal file
|
@ -0,0 +1,93 @@
|
||||||
|
--- a/Modules/expat/xmlparse.c 2021-06-28 09:26:18.000000000 +0100
|
||||||
|
+++ b/Modules/expat/xmlparse.c 2021-08-20 10:19:38.946990574 +0100
|
||||||
|
@@ -89,6 +89,8 @@
|
||||||
|
# define LOAD_LIBRARY_SEARCH_SYSTEM32 0x00000800
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+#define XML_POOR_ENTROPY 1
|
||||||
|
+
|
||||||
|
#if ! defined(HAVE_GETRANDOM) && ! defined(HAVE_SYSCALL_GETRANDOM) \
|
||||||
|
&& ! defined(HAVE_ARC4RANDOM_BUF) && ! defined(HAVE_ARC4RANDOM) \
|
||||||
|
&& ! defined(XML_DEV_URANDOM) && ! defined(_WIN32)
|
||||||
|
diff --git a/Modules/getpath.c b/Modules/getpath.c
|
||||||
|
--- a/Modules/getpath.c 2021-06-28 09:26:18.000000000 +0100
|
||||||
|
+++ b/Modules/getpath.c 2021-08-20 10:29:27.000481395 +0100
|
||||||
|
@@ -103,10 +103,39 @@
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+/*
|
||||||
|
+ These variables were set this way in older versions of Python, but
|
||||||
|
+ changed from 3.5.1 to 3.5.2.
|
||||||
|
+ https://github.com/python/cpython/commit/f5854148138280c69fdc9d350636dc2140d57753
|
||||||
|
+ Here we just the old way again. A better solution would be to work
|
||||||
|
+ out where they should be defined, and make the CrystaX build scripts do so.
|
||||||
|
+*/
|
||||||
|
|
||||||
|
-#if (!defined(PREFIX) || !defined(EXEC_PREFIX) \
|
||||||
|
- || !defined(VERSION) || !defined(VPATH))
|
||||||
|
-#error "PREFIX, EXEC_PREFIX, VERSION and VPATH macros must be defined"
|
||||||
|
+/*
|
||||||
|
+ * #if (!defined(PREFIX) || !defined(EXEC_PREFIX) \
|
||||||
|
+ * || !defined(VERSION) || !defined(VPATH))
|
||||||
|
+ * #error "PREFIX, EXEC_PREFIX, VERSION and VPATH macros must be defined"
|
||||||
|
+ * #endif
|
||||||
|
+ */
|
||||||
|
+#ifndef VERSION
|
||||||
|
+#define VERSION "2.1"
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+#ifndef VPATH
|
||||||
|
+#define VPATH "."
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+#ifndef PREFIX
|
||||||
|
+# define PREFIX "/usr/local"
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+#ifndef EXEC_PREFIX
|
||||||
|
+#define EXEC_PREFIX PREFIX
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+#ifndef PYTHONPATH
|
||||||
|
+#define PYTHONPATH PREFIX "/lib/python" VERSION ":" \
|
||||||
|
+ EXEC_PREFIX "/lib/python" VERSION "/lib-dynload"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef LANDMARK
|
||||||
|
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
|
||||||
|
--- a/Modules/timemodule.c
|
||||||
|
+++ b/Modules/timemodule.c
|
||||||
|
@@ -358,18 +358,20 @@ time_gmtime(PyObject *self, PyObject *args)
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
-#ifndef HAVE_TIMEGM
|
||||||
|
-static time_t
|
||||||
|
-timegm(struct tm *p)
|
||||||
|
-{
|
||||||
|
- /* XXX: the following implementation will not work for tm_year < 1970.
|
||||||
|
- but it is likely that platforms that don't have timegm do not support
|
||||||
|
- negative timestamps anyways. */
|
||||||
|
- return p->tm_sec + p->tm_min*60 + p->tm_hour*3600 + p->tm_yday*86400 +
|
||||||
|
- (p->tm_year-70)*31536000 + ((p->tm_year-69)/4)*86400 -
|
||||||
|
- ((p->tm_year-1)/100)*86400 + ((p->tm_year+299)/400)*86400;
|
||||||
|
-}
|
||||||
|
-#endif
|
||||||
|
+/* In the Android build, HAVE_TIMEGM apparently should be defined but isn't. A better fix would be to work out why and fix that. */
|
||||||
|
+
|
||||||
|
+/* #ifndef HAVE_TIMEGM */
|
||||||
|
+/* static time_t */
|
||||||
|
+/* timegm(struct tm *p) */
|
||||||
|
+/* { */
|
||||||
|
+/* /\* XXX: the following implementation will not work for tm_year < 1970. */
|
||||||
|
+/* but it is likely that platforms that don't have timegm do not support */
|
||||||
|
+/* negative timestamps anyways. *\/ */
|
||||||
|
+/* return p->tm_sec + p->tm_min*60 + p->tm_hour*3600 + p->tm_yday*86400 + */
|
||||||
|
+/* (p->tm_year-70)*31536000 + ((p->tm_year-69)/4)*86400 - */
|
||||||
|
+/* ((p->tm_year-1)/100)*86400 + ((p->tm_year+299)/400)*86400; */
|
||||||
|
+/* } */
|
||||||
|
+/* #endif */
|
||||||
|
|
||||||
|
PyDoc_STRVAR(gmtime_doc,
|
||||||
|
"gmtime([seconds]) -> (tm_year, tm_mon, tm_mday, tm_hour, tm_min,\n\
|
11
recipes/python3crystax/patch/platlibdir.patch
Normal file
11
recipes/python3crystax/patch/platlibdir.patch
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
--- a/Python/initconfig.c 2021-06-28 09:26:18.000000000 +0100
|
||||||
|
+++ b/Python/initconfig.c 2021-08-20 12:03:57.319576456 +0100
|
||||||
|
@@ -25,7 +25,7 @@
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef PLATLIBDIR
|
||||||
|
-# error "PLATLIBDIR macro must be defined"
|
||||||
|
+# define PLATLIBDIR "/usr/lib"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
42
recipes/python3crystax/patch/py3.8.1.patch
Normal file
42
recipes/python3crystax/patch/py3.8.1.patch
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
diff --git a/Lib/ctypes/util.py b/Lib/ctypes/util.py
|
||||||
|
index 97973bc..053c231 100644
|
||||||
|
--- a/Lib/ctypes/util.py
|
||||||
|
+++ b/Lib/ctypes/util.py
|
||||||
|
@@ -67,6 +67,13 @@ if os.name == "nt":
|
||||||
|
return fname
|
||||||
|
return None
|
||||||
|
|
||||||
|
+# This patch overrides the find_library to look in the right places on
|
||||||
|
+# Android
|
||||||
|
+if True:
|
||||||
|
+ from android._ctypes_library_finder import find_library as _find_lib
|
||||||
|
+ def find_library(name):
|
||||||
|
+ return _find_lib(name)
|
||||||
|
+
|
||||||
|
elif os.name == "posix" and sys.platform == "darwin":
|
||||||
|
from ctypes.macholib.dyld import dyld_find as _dyld_find
|
||||||
|
def find_library(name):
|
||||||
|
diff --git a/configure b/configure
|
||||||
|
index 0914e24..dd00812 100755
|
||||||
|
--- a/configure
|
||||||
|
+++ b/configure
|
||||||
|
@@ -18673,4 +18673,3 @@ if test "$Py_OPT" = 'false' -a "$Py_DEBUG" != 'true'; then
|
||||||
|
echo "" >&6
|
||||||
|
echo "" >&6
|
||||||
|
fi
|
||||||
|
-
|
||||||
|
diff --git a/setup.py b/setup.py
|
||||||
|
index 20d7f35..af15cc2 100644
|
||||||
|
--- a/setup.py
|
||||||
|
+++ b/setup.py
|
||||||
|
@@ -1501,7 +1501,9 @@ class PyBuildExt(build_ext):
|
||||||
|
if zlib_inc is not None:
|
||||||
|
zlib_h = zlib_inc[0] + '/zlib.h'
|
||||||
|
version = '"0.0.0"'
|
||||||
|
- version_req = '"1.1.3"'
|
||||||
|
+ # version_req = '"1.1.3"'
|
||||||
|
+ version_req = '"{}"'.format(
|
||||||
|
+ os.environ.get('ZLIB_VERSION', '1.1.3'))
|
||||||
|
if MACOS and is_macosx_sdk_path(zlib_h):
|
||||||
|
zlib_h = os.path.join(macosx_sdk_root(), zlib_h[1:])
|
||||||
|
with open(zlib_h) as fp:
|
15
recipes/python3crystax/patch/py3.8.1_fix_cortex_a8.patch
Normal file
15
recipes/python3crystax/patch/py3.8.1_fix_cortex_a8.patch
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
This patch removes --fix-cortex-a8 from the linker flags in order to support linking
|
||||||
|
with lld, as lld does not support this flag (https://github.com/android-ndk/ndk/issues/766).
|
||||||
|
diff --git a/configure b/configure
|
||||||
|
index 0914e24..7517168 100755
|
||||||
|
--- a/configure
|
||||||
|
+++ b/configure
|
||||||
|
@@ -5642,7 +5642,7 @@ $as_echo_n "checking for the Android arm ABI... " >&6; }
|
||||||
|
$as_echo "$_arm_arch" >&6; }
|
||||||
|
if test "$_arm_arch" = 7; then
|
||||||
|
BASECFLAGS="${BASECFLAGS} -mfloat-abi=softfp -mfpu=vfpv3-d16"
|
||||||
|
- LDFLAGS="${LDFLAGS} -march=armv7-a -Wl,--fix-cortex-a8"
|
||||||
|
+ LDFLAGS="${LDFLAGS} -march=armv7-a"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: not Android" >&5
|
13
recipes/python3crystax/patch/pyconfig_detection.patch
Normal file
13
recipes/python3crystax/patch/pyconfig_detection.patch
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
diff -Nru Python-3.8.2/Lib/site.py Python-3.8.2-new/Lib/site.py
|
||||||
|
--- Python-3.8.2/Lib/site.py 2020-04-28 12:48:38.000000000 -0700
|
||||||
|
+++ Python-3.8.2-new/Lib/site.py 2020-04-28 12:52:46.000000000 -0700
|
||||||
|
@@ -487,7 +487,8 @@
|
||||||
|
if key == 'include-system-site-packages':
|
||||||
|
system_site = value.lower()
|
||||||
|
elif key == 'home':
|
||||||
|
- sys._home = value
|
||||||
|
+ # this is breaking pyconfig.h path detection with venv
|
||||||
|
+ print('Ignoring "sys._home = value" override')
|
||||||
|
|
||||||
|
sys.prefix = sys.exec_prefix = site_prefix
|
||||||
|
|
13
recipes/python3crystax/patch/reproducible-buildinfo.diff
Normal file
13
recipes/python3crystax/patch/reproducible-buildinfo.diff
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
# DP: Build getbuildinfo.o with DATE/TIME values when defined
|
||||||
|
|
||||||
|
--- a/Makefile.pre.in
|
||||||
|
+++ b/Makefile.pre.in
|
||||||
|
@@ -785,6 +785,8 @@ Modules/getbuildinfo.o: $(PARSER_OBJS) \
|
||||||
|
-DGITVERSION="\"`LC_ALL=C $(GITVERSION)`\"" \
|
||||||
|
-DGITTAG="\"`LC_ALL=C $(GITTAG)`\"" \
|
||||||
|
-DGITBRANCH="\"`LC_ALL=C $(GITBRANCH)`\"" \
|
||||||
|
+ $(if $(BUILD_DATE),-DDATE='"$(BUILD_DATE)"') \
|
||||||
|
+ $(if $(BUILD_TIME),-DTIME='"$(BUILD_TIME)"') \
|
||||||
|
-o $@ $(srcdir)/Modules/getbuildinfo.c
|
||||||
|
|
||||||
|
Modules/getpath.o: $(srcdir)/Modules/getpath.c Makefile
|
10
recipes/python3crystax/patch/strdup.patch
Normal file
10
recipes/python3crystax/patch/strdup.patch
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
--- a/Python/strdup.c 2021-06-28 09:26:18.000000000 +0100
|
||||||
|
+++ b/Python/strdup.c 2021-08-20 09:26:36.443055850 +0100
|
||||||
|
@@ -1,5 +1,7 @@
|
||||||
|
/* strdup() replacement (from stdwin, if you must know) */
|
||||||
|
|
||||||
|
+#include "Python.h"
|
||||||
|
+
|
||||||
|
char *
|
||||||
|
strdup(const char *str)
|
||||||
|
{
|
|
@ -2,7 +2,7 @@ from pythonforandroid.recipe import PythonRecipe
|
||||||
|
|
||||||
|
|
||||||
class SetuptoolsRecipe(PythonRecipe):
|
class SetuptoolsRecipe(PythonRecipe):
|
||||||
version = '40.0.0'
|
version = '51.0.0'
|
||||||
url = 'https://pypi.python.org/packages/source/s/setuptools/setuptools-{version}.zip'
|
url = 'https://pypi.python.org/packages/source/s/setuptools/setuptools-{version}.zip'
|
||||||
|
|
||||||
depends = [('python2', 'python3crystax')]
|
depends = [('python2', 'python3crystax')]
|
||||||
|
|
|
@ -350,7 +350,11 @@ build_python_for_abi ()
|
||||||
echo " --with-threads \\"
|
echo " --with-threads \\"
|
||||||
echo " --enable-ipv6 \\"
|
echo " --enable-ipv6 \\"
|
||||||
echo " --with-computed-gotos \\"
|
echo " --with-computed-gotos \\"
|
||||||
echo " --without-ensurepip"
|
echo " ac_cv_file__dev_ptmx=yes \\"
|
||||||
|
echo " ac_cv_file__dev_ptc=no \\"
|
||||||
|
echo " --without-ensurepip \\"
|
||||||
|
echo " ac_cv_little_endian_double=yes \\"
|
||||||
|
echo " --exec-prefix=/usr/local"
|
||||||
fi
|
fi
|
||||||
} >$CONFIGURE_WRAPPER
|
} >$CONFIGURE_WRAPPER
|
||||||
fail_panic "Can't create configure wrapper"
|
fail_panic "Can't create configure wrapper"
|
||||||
|
@ -382,8 +386,8 @@ build_python_for_abi ()
|
||||||
if [ "$PYTHON_MAJOR_VERSION" = "2" ]; then
|
if [ "$PYTHON_MAJOR_VERSION" = "2" ]; then
|
||||||
local PYTHON_CORE_MODULE_NAME='python'"$PYTHON_ABI"
|
local PYTHON_CORE_MODULE_NAME='python'"$PYTHON_ABI"
|
||||||
else
|
else
|
||||||
local PYTHON_CORE_MODULE_NAME='python'"$PYTHON_ABI"'m'
|
local PYTHON_CORE_MODULE_NAME='python'"$PYTHON_ABI"
|
||||||
local PYTHON_SOABI='cpython-'"$PYTHON_ABI"'m'
|
local PYTHON_SOABI='cpython-'"$PYTHON_ABI"
|
||||||
fi
|
fi
|
||||||
{
|
{
|
||||||
echo 'LOCAL_PATH := $(call my-dir)'
|
echo 'LOCAL_PATH := $(call my-dir)'
|
||||||
|
@ -391,6 +395,8 @@ build_python_for_abi ()
|
||||||
echo "LOCAL_MODULE := $PYTHON_CORE_MODULE_NAME"
|
echo "LOCAL_MODULE := $PYTHON_CORE_MODULE_NAME"
|
||||||
echo "MY_PYTHON_SRC_ROOT := $PYTHON_SRCDIR"
|
echo "MY_PYTHON_SRC_ROOT := $PYTHON_SRCDIR"
|
||||||
echo 'LOCAL_C_INCLUDES := $(MY_PYTHON_SRC_ROOT)/Include'
|
echo 'LOCAL_C_INCLUDES := $(MY_PYTHON_SRC_ROOT)/Include'
|
||||||
|
echo 'LOCAL_C_INCLUDES += $(MY_PYTHON_SRC_ROOT)/Include/internal'
|
||||||
|
echo 'LOCAL_C_INCLUDES += $(MY_PYTHON_SRC_ROOT)/Include/cpython'
|
||||||
if [ "$PYTHON_MAJOR_VERSION" = "2" ]; then
|
if [ "$PYTHON_MAJOR_VERSION" = "2" ]; then
|
||||||
echo "LOCAL_CFLAGS := -DPy_BUILD_CORE -DPy_ENABLE_SHARED -DPLATFORM=\\\"linux\\\""
|
echo "LOCAL_CFLAGS := -DPy_BUILD_CORE -DPy_ENABLE_SHARED -DPLATFORM=\\\"linux\\\""
|
||||||
else
|
else
|
||||||
|
@ -410,6 +416,8 @@ build_python_for_abi ()
|
||||||
run rm -Rf $PYTHON_DSTDIR/include
|
run rm -Rf $PYTHON_DSTDIR/include
|
||||||
run mkdir -p $PYTHON_DSTDIR/include/python && \
|
run mkdir -p $PYTHON_DSTDIR/include/python && \
|
||||||
run cp -p $PYTHON_BUILD_UTILS_DIR/pyconfig.h $PYTHON_SRCDIR/Include/*.h $PYTHON_DSTDIR/include/python
|
run cp -p $PYTHON_BUILD_UTILS_DIR/pyconfig.h $PYTHON_SRCDIR/Include/*.h $PYTHON_DSTDIR/include/python
|
||||||
|
run cp -pR $PYTHON_SRCDIR/Include/internal $PYTHON_DSTDIR/include/python/internal
|
||||||
|
run cp -pR $PYTHON_SRCDIR/Include/cpython $PYTHON_DSTDIR/include/python/cpython
|
||||||
fail_panic "Can't install python$PYTHON_ABI headers"
|
fail_panic "Can't install python$PYTHON_ABI headers"
|
||||||
PYTHON_HEADERS_INSTALLED=yes
|
PYTHON_HEADERS_INSTALLED=yes
|
||||||
export PYTHON_HEADERS_INSTALLED
|
export PYTHON_HEADERS_INSTALLED
|
||||||
|
@ -542,9 +550,11 @@ build_python_for_abi ()
|
||||||
{
|
{
|
||||||
echo 'LOCAL_PATH := $(call my-dir)'
|
echo 'LOCAL_PATH := $(call my-dir)'
|
||||||
echo 'include $(CLEAR_VARS)'
|
echo 'include $(CLEAR_VARS)'
|
||||||
echo 'LOCAL_MODULE := _ctypes'
|
|
||||||
echo 'LOCAL_C_INCLUDES := $(LOCAL_PATH)/include'
|
|
||||||
echo "MY_PYTHON_SRC_ROOT := $PYTHON_SRCDIR"
|
echo "MY_PYTHON_SRC_ROOT := $PYTHON_SRCDIR"
|
||||||
|
echo 'LOCAL_MODULE := _ctypes'
|
||||||
|
echo 'LOCAL_CFLAGS := -DPy_BUILD_CORE'
|
||||||
|
echo 'LOCAL_C_INCLUDES := $(LOCAL_PATH)/include'
|
||||||
|
echo 'LOCAL_C_INCLUDES += $(MY_PYTHON_SRC_ROOT)/Include/internal'
|
||||||
echo 'LOCAL_SRC_FILES := \'
|
echo 'LOCAL_SRC_FILES := \'
|
||||||
for ffi_src in $FFI_SRC_LIST; do
|
for ffi_src in $FFI_SRC_LIST; do
|
||||||
echo " \$(MY_PYTHON_SRC_ROOT)/Modules/_ctypes/libffi/$ffi_src \\"
|
echo " \$(MY_PYTHON_SRC_ROOT)/Modules/_ctypes/libffi/$ffi_src \\"
|
||||||
|
@ -640,6 +650,7 @@ build_python_for_abi ()
|
||||||
echo "MY_PYTHON_SRC_ROOT := $PYTHON_SRCDIR"
|
echo "MY_PYTHON_SRC_ROOT := $PYTHON_SRCDIR"
|
||||||
echo 'LOCAL_SRC_FILES := \'
|
echo 'LOCAL_SRC_FILES := \'
|
||||||
echo ' $(MY_PYTHON_SRC_ROOT)/Modules/_queuemodule.c'
|
echo ' $(MY_PYTHON_SRC_ROOT)/Modules/_queuemodule.c'
|
||||||
|
echo 'LOCAL_C_INCLUDES := $(MY_PYTHON_SRC_ROOT)/Include/internal'
|
||||||
echo 'LOCAL_STATIC_LIBRARIES := python_shared'
|
echo 'LOCAL_STATIC_LIBRARIES := python_shared'
|
||||||
echo 'include $(BUILD_SHARED_LIBRARY)'
|
echo 'include $(BUILD_SHARED_LIBRARY)'
|
||||||
echo "\$(call import-module,python/$PYTHON_ABI)"
|
echo "\$(call import-module,python/$PYTHON_ABI)"
|
||||||
|
@ -665,6 +676,8 @@ build_python_for_abi ()
|
||||||
echo 'include $(CLEAR_VARS)'
|
echo 'include $(CLEAR_VARS)'
|
||||||
echo 'LOCAL_MODULE := _asyncio'
|
echo 'LOCAL_MODULE := _asyncio'
|
||||||
echo "MY_PYTHON_SRC_ROOT := $PYTHON_SRCDIR"
|
echo "MY_PYTHON_SRC_ROOT := $PYTHON_SRCDIR"
|
||||||
|
echo 'LOCAL_CFLAGS := -DPy_BUILD_CORE'
|
||||||
|
echo 'LOCAL_C_INCLUDES := $(MY_PYTHON_SRC_ROOT)/Include/internal'
|
||||||
echo 'LOCAL_SRC_FILES := \'
|
echo 'LOCAL_SRC_FILES := \'
|
||||||
echo ' $(MY_PYTHON_SRC_ROOT)/Modules/_asynciomodule.c'
|
echo ' $(MY_PYTHON_SRC_ROOT)/Modules/_asynciomodule.c'
|
||||||
echo 'LOCAL_STATIC_LIBRARIES := python_shared'
|
echo 'LOCAL_STATIC_LIBRARIES := python_shared'
|
||||||
|
@ -879,7 +892,7 @@ build_python_for_abi ()
|
||||||
echo 'LOCAL_MODULE := pyexpat'
|
echo 'LOCAL_MODULE := pyexpat'
|
||||||
echo 'LOCAL_CFLAGS := -DHAVE_EXPAT_CONFIG_H -DXML_STATIC'
|
echo 'LOCAL_CFLAGS := -DHAVE_EXPAT_CONFIG_H -DXML_STATIC'
|
||||||
echo "MY_PYTHON_SRC_ROOT := $PYTHON_SRCDIR"
|
echo "MY_PYTHON_SRC_ROOT := $PYTHON_SRCDIR"
|
||||||
echo "LOCAL_C_INCLUDES := \$(MY_PYTHON_SRC_ROOT)/Modules/expat"
|
echo 'LOCAL_C_INCLUDES := \$(MY_PYTHON_SRC_ROOT)/Modules/expat'
|
||||||
echo 'LOCAL_SRC_FILES := \'
|
echo 'LOCAL_SRC_FILES := \'
|
||||||
echo ' $(MY_PYTHON_SRC_ROOT)/Modules/expat/xmlparse.c \'
|
echo ' $(MY_PYTHON_SRC_ROOT)/Modules/expat/xmlparse.c \'
|
||||||
echo ' $(MY_PYTHON_SRC_ROOT)/Modules/expat/xmlrole.c \'
|
echo ' $(MY_PYTHON_SRC_ROOT)/Modules/expat/xmlrole.c \'
|
||||||
|
@ -951,6 +964,64 @@ build_python_for_abi ()
|
||||||
log "Install python$PYTHON_ABI-$ABI module 'unicodedata' in $PYBIN_INSTALLDIR_MODULES"
|
log "Install python$PYTHON_ABI-$ABI module 'unicodedata' in $PYBIN_INSTALLDIR_MODULES"
|
||||||
run cp -p -T $OBJDIR_UNICODEDATA/libunicodedata.so $PYBIN_INSTALLDIR_MODULES/unicodedata.so
|
run cp -p -T $OBJDIR_UNICODEDATA/libunicodedata.so $PYBIN_INSTALLDIR_MODULES/unicodedata.so
|
||||||
fail_panic "Can't install python$PYTHON_ABI-$ABI module 'unicodedata' in $PYBIN_INSTALLDIR_MODULES"
|
fail_panic "Can't install python$PYTHON_ABI-$ABI module 'unicodedata' in $PYBIN_INSTALLDIR_MODULES"
|
||||||
|
|
||||||
|
# _json speedups
|
||||||
|
local BUILDDIR_JSON="$BUILDDIR/json"
|
||||||
|
local OBJDIR_JSON="$BUILDDIR_JSON/obj/local/$ABI"
|
||||||
|
|
||||||
|
run mkdir -p "$BUILDDIR_JSON/jni"
|
||||||
|
fail_panic "Can't create directory: $BUILDDIR_JSON/jni"
|
||||||
|
|
||||||
|
{
|
||||||
|
echo 'LOCAL_PATH := $(call my-dir)'
|
||||||
|
echo 'include $(CLEAR_VARS)'
|
||||||
|
echo 'LOCAL_MODULE := _json'
|
||||||
|
echo "MY_PYTHON_SRC_ROOT := $PYTHON_SRCDIR"
|
||||||
|
echo 'LOCAL_C_INCLUDES := $(MY_PYTHON_SRC_ROOT)/Include/internal'
|
||||||
|
echo 'LOCAL_SRC_FILES := \'
|
||||||
|
echo ' $(MY_PYTHON_SRC_ROOT)/Modules/_json.c'
|
||||||
|
echo 'LOCAL_STATIC_LIBRARIES := python_shared'
|
||||||
|
echo 'LOCAL_CFLAGS := -DPy_BUILD_CORE_MODULE'
|
||||||
|
echo 'include $(BUILD_SHARED_LIBRARY)'
|
||||||
|
echo "\$(call import-module,python/$PYTHON_ABI)"
|
||||||
|
} >$BUILDDIR_JSON/jni/Android.mk
|
||||||
|
fail_panic "Can't generate $BUILDDIR_JSON/jni/Android.mk"
|
||||||
|
|
||||||
|
run $NDK_DIR/ndk-build -C $BUILDDIR_JSON -j$NUM_JOBS APP_ABI=$ABI V=1
|
||||||
|
fail_panic "Can't build python$PYTHON_ABI-$ABI module '_json'"
|
||||||
|
|
||||||
|
log "Install python$PYTHON_ABI-$ABI module '_json' in $PYBIN_INSTALLDIR_MODULES"
|
||||||
|
run cp -p -T $OBJDIR_JSON/lib_json.so $PYBIN_INSTALLDIR_MODULES/_json.so
|
||||||
|
fail_panic "Can't install python$PYTHON_ABI-$ABI module '_json' in $PYBIN_INSTALLDIR_MODULES"
|
||||||
|
|
||||||
|
# _pickle accelerator
|
||||||
|
local BUILDDIR_PICKLE="$BUILDDIR/pickle"
|
||||||
|
local OBJDIR_PICKLE="$BUILDDIR_PICKLE/obj/local/$ABI"
|
||||||
|
|
||||||
|
run mkdir -p "$BUILDDIR_PICKLE/jni"
|
||||||
|
fail_panic "Can't create directory: $BUILDDIR_PICKLE/jni"
|
||||||
|
|
||||||
|
{
|
||||||
|
echo 'LOCAL_PATH := $(call my-dir)'
|
||||||
|
echo 'include $(CLEAR_VARS)'
|
||||||
|
echo 'LOCAL_MODULE := _pickle'
|
||||||
|
echo "MY_PYTHON_SRC_ROOT := $PYTHON_SRCDIR"
|
||||||
|
echo 'LOCAL_C_INCLUDES := $(MY_PYTHON_SRC_ROOT)/Include/internal'
|
||||||
|
echo 'LOCAL_SRC_FILES := \'
|
||||||
|
echo ' $(MY_PYTHON_SRC_ROOT)/Modules/_pickle.c'
|
||||||
|
echo 'LOCAL_STATIC_LIBRARIES := python_shared'
|
||||||
|
echo 'LOCAL_CFLAGS := -DPy_BUILD_CORE_MODULE'
|
||||||
|
echo 'include $(BUILD_SHARED_LIBRARY)'
|
||||||
|
echo "\$(call import-module,python/$PYTHON_ABI)"
|
||||||
|
} >$BUILDDIR_PICKLE/jni/Android.mk
|
||||||
|
fail_panic "Can't generate $BUILDDIR_PICKLE/jni/Android.mk"
|
||||||
|
|
||||||
|
run $NDK_DIR/ndk-build -C $BUILDDIR_PICKLE -j$NUM_JOBS APP_ABI=$ABI V=1
|
||||||
|
fail_panic "Can't build python$PYTHON_ABI-$ABI module '_pickle'"
|
||||||
|
|
||||||
|
log "Install python$PYTHON_ABI-$ABI module '_pickle' in $PYBIN_INSTALLDIR_MODULES"
|
||||||
|
run cp -p -T $OBJDIR_PICKLE/lib_pickle.so $PYBIN_INSTALLDIR_MODULES/_pickle.so
|
||||||
|
fail_panic "Can't install python$PYTHON_ABI-$ABI module '_pickle' in $PYBIN_INSTALLDIR_MODULES"
|
||||||
}
|
}
|
||||||
|
|
||||||
if [ -n "$PACKAGE_DIR" ]; then
|
if [ -n "$PACKAGE_DIR" ]; then
|
||||||
|
|
Loading…
Reference in a new issue