Build from the official autoconf amalgamation in debian13, rocky9 and
alpine3.24; rocky9-system uses the distribution sqlite-devel.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Install libraries from Rocky Linux 9, CRB and EPEL instead of building
from source; packages missing from those repositories are skipped.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Install ${PREFIX}/share/source-stack/source-stack.cmake as the last step. It
mirrors the image's ENV block (prefix, pkg-config and library paths under
lib64) for CMake and can restrict lookups to the prefix with
GW_SOURCE_STACK_ONLY.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
--enable-fat selects the optimized code at run time, so the static
library also works on x86_64 CPUs without AVX, BMI2 or ADX. It is
ignored on architectures that do not support it, such as aarch64.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Install ${PREFIX}/share/source-stack/source-stack.cmake as the last step. It
mirrors the image's ENV block (prefix, pkg-config and library paths) for
CMake and can restrict lookups to the prefix with GW_SOURCE_STACK_ONLY.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Replace the hard-coded /usr/local with a PREFIX build argument (default
/usr/local) and add a MULTIARCH argument for the Debian multiarch library
directory. The toolchain only searches /usr/local by default, so export
PATH, C_INCLUDE_PATH, CPLUS_INCLUDE_PATH, LIBRARY_PATH, PKG_CONFIG_PATH,
CMAKE_PREFIX_PATH and CMAKE_INSTALL_PREFIX for other prefixes. build.sh
passes PREFIX and derives MULTIARCH from uname -m.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Add xsimd, Thrift, Snappy, LZ4 and Arrow/Parquet before DuckDB, in the
same order as debian13, using lib64 as the library directory.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Sources that ship one archive per architecture live in their own
sources/<name>/ directory and are mounted as a whole, so adding other
sources never invalidates their build layer.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Download the per-architecture Rust tarball into sources/rust/ and have the
rocky9 and debian13 Dockerfiles bind that directory and pick the archive
with uname -m. This drops the architecture-neutral hard link and keeps the
Rust layer's cache key independent of other source archives.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Share the debian13 patch content, renamed to libevent-libdir-install.patch,
so the install directory follows CMAKE_INSTALL_LIBDIR instead of a
hardcoded lib64. On Rocky Linux GNUInstallDirs already defaults it to
lib64, so the Dockerfile does not need to pass it.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
- Make the libevent install patch take CMAKE_INSTALL_LIBDIR instead of
hardcoding lib/x86_64-linux-gnu, and rename it to
libevent-libdir-install.patch.
- Replace every hardcoded x86_64-linux-gnu in the debian13 Dockerfile with
$(gcc -dumpmachine).
- Download the Rust tarball for `uname -m` and expose it to the Dockerfiles
as the architecture-neutral rust-1.99.1.tar.xz (a hard link refreshed on
every run), because podman cannot expand ARG in a --mount source.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
- Build the ui extension (pinned duckdb-ui commit for DuckDB 1.5.6) into
DuckDB on debian13 and rocky9 so the shell supports -ui.
- Add fetch-sources.sh, which downloads source archives with aria2c into the
git-ignored sources/ repository.
- debian13: replace per-dependency downloads with
RUN --mount=type=bind,from=sources, passed by build.sh through
--build-context, so archives are not stored in image layers.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Install aria2 in the image and fetch Boost from the Aliyun and official
mirrors, limited to one connection per host.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Add pinned xsimd 14.2.0, Apache Thrift v0.22.0 (C++ library only),
Snappy 1.2.2, LZ4 v1.10.0, and Apache Arrow 25.0.1 with Parquet as
static PIC builds. Arrow uses ARROW_DEPENDENCY_SOURCE=SYSTEM so no
dependencies are fetched implicitly, disables the bundled jemalloc and
mimalloc allocators, and enables Parquet encryption via OpenSSL.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M5XtQocmT1zExJBt4oh3YK
Mirrors rocky9's curl-based fetching and consistent-libdir goals but
adapted to Debian's own conventions: replaces git clone with curl
tarball downloads (matching rocky9's URLs), drops sha256sum checks, and
installs every vendored library under /usr/local/lib/x86_64-linux-gnu
instead of rocky9's lib64.
lib64 was tried first but abandoned: on Debian, CMake's find_package()
Config-mode search, find_library(), and pkg-config's default search
path all detect /etc/debian_version and never look in lib64 (that's an
RHEL-only default), so cross-package lookups like spdlog finding fmt
or folly's FindLibEvent.cmake kept failing. lib/x86_64-linux-gnu is
Debian's native multiarch path and is found by all three mechanisms
with no extra CMAKE_PREFIX_PATH/PKG_CONFIG_PATH workarounds, verified
by building the full image end to end.
libevent-lib64-install.patch is renamed and retargeted at
lib/x86_64-linux-gnu since libevent hardcodes "lib" in its CMake
install rules with no override flag. CacheLib keeps building its
default interface/cachebench targets (no patch needed here, unlike
rocky9).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UV2yJRkL6CnChX3D2zhoXH
Verified every third-party build step by building and inspecting the
resulting image, and fixed each one that landed in /usr/local/lib
instead of /usr/local/lib64: CMake projects got -DLIB_INSTALL_DIR,
-DCMAKE_INSTALL_LIBDIR, -DLIBRARY_INSTALL_DIR or -DLIB_SUFFIX as
appropriate, autotools projects got --libdir=/usr/local/lib64, and
libevent (which hardcodes lib with no override) is now patched via
libevent-lib64-install.patch before building. Also drops the boost/
libaio/util-linux/gmp/nettle/gnutls/libproxyprotocol checksum checks,
removes the now-unused lib->lib64 copy fallback, and switches libxml2
to the wangguofang.net GitHub mirror since gitlab.gnome.org is
unreachable from the build environment.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QUU2cEU5XgLpfGVN8Jpa7d
Switch rocky9's GitHub-hosted dependency downloads from `git clone` to
curl-fetched release tarballs via the wangguofang.net proxy, matching
the approach already used in alpine3.24/Dockerfile. log4cplus keeps
git clone since it needs a submodule checkout.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WE1kAAo7iusPxLSuu88HaU