Pierre Neidhardt <mail@ambrevar.xyz> writes:
Toggle quote (4 lines)
> I'm not so well versed in grafting, so let me ask a few questions:>> - Why is fish grafted in the first place?
Almost any package can be grafted. A package will be grafted when anyof its inputs (direct or transitive) have been replaced. The goal ofgrafting is to build a replacement package *quickly* and then onlyrewrite references to the replaced package in all dependent packages.
The advantage is that dependent packages do not need to be rebuilt; theyjust need to be copied, scanned for references, and have theirreferences updated. This is usually *much* faster than rebuildingall dependent packages, which may be an important consideration indistributing security fixes.
Toggle quote (3 lines)
> - Is the issue here that grafting does not support wide string literals?> Shouldn't we fix the Guix code to support wide strings as well?
Grafting succeeds when we can find all references to items that shouldbe replaced – in plain text files but also in binaries. Past problemswith grafting were triggered by compiler behaviour that chopped up thesereference strings, or by build systems that split these referencestrings.
A grafting problem is usually also a garbage collection problem, becauseboth depend on successful scanning for store references.
--Ricardo