Skip to content

Commit

Permalink
don't ask me I don't know
Browse files Browse the repository at this point in the history
  • Loading branch information
lilatomic committed Aug 25, 2024
1 parent b25dee8 commit 6498027
Show file tree
Hide file tree
Showing 15 changed files with 348 additions and 487 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -172,3 +172,6 @@ t.*

# rever
rever/

# alpine dev
.abuild
2 changes: 2 additions & 0 deletions dev/alpine/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
src
pkg
16 changes: 14 additions & 2 deletions dev/alpine/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,6 +1,18 @@
FROM alpine:3.17
FROM alpine:3.20
RUN apk add build-base alpine-sdk sudo
RUN adduser -D packager && \
addgroup packager abuild
addgroup packager abuild && \
echo 'packager ALL=(ALL) NOPASSWD:ALL' >/etc/sudoers.d/packager

RUN apk add bash linux-headers rustup protoc unzip

USER packager
RUN rustup-init -y
ENV PATH=$PATH:$HOME/.cargo/bin
WORKDIR /home/packager/

COPY ./alpine ./alpine
RUN pushd ./alpine/python39 && abuild -P /tmp/build && popd \
sudo apk add /tmp/build/main/x86_64/pantsbuild-2.23.0-r0.apk && \
pushd ./alpine/pants && abuild -P /tmp/build && popd

60 changes: 60 additions & 0 deletions dev/alpine/main/pants/APKBUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# Contributor: Daniel Goldman <danielgoldman4@gmail.com>
# Maintainer: Daniel Goldman <danielgoldman4@gmail.com>
pkgname=pantsbuild
pkgver=2.23.0
pkgrel=0
pkgdesc="The Pants Build System"
url="https://www.pantsbuild.org/"
arch="all"
license="Apache2.0"
depends="
python39
unzip
bash
"
makedepends="
python39
python39-dev
unzip
bash
protoc
rustup
linux-headers
"
source="https://github.com/pantsbuild/pants/archive/refs/tags/release_$pkgver.dev4.tar.gz"
builddir="$srcdir/"

prepare() {
# default_prepare
:
}

build() {
set -xe
# rustup-init -y

export RUSTFLAGS="-C target-feature=-crt-static --cfg tokio_unstable"
export PATH=$PATH:$HOME/.cargo/bin

cd pants-release_$pkgver.dev4

# shim git repo so Pants is happy
git init

./pants package src/python/pants:pants-pex
}

check() {
# Replace with proper check command(s)
:
}

package() {
mkdir -p "$pkgdir/usr/bin/"

ln -s "$srcdir"/pants-release_$pkgver.dev4/dist/src.python.pants/pants-pex.pex "$pkgdir"/usr/bin/pants
}

sha512sums="
9d979a1b174bf4e3a77c4d7ea05f8af8e535363a98b53b350f874554ee689afc55d6928f33b7afcfee3e77211a314a9c9dfe83435c7ccc0d15999828204deab0 release_2.23.0.dev4.tar.gz
"
239 changes: 239 additions & 0 deletions dev/alpine/main/python39/APKBUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,239 @@
pkgname=python39
# the python3-tkinter's pkgver needs to be synchronized with this.
pkgver=3.9.19
_basever="${pkgver%.*}"
pkgrel=1
pkgdesc="High-level scripting language"
url="https://www.python.org/"
arch="all"
license="PSF-2.0"
# pyc0 comes last because the files are named without a unique substring
subpackages="
$pkgname-dbg
$pkgname-dev
$pkgname-doc
$pkgname-tests::noarch
$pkgname-pyc:_default_pyc
$pkgname-pycache-pyc2
$pkgname-pycache-pyc1
$pkgname-pycache-pyc0
$pkgname-gdbm
pyc:_pyc_meta:noarch
"
depends="
libssl3>=3.3.0
so:libbz2.so.1
so:libc.musl-x86_64.so.1
so:libcrypto.so.3
so:libexpat.so.1
so:libffi.so.8
so:libgdbm_compat.so.4
so:liblzma.so.5
so:libncursesw.so.6
so:libpanelw.so.6
so:libreadline.so.8
so:libsqlite3.so.0
so:libssl.so.3
so:libz.so.1
"
makedepends="
!gettext-dev
bluez-headers
bzip2-dev
expat-dev
gdbm-dev
libffi-dev
linux-headers
mpdecimal-dev
musl-libintl
ncurses-dev
openssl-dev
readline-dev
sqlite-dev
tcl-dev
xz-dev
zlib-dev
"
source="
https://www.python.org/ftp/python/$pkgver/Python-$pkgver.tar.xz
externally-managed
musl-find_library.patch
"
options="
net
!tracedeps
" # Required for tests
builddir="$srcdir/Python-$pkgver"

prepare() {
default_prepare

# force system libs
rm -r Modules/expat
}

build() {
# set thread stack size to 2MB so we don't segfault before we hit
# sys.getrecursionlimit()
# note: raised from 1 as we ran into some stack limit on x86_64 too
# sometimes, but not recursion
local stacksize=0x200000

# we want -O2 here for more speed for such a large interpreter.
export CFLAGS_NODIST="$CFLAGS -O2 -DTHREAD_STACK_SIZE=$stacksize"
export CXXFLAGS_NODIST="$CXXFLAGS -O2"
export LDFLAGS_NODIST="$LDFLAGS"

case "$CARCH" in
ppc64le)
# FIXME: on ppc64le, the stack-clash-protection from gcc seems to segfault
# python.. sometimes. not sure if python or gcc bug (probably former)
# for an easy reproduction, run the testsuite of community/py3-lmdb
export CFLAGS_NODIST="${CFLAGS_NODIST/-fstack-clash-protection}"
export CXXFLAGS_NODIST="${CXXFLAGS_NODIST/-fstack-clash-protection}"
;;
esac

# we set them via NODIST to not propagate them and duplicate them to modules
unset LDFLAGS CFLAGS CXXFLAGS CPPFLAGS

# --enable-optimizations \
./configure \
--disable-test-suite \
--build=$CBUILD \
--host=$CHOST \
--prefix=/usr \
--enable-ipv6 \
--enable-loadable-sqlite-extensions \
--with-lto \
--with-computed-gotos \
--with-dbmliborder=gdbm:ndbm \
--with-system-expat \
--with-system-libmpdec \
--without-ensurepip

make
}

check() {
# test that we reach recursionlimit before we segfault
cat > test-stacksize.py <<-EOF
import threading
import sys
def fun(i):
try:
fun(i+1)
except:
sys.exit(0)
t = threading.Thread(target=fun, args=[1])
t.start()
EOF
LD_LIBRARY_PATH=$PWD ./python test-stacksize.py

local fail

# musl related
fail="test__locale" # various musl locale deficiencies
fail="$fail test_locale"
fail="$fail test_re"
fail="$fail test_c_locale_coercion"
fail="$fail test_datetime" # hangs if 'tzdata' installed
fail="$fail test_os" # fpathconf, ttyname errno values

# FIXME: failures needing investigation
fail="$fail test_ctypes" # fail on aarch64 (ctypes.test.test_win32.Structures)

# kernel related
fail="$fail test_fcntl" # wants DNOTIFY, we don't have it

# test_clock_settime returns Function not implemented instead of the
# expected permission error in docker (CI). Disable for now.
case "$CARCH" in
ppc64le) fail="$fail test_time";;
esac

make quicktest TESTOPTS="-j${JOBS:-$(nproc)} --exclude $fail"
}

package() {
make -j8 DESTDIR="$pkgdir" EXTRA_CFLAGS="$CFLAGS" altinstall maninstall
install -Dm644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE

install -Dm644 "$srcdir"/externally-managed \
"$pkgdir"/usr/lib/python$_basever/EXTERNALLY-MANAGED

# those are provided by python3-tkinter
rm -r "$pkgdir"/usr/bin/idle* "$pkgdir"/usr/lib/python*/idlelib \
"$pkgdir"/usr/lib/python*/tkinter

# ln -s python3 "$pkgdir"/usr/bin/$pkgname
# ln -s python3-config "$pkgdir"/usr/bin/$pkgname-config
}

dev() {
default_dev

# pyconfig.h is needed runtime so we move it back
mkdir -p "$pkgdir"/usr/include/python$_basever
mv "$subpkgdir"/usr/include/python$_basever/pyconfig.h \
"$pkgdir"/usr/include/python$_basever/
}

tests() {
pkgdesc="The test modules from the main python package"

amove usr/lib/python$_basever/test
}

gdbm() {
pkgdesc="Python backend for GNU gdbm"

amove usr/lib/python3*/lib-dynload/_gdbm.cpython*
}

_pyc_meta() {
pkgdesc="Meta package for pulling in all -pyc packages"
depends=""
mkdir -p "$subpkgdir"
}

# python3-pyc, to install pyc by default
_default_pyc() {
pkgdesc="$pkgdesc (install .pyc cache files)"
install_if="$pkgname=$pkgver-r$pkgrel"
depends="
$pkgname-pycache-pyc0=$pkgver-r$pkgrel
pyc
"

mkdir -p "$subpkgdir"
}

pyc0() {
pkgdesc="$pkgdesc (.pyc pycache files)"

cd "$pkgdir"
amove $(find usr/lib/python3* -name "*.pyc")
}

pyc1() {
pkgdesc="$pkgdesc (.opt-1.pyc pycache files)"

cd "$pkgdir"
amove $(find usr/lib/python3* -name "*.opt-1.pyc")
}

pyc2() {
pkgdesc="$pkgdesc (.opt-2.pyc pycache files)"

cd "$pkgdir"
amove $(find usr/lib/python3* -name "*.opt-2.pyc")
}

sha512sums="
5577830c734e63a70bbc62cd33d263b9aa87c4381b49cb694c3559067c4c682a55506b65ec5514a8e0a5abf6294dc728e909385d449ae1c388e62f83cea9bb89 Python-3.9.19.tar.xz
46dd8230ee2ab66e9c4157c10b2bd9c414fd7f30be0bee73e21a9eea88f63fff362d47828e0fc77ddc59df097b414b21505f8b5f98bc866381115c58ae3f4862 externally-managed
ab8eaa2858d5109049b1f9f553198d40e0ef8d78211ad6455f7b491af525bffb16738fed60fc84e960c4889568d25753b9e4a1494834fea48291b33f07000ec2 musl-find_library.patch
"
22 changes: 22 additions & 0 deletions dev/alpine/main/python39/externally-managed
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
[externally-managed]
Error=
The system-wide python installation should be maintained using the system
package manager (apk) only.

If the package in question is not packaged already (and hence installable via
"apk add py3-somepackage"), please consider installing it inside a virtual
environment, e.g.:

python3 -m venv /path/to/venv
. /path/to/venv/bin/activate
pip install mypackage

To exit the virtual environment, run:

deactivate

The virtual environment is not deleted, and can be re-entered by re-sourcing
the activate file.

To automatically manage virtual environments, consider using pipx (from the
pipx package).
Loading

0 comments on commit 6498027

Please sign in to comment.