Some checks failed
ci/crow/cron/process-updates/9 Pipeline was successful
ci/crow/cron/process-updates/3 Pipeline was successful
ci/crow/cron/process-updates/4 Pipeline was successful
ci/crow/cron/process-updates/10 Pipeline was successful
ci/crow/cron/process-updates/13 Pipeline was successful
ci/crow/cron/process-updates/14 Pipeline failed
ci/crow/cron/process-updates/15 Pipeline failed
## Why Every build logs: ``` ! Patch for RcppParallel 6.2.0 did not apply cleanly; skipping patched build. ``` RcppParallel 6.x rewrote its build system. `src/Makevars.in` no longer contains the `USE_TBB=Linux` block that `system-tbb.patch` edited (it is now a short `@VAR@` template driven by `tools/config/configure.R`), so the patch can never apply again. The workaround it implemented is obsolete too. 6.x bundles **oneTBB 2022** and builds it with cmake, which works on musl and with g++ 8-15, so the 5.x reason for linking a system TBB is gone. Linking one is now harmful: `install.libs.R` symlinks the system libraries into `RcppParallel/lib`, so the published binary depends on a TBB the consumer does not have — the same failure mode as `fs` and libuv. What is still broken upstream is the **link order**. `configure.R` names the TBB directory with `-Wl,-L`, and gcc expands its own search dirs into `-L` options ahead of anything forwarded verbatim with `-Wl,`: ``` $ gcc -v -o t t.c -Wl,-L/usr/local/lib64 -ltbb -L/usr/lib/gcc/x86_64-redhat-linux/8 -L/lib/../lib64 -L/usr/lib/../lib64 ... -L/usr/local/lib64 ``` So on any build host with a distro TBB installed, `-ltbb` resolves to that library and `RcppParallel.so` records *its* SONAME (`libtbb.so.12`, or `libtbb.so.2` for the classic Intel TBB on el8/el9) instead of the bundled `libtbb.so`. ## Changes - Replace `RcppParallel/system-tbb.patch` with `RcppParallel/bundled-tbb-link-order.patch`, which changes the three `-Wl,-L` occurrences in `tools/config/configure.R` to plain `-L`. - Scope the RcppParallel entry to `>=6.0.0` and widen `platforms` to `*`. - Drop the `rstan` entry: its `-DTBB_INTERFACE_NEW` is already emitted by `RcppParallel::CxxFlags()` once the bundled oneTBB is used, and its `-I/usr/local/include` was an el8/el9 path applied on every platform. - `.pre-commit-config.yaml`: exclude `local/patches/*.patch` from `trailing-whitespace`, `end-of-file-fixer` and `editorconfig-checker`. They rewrite blank context lines (` ` -> ``) in every diff in the registry; `git apply` happens to tolerate it today, but a patch with meaningful trailing whitespace would be silently corrupted. The excludes are per-hook so `validate patch registry` still runs. - README: the RcppParallel example described the 5.x problem. ## Verification Built in the published images: | image | NEEDED | RPATH | loads with system libtbb removed | | --- | --- | --- | --- | | `build-env-alpine:3.24` | `libtbb.so` | `$ORIGIN/../lib` | yes | | `build-env-redhat:8` | `libtbb.so`, `libtbbmalloc.so` | `$ORIGIN/../lib` | yes | | `build-env-ubuntu:noble` | `libtbb.so` | `$ORIGIN/../lib` | yes | Without the patch the same builds record `libtbb.so.12` (alpine, ubuntu) or `libtbb.so.2` (el8, the classic 2018 TBB) and fall back to the system library at load time. rstan 2.32.7 compiles and loads against the patched RcppParallel on ubuntu noble with no makevars override and with the system libtbb moved away. On el8 it also compiles; loading it there is blocked by an unrelated image bug (see below). ## Behaviour change Requires the paired build-env-images PR (drops `TBB_INC`/`TBB_LIB`) and an image rebuild — with those env vars set, configure still takes the system-TBB branch. After that, RcppParallel binaries ship their own oneTBB and are self-contained. ## Also found, not fixed here - The `uvr lock failed ... GLIBC_2.29 not found` errors in the same log are the `-gnu` uvr artifact on el8's glibc 2.28; fixed in build-env-images. - `build-env-redhat:8` R 4.5.3/4.6.0 cannot load `stats` (`libRlapack.so: undefined symbol: dgemmtr_`): the el8 R RPM symlinks `libRblas.so` to openblas 0.3.15, which predates that symbol. R 4.4.3 and el9 are fine. Belongs in the R RPM build. Reviewed-on: #145
60 lines
2 KiB
YAML
60 lines
2 KiB
YAML
# cSpell:ignore autofix autoupdate
|
|
# Excluded: verbatim GPL license and auxiliary shell scripts with intentional
|
|
# in-string formatting (reformatting would corrupt their output).
|
|
exclude: |
|
|
(?x)^(
|
|
LICENSE\.md|
|
|
benchmark/|
|
|
docker/reprex/
|
|
)
|
|
# The `^local/patches/.*\.patch$` excludes below keep unified diffs byte-exact:
|
|
# a context line for a blank line is a single space, and stripping it (or
|
|
# appending a newline) makes `git apply` reject the patch, which surfaces as
|
|
# "patch did not apply cleanly" at build time rather than as a lint failure
|
|
# here. The exclusions are per-hook, not global, so `validate patch registry`
|
|
# still runs when a patch changes.
|
|
repos:
|
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
rev: v6.0.0
|
|
hooks:
|
|
- id: end-of-file-fixer
|
|
exclude: ^local/patches/.*\.patch$
|
|
- id: trailing-whitespace
|
|
exclude: ^local/patches/.*\.patch$
|
|
args:
|
|
- --markdown-linebreak-ext=md
|
|
- repo: https://github.com/DavidAnson/markdownlint-cli2
|
|
rev: v0.23.2
|
|
hooks:
|
|
- id: markdownlint-cli2
|
|
- repo: https://github.com/rbubley/mirrors-prettier
|
|
rev: v3.9.6
|
|
hooks:
|
|
- id: prettier
|
|
- repo: https://github.com/posit-dev/air-pre-commit
|
|
rev: 0.11.0
|
|
hooks:
|
|
- id: air-format
|
|
- repo: https://github.com/editorconfig-checker/editorconfig-checker
|
|
rev: v3.8.0
|
|
hooks:
|
|
- id: editorconfig-checker
|
|
exclude: ^local/patches/.*\.patch$
|
|
- repo: https://github.com/adrienverge/yamllint.git
|
|
rev: v1.38.0
|
|
hooks:
|
|
- id: yamllint
|
|
args: [--strict, -c=.yamllint.yaml]
|
|
- repo: local
|
|
hooks:
|
|
- id: yaml-file-extension
|
|
name: Check if YAML files has *.yaml extension.
|
|
entry: YAML filenames must have .yaml extension.
|
|
language: fail
|
|
files: .yml$
|
|
- id: validate-patches
|
|
name: validate patch registry
|
|
entry: Rscript local/validate-patches.R
|
|
language: system
|
|
files: ^local/(patches/|validate-patches\.R$)
|
|
pass_filenames: false
|