Hi Gary,

At first I was surprised to see gnu-build-system in the traceback, but it turns out copy-build-system is implemented in terms of gnu-build-system (I did not know this, maybe you did). Looking at the procedure install-license-files in gnu-build-system, there are a couple of calls to match which could be failing. If I'm reading the traceback correctly, it points to line 881, which is the call to match in find-source-directory, quoted below.

  (define (find-source-directory package)
    ;; For an out-of-source build, guess the source directory location
    ;; relative to the current directory.  Return #f on failure.
    (match (scandir ".."
                    (lambda (file)
                      (and (not (member file '("." ".." "build")))
                           (file-is-directory?
                            (string-append "../" file)))))
      (()                                         ;hmm, no source
       #f)
      ((source)                                   ;only one other file
       (string-append "../" source))
      ((directories ...)                          ;pick the most likely one
       ;; This happens for example with libstdc++, which lives within the GCC
       ;; source tree.
       (any (lambda (directory)
              (and (string-prefix? package directory)
                   (string-append "../" directory)))
            directories))))

This procedure is apparently only called when out-of-source? is true, and I am not sure what that means. Regardless, if (match (scandir ...)) does not match the given patterns, it must not be returning a list (and the traceback confirms this; it is in fact returning #f). I suppose this indicates that scandir failed for some reason, for instance that .. is not readable. Indeed my copy of the guile manual (page 743) confirms this (it cannot be the case that .. is some other type of file, so it must be an unreadable directory).

Return #f when name is unreadable or is not a directory.

This explains the error at least - the match call does not handle #f. This does however leave open some questions I do not have an answer for. I am not sure what .. is in this context. Perhaps /gnu/store? I think that can't be it, because searching the entire store for a license file in one package would be terribly wasteful. I guess .. must be the checked out source tree. But then how can it not be readable?

I hope this debugging is helpful, although I am still confused.

Best wishes,

Dan

On 28/01/2026 14:10, Gary Johnson wrote:
Hi Guix,

I recently installed Guix onto a new Ubuntu VM using the standard 
guix-install.sh script. Now on this VM, I cannot successfully build packages 
that do build correctly on my own machine.

While one might expect that I am just running different versions of Guix on 
each machine, this shouldn't be the case because I am using the same 
channels.scm file on both computers via the `guix time-machine` command. I've 
never seen different behavior between two machines running the same Guix 
version and building the same packages before, so I am utterly mystified.

Here's the error I get on my new VM when building a package:

===========================================================================

starting phase `install-license-files'
error: in phase 'install-license-files': uncaught exception:
match-error "match" "no matching pattern" #f
phase `install-license-files' failed after 0.0 seconds
Backtrace:
            9 (primitive-load "/gnu/store/mbyp0pi1lbcqzw22mv0bjpabqis…")
In guix/build/gnu-build-system.scm:
     972:2  8 (gnu-build #:source _ #:outputs _ #:inputs _ #:phases . #)
In ice-9/boot-9.scm:
   1752:10  7 (with-exception-handler _ _ #:unwind? _ # _)
In srfi/srfi-1.scm:
     634:9  6 (for-each #<procedure 71ac5e089d40 at guix/build/gnu-b…> …)
In ice-9/boot-9.scm:
   1752:10  5 (with-exception-handler _ _ #:unwind? _ # _)
In guix/build/gnu-build-system.scm:
    993:23  4 (_)
     889:7  3 (install-license-files #:outputs _ #:license-file-regexp …)
     881:4  2 (_)
In ice-9/boot-9.scm:
   1685:16  1 (raise-exception _ #:continuable? _)
   1685:16  0 (raise-exception _ #:continuable? _)

ice-9/boot-9.scm:1685:16: In procedure raise-exception:
Throw to key `match-error' with args `("match" "no matching pattern" #f)'.
build process 11 exited with status 256

===========================================================================

Here is one of the many offending files that are all failing for me like this:

(define geoserver-css-plugin
   (package
    (name "geoserver-css-plugin")
    (version "2.19.6")
    (source (origin
             (method url-fetch)
             (uri (string-append 
"https://sourceforge.net/projects/geoserver/files/GeoServer/"; version
                                 "/extensions/geoserver-" version 
"-css-plugin.zip"))
             (sha256 (base32 
"06h2avzqps4dv9lwpck14v4cpk511z1mh13d3w5ii1153rcqdihb"))))
    (build-system copy-build-system)
    (arguments '(#:install-plan '(("." "./" #:exclude 
("environment-variables")))))
    (native-inputs (list unzip))
    (home-page 
"https://docs.geoserver.org/latest/en/user/styling/css/install.html";)
    (synopsis "GeoServer CSS Plugin")
    (description "The GeoServer CSS Plugin enables you to write layer styles using 
CSS instead of SLD.")
    (license gpl2)))

In order to get them to build I have to modify their build phases like so:

(define geoserver-css-plugin
   (package
    (name "geoserver-css-plugin")
    (version "2.19.6")
    (source (origin
             (method url-fetch)
             (uri (string-append 
"https://sourceforge.net/projects/geoserver/files/GeoServer/"; version
                                 "/extensions/geoserver-" version 
"-css-plugin.zip"))
             (sha256 (base32 
"06h2avzqps4dv9lwpck14v4cpk511z1mh13d3w5ii1153rcqdihb"))))
    (build-system copy-build-system)
    (arguments '(#:phases (modify-phases %standard-phases
                                         (delete 'install-license-files))
                 #:install-plan '(("." "./" #:exclude 
("environment-variables")))))
    (native-inputs (list unzip))
    (home-page 
"https://docs.geoserver.org/latest/en/user/styling/css/install.html";)
    (synopsis "GeoServer CSS Plugin")
    (description "The GeoServer CSS Plugin enables you to write layer styles using 
CSS instead of SLD.")
    (license gpl2)))

Does anybody have any idea what could be going on here?

Thanks,
   Gary


Reply via email to