Skip to content

Instantly share code, notes, and snippets.

@gmbeard
Created December 17, 2024 21:29
Show Gist options
  • Save gmbeard/3c58c41b379fb71c6e899da195ea454f to your computer and use it in GitHub Desktop.
Save gmbeard/3c58c41b379fb71c6e899da195ea454f to your computer and use it in GitHub Desktop.
Allows modification of how `./xbps-src` resolves the versions of dependencies
This change allows you to you to modify how `./xbps-src` resolves the
versions of dependencies.
For all packages listed in `etc/repover`, xbps-src will use the binary
repository version when resolved as a depdencency, even if the srcpkg
version is greater. The pkgs must be listed one per line, and without the
version number.
**NOTE**: The use-case for this is pretty niche. You probably don't
want to do this. The author's use-case for this was that they wanted to
build their own python module, but the current srcpkg version of Python
was greater than the repo version, so the resulting binpkg was unusable
on their system.
diff --git a/etc/repover b/etc/repover
new file mode 100644
index 00000000000..4277280d6b6
--- a/etc/repover
+++ b/etc/repover
@@ -0,0 +1,9 @@
+python3
+python3-build
+python3-devel
+python3-filt_core
+python3-installer
+python3-packaging
+python3-parsing
+python3-setuptools
+python3-wheel
diff --git a/common/xbps-src/shutils/build_dependencies.sh b/common/xbps-src/shutils/build_dependencies.sh
index 0815e776726..8c612ff5310 100644
--- a/common/xbps-src/shutils/build_dependencies.sh
+++ b/common/xbps-src/shutils/build_dependencies.sh
@@ -1,5 +1,11 @@
# vim: set ts=4 sw=4 et:
#
+checkver_override() {
+ local pkg="$1"
+ [ -r "${XBPS_DISTDIR}/etc/repover" ] && \
+ grep -E "^${pkg}\b" "${XBPS_DISTDIR}/etc/repover" >/dev/null
+}
+
setup_pkg_depends() {
local pkg="$1" out="$2" with_subpkgs="$3" j _rpkgname _depname _pkgname foo _deps collected
@@ -186,6 +192,11 @@ install_pkg_deps() {
msg_error "$pkgver: host dependency '$f' does not exist!\n"
done
while read -r _depname _deprepover _depver _subpkg _repourl; do
+ if checkver_override ${_subpkg}; then
+ echo " [host] ${_subpkg}: using repover override version ${_deprepover}"
+ _depver=${_deprepover}
+ fi
+
_vpkg=${_subpkg}-${_depver}
# binary package found in a repo
if [[ ${_depver} == ${_deprepover} ]]; then
@@ -236,6 +247,11 @@ install_pkg_deps() {
msg_error "$pkgver: check dependency '$f' does not exist!\n"
done
while read -r _depname _deprepover _depver _subpkg _repourl; do
+ if checkver_override ${_subpkg}; then
+ echo " [check] ${_subpkg}: using repover override version ${_deprepover}"
+ _depver=${_deprepover}
+ fi
+
_vpkg=${_subpkg}-${_depver}
# binary package found in a repo
if [[ ${_depver} == ${_deprepover} ]]; then
@@ -286,6 +302,11 @@ install_pkg_deps() {
msg_error "$pkgver: target dependency '$f' does not exist!\n"
done
while read -r _depname _deprepover _depver _subpkg _repourl; do
+ if checkver_override ${_subpkg}; then
+ echo " [target] ${_subpkg}: using repover override version ${_deprepover}"
+ _depver=${_deprepover}
+ fi
+
_vpkg=${_subpkg}-${_depver}
# binary package found in a repo
if [[ ${_depver} == ${_deprepover} ]]; then
@@ -335,6 +356,11 @@ install_pkg_deps() {
msg_error "$pkgver: target dependency '$f' does not exist!\n"
done
while read -r _depname _deprepover _depver _subpkg _repourl; do
+ if checkver_override ${_subpkg}; then
+ echo " [runtime] ${_subpkg}: using repover override version ${_deprepover}"
+ _depver=${_deprepover}
+ fi
+
_vpkg=${_subpkg}-${_depver}
# binary package found in a repo
if [[ ${_depver} == ${_deprepover} ]]; then
diff --git a/.gitignore b/.gitignore
index e91ff787554..5b0fca8ce08 100644
--- a/.gitignore
+++ b/.gitignore
@@ -23,3 +23,4 @@ etc/conf.*
etc/virtual
etc/xbps.d/custom
etc/repo-keys
+etc/repover
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment