Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
1257185
libreoffice: Update version from 7.6.2.1-1 to 26.2.5.1-0
pmenzel Jul 20, 2026
57c7c42
libxml2: Update version from 2.9.12-0 to 2.15.3-0
pmenzel Jul 23, 2026
8bf71ad
libxml2_compat: Add compat package for old libxml2.so.2 soname
pmenzel Jul 23, 2026
9187596
libreoffice: Fix 26.2.5.1 build (meson wrapper, obsolete patch)
pmenzel Jul 23, 2026
6079621
poppler: Update version from 21.10.0-1 to 26.07.0-0
pmenzel Jul 23, 2026
e9a22dc
poppler_compat: Preserve 21.10.0 sonames for the 26.07.0 update
pmenzel Jul 23, 2026
21663f4
freetype: Update version from 2.10.4-1 to 2.14.3-0
pmenzel Jul 23, 2026
a894149
nspr: Update version from 4.32-0 to 4.39-0
pmenzel Jul 23, 2026
621c0fb
nss: Update version from 3.73-0 to 3.126-0
pmenzel Jul 23, 2026
fde72e4
libgpg-error: Update version from 1.42-0 to 1.61-0
pmenzel Jul 23, 2026
5233c7c
gpgme: Update version from 1.16.0-0 to 1.24.3-0
pmenzel Jul 23, 2026
fa6240c
boost: Update version from 1.72.0-1 to 1.91.0-0
pmenzel Jul 23, 2026
d2cb633
poppler: Build with clang instead of gcc 14
pmenzel Jul 23, 2026
23b8e74
Add CLAUDE.md documenting how to work with bee files
pmenzel Jul 23, 2026
fe45cc2
lcms2: Update version from 2.9-2 to 2.19.1-0
pmenzel Jul 23, 2026
ba01113
guile2: add version 2.2.7
wwwutz May 5, 2022
1ba1ecb
guile2: Also build shared version of library
pmenzel Jul 23, 2026
c36d318
autogen: be0ify
pmenzel Jul 23, 2026
e4a9e1e
autogen: Update version from 5.11.1-0 to 5.18.16-0
pmenzel Jul 23, 2026
8074fbe
autogen: Build against Guile 2.2 headers, not stale guile-config 1.8
pmenzel Jul 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
128 changes: 128 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
# Working with bee files

This repo holds **bee** package build files (`bee` = the MPIMG build/packaging
tool; `beesh v1.2.30`). Each `*.be0` / `*.be1` / … file is an executable
`beesh` script that fetches, builds and packages one piece of software. The
numeric suffix (`.be0`, `.be1`, …) is just a per-package revision counter — the
highest number is the current one.

## Anatomy of a bee file

```sh
#!/usr/bin/env beesh
# BEE_VERSION poppler-26.07.0-0 # <pkgname>-<version>-<pkgrevision>

SRCURL[0]="https://…/foo-${PKGVERSION}.tar.xz"
# PATCHURL+=("…") # optional patches, applied in order

mee_configure() { … } # override hooks (see below)
```

- **`BEE_VERSION` header** sets the package name/version/revision. `PKGVERSION`
(and `PKGNAME`, `PKGEXTRAVERSION`) are derived from it and usable in the script.
- **`SRCURL[…]`** — source tarball URLs. House convention: keep the real
upstream URL as a comment and point `SRCURL[0]` at the hashed **beehive
mirror** (`https://beehive.molgen.mpg.de/<hash>/<tarball>`), which is the cache
the build actually downloads from. Update both when bumping a version.
- **`PATCHURL+=(…)`** — patches applied during `bee_patch`.

### Magic comment directives

These are read from comment lines (leading `# `) and change build layout:

- `# build_in_sourcedir` — build in the source tree (`B=S`) instead of a
separate build dir. Common for autotools packages that don't support
out-of-tree builds.
- `# sourcesubdir_append <dir>` — descend into `<dir>` after extract (e.g. the
tarball unpacks to `foo/` but the buildable tree is `foo/src`).

## Hooks: `mee_*` override `bee_*`

Each phase has a default `bee_<phase>` implementation; define `mee_<phase>()` to
override it, and optionally `mee_<phase>_pre` / `_post` to run around the
default. Phases, in order:

`extract → patch → configure → build → install` (plus optional `check`).

```sh
mee_configure() {
export CC=clang CXX=clang++
bee_configure -DCMAKE_BUILD_TYPE=Release # calls the default with extra args
}
```

- `bee_configure` auto-detects the build system (CMake/autotools/meson) and
passes standard prefix/dir flags; append project-specific flags to it rather
than reinventing the invocation.
- To *replace* rather than *extend*, define the `mee_*` body without calling the
`bee_*` default (see `mee_install` in `poppler_compat.be0`).

## Directory variables (set by beesh)

| Var | Meaning |
|------|-------------------------------------------|
| `$S` | source dir (`$BEEWORKDIR/source`) |
| `$B` | build dir (`$BEEWORKDIR/build`; `=$S` with `build_in_sourcedir`) |
| `$D` | install/image dir — the `DESTDIR` you `cd`/install into |

`$BEEWORKDIR = $BEEPKGROOT/<pkgfullpkg>`. `$D` is what ends up in the package,
so `mee_install` overrides typically `cd ${D}` and lay files under it.

## Building locally

```sh
BEE_TMP_TMPDIR=/dev/shm \
BEE_TMP_BUILDROOT=/dev/shm/bee-pmenzel \
BEE_MAKEFLAGS='-j300' \
fakeroot ./poppler.be0 -c
```

- `fakeroot` — needed so `mee_install` can set root-owned file ownership.
- `-c` / `--cleanup` — wipe the package's work tree before building. **Omit it
on a retry** if you want to keep the failed build dir for inspection; a
failing build otherwise leaves `$BEEWORKDIR` in place only if you didn't pass
`-c`.
- `-i` install after build, `--check` run `mee_check`.
- `BEE_TMP_BUILDROOT` puts the (large) work tree on fast tmpfs; the build dir is
then `.../bee-pmenzel/<pkg>/<pkg>-<ver>-<rev>/build`.
- For long builds, submit to MXQ:
`mxqsub -m 956G -t 90m --processors=256 -o ~/…/build.log ./submit.sh`.

## Compiler selection — hard-won gotchas

- Set the compiler with `export CC=… CXX=…` in `mee_configure`.
- **Prefer the system-path `clang`/`clang++` (currently clang 22 at
`/usr/bin/clang`) over the `/pkg/gcc-14…` toolchain.** clang 22 has full C++23
*language* support and links the **system** libstdc++ (`/lib/libstdc++.so.6`,
gcc-12.5.0, symbols up to `GLIBCXX_3.4.30`).
- Building with `g++14` pulls in the out-of-tree `/pkg/gcc-14.1.0-0/lib64`
libstdc++, which is fragile (RPATH into `/pkg`) and emits newer
`GLIBCXX_3.4.31/.32` symbols that other tools can't resolve against the
default libstdc++.
- Concretely this broke **`g-ir-scanner`** (GObject introspection): it links
its temporary probe binary with the **C** driver (`$CC`), which doesn't pull
in libstdc++, so a `g++14`-built `libpoppler.so` gave
`undefined reference to std::ios_base_library_init()@GLIBCXX_3.4.32`.
`g-ir-scanner` appends `$LDFLAGS` (`giscanner/ccompiler.py`) if you ever
must feed it an explicit libstdc++ path — but switching to clang avoids the
problem entirely.
- **Residual risk with clang + system libstdc++:** clang gives C++23 *language*
support, but the *standard library* is gcc-12.5.0's, which is only partial
C++23. If a package needs newer library features (`std::format`,
`<expected>`, `std::print`), expect **compile** (not link) errors; `libc++`
is not installed here, so there's no clean fallback short of a newer
libstdc++.

## Compatibility (`*_compat`) packages

When a version bump changes an soname (ABI break), a `<pkg>_compat.be0` ships
the *old* shared libraries (extracted from archived `.bee.tar.bz2` packages) so
already-built consumers keep working. See `poppler_compat.be0`.

## Commit convention

`<package>: <Summary>` as the subject, matching git history, e.g.
`poppler: Build with clang instead of gcc 14` or
`boost: Update version from 1.72.0-1 to 1.91.0-0`. Commit only the `*.be?` file
you changed — the repo working tree is full of untracked build artifacts and
downloaded tarballs; never `git add -A`.
30 changes: 0 additions & 30 deletions autogen-5.11.1-0.bee

This file was deleted.

56 changes: 56 additions & 0 deletions autogen.be0
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
#!/usr/bin/env beesh

# BEE_VERSION autogen-5.18.16-0

# Update from 5.11.1-0. The old package leaked gnulib's extensions.m4 (and
# unlocked-io.m4 / snprintfv.m4) into /usr/share/aclocal, where the stale
# (serial 9, 2010) extensions.m4 shadowed autoconf 2.71's built-in
# AC_USE_SYSTEM_EXTENSIONS and broke autoreconf/autoheader for other packages
# (e.g. LibreOffice's bundled libassuan). 5.18.16 installs only its own
# autoopts.m4 into /usr/share/aclocal, so the shadowing is gone.

# https://ftp.gnu.org/gnu/autogen/rel5.18.16/autogen-5.18.16.tar.xz
SRCURL[0]="https://beehive.molgen.mpg.de/27c28df902a9fdb2b64f008a0a49fd05/autogen-5.18.16.tar.xz"

# PATCHURL+=()

# autoopts' mk-tpl-config.sh patches the Guile headers it will compile against
# (rewriting the bare `noreturn` keyword) and locates them via the stale system
# `guile-config` (Guile 1.8.7), whose headers live directly in /usr/include and
# shadow the parallel-installed Guile 2.2 (/usr/include/guile/2.2). That made it
# copy Guile 1.8's libguile.h + libguile/__scm.h into the build tree while the
# actual compile used Guile 2.2's headers (GUILE_CFLAGS from pkg-config) — the
# resulting __scm.h/alist.h mismatch left SCM_INTERNAL/SCM_API undefined and the
# ag.c build failed. Make find_libguiledir honour the -I dir the Makefile already
# passes as LGCFLAGS (= GUILE_CFLAGS) when it actually contains libguile/__scm.h,
# so header patching matches the Guile the sources compile against. With Guile
# 2.2 (no bare `noreturn`) fix_guile then correctly no-ops.
mee_patch() {
bee_patch "${@}"
sed -i '/libguiledir=`exec 2>\/dev\/null ; guile-config info includedir`/i\
# A GUILE_CFLAGS -I<dir> (pkg-config, passed in as LGCFLAGS) is\
# authoritative: honour it so the guile header patching matches the guile\
# the sources compile against, not the stale system guile-config (1.8)\
# whose /usr/include headers shadow the parallel-installed guile 2.2.\
for _lgc_arg; do\
case ${_lgc_arg} in\
-I?*) test -f "${_lgc_arg#-I}/libguile/__scm.h" \&\& {\
libguiledir=${_lgc_arg#-I}\
guile_scm_h=${libguiledir}/libguile/__scm.h\
return 0\
} ;;\
esac\
done\
' autoopts/mk-tpl-config.sh
}

# autogen 5.18.x requires Guile >= 2.0 (configure rejects the system Guile
# 1.8.7). Build against the parallel-installed guile2 (2.2.7) package: its
# guile-2.2.pc is found via the default PKG_CONFIG_PATH, and configure detects
# it with `pkg-config --exists guile-2.2`. Point GUILE/GUILD at the
# program-suffixed binaries so nothing falls back to /usr/bin/guile (1.8.7).
# NOTE: guile2-2.2.7-0 must be installed on the build host first.
mee_configure() {
export GUILE=/usr/bin/guile2 GUILD=/usr/bin/guild2
bee_configure
}
6 changes: 3 additions & 3 deletions boost.be0
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
#!/bin/env beesh

# BEE_VERSION boost-1.72.0-1
# BEE_VERSION boost-1.91.0-0

# SRCURL[0]="https://dl.bintray.com/boostorg/release/${PKGVERSION}/source/boost_${PKGVERSION//./_}.tar.gz"
SRCURL[0]="https://beehive.molgen.mpg.de/e2b0b1eac302880461bcbef097171758/boost_1_72_0.tar.gz"
# SRCURL[0]="https://archives.boost.io/release/${PKGVERSION}/source/boost_${PKGVERSION//./_}.tar.gz"
SRCURL[0]="https://beehive.molgen.mpg.de/e799ed3e5af9708739fb2e088c670ae1/boost_1_91_0.tar.gz"

# build_in_sourcedir

Expand Down
4 changes: 2 additions & 2 deletions freetype.be0
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
#!/bin/env beesh

# BEE_VERSION freetype-2.10.4-1
# BEE_VERSION freetype-2.14.3-0

BEE_BUILDTYPE=autotools

# SRCURL[0]="https://download.savannah.gnu.org/releases/freetype/freetype-${PKGVERSION}.tar.xz"
SRCURL[0]="https://beehive.molgen.mpg.de/0e6c0e9b218be3ba3e26e1d23b1c80dd/freetype-2.10.4.tar.xz"
SRCURL[0]="https://beehive.molgen.mpg.de/5e78e6fdce5a61d3075e4c25e9852f84/freetype-2.14.3.tar.xz"

# PATCHURL+=()

Expand Down
20 changes: 14 additions & 6 deletions gpgme.be0
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
#!/usr/bin/env beesh

# BEE_VERSION gpgme-1.16.0-0
# BEE_VERSION gpgme-1.24.3-0

# SRCURL[0]="https://www.gnupg.org/ftp/gcrypt/gpgme/gpgme-${PKGVERSION}.tar.bz2"
SRCURL[0]="https://beehive.molgen.mpg.de/e31b9e0efc5a2e1ec1bbed22e7a082a4/gpgme-1.16.0.tar.bz2"
# poppler 26.07.0 needs Gpgmepp >= 1.19 (PDF GPG signatures). gpgme 2.x split
# the C++/Qt bindings into separate releases, so this stays on the latest 1.x
# that still bundles Gpgmepp (reports version 1.24.3 to poppler's find_package).

# disable python bindongs by brute force method
PATCHURL+=("https://beehive.molgen.mpg.de/4076c5e53f081c5793783f08fb2ef48c/gpgme-nopython.patch")
# SRCURL[0]="https://www.gnupg.org/ftp/gcrypt/gpgme/gpgme-${PKGVERSION}.tar.bz2"
SRCURL[0]="https://beehive.molgen.mpg.de/c6f85ce24ad46c9469596df0301f32eb/gpgme-1.24.3.tar.bz2"

# build_in_sourcedir

Expand All @@ -21,8 +22,15 @@ PATCHURL+=("https://beehive.molgen.mpg.de/4076c5e53f081c5793783f08fb2ef48c/gpgme
#}

mee_configure() {
# Build only the C (cl) and C++ (Gpgmepp) bindings. Poppler and
# LibreOffice use Gpgmepp; the Qt binding (QGpgme) is unused
# (sousage.pl reports libqgpgme.so as unknown) and building it would
# need Qt5's moc/qmake on PATH + PKG_CONFIG_PATH, which are not set up
# here. Dropping it also drops python (replaces the old
# gpgme-nopython.patch, which no longer applies to 1.24.3).
bee_configure \
--disable-gpg-test
--disable-gpg-test \
--enable-languages=cl,cpp
}

#mee_build() {
Expand Down
43 changes: 43 additions & 0 deletions guile2.be0
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#!/usr/bin/env beesh

# BEE_VERSION guile2-2.2.7-1

# SRCURL[0]="https://ftp.gnu.org/gnu/guile/guile-2.2.7.tar.xz"
SRCURL[0]="https://beehive.molgen.mpg.de/7a7e8def41678c567148c26a8a0a0873/guile-2.2.7.tar.xz"

# PATCHURL+=()

# build_in_sourcedir

# sourcesubdir_append src

#mee_extract() {
# bee_extract "${@}"
#}

#mee_patch() {
# bee_patch "${@}"
#}

mee_configure() {
bee_configure \
--disable-error-on-warning \
--enable-static \
--enable-shared \
--disable-nls \
--with-modules \
--with-threads \
--program-suffix=2
}

#mee_build() {
# bee_build
#}

mee_install() {
bee_install
cd ${D} && (
rm -rf usr/share/aclocal
rm -rf usr/share/info
)
}
8 changes: 4 additions & 4 deletions lcms2.be0
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
#!/usr/bin/env beesh

# BEE_VERSION lcms2-2.9-2
# BEE_VERSION lcms2-2.19.1-0

# SRCURL[0]="https://downloads.sourceforge.net/project/lcms/lcms/${PKGVERSION}/lcms2-${PKGVERSION}.tar.gz"
SRCURL[0]="https://beehive.molgen.mpg.de/8de1b7724f578d2995c8fdfa35c3ad0e/lcms2-2.9.tar.gz"
# SRCURL[0]="https://github.com/mm2/Little-CMS/releases/download/lcms2.${PKGVERSION}/lcms2-${PKGVERSION}.tar.gz"
SRCURL[0]="https://beehive.molgen.mpg.de/541978f73749499e9e0277bfe5a3c868/lcms2-2.19.1.tar.gz"

PATCHURL[0]=""

Expand All @@ -18,7 +18,7 @@ PATCHURL[0]=""
#}

mee_configure() {
bee_configure --disable-static
bee_configure -DLCMS2_BUILD_STATIC=OFF
}

#mee_build() {
Expand Down
4 changes: 2 additions & 2 deletions libgpg-error.be0
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
#!/usr/bin/env beesh

# BEE_VERSION libgpg-error-1.42-0
# BEE_VERSION libgpg-error-1.61-0

# SRCURL[0]="https://gnupg.org/ftp/gcrypt/libgpg-error/libgpg-error-${PKGVERSION}.tar.bz2"
SRCURL[0]="https://beehive.molgen.mpg.de/133fed221ba8f63f5842858a1ff67cb3/libgpg-error-1.42.tar.bz2"
SRCURL[0]="https://beehive.molgen.mpg.de/c89a8c6825cb64c527d5c1c0fb36f245/libgpg-error-1.61.tar.bz2"

# PATCHURL+=()

Expand Down
18 changes: 12 additions & 6 deletions libreoffice.be0
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,20 @@

#export BEE_TMP_TMPDIR=/scratch/local2 BEE_TMP_BUILDROOT=/scratch/local2/bee-root BEE_MAKEFLAGS='-j80'

# BEE_VERSION libreoffice-7.6.2.1-1
# BEE_VERSION libreoffice-26.2.5.1-0

#SRCURL[0]="https://download.documentfoundation.org/libreoffice/src/${PKGVERSION[3]}/libreoffice-${PKGVERSION}.tar.xz"
#SRCURL[0]="https://beehive.molgen.mpg.de/17a8cc75753475b6e8ed7eda4ae66e43/libreoffice-7.5.7.1.tar.xz"
SRCURL[0]="https://beehive.molgen.mpg.de/13fca0b5df68b445340d7c5f8373e99c/libreoffice-7.6.2.1.tar.xz"
#SRCURL[0]="https://beehive.molgen.mpg.de/13fca0b5df68b445340d7c5f8373e99c/libreoffice-7.6.2.1.tar.xz"
SRCURL[0]="https://beehive.molgen.mpg.de/69dd4f5b0c757397a3b43813dfa3777f/libreoffice-26.2.5.1.tar.xz"


# from download Makefile.fetch tar -cf tarballs-${PKGVERSION}.tar source/external/tarballs
#SRCURL[1]="https://beehive.molgen.mpg.de/af267a5a83ef17e843a0a71f35e37f59/tarballs-7.5.7.1.tar"
SRCURL[1]="https://beehive.molgen.mpg.de/1958345c1501c9e8cd648fa4a16c33b1/tarballs-7.6.2.1.tar"
#SRCURL[1]="https://beehive.molgen.mpg.de/1958345c1501c9e8cd648fa4a16c33b1/tarballs-7.6.2.1.tar"
SRCURL[1]="https://beehive.molgen.mpg.de/754c947a2a86069dfbce6b6f6ccb8180/tarballs-26.2.5.1.tar"

PATCHURL+=("https://beehive.molgen.mpg.de/7d4b97aa2077236456a837fc4c36ca7a/libassuan_autoheader.patch")
# Obsolete for 26.2.5.1: the Linux libassuan build no longer runs autoreconf
# (upstream dropped it), and hunk #1 only touched the Windows/MSC path we never build.
#PATCHURL+=("https://beehive.molgen.mpg.de/7d4b97aa2077236456a837fc4c36ca7a/libassuan_autoheader.patch")
#PATCHURL+=("https://beehive.molgen.mpg.de/40fa10212ec76ad2fa19b144e7621cc6/fix_install_error.patch")

# build_in_sourcedir
Expand All @@ -37,6 +39,10 @@ mee_configure() {
p=/pkg/openjdk-17.0.2.8-0/profile; [ -e $p ] && . $p
p=/pkg/apache-ant-1.10.12-0/profile; [ -e $p ] && . $p

# /bin/meson is a `prun` bash wrapper; LibreOffice's configure tries to run
# meson as a python script and chokes on it. Point at a real meson (1.6.1).
export MESON=/pkg/python-3.12.8-0/bin/meson

#checking for number of processors to use... ./configure: line 44675: test: -j80: integer expression expected
if [[ ${BEE_MAKEFLAGS:: 2} == "-j" ]]; then
LALA=${BEE_MAKEFLAGS: 2}
Expand Down
Loading