Compare commits
26 commits
master
...
python3.10
Author | SHA1 | Date | |
---|---|---|---|
|
fd57c7dcbc | ||
|
99c60c715e | ||
|
9c7a722cb9 | ||
|
637cab527c | ||
|
3f43579b89 | ||
|
2770f62b1b | ||
|
76db2fa5c2 | ||
|
34571792b8 | ||
|
8e601d789e | ||
|
5db6a512c0 | ||
|
fc797d9b20 | ||
|
b301bcad82 | ||
|
bc251c9fac | ||
|
70128b640f | ||
|
d7999e3b22 | ||
|
6ccca10fe7 | ||
|
f1ee1966cb | ||
|
c7252a1fe6 | ||
|
cc3cdbfda1 | ||
|
3ffdfb6e21 | ||
|
ed31d64e72 | ||
|
678a7739a0 | ||
|
f093b2d521 | ||
|
5576c3f76c | ||
|
6db440a97c | ||
|
7585e64559 |
26 changed files with 188 additions and 219 deletions
117
.github/workflows/deploy.yml
vendored
117
.github/workflows/deploy.yml
vendored
|
@ -1,117 +0,0 @@
|
||||||
name: Publish Assets
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [master]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build_arm64_aar:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
container: lbry/android-base:python39
|
|
||||||
steps:
|
|
||||||
- name: checkout
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
- name: hacky copy # docker image runs ~ as /root, but github actions uses ~=/github/home
|
|
||||||
run: |
|
|
||||||
cp -r /root/.buildozer ~/.buildozer/
|
|
||||||
- name: setup
|
|
||||||
run: |
|
|
||||||
export B_VERSION=$(cat $GITHUB_WORKSPACE/src/main/python/main.py | grep --color=never -oP '([0-9]+\.?)+')
|
|
||||||
echo "NEXUS_SIGNING_KEYRING_FILE=$GITHUB_WORKSPACE/signing2.pgp" >> $GITHUB_ENV
|
|
||||||
echo "BUILD_VERSION=${B_VERSION}" >> $GITHUB_ENV
|
|
||||||
export PATH=/usr/bin:$PATH
|
|
||||||
wget -q 'https://eu.crystax.net/download/crystax-ndk-10.3.2-linux-x86_64.tar.xz' -P ~/.buildozer/android/
|
|
||||||
tar -xf ~/.buildozer/android/crystax-ndk-10.3.2-linux-x86_64.tar.xz -C ~/.buildozer/android/
|
|
||||||
rm -rf ~/.buildozer/android/crystax-ndk-10.3.2/platforms/android-9
|
|
||||||
ln -s ~/.buildozer/android/crystax-ndk-10.3.2/platforms/android-21 ~/.buildozer/android/crystax-ndk-10.3.2/platforms/android-9
|
|
||||||
cp -f $GITHUB_WORKSPACE/scripts/build-target-python.sh ~/.buildozer/android/crystax-ndk-10.3.2/build/tools/build-target-python.sh
|
|
||||||
cp -f $GITHUB_WORKSPACE/scripts/mangled-glibc-syscalls__arm64.h ~/.buildozer/android/crystax-ndk-10.3.2/platforms/android-21/arch-arm64/usr/include/crystax/bionic/libc/include/sys/mangled-glibc-syscalls.h
|
|
||||||
cp -f $GITHUB_WORKSPACE/scripts/build-binary.mk ~/.buildozer/android/crystax-ndk-10.3.2/build/core/build-binary.mk
|
|
||||||
rm -rf ~/.buildozer/android/crystax-ndk-10.3.2/sources/sqlite
|
|
||||||
cp -Rf $GITHUB_WORKSPACE/scripts/crystax-sources/sqlite ~/.buildozer/android/crystax-ndk-10.3.2/sources/sqlite
|
|
||||||
rm ~/.buildozer/android/crystax-ndk-10.3.2-linux-x86_64.tar.xz
|
|
||||||
mv buildozer.spec.arm64.ci buildozer.spec
|
|
||||||
chmod u+x ./build-release.sh
|
|
||||||
- name: build release
|
|
||||||
env:
|
|
||||||
SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }}
|
|
||||||
SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }}
|
|
||||||
SONATYPE_STAGING_PROFILE_ID: ${{ secrets.SONATYPE_STAGING_PROFILE_ID }}
|
|
||||||
NEXUS_SIGNING_KEY_PASSWORD: ${{ secrets.NEXUS_SIGNING_KEY_PASSWORD }}
|
|
||||||
NEXUS_SIGNING_KEY_ID: ${{ secrets.NEXUS_SIGNING_KEY_ID }}
|
|
||||||
run: ./build-release.sh
|
|
||||||
# - name: debug bin
|
|
||||||
# run : ls -al ./bin
|
|
||||||
# - name: upload to build_lbry_io
|
|
||||||
# run : |
|
|
||||||
# pip install awscli
|
|
||||||
# export PR_NUMBER=${{ github.event.number }}
|
|
||||||
|
|
||||||
# export BUILD_APK_FILENAME__64=lbrysdk-${{ env.BUILD_VERSION }}-arm64-v8a-release.aar
|
|
||||||
# aws s3 cp ./bin/${BUILD_APK_FILENAME__64} s3://build.lbry.io/android/sdk-build-${PR_NUMBER}_commit-${{ github.sha }}/${BUILD_APK_FILENAME__64}
|
|
||||||
# env:
|
|
||||||
# AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
|
||||||
# AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
|
||||||
# AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
|
|
||||||
# - name: github release
|
|
||||||
# if: startsWith(github.ref, 'refs/tags/v')
|
|
||||||
# run: |
|
|
||||||
# pip install githubrelease
|
|
||||||
# export GITHUB_TOKEN=${{ github.token }}
|
|
||||||
# githubrelease release lbryio/lbry-android-sdk create ${{ github.ref_name }} --publish bin/${BUILD_APK_FILENAME__64}
|
|
||||||
|
|
||||||
build_arm_aar:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
container: lbry/android-base:python39
|
|
||||||
needs: [build_arm64_aar]
|
|
||||||
steps:
|
|
||||||
- name: checkout
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
- name: hacky copy # docker image runs ~ as /root, but github actions uses ~=/github/home
|
|
||||||
run: |
|
|
||||||
cp -r /root/.buildozer ~/.buildozer/
|
|
||||||
- name: setup
|
|
||||||
run: |
|
|
||||||
export B_VERSION=$(cat $GITHUB_WORKSPACE/src/main/python/main.py | grep --color=never -oP '([0-9]+\.?)+')
|
|
||||||
echo "BUILD_VERSION=${B_VERSION}" >> $GITHUB_ENV
|
|
||||||
echo "NEXUS_SIGNING_KEYRING_FILE=$GITHUB_WORKSPACE/signing2.pgp" >> $GITHUB_ENV
|
|
||||||
export PATH=/usr/bin:$PATH
|
|
||||||
wget -q 'https://eu.crystax.net/download/crystax-ndk-10.3.2-linux-x86_64.tar.xz' -P ~/.buildozer/android/
|
|
||||||
tar -xf ~/.buildozer/android/crystax-ndk-10.3.2-linux-x86_64.tar.xz -C ~/.buildozer/android/
|
|
||||||
rm -rf ~/.buildozer/android/crystax-ndk-10.3.2/platforms/android-9
|
|
||||||
ln -s ~/.buildozer/android/crystax-ndk-10.3.2/platforms/android-21 ~/.buildozer/android/crystax-ndk-10.3.2/platforms/android-9
|
|
||||||
cp -f $GITHUB_WORKSPACE/p4a/pythonforandroid/bootstraps/lbry/build/templates/build.tmpl.gradle.arm $GITHUB_WORKSPACE/p4a/pythonforandroid/bootstraps/lbry/build/templates/build.tmpl.gradle
|
|
||||||
cp -f $GITHUB_WORKSPACE/scripts/build-target-python.sh ~/.buildozer/android/crystax-ndk-10.3.2/build/tools/build-target-python.sh
|
|
||||||
cp -f $GITHUB_WORKSPACE/scripts/mangled-glibc-syscalls.h ~/.buildozer/android/crystax-ndk-10.3.2/platforms/android-21/arch-arm/usr/include/crystax/bionic/libc/include/sys/mangled-glibc-syscalls.h
|
|
||||||
cp -f $GITHUB_WORKSPACE/scripts/build-binary.mk ~/.buildozer/android/crystax-ndk-10.3.2/build/core/build-binary.mk
|
|
||||||
rm -rf ~/.buildozer/android/crystax-ndk-10.3.2/sources/sqlite
|
|
||||||
cp -Rf $GITHUB_WORKSPACE/scripts/crystax-sources/sqlite ~/.buildozer/android/crystax-ndk-10.3.2/sources/sqlite
|
|
||||||
rm ~/.buildozer/android/crystax-ndk-10.3.2-linux-x86_64.tar.xz
|
|
||||||
mv buildozer.spec.arm64.ci buildozer.spec
|
|
||||||
chmod u+x ./build-release.sh
|
|
||||||
- name: build release
|
|
||||||
env:
|
|
||||||
SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }}
|
|
||||||
SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }}
|
|
||||||
SONATYPE_STAGING_PROFILE_ID: ${{ secrets.SONATYPE_STAGING_PROFILE_ID }}
|
|
||||||
NEXUS_SIGNING_KEY_PASSWORD: ${{ secrets.NEXUS_SIGNING_KEY_PASSWORD }}
|
|
||||||
NEXUS_SIGNING_KEY_ID: ${{ secrets.NEXUS_SIGNING_KEY_ID }}
|
|
||||||
run: ./build-release.sh
|
|
||||||
# - name: upload to build_lbry_io
|
|
||||||
# run : |
|
|
||||||
# pip install awscli
|
|
||||||
# export PR_NUMBER=${{ github.event.number }}
|
|
||||||
# export BUILD_APK_FILENAME__32=lbrysdk-${{ env.BUILD_VERSION }}-armeabi-v7a-release.aar
|
|
||||||
# aws s3 cp bin/${BUILD_APK_FILENAME__32} s3://build.lbry.io/android/sdk-build-{$PR_NUMBER}_commit-${{ github.sha }}/${BUILD_APK_FILENAME__32}
|
|
||||||
# env:
|
|
||||||
# AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
|
||||||
# AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
|
||||||
# AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
|
|
||||||
# - name: github upload binary
|
|
||||||
# if: startsWith(github.ref, 'refs/tags/v')
|
|
||||||
# uses: skx/github-action-publish-binaries@release-1.3
|
|
||||||
# env:
|
|
||||||
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
# BUILD_VERSION: ${{ env.BUILD_VERSION }}
|
|
||||||
# with:
|
|
||||||
# args: bin/${BUILD_APK_FILENAME__32}
|
|
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -11,7 +11,6 @@ src/main/assets/index.android.bundle
|
||||||
src/main/assets/index.android.bundle.meta
|
src/main/assets/index.android.bundle.meta
|
||||||
*.log
|
*.log
|
||||||
.vagrant
|
.vagrant
|
||||||
.vscode
|
|
||||||
|
|
||||||
lbry-android.keystore
|
lbry-android.keystore
|
||||||
p4a/pythonforandroid/bootstraps/lbry/build/templates/google-services.json
|
p4a/pythonforandroid/bootstraps/lbry/build/templates/google-services.json
|
||||||
|
|
|
@ -6,7 +6,7 @@ stages:
|
||||||
|
|
||||||
build arm64 aar:
|
build arm64 aar:
|
||||||
stage: build
|
stage: build
|
||||||
image: lbry/android-base:python39
|
image: lbry/android-base:python3.10
|
||||||
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:
|
||||||
|
@ -33,7 +33,7 @@ build arm64 aar:
|
||||||
|
|
||||||
build arm aar:
|
build arm aar:
|
||||||
stage: build2
|
stage: build2
|
||||||
image: lbry/android-base:python39
|
image: lbry/android-base:python3.10
|
||||||
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:
|
||||||
|
|
14
BUILD.md
14
BUILD.md
|
@ -135,17 +135,3 @@ If you already installed `Android SDK` and `adb`
|
||||||
Note: You need to have your device connected with USB debugging.
|
Note: You need to have your device connected with USB debugging.
|
||||||
|
|
||||||
Once the bundler is ready, run the LBRY Browser app on your device and then shake the device violently until you see the React Native dev menu. You can enable "Live Reloading" and "Hot Reloading" from this menu, so any changes you make to the React Native code will be visible as you save. This will only reload React Native Javascript files. Native Java code needs to be redeployed by running the command `./deploy.sh`
|
Once the bundler is ready, run the LBRY Browser app on your device and then shake the device violently until you see the React Native dev menu. You can enable "Live Reloading" and "Hot Reloading" from this menu, so any changes you make to the React Native code will be visible as you save. This will only reload React Native Javascript files. Native Java code needs to be redeployed by running the command `./deploy.sh`
|
||||||
|
|
||||||
## Update LBRY SDK Version
|
|
||||||
|
|
||||||
### Update the `requirements` section following files
|
|
||||||
* buildozer.spec.arm.ci
|
|
||||||
* buildozer.spec.arm64.ci
|
|
||||||
* buildozer.spec.sample
|
|
||||||
* buildozer.spec.vagrant
|
|
||||||
|
|
||||||
### Update LBRY_SDK_VERSION in `src/main/java/io/lbry/lbrysdk/LbrynetService.java`
|
|
||||||
|
|
||||||
### Update the version in `src/main/python/main.py`
|
|
||||||
|
|
||||||
## Github Actions CI
|
|
|
@ -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==21.0.0, defusedxml, netifaces, aioupnp==0.0.17, asn1crypto, mock, 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.112.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.11.0, keyring==21.0.0, defusedxml, netifaces, aioupnp==0.0.17, asn1crypto, mock, 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==21.0.0, defusedxml, netifaces, aioupnp==0.0.17, asn1crypto, mock, 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.112.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.11.0, keyring==21.0.0, defusedxml, netifaces, aioupnp==0.0.17, asn1crypto, mock, 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==21.0.0, defusedxml, netifaces, aioupnp==0.0.17, asn1crypto, mock, 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.112.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.11.0, keyring==21.0.0, defusedxml, netifaces, aioupnp==0.0.17, asn1crypto, mock, 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, netifaces, 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"
|
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.11.0, keyring==10.4.0, defusedxml, netifaces, git+https://github.com/lbryio/aioupnp.git@ab7ef0048bbce6404e463d20e8a15046ea6941f0#egg=aioupnp, asn1crypto, mock, 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
|
||||||
|
@ -275,4 +275,4 @@ warn_on_root = 1
|
||||||
# Then, invoke the command line with the "demo" profile:
|
# Then, invoke the command line with the "demo" profile:
|
||||||
#
|
#
|
||||||
#buildozer --profile demo android debug
|
#buildozer --profile demo android debug
|
||||||
requirements = python3crystax, openssl, sqlite3, hostpython3crystax, android, distro==1.4.0, pyjnius, certifi==2020.12.5, 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==21.0.0, defusedxml, aioupnp==0.0.17, asn1crypto, mock, 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.112.0#egg=lbry"
|
requirements = python3crystax, openssl, sqlite3, hostpython3crystax, android, distro==1.4.0, pyjnius, certifi==2020.12.5, 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==21.0.0, defusedxml, aioupnp==0.0.17, asn1crypto, mock, 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"
|
47
docker/Dockerfile.python3.10.platform-28
Normal file
47
docker/Dockerfile.python3.10.platform-28
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
FROM ubuntu:20.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.10 python3.10-dev python3.10-venv ccache git \
|
||||||
|
libncurses5:i386 libstdc++6:i386 libgtk2.0-0:i386 libpangox-1.0-0:i386 libpangoxft-1.0-0:i386 \
|
||||||
|
libidn11:i386 openjdk-8-jdk unzip zlib1g-dev zlib1g:i386 m4 libc6-dev-i386 gawk
|
||||||
|
|
||||||
|
RUN rm /usr/bin/python3 && ln -s /usr/bin/python3.10 /usr/bin/python3
|
||||||
|
RUN rm -f /usr/bin/python && ln -s /usr/bin/python3.10 /usr/bin/python
|
||||||
|
RUN wget https://bootstrap.pypa.io/pip/get-pip.py && python3 get-pip.py
|
||||||
|
RUN pip install --upgrade cython==0.29.24 setuptools zipp importlib-resources importlib-metadata virtualenv appdirs sh colorama\>=0.3.3 jinja2 six pep517\<0.7.0 toml
|
||||||
|
|
||||||
|
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/ && \
|
||||||
|
wget 'https://dl.google.com/android/repository/commandlinetools-linux-7583922_latest.zip' -P ~/.buildozer/android/platform
|
||||||
|
|
||||||
|
RUN 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 && \
|
||||||
|
unzip ~/.buildozer/android/platform/platform-28_r06.zip -d ~/.buildozer/android/platform/android-sdk/platforms && \
|
||||||
|
mv ~/.buildozer/android/platform/android-sdk/platforms/android-9 ~/.buildozer/android/platform/android-sdk/platforms/android-28 && \
|
||||||
|
mkdir -p ~/.buildozer/android/platform/android-sdk/build-tools && \
|
||||||
|
unzip ~/.buildozer/android/platform/build-tools_r28.0.3-linux.zip -d ~/.buildozer/android/platform/android-sdk/build-tools && \
|
||||||
|
mv ~/.buildozer/android/platform/android-sdk/build-tools/android-9 ~/.buildozer/android/platform/android-sdk/build-tools/28.0.3 && \
|
||||||
|
mkdir -p ~/.buildozer/android/platform/android-sdk/cmdline-tools && \
|
||||||
|
unzip ~/.buildozer/android/platform/commandlinetools-linux-7583922_latest.zip -d ~/.buildozer/android/platform/android-sdk/cmdline-tools && \
|
||||||
|
mv ~/.buildozer/android/platform/android-sdk/cmdline-tools/cmdline-tools ~/.buildozer/android/platform/android-sdk/cmdline-tools/5.0 && \
|
||||||
|
cp -Rf ~/.buildozer/android/platform/android-sdk/cmdline-tools/5.0/* ~/.buildozer/android/platform/android-sdk/tools
|
||||||
|
|
||||||
|
RUN 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 && \
|
||||||
|
rm ~/.buildozer/android/platform/commandlinetools-linux-7583922_latest.zip
|
||||||
|
|
||||||
|
RUN mkdir -p ~/.buildozer/android/platform/android-sdk/licenses && \
|
||||||
|
echo $'\n8933bad161af4178b1185d1a37fbf41ea5269c55\nd56f5187479451eabf01fb78af6dfcb131a6481e\n24333f8a63b6825ea9c5514f83c2829b004d1fee' > ~/.buildozer/android/platform/android-sdk/licenses/android-sdk-license
|
||||||
|
|
||||||
|
RUN git clone https://github.com/lbryio/buildozer.git
|
||||||
|
RUN cd buildozer && python setup.py install && cd ..
|
||||||
|
|
||||||
|
CMD ["/bin/bash"]
|
|
@ -83,7 +83,7 @@ class Arch(object):
|
||||||
env['CFLAGS'] += ' -isysroot {} '.format(sysroot)
|
env['CFLAGS'] += ' -isysroot {} '.format(sysroot)
|
||||||
env['CFLAGS'] += '-I' + join(self.ctx.get_python_install_dir(),
|
env['CFLAGS'] += '-I' + join(self.ctx.get_python_install_dir(),
|
||||||
'include/python{}'.format(
|
'include/python{}'.format(
|
||||||
self.ctx.python_recipe.version[0:3])
|
self.ctx.python_recipe.version)
|
||||||
)
|
)
|
||||||
|
|
||||||
env['LDFLAGS'] += '--sysroot={} '.format(self.ctx.ndk_platform)
|
env['LDFLAGS'] += '--sysroot={} '.format(self.ctx.ndk_platform)
|
||||||
|
@ -157,7 +157,7 @@ class Arch(object):
|
||||||
if self.ctx.python_recipe and self.ctx.python_recipe.from_crystax:
|
if self.ctx.python_recipe and self.ctx.python_recipe.from_crystax:
|
||||||
# For crystax python, we can't use the host python headers:
|
# For crystax python, we can't use the host python headers:
|
||||||
env["CFLAGS"] += ' -I{}/sources/python/{}/include/python/'.\
|
env["CFLAGS"] += ' -I{}/sources/python/{}/include/python/'.\
|
||||||
format(self.ctx.ndk_dir, self.ctx.python_recipe.version[0:3])
|
format(self.ctx.ndk_dir, self.ctx.python_recipe.version)
|
||||||
env['STRIP'] = '{}-strip --strip-unneeded'.format(command_prefix)
|
env['STRIP'] = '{}-strip --strip-unneeded'.format(command_prefix)
|
||||||
env['MAKE'] = 'make -j5'
|
env['MAKE'] = 'make -j5'
|
||||||
env['READELF'] = '{}-readelf'.format(command_prefix)
|
env['READELF'] = '{}-readelf'.format(command_prefix)
|
||||||
|
|
|
@ -33,6 +33,7 @@ public class PythonUtil {
|
||||||
libsList.add("python3.7m");
|
libsList.add("python3.7m");
|
||||||
libsList.add("python3.8");
|
libsList.add("python3.8");
|
||||||
libsList.add("python3.9");
|
libsList.add("python3.9");
|
||||||
|
libsList.add("python3.10");
|
||||||
libsList.add("main");
|
libsList.add("main");
|
||||||
return libsList;
|
return libsList;
|
||||||
}
|
}
|
||||||
|
@ -52,7 +53,7 @@ public class PythonUtil {
|
||||||
// load, and it has failed, give a more
|
// load, and it has failed, give a more
|
||||||
// general error
|
// general error
|
||||||
Log.v(TAG, "Library loading error: " + e.getMessage());
|
Log.v(TAG, "Library loading error: " + e.getMessage());
|
||||||
if (lib.startsWith("python3.9") && !foundPython) {
|
if (lib.startsWith("python3.10") && !foundPython) {
|
||||||
throw new RuntimeException("Could not load any libpythonXXX.so");
|
throw new RuntimeException("Could not load any libpythonXXX.so");
|
||||||
} else if (lib.startsWith("python")) {
|
} else if (lib.startsWith("python")) {
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -749,8 +749,9 @@ class PythonRecipe(Recipe):
|
||||||
host_build = Recipe.get_recipe(host_name, self.ctx).get_build_dir()
|
host_build = Recipe.get_recipe(host_name, self.ctx).get_build_dir()
|
||||||
if host_name in ['hostpython2', 'hostpython3']:
|
if host_name in ['hostpython2', 'hostpython3']:
|
||||||
return join(host_build, 'native-build', 'python')
|
return join(host_build, 'native-build', 'python')
|
||||||
elif host_name in ['hostpython3crystax', 'hostpython2legacy']:
|
elif host_name in ['hostpython3crystax']:
|
||||||
return join(host_build, 'hostpython')
|
python_recipe = Recipe.get_recipe(host_name, self.ctx)
|
||||||
|
return python_recipe.python_exe
|
||||||
else:
|
else:
|
||||||
python_recipe = self.ctx.python_recipe
|
python_recipe = self.ctx.python_recipe
|
||||||
return 'python{}'.format(python_recipe.version)
|
return 'python{}'.format(python_recipe.version)
|
||||||
|
|
|
@ -45,7 +45,7 @@ class CffiRecipe(CompiledComponentsPythonRecipe):
|
||||||
])
|
])
|
||||||
if self.ctx.ndk == 'crystax':
|
if self.ctx.ndk == 'crystax':
|
||||||
# only keeps major.minor (discards patch)
|
# only keeps major.minor (discards patch)
|
||||||
python_version = self.ctx.python_recipe.version[0:3]
|
python_version = self.ctx.python_recipe.version
|
||||||
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{}'.format(python_version)
|
env['LDFLAGS'] += ' -lpython{}'.format(python_version)
|
||||||
|
|
|
@ -21,7 +21,7 @@ class CoincurveRecipe(CompiledComponentsPythonRecipe):
|
||||||
env['LDFLAGS'] += ' -L{}'.format(os.path.join(libsecp256k1_dir, '.libs'))
|
env['LDFLAGS'] += ' -L{}'.format(os.path.join(libsecp256k1_dir, '.libs'))
|
||||||
env['CFLAGS'] += ' -I' + os.path.join(libsecp256k1_dir, 'include')
|
env['CFLAGS'] += ' -I' + os.path.join(libsecp256k1_dir, 'include')
|
||||||
# only keeps major.minor (discards patch)
|
# only keeps major.minor (discards patch)
|
||||||
python_version = self.ctx.python_recipe.version[0:3]
|
python_version = self.ctx.python_recipe.version
|
||||||
# required additional library and path for Crystax
|
# required additional library and path for Crystax
|
||||||
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)
|
||||||
|
|
|
@ -23,7 +23,7 @@ class CryptographyRecipe(CompiledComponentsPythonRecipe):
|
||||||
|
|
||||||
if self.ctx.ndk == 'crystax':
|
if self.ctx.ndk == 'crystax':
|
||||||
# only keeps major.minor (discards patch)
|
# only keeps major.minor (discards patch)
|
||||||
python_version = self.ctx.python_recipe.version[0:3]
|
python_version = self.ctx.python_recipe.version
|
||||||
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{}'.format(python_version)
|
env['LDFLAGS'] += ' -lpython{}'.format(python_version)
|
||||||
|
|
|
@ -42,5 +42,9 @@ class Hostpython3Recipe(Recipe):
|
||||||
link_dest = join(self.get_build_dir(), 'hostpython')
|
link_dest = join(self.get_build_dir(), 'hostpython')
|
||||||
shprint(sh.ln, '-sf', system_python, link_dest)
|
shprint(sh.ln, '-sf', system_python, link_dest)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def python_exe(self):
|
||||||
|
return join(self.get_build_dir(), 'hostpython')
|
||||||
|
|
||||||
|
|
||||||
recipe = Hostpython3Recipe()
|
recipe = Hostpython3Recipe()
|
||||||
|
|
|
@ -34,7 +34,8 @@ 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'
|
'3.9': '3.9.6',
|
||||||
|
'3.10': '3.10.0'
|
||||||
}
|
}
|
||||||
|
|
||||||
def realpath(fname):
|
def realpath(fname):
|
||||||
|
@ -62,7 +63,7 @@ def realpath(fname):
|
||||||
return os.sep.join(abs_path)
|
return os.sep.join(abs_path)
|
||||||
|
|
||||||
class Python3Recipe(TargetPythonRecipe):
|
class Python3Recipe(TargetPythonRecipe):
|
||||||
version = '3.9'
|
version = '3.10'
|
||||||
url = ''
|
url = ''
|
||||||
name = 'python3crystax'
|
name = 'python3crystax'
|
||||||
|
|
||||||
|
@ -72,9 +73,12 @@ 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 in ('3.6', '3.7', '3.9'):
|
if 'openssl' in self.ctx.recipe_build_order or self.version in ('3.6', '3.7', '3.9', '3.10'):
|
||||||
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('.'))
|
version_suffix = 'rc1'
|
||||||
|
version_params = full_version.split('.')
|
||||||
|
version_params.append(version_suffix)
|
||||||
|
Python3Recipe.url = 'https://www.python.org/ftp/python/{0}.{1}.{2}/Python-{0}.{1}.{2}{3}.tgz'.format(*version_params)
|
||||||
super(Python3Recipe, self).download_if_necessary()
|
super(Python3Recipe, self).download_if_necessary()
|
||||||
|
|
||||||
def get_dir_name(self):
|
def get_dir_name(self):
|
||||||
|
@ -203,34 +207,43 @@ 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 in ('3.6', '3.7', '3.9'):
|
if self.version in ('3.6', '3.7', '3.9', '3.10'):
|
||||||
Python3Recipe.patches = [
|
patches = ['remove_android_api_check{}'.format('_3.10' if self.version == '3.10' else '')]
|
||||||
'patch/patch_python3.6.patch',
|
if self.version in ('3.6', '3.7'):
|
||||||
'patch/remove_android_api_check.patch',
|
patches += [
|
||||||
'patch/selectors.patch'
|
'patch_python3.6',
|
||||||
|
'selectors'
|
||||||
]
|
]
|
||||||
|
|
||||||
if self.version in ('3.9'):
|
if self.version in ('3.9', '3.10'):
|
||||||
Python3Recipe.patches = [
|
if self.version == '3.9':
|
||||||
'patch/remove_android_api_check.patch',
|
patches += ['strdup']
|
||||||
'patch/patch_python3.9.patch',
|
|
||||||
'patch/platlibdir.patch',
|
if self.version == '3.10':
|
||||||
'patch/strdup.patch',
|
patches += ['py3.10.0_posixmodule']
|
||||||
|
|
||||||
|
patches += [
|
||||||
|
'patch_python3.9',
|
||||||
|
'platlibdir',
|
||||||
|
|
||||||
# from https://github.com/kivy/python-for-android/blob/develop/pythonforandroid/recipes/python3/__init__.py#L63
|
# from https://github.com/kivy/python-for-android/blob/develop/pythonforandroid/recipes/python3/__init__.py#L63
|
||||||
'patch/pyconfig_detection.patch',
|
'pyconfig_detection',
|
||||||
'patch/reproducible-buildinfo.diff',
|
'reproducible-buildinfo',
|
||||||
'patch/py3.8.1.patch'
|
'py3.8.1'
|
||||||
]
|
]
|
||||||
|
|
||||||
if sh.which('lld') is not None:
|
if sh.which('lld') is not None:
|
||||||
Python3Recipe.patches += ['patch/py3.8.1_fix_cortex_a8.patch']
|
patches += ['py3.8.1_fix_cortex_a8']
|
||||||
|
|
||||||
|
|
||||||
|
Python3Recipe.patches = []
|
||||||
|
for patch_name in patches:
|
||||||
|
Python3Recipe.patches.append('patch/{}.patch'.format(patch_name))
|
||||||
|
|
||||||
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
|
||||||
sh.cp("-r", join(self.get_recipe_dir(), 'libffi'), join(build_dir, 'Modules', '_ctypes'))
|
sh.cp("-r", join(self.get_recipe_dir(), 'libffi'), join(build_dir, 'Modules', '_ctypes'))
|
||||||
print #####Copied bundle####'
|
|
||||||
|
|
||||||
shprint(sh.ln, '-sf',
|
shprint(sh.ln, '-sf',
|
||||||
realpath(join(build_dir, 'Lib/site-packages/README.txt')),
|
realpath(join(build_dir, 'Lib/site-packages/README.txt')),
|
||||||
|
|
|
@ -25,7 +25,6 @@ LOCAL_SRC_FILES := config.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Python/getopt.c \
|
$(MY_PYTHON_SRC_ROOT)/Python/getopt.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Python/getplatform.c \
|
$(MY_PYTHON_SRC_ROOT)/Python/getplatform.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/hamt.c \
|
$(MY_PYTHON_SRC_ROOT)/Python/hamt.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Python/hashtable.c \
|
$(MY_PYTHON_SRC_ROOT)/Python/hashtable.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Python/import.c \
|
$(MY_PYTHON_SRC_ROOT)/Python/import.c \
|
||||||
|
@ -36,7 +35,6 @@ LOCAL_SRC_FILES := config.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/preconfig.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 \
|
||||||
|
@ -51,27 +49,21 @@ LOCAL_SRC_FILES := config.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Python/Python-ast.c \
|
$(MY_PYTHON_SRC_ROOT)/Python/Python-ast.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Python/pythonrun.c \
|
$(MY_PYTHON_SRC_ROOT)/Python/pythonrun.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Python/pytime.c \
|
$(MY_PYTHON_SRC_ROOT)/Python/pytime.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Python/strdup.c \
|
|
||||||
$(MY_PYTHON_SRC_ROOT)/Python/structmember.c \
|
$(MY_PYTHON_SRC_ROOT)/Python/structmember.c \
|
||||||
|
$(MY_PYTHON_SRC_ROOT)/Python/suggestions.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Python/symtable.c \
|
$(MY_PYTHON_SRC_ROOT)/Python/symtable.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Python/sysmodule.c \
|
$(MY_PYTHON_SRC_ROOT)/Python/sysmodule.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Python/thread.c \
|
$(MY_PYTHON_SRC_ROOT)/Python/thread.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Python/traceback.c \
|
$(MY_PYTHON_SRC_ROOT)/Python/traceback.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/grammar1.c \
|
|
||||||
$(MY_PYTHON_SRC_ROOT)/Parser/listnode.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/parser.c \
|
$(MY_PYTHON_SRC_ROOT)/Parser/parser.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Parser/parsetok.c \
|
$(MY_PYTHON_SRC_ROOT)/Parser/peg_api.c \
|
||||||
|
$(MY_PYTHON_SRC_ROOT)/Parser/pegen.c \
|
||||||
|
$(MY_PYTHON_SRC_ROOT)/Parser/string_parser.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Parser/token.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 \
|
||||||
|
@ -115,6 +107,7 @@ LOCAL_SRC_FILES := config.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Objects/typeobject.c \
|
$(MY_PYTHON_SRC_ROOT)/Objects/typeobject.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Objects/unicodectype.c \
|
$(MY_PYTHON_SRC_ROOT)/Objects/unicodectype.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Objects/unicodeobject.c \
|
$(MY_PYTHON_SRC_ROOT)/Objects/unicodeobject.c \
|
||||||
|
$(MY_PYTHON_SRC_ROOT)/Objects/unionobject.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Objects/weakrefobject.c \
|
$(MY_PYTHON_SRC_ROOT)/Objects/weakrefobject.c \
|
||||||
\
|
\
|
||||||
$(MY_PYTHON_SRC_ROOT)/Modules/_abc.c \
|
$(MY_PYTHON_SRC_ROOT)/Modules/_abc.c \
|
||||||
|
@ -150,8 +143,6 @@ LOCAL_SRC_FILES := config.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Modules/_opcode.c \
|
$(MY_PYTHON_SRC_ROOT)/Modules/_opcode.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/_peg_parser.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 \
|
||||||
|
@ -180,6 +171,7 @@ LOCAL_SRC_FILES := config.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Modules/unicodedata.c \
|
$(MY_PYTHON_SRC_ROOT)/Modules/unicodedata.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Modules/_weakref.c \
|
$(MY_PYTHON_SRC_ROOT)/Modules/_weakref.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Modules/xxlimited.c \
|
$(MY_PYTHON_SRC_ROOT)/Modules/xxlimited.c \
|
||||||
|
$(MY_PYTHON_SRC_ROOT)/Modules/xxlimited_35.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Modules/xxmodule.c \
|
$(MY_PYTHON_SRC_ROOT)/Modules/xxmodule.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Modules/_xxsubinterpretersmodule.c \
|
$(MY_PYTHON_SRC_ROOT)/Modules/_xxsubinterpretersmodule.c \
|
||||||
$(MY_PYTHON_SRC_ROOT)/Modules/xxsubtype.c \
|
$(MY_PYTHON_SRC_ROOT)/Modules/xxsubtype.c \
|
|
@ -36,7 +36,6 @@ extern PyObject* PyInit__symtable(void);
|
||||||
extern PyObject* PyInit_mmap(void);
|
extern PyObject* PyInit_mmap(void);
|
||||||
extern PyObject* PyInit__csv(void);
|
extern PyObject* PyInit__csv(void);
|
||||||
extern PyObject* PyInit__sre(void);
|
extern PyObject* PyInit__sre(void);
|
||||||
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);
|
||||||
|
@ -97,7 +96,6 @@ struct _inittab _PyImport_Inittab[] = {
|
||||||
{"mmap", PyInit_mmap},
|
{"mmap", PyInit_mmap},
|
||||||
{"_csv", PyInit__csv},
|
{"_csv", PyInit__csv},
|
||||||
{"_sre", PyInit__sre},
|
{"_sre", PyInit__sre},
|
||||||
{"parser", PyInit_parser},
|
|
||||||
{"_struct", PyInit__struct},
|
{"_struct", PyInit__struct},
|
||||||
{"_datetime", PyInit__datetime},
|
{"_datetime", PyInit__datetime},
|
||||||
{"_functools", PyInit__functools},
|
{"_functools", PyInit__functools},
|
|
@ -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.9.so"
|
#define PYTHON3_DLL_REL_PATH "libpython3.10.so"
|
||||||
|
|
||||||
#define SYS_PATH_BUFFER_SIZE (2*(PATH_MAX + 1))
|
#define SYS_PATH_BUFFER_SIZE (2*(PATH_MAX + 1))
|
||||||
|
|
12
recipes/python3crystax/patch/py3.10.0_posixmodule.patch
Normal file
12
recipes/python3crystax/patch/py3.10.0_posixmodule.patch
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
--- a/Modules/posixmodule.c 2021-08-02 20:53:59.000000000 +0100
|
||||||
|
+++ b/Modules/posixmodule.c 2021-08-21 12:06:16.897465398 +0100
|
||||||
|
@@ -15384,6 +15384,9 @@
|
||||||
|
#ifdef HAVE_EVENTFD
|
||||||
|
if (PyModule_AddIntMacro(m, EFD_CLOEXEC)) return -1;
|
||||||
|
if (PyModule_AddIntMacro(m, EFD_NONBLOCK)) return -1;
|
||||||
|
+# ifndef EFD_SEMAPHORE
|
||||||
|
+# define EFD_SEMAPHORE (1 << 0)
|
||||||
|
+# endif
|
||||||
|
if (PyModule_AddIntMacro(m, EFD_SEMAPHORE)) return -1;
|
||||||
|
#endif
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
--- a/configure 2021-08-02 20:53:59.000000000 +0100
|
||||||
|
+++ b/configure 2021-08-21 11:13:50.508648380 +0100
|
||||||
|
@@ -6241,33 +6241,6 @@
|
||||||
|
#endif
|
||||||
|
EOF
|
||||||
|
|
||||||
|
-if $CPP $CPPFLAGS conftest.c >conftest.out 2>/dev/null; then
|
||||||
|
- ANDROID_API_LEVEL=`sed -n -e '/__ANDROID_API__/d' -e 's/^android_api = //p' conftest.out`
|
||||||
|
- _arm_arch=`sed -n -e '/__ARM_ARCH/d' -e 's/^arm_arch = //p' conftest.out`
|
||||||
|
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ANDROID_API_LEVEL" >&5
|
||||||
|
-printf "%s\n" "$ANDROID_API_LEVEL" >&6; }
|
||||||
|
- if test -z "$ANDROID_API_LEVEL"; then
|
||||||
|
- echo 'Fatal: you must define __ANDROID_API__'
|
||||||
|
- exit 1
|
||||||
|
- fi
|
||||||
|
-
|
||||||
|
-printf "%s\n" "#define ANDROID_API_LEVEL $ANDROID_API_LEVEL" >>confdefs.h
|
||||||
|
-
|
||||||
|
-
|
||||||
|
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the Android arm ABI" >&5
|
||||||
|
-printf %s "checking for the Android arm ABI... " >&6; }
|
||||||
|
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $_arm_arch" >&5
|
||||||
|
-printf "%s\n" "$_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"
|
||||||
|
- fi
|
||||||
|
-else
|
||||||
|
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not Android" >&5
|
||||||
|
-printf "%s\n" "not Android" >&6; }
|
||||||
|
-fi
|
||||||
|
-rm -f conftest.c conftest.out
|
||||||
|
-
|
||||||
|
# Check for unsupported systems
|
||||||
|
case $ac_sys_system/$ac_sys_release in
|
||||||
|
atheos*|Linux*/1*)
|
BIN
signing2.pgp
BIN
signing2.pgp
Binary file not shown.
|
@ -56,7 +56,7 @@ import org.renpy.android.ResourceManager;
|
||||||
*/
|
*/
|
||||||
public final class LbrynetService extends PythonService {
|
public final class LbrynetService extends PythonService {
|
||||||
|
|
||||||
public static final String LBRY_SDK_VERSION = "0.112.0";
|
public static final String LBRY_SDK_VERSION = "0.102.0";
|
||||||
|
|
||||||
public static final int SERVICE_NOTIFICATION_GROUP_ID = 5;
|
public static final int SERVICE_NOTIFICATION_GROUP_ID = 5;
|
||||||
public static final String ACTION_STOP_SERVICE = "io.lbry.browser.ACTION_STOP_SERVICE";
|
public static final String ACTION_STOP_SERVICE = "io.lbry.browser.ACTION_STOP_SERVICE";
|
||||||
|
@ -143,7 +143,8 @@ public final class LbrynetService extends PythonService {
|
||||||
|
|
||||||
// update the notification with the context intent
|
// update the notification with the context intent
|
||||||
Notification notification = buildNotification();
|
Notification notification = buildNotification();
|
||||||
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
|
NotificationManager notificationManager =
|
||||||
|
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
|
||||||
notificationManager.notify(1, notification);
|
notificationManager.notify(1, notification);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -172,7 +173,8 @@ public final class LbrynetService extends PythonService {
|
||||||
@Override
|
@Override
|
||||||
protected void doStartForeground(Bundle extras) {
|
protected void doStartForeground(Bundle extras) {
|
||||||
downloadManager = new DownloadManager(this);
|
downloadManager = new DownloadManager(this);
|
||||||
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
|
NotificationManager notificationManager =
|
||||||
|
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
NotificationChannel channel = new NotificationChannel(
|
NotificationChannel channel = new NotificationChannel(
|
||||||
NOTIFICATION_CHANNEL_ID, "LBRY Browser", NotificationManager.IMPORTANCE_LOW);
|
NOTIFICATION_CHANNEL_ID, "LBRY Browser", NotificationManager.IMPORTANCE_LOW);
|
||||||
|
@ -219,8 +221,7 @@ public final class LbrynetService extends PythonService {
|
||||||
JSONObject result = status.getJSONObject("result");
|
JSONObject result = status.getJSONObject("result");
|
||||||
if (result.has("startup_status")) {
|
if (result.has("startup_status")) {
|
||||||
JSONObject startupStatus = result.getJSONObject("startup_status");
|
JSONObject startupStatus = result.getJSONObject("startup_status");
|
||||||
fileManagerReady = startupStatus.has("file_manager")
|
fileManagerReady = startupStatus.has("file_manager") && startupStatus.getBoolean("file_manager");
|
||||||
&& startupStatus.getBoolean("file_manager");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -231,10 +232,8 @@ public final class LbrynetService extends PythonService {
|
||||||
params.put("page_size", 100);
|
params.put("page_size", 100);
|
||||||
params.put("reverse", true);
|
params.put("reverse", true);
|
||||||
params.put("sort", "added_on");
|
params.put("sort", "added_on");
|
||||||
/*
|
/*params.put("status", "stopped");
|
||||||
* params.put("status", "stopped");
|
params.put("comparison", "ne");*/
|
||||||
* params.put("comparison", "ne");
|
|
||||||
*/
|
|
||||||
|
|
||||||
String fileList = Utils.sdkCall("file_list", params);
|
String fileList = Utils.sdkCall("file_list", params);
|
||||||
if (fileList != null) {
|
if (fileList != null) {
|
||||||
|
@ -274,8 +273,7 @@ public final class LbrynetService extends PythonService {
|
||||||
if (fileItems != null && fileItems.length() > 0) {
|
if (fileItems != null && fileItems.length() > 0) {
|
||||||
// TODO: Create Java FileItem class
|
// TODO: Create Java FileItem class
|
||||||
JSONObject item = fileItems.getJSONObject(0);
|
JSONObject item = fileItems.getJSONObject(0);
|
||||||
String downloadPath = item.isNull("download_path") ? null
|
String downloadPath = item.isNull("download_path") ? null : item.getString("download_path");
|
||||||
: item.getString("download_path");
|
|
||||||
if (downloadPath == null || downloadPath.trim().length() == 0) {
|
if (downloadPath == null || downloadPath.trim().length() == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -283,8 +281,7 @@ public final class LbrynetService extends PythonService {
|
||||||
String claimName = item.getString("claim_name");
|
String claimName = item.getString("claim_name");
|
||||||
String uri = String.format("lbry://%s#%s", claimName, claimId);
|
String uri = String.format("lbry://%s#%s", claimName, claimId);
|
||||||
|
|
||||||
if (!downloadManager.isDownloadActive(uri)
|
if (!downloadManager.isDownloadActive(uri) && !downloadManager.isDownloadCompleted(uri)) {
|
||||||
&& !downloadManager.isDownloadCompleted(uri)) {
|
|
||||||
downloadManager.clearWrittenBytesForDownload(uri);
|
downloadManager.clearWrittenBytesForDownload(uri);
|
||||||
File file = new File(downloadPath);
|
File file = new File(downloadPath);
|
||||||
Intent intent = createDownloadEventIntent(uri, outpoint, item.toString());
|
Intent intent = createDownloadEventIntent(uri, outpoint, item.toString());
|
||||||
|
@ -446,6 +443,7 @@ public final class LbrynetService extends PythonService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static Intent createDownloadEventIntent(String uri, String outpoint, String fileInfo) {
|
private static Intent createDownloadEventIntent(String uri, String outpoint, String fileInfo) {
|
||||||
Intent intent = new Intent();
|
Intent intent = new Intent();
|
||||||
intent.setAction(DownloadManager.ACTION_DOWNLOAD_EVENT);
|
intent.setAction(DownloadManager.ACTION_DOWNLOAD_EVENT);
|
||||||
|
@ -479,8 +477,7 @@ public final class LbrynetService extends PythonService {
|
||||||
Intent startedIntent = new Intent(LBRY_SDK_SERVICE_STARTED);
|
Intent startedIntent = new Intent(LBRY_SDK_SERVICE_STARTED);
|
||||||
sendBroadcast(startedIntent);
|
sendBroadcast(startedIntent);
|
||||||
|
|
||||||
// no need to iterate the checks repeatedly here, because this is service
|
// no need to iterate the checks repeatedly here, because this is service startup
|
||||||
// startup
|
|
||||||
checkDownloads();
|
checkDownloads();
|
||||||
|
|
||||||
return super.onStartCommand(intent, flags, startId);
|
return super.onStartCommand(intent, flags, startId);
|
||||||
|
@ -499,8 +496,8 @@ public final class LbrynetService extends PythonService {
|
||||||
}
|
}
|
||||||
|
|
||||||
Context context = getApplicationContext();
|
Context context = getApplicationContext();
|
||||||
NotificationManager notificationManager = (NotificationManager) context
|
NotificationManager notificationManager =
|
||||||
.getSystemService(Context.NOTIFICATION_SERVICE);
|
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||||
notificationManager.cancelAll();
|
notificationManager.cancelAll();
|
||||||
|
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
|
@ -553,7 +550,7 @@ public final class LbrynetService extends PythonService {
|
||||||
// If the disk data is out of date, extract it and write the
|
// If the disk data is out of date, extract it and write the
|
||||||
// version file.
|
// version file.
|
||||||
// if (! data_version.equals(disk_version)) {
|
// if (! data_version.equals(disk_version)) {
|
||||||
if (!data_version.equals(disk_version)) {
|
if (! data_version.equals(disk_version)) {
|
||||||
Log.v(TAG, "Extracting " + resource + " assets.");
|
Log.v(TAG, "Extracting " + resource + " assets.");
|
||||||
|
|
||||||
recursiveDelete(target);
|
recursiveDelete(target);
|
||||||
|
@ -561,7 +558,7 @@ public final class LbrynetService extends PythonService {
|
||||||
|
|
||||||
AssetExtract ae = new AssetExtract(getApplicationContext());
|
AssetExtract ae = new AssetExtract(getApplicationContext());
|
||||||
if (!ae.extractTar(resource + ".mp3", target.getAbsolutePath())) {
|
if (!ae.extractTar(resource + ".mp3", target.getAbsolutePath())) {
|
||||||
// toastError("Could not extract " + resource + " data.");
|
//toastError("Could not extract " + resource + " data.");
|
||||||
Log.e(TAG, "Could not extract " + resource + " data.");
|
Log.e(TAG, "Could not extract " + resource + " data.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# going forward, this should match sdk version
|
# going forward, this should match sdk version
|
||||||
__version__ = "0.112.0"
|
__version__ = "0.102.0"
|
||||||
|
|
||||||
class ServiceApp(App):
|
class ServiceApp(App):
|
||||||
def build(self):
|
def build(self):
|
||||||
|
|
Loading…
Reference in a new issue