Hello! Ludovic Courtès <l...@gnu.org> writes:
> Hi! > > (Cc: Maxim who may be familiar with the ‘texlive-font-maps’ hook.) Did you checked with Ricardo? They were the author of that hook, per git blame :-). > I have Guile as a channel, which provides guile@3.0.99-git. Trying to > add this guile package to a profile leads to a ‘texlive-font-maps.drv’ > build failure: > > $ guix describe -f channels > (list (channel > (name 'guix) > (url "https://git.savannah.gnu.org/git/guix.git") > (branch "master") > (commit > "74e96c4cb171b17949f638d8b452d047a8f2dc6f") > (introduction > (make-channel-introduction > "9edb3f66fd807b096b48283debdcddccfea34bad" > (openpgp-fingerprint > "BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA")))) > (channel > (name 'guile) > (url "https://git.savannah.gnu.org/git/guile.git") > (branch "main") > (commit > "1ae50a7f80654f04d93d900e17f3160205700a75")) > (channel > (name 'shepherd) > (url "https://git.savannah.gnu.org/git/shepherd.git") > (branch "master") > (commit > "ab0c7ec989d3afe1933aebb2e03c1d6ecb558ca6") > (introduction > (make-channel-introduction > "788a6d6f1d5c170db68aa4bbfb77024fdc468ed3" > (openpgp-fingerprint > "3CE4 6455 8A84 FDC6 9DB4 0CFB 090B 1199 3D9A EBB5"))))) > $ guix build guile > /gnu/store/1cssq3p4ndi4rvly5w607q7chrg2sj3v-guile-3.0.99-git-debug > /gnu/store/qndx3hp7cv5z8mv899k58gr9ampaa4g0-guile-3.0.99-git > $ guix show guile@3.0.99-git |grep location > location: guile-package.scm:51:4 > $ guix shell guile -- guile > The following derivation will be built: > /gnu/store/pih50yd938jz3h6zkz0kd5jffkxagp3l-profile.drv > > builder for `/gnu/store/8d71qslw04hz3dc9gk8yfp0gcp9z03bx-texlive-font-maps' > failed previously (cached) > build of /gnu/store/6h3k74mn5wpgcy0mqzh1zfa6r207jsqf-texlive-font-maps.drv > failed > View build log at > '/var/log/guix/drvs/6h/3k74mn5wpgcy0mqzh1zfa6r207jsqf-texlive-font-maps.drv.gz'. > cannot build derivation > `/gnu/store/pih50yd938jz3h6zkz0kd5jffkxagp3l-profile.drv': 1 dependencies > couldn't be built > guix shell: error: build of > `/gnu/store/pih50yd938jz3h6zkz0kd5jffkxagp3l-profile.drv' failed > > > The log file for texlive-font-maps.drv ends with: > > updmap: open() failed: No such file or directory at > /gnu/store/fd38qipvckr2jkkq2xja1n3rb9xz334r-texlive-bin-20210325/bin/updmap > line 2158. > updmap [ERROR]: The following map file(s) couldn't be found: > updmap [ERROR]: dvips35.map (in builtin) > updmap [ERROR]: pdftex35.map (in builtin) > updmap [ERROR]: ps2pk35.map (in builtin) > updmap [ERROR]: Did you run mktexlsr? > > You can disable non-existent map entries using the option > --syncwithtrees. > > Backtrace: > 2 (primitive-load "/gnu/store/pnzmvmbx1smragwnw3rlq4n6zd6?") > In ice-9/eval.scm: > 619:8 1 (_ #(#(#(#<directory (guile-user) 7ffff5fdbc80> #) #) #)) > In guix/build/utils.scm: > 762:6 0 (invoke "/gnu/store/fd38qipvckr2jkkq2xja1n3rb9xz334r-t?" ?) > > guix/build/utils.scm:762:6: In procedure invoke: > ERROR: > 1. &invoke-error: > program: > "/gnu/store/fd38qipvckr2jkkq2xja1n3rb9xz334r-texlive-bin-20210325/bin/updmap-sys" > arguments: > ("--cnffile=/gnu/store/8d71qslw04hz3dc9gk8yfp0gcp9z03bx-texlive-font-maps/share/texmf-dist/web2c/updmap.cfg" > > "--dvipdfmxoutputdir=/gnu/store/8d71qslw04hz3dc9gk8yfp0gcp9z03bx-texlive-font-maps/share/texmf-dist/fonts/map/dvipdfmx/updmap" > > "--dvipsoutputdir=/gnu/store/8d71qslw04hz3dc9gk8yfp0gcp9z03bx-texlive-font-maps/share/texmf-dist/fonts/map/dvips/updmap" > > "--pdftexoutputdir=/gnu/store/8d71qslw04hz3dc9gk8yfp0gcp9z03bx-texlive-font-maps/share/texmf-dist/fonts/map/pdftex/updmap") > exit-status: 1 > term-signal: #f > stop-signal: #f > > > The ‘texlive-font-maps-builder’ file starts with: > > (begin > (use-modules > (guix build utils) > (guix build union) > (ice-9 popen)) > (union-build "/tmp/texlive" > (quote > ()) > #:create-all-directories? #t #:log-port > (%make-void-port "w")) > (setenv "PATH" > (string-append > "/gnu/store/8fpk2cja3f07xls48jfnpgrzrljpqivr-coreutils-8.32/bin" ":" > "/gnu/store/hrgqa7m498wfavq4awai3xz86ifkjxdr-grep-3.6/bin" ":" > "/gnu/store/zhd6blbfz40xp62i4d1rcgbyrpkynbkc-sed-4.8/bin")) > (setenv "PERL5LIB" > "/gnu/store/fd38qipvckr2jkkq2xja1n3rb9xz334r-texlive-bin-20210325/share/tlpkg") > (setenv "GUIX_TEXMF" "/tmp/texlive/share/texmf-dist") > > So the failure is caused by the fact that /tmp/texlive is in fact empty. > > How does this happen? I think there’s a logic failure in this bit of > ‘texlive-font-maps’ in (guix profiles): > > (mlet %store-monad ((texlive-base (manifest-lookup-package manifest > "texlive-base"))) > (if texlive-base > (gexp->derivation "texlive-font-maps" build > #:substitutable? #f > #:local-build? #t > #:properties > `((type . profile-hook) > (hook . texlive-font-maps))) > (return #f))) > > In this case, ‘texlive-base’ is found among the native inputs of > guile@3.0.99-git. > > However, the profile itself contains zero texlive-* packages, hence the > failure. > > There are probably two things to fix: > > 1. The ‘manifest-lookup-package’ check seems inconsistent with what’s > passed to ‘union-build’. I think this is the problem to fix. It's non-intuitive that manifest-lookup-package transitively looks for things instead of looking at the profile. I actually got tripped by that as well when I authored gdk-pixbuf-loaders-cache-file, so there's now a comment in that same file that reads: ;; XXX: MANIFEST-LOOKUP-PACKAGE transitively searches through ;; every input referenced by the manifest, while MANIFEST-INPUTS ;; only retrieves the immediate inputs as well as their ;; propagated inputs; to avoid causing an empty output derivation ;; we must ensure that the inputs contain at least one ;; loaders.cache file. This is why we include gdk-pixbuf or ;; librsvg when they are transitively found. I think we need a 'manifest-lookup-inputs' or similar that stops at the profile, to work at the same depth as manifest-inputs. Then it wouldn't find texlive-base and the hook wouldn't run (and fail). What do you think? -- Thanks, Maxim