[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Troubles building "nimble" with nim
From: |
Trev |
Subject: |
Re: Troubles building "nimble" with nim |
Date: |
Sun, 24 Jul 2022 08:13:16 -0700 |
User-agent: |
Notmuch/0.36 (https://notmuchmail.org) Emacs/28.1 (x86_64-pc-linux-gnu) |
Efraim Flashner <efraim@flashner.co.il> writes:
>
> try changing this to "stdlib_osproc.nim.c"
>
I am not sure how I missed this with grep, but I clearly did. I am able
to finish the build :D
I just need to tell the install step to move the additional binaries.
Thanks for your help!
> 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
--
Trev : 0FB7 D06B 4A2A F07E AD5B 1169 183B 6306 8AA1 D206
signature.asc
Description: PGP signature