Noé Lopez <[email protected]> writes:

> Sébastien Gendre <[email protected]> writes:
>
>> Hello everyone,
>>
>> I try to define a Guix package for the JMRI application and I get an
>> error during the build of the Guix package. But when I build manually
>> this application from it's source code, it work.
>>
>> JMRI is a Java application that use the Ant build system.
>>
>> Here is how I defined the Guix package in a file named "train.scm":
>>
>>     (define-module (gnu packages train)
>>       #:use-module ((guix licenses) #:prefix license:)
>>       #:use-module (guix utils)
>>       #:use-module (guix packages)
>>       #:use-module (guix git-download)
>>       #:use-module (guix build-system ant)
>>       #:use-module (gnu packages)
>>       #:use-module (gnu packages version-control))
>>     
>>     
>>     (define-public java-jmri
>>       (package
>>        (name "JMRI")
>>        (version "5.12")
>>        (source (origin
>>                 (method git-fetch)
>>                 (uri (git-reference
>>                       (url "https://github.com/JMRI/JMRI";)
>>                       (commit (string-append "v" version))))
>>                 (file-name (git-file-name name version))
>>                 (sha256
>>                  (base32 
>> "0hd8sl81w1i2c1qhyz55bfdsjf1zbw0l6crg206ik7fv5qsnwsxp"))))
>>        (build-system ant-build-system)
>>        (arguments
>>         (list #:build-target "package-linux"))
>>        (native-inputs
>>         (list git))
>>        (home-page "https://www.jmri.org";)
>>        (synopsis "Set of community-developed tools for configuring and 
>> running your model railroad")
>>        (description
>>         "...")
>>        (license license:gpl2)))
>>     
>>     java-jmri
>>
>>
>> When I try to install the package with this command:
>>
>>     guix package --install-from-file=train.scm
>>
>> I get an error:
>>
>>     guix package: erreur : build of 
>> `/gnu/store/5c4xjyi0jsdwbipz88gghb9ghvjsfgah-JMRI-5.12.drv' failed
>>
>>
>> The build log explain in more details what error I get:
>>
>>     starting phase `build'
>>     Buildfile: /tmp/guix-build-JMRI-5.12.drv-0/source/build.xml
>>          [exec] Result: 128
>>          [echo] settings.dir assumed to be //.jmri
>>     
>>     BUILD FAILED
>>     /tmp/guix-build-JMRI-5.12.drv-0/source/build.xml:125: Directory 
>> /.jmri/lib creation was not successful for an unknown reason
>>     
>>     Total time: 0 seconds
>>     error: in phase 'build': uncaught exception:
>>     %exception #<&invoke-error program: "ant" arguments: ("package-linux") 
>> exit-status: 1 term-signal: #f stop-signal: #f> 
>>     phase `build' failed after 0.5 seconds
>>     command "ant" "package-linux" failed with status 1
>>     build process 10 exited with status 256
>>
>>
>> Apparently, Ant try to create a directory as "/.jmri/lib", which fail.
>> In the `build.yml` file, line 125, the directory is set as
>> "${settings.dir}/lib". And "settings.dir" is set as
>> "${user.home}/.jmri" (line 121).
>>
>> When I manually build this application from its code sources, it end
>> successfully. In this case, I use this command:
>>
>>    ant package-linux
>>
>>
>> My hypothesis is when Guix run Ant, Ant cannot define "user.home".
>>
>> Does someone had the same problem ?
>>
>>
>> Best regards
>>
>> -------
>> Gendre Sébastien
>
> Hi Sébastien,
>
> To add to Ian’s answer, $HOME is not defined by default in build
> environments.
>
> Its possible that adding a phase like the following example to your
> package can provide an easy fix.
>
> (add-before 'build 'set-home
>   (lambda _
>     (setenv "HOME" "/tmp")))
>

add-before 'configure might be more appropriate

> The root cause of your issue being that "${user.home}/.jmri" would
> expand to /.jmri since $HOME is not set.
>
> Good day,
> Noé

Attachment: signature.asc
Description: PGP signature

Reply via email to