Hello, Maxim Cournoyer skribis: >> It’s indeed the case that arguments can capture references to packages >> that won’t be caught by ‘package-mapping’. For instance, if you write: >> >> (package >> … >> (arguments (list … #~(whatever #$coreutils)))) >> >> … then ‘coreutils’ here cannot be replaced. >> >> To address this, the recommendation is to always add dependencies to >> input fields and to use self-references within arguments. The example >> above should be written like this: >> >> (package >> … >> (arguments >> (list … #~(whatever #$(this-package-input "coreutils"))))) >> >> It’s just a recommendation and one can perfectly ignore it, and I >> suppose that was the impetus for this patch. >> >> This is one of the things discussed while designing this change: >> >> https://guix.gnu.org/en/blog/2021/the-big-change/ >> (search for “self-referential records”) >> >> https://issues.guix.gnu.org/49169 >> >> My take was and still is that it’s an acceptable limitation. Packagers >> need to follow the guideline above if they want proper support for >> rewriting, ‘guix graph’, and other tools. >> >> WDYT? > > But not all packages found in a bag come from inputs; they may be > provided as an argument to the build system (cmake, meson, qt, etc. all > allow for this). Yes, but these packages (#:cmake for ‘cmake-build-system’, #:python for ‘python-build-system’, etc.) become inputs of the bag, and are taken into account, as in this example: --8<---------------cut here---------------start------------->8--- $ ./pre-inst-env guix show tinyxml2 name: tinyxml2 version: 8.0.0 outputs: + out: everything systems: x86_64-linux i686-linux dependencies: location: gnu/packages/xml.scm:1295:2 homepage: http://www.grinninglizard.com/tinyxml2/ license: Zlib synopsis: Small XML parser for C++ description: TinyXML2 is a small and simple XML parsing library for the C++ programming + language. $ ./pre-inst-env guix build tinyxml2 The following graft will be made: /gnu/store/qf8w8ch1mrxk6k34g2d6bisny5pq8gnv-tinyxml2-8.0.0.drv applying 2 grafts for tinyxml2-8.0.0 ... grafting '/gnu/store/ndzyiwhypsbgrbaz7rmz3649b6ghlfal-tinyxml2-8.0.0' -> '/gnu/store/2da5frl36gd51653bjjypqvwdk0bh25v-tinyxml2-8.0.0'... successfully built /gnu/store/qf8w8ch1mrxk6k34g2d6bisny5pq8gnv-tinyxml2-8.0.0.drv /gnu/store/2da5frl36gd51653bjjypqvwdk0bh25v-tinyxml2-8.0.0 $ ./pre-inst-env guix build tinyxml2 --with-input=cmake-minimal=cmake The following derivation will be built: /gnu/store/hx0hx1nrmxzdhy9yw1d0md2q78y4spd4-tinyxml2-8.0.0.drv 8.4 MB will be downloaded: /gnu/store/qwy25ivr63087x9fdl9km0m44hn5bimg-cmake-3.25.1 /gnu/store/3vh9b2i93na8wwdrj6n0q2qbgd2fzxik-tinyxml2-8.0.0-checkout [...] /gnu/store/cmn551x8iksy44cdqypyq2129lm8ym60-tinyxml2-8.0.0 --8<---------------cut here---------------end--------------->8--- (In this case I had to apply the patch below because ‘cmake-minimal’ was mistakenly marked as hidden which, as implemented by eee95b5a879b7096dffd533f24107cf8926b621e, meant that it could not be replaced.) I gave a similar example with ‘python-build-system’ here: https://issues.guix.gnu.org/65665#10 My understanding is that understanding is that this patch series is about addressing cases as I explained above, where ‘arguments’ refer to packages directly instead of using self references. Do I get this right, Ulf? Thanks, Ludo’.