help-guix
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Troubles building "nimble" with nim


From: Efraim Flashner
Subject: Re: Troubles building "nimble" with nim
Date: Wed, 20 Jul 2022 18:16:54 +0300

On Wed, Jul 06, 2022 at 10:57:08AM -0700, Trev wrote:
> 
> Hello Guix!
> 
> I am in the weeds while trying to properly build "nimble", the package
> manager that is included with the nim programming language. The current
> guix package (gnu/packages/nim) completely misses this build step. I
> wonder if previous contributors also struggled with this.
> 
> For some context I am attempting to directly replicate these steps from
> https://nim-lang.org/install_unix.html:
> 
> #+BEGIN_QUOTE
> sh build.sh
> bin/nim c koch
> ./koch boot -d:release
> ./koch tools
> #+END_QUOTE
> 
> My (and the current package record) can build the nim binary using gcc, no 
> problem. However when we get to the part where nim builds its own features 
> with the compiled compiler, something seems to be trying to call =/bin/sh= 
> directly, despite hard-coded references to that process having been been 
> substituted out.
> 
> I have submitted a ticket with Nim here just so that I may ask some 
> thoughtful questions. That conversation is here: 
> https://github.com/nim-lang/Nim/issues/19976
> 
> The error output is:
> 
> #+BEGIN_SRC sh
> c_code/2_2/stdlib_browsers.nim.o c_code/2_2/@mnim.nim.o -ldl -lm -lrt
> : SUCCESS
> Hint: used config file 
> '/tmp/guix-build-nim-1.6.6.drv-0/nim-1.6.6/config/nim.cfg' [Conf]
> Hint: used config file 
> '/tmp/guix-build-nim-1.6.6.drv-0/nim-1.6.6/config/config.nims' [Conf]
> ......................................................................................................................
> CC: stdlib_digitsutils.nim
> Error: invocation of external compiler program failed. No such file or 
> directory
> Additional info: Could not find command: '/bin/sh'. OS error: No such file or 
> directory 2
> error: in phase 'build': uncaught exception:
> %exception #<&invoke-error program: "./bin/nim" arguments: ("c" "koch") 
> exit-status: 1 term-signal: #f stop-signal: #f> 
> phase `build' failed after 96.6 seconds
> command "./bin/nim" "c" "koch" failed with status 1
> #+END_SRC
> 
> My current attempt at packaging this looks like this:
> 
> #+BEGIN_SRC scheme
> (define-module (gnu packages nim)
>   #:use-module (guix build-system gnu)
>   #:use-module (guix gexp)
>   #:use-module (guix download)
>   #:use-module ((guix licenses) #:prefix license:)
>   #:use-module (guix packages)
>   #:use-module (gnu packages pcre)
>   #:use-module (gnu packages tls)
>   #:use-module (gnu packages cmake))
> 
> (define-public nim
>   (package
>     (name "nim")
>     (version "1.6.6")
>     (source
>      (origin
>        (method url-fetch)
>        (uri (string-append "https://nim-lang.org/download/";
>                            name "-" version ".tar.xz"))
>        (sha256
>         (base32 "0lm4450ig8k4l3rzxv6kcqji5l1lzicsw76ckwxm0q9qdz713cb7"))))
>     (build-system gnu-build-system)
>     (native-inputs (list pcre openssl cmake))
>     (arguments
>      `(#:tests? #f ; No tests.
>        #:phases
>        (modify-phases %standard-phases
>          (delete 'configure) ; no configure script
>          (add-after 'unpack 'patch-installer
>            (lambda* (#:key outputs #:allow-other-keys)
>              (let ((out (assoc-ref outputs "out")))
>                (substitute* "install.sh"
>                  (("/usr/") (string-append out "/usr/"))
>                  (("/etc/") (string-append out "/etc/"))
>                  (("/opt/") (string-append out "/opt/")))
>                #t)))
>          (add-after 'patch-source-shebangs 'patch-more-shebangs
>            (lambda _
>              (let ((sh (which "sh")))
>                (substitute* '("tests/stdlib/tosprocterminate.nim"
>                               "tests/stdlib/tstrscans.nim"
>                               "lib/pure/osproc.nim")
>                  (("/bin/sh") sh))
>                (substitute* (find-files "c_code" "stdlib_osproc.c")

try changing this to "stdlib_osproc.nim.c"

>                  (("\"/bin/sh\", 7") (format #f "~s, ~s" sh (string-length 
> sh)))))
>              #t))
>          (replace 'build
>            (lambda _
>              (setenv "XDG_CACHE_HOME" "./cache-home")
>              (mkdir-p "./cache-home")
>              (invoke "sh" "build.sh")
>              (invoke "./bin/nim" "c" "koch")
>              (invoke "koch" "boot" "-d:release")
>              (invoke "koch" "tools")
>              #t))
>          (replace 'install
>            (lambda* (#:key outputs #:allow-other-keys)
>              (let ((out (assoc-ref outputs "out")))
>                (mkdir-p (string-append out "/usr/bin"))
>                (invoke "./install.sh" (string-append out "/usr/bin"))
>                #t))))))
>     (home-page "https://nim-lang.org";)
>     (synopsis "Statically-typed, imperative programming language")
>     (description "Nim (formerly known as Nimrod) is a statically-typed,
> imperative programming language that tries to give the programmer ultimate 
> power
> without compromises on runtime efficiency.  This means it focuses on 
> compile-time
> mechanisms in all their various forms.")
>     (license license:expat)))
> #+END_SRC
> 
> I have tried:
> 
> 1. Symlinking (without any success) /bin/sh to (which "bash")
> 2. Exporting $SHELL to (which "bash")
> 3. Attempted (without much luck) to ~alias cc=gcc~ to see if it's not the 
> shell that's missing, it's the command "cc", and adding cmake as a separate 
> input
> 4. Grokking the Nim source code that I don't perfectly understand to see how 
> it could somehow decide to call something that isn't on path aside from a 
> string that's "/bin/sh".
>    
> If someone appreciates packaging this better than can share some wisdom, it 
> would be appreciated.
> 

> -- 
> 
> Trev : 0FB7 D06B 4A2A F07E AD5B  1169 183B 6306 8AA1 D206




-- 
Efraim Flashner   <efraim@flashner.co.il>   אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]