aboutsummaryrefslogtreecommitdiff
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2017 José Miguel Sánchez García <jmi2k@openmailbox.org>
;;; Copyright © 2017, 2022 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2018, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2020 Tanguy Le Carrour <tanguy@bioneland.org>
;;; Copyright © 2022 (unmatched parenthesis <paren@disroot.org>
;;; Copyright © 2022 Trevor Richards <trev@trevdev.ca>
;;; Copyright © 2023 Gruruya <greytest@disroot.org>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (gnu packages nim)
  #:use-module (guix build-system gnu)
  #:use-module (guix download)
  #:use-module ((guix licenses) #:prefix license:)
  #:use-module (guix packages)
  #:use-module (gnu packages bdw-gc)
  #:use-module (gnu packages certs)
  #:use-module (gnu packages parallel)
  #:use-module (gnu packages pcre)
  #:use-module (gnu packages sqlite)
  #:use-module (gnu packages tls))

(define-public nim
  (package
    (name "nim")
    (version "1.6.12")
    (source
     (origin
      (method url-fetch)
      (uri (string-append "https://nim-lang.org/download/"
                          name "-" version ".tar.xz"))
      (sha256
       (base32 "1hjd9dxhqzn2ifr988li8q7v6kxpxlcqbdllfd6lsq3knw50pvxc"))))
    (build-system gnu-build-system)
    (arguments
     `(#:tests? #f          ; TODO: Investigate tests failures.
       #: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/local") out)
                  (("/lib/nim") "/lib")
                  (("/opt/nimble") (string-append out "/share/nimble"))
                  (("configdir=/etc/nim")
                   (string-append "configdir=" out "/etc/nim"))))))
           (add-after 'unpack 'patch-dynamic-libraries
             (lambda* (#:key inputs native-inputs #:allow-other-keys)
               ;(substitute* "compiler/nodejs.nim"
               ;  (("nodejs")
               ;   (search-input-file (or native-inputs inputs)
               ;                      "/bin/nodejs"))
               ;  (("node")
               ;   (search-input-file (or native-inputs inputs)
               ;                      "/bin/node")))
               (substitute* "lib/system.nim"
                 (("libgc\\.so")
                  (search-input-file (or native-inputs inputs)
                                     "/lib/libgc.so")))
               ;(substitute* "lib/wrappers/mysql.nim"
               ;  (("\(libmysqlclient|libmariadbclient\)\\.so")
               ;   (search-input-file (or native-inputs inputs)
               ;                      "/lib/libmariadbclient.so")))
               (substitute* "lib/wrappers/openssl.nim"
                 (("libssl\\.so")
                  (search-input-file (or native-inputs inputs)
                                     "/lib/libssl.so"))
                 (("libcrypto\\.so")
                  (search-input-file (or native-inputs inputs)
                                     "/lib/libcrypto.so")))
               (substitute* "lib/wrappers/pcre.nim"
                 (("libpcre\\.so")
                  (search-input-file (or native-inputs inputs)
                                     "/lib/libpcre.so")))
               ;(substitute* "lib/wrappers/postgres.nim"
               ;  (("libpg\\.so")
               ;   (search-input-file (or native-inputs inputs)
               ;                      "/lib/libpg.so")))
               (substitute* "lib/wrappers/sqlite3.nim"
                 (("libsqlite3\\.so")
                  (search-input-file (or native-inputs inputs)
                                     "/lib/libsqlite3.so")))))
           (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"
                                "lib/pure/strscans.nim")
                   (("/bin/sh") sh))
                 (substitute* (find-files "c_code" "@m\\.\\.@slib@spure@sosproc\\.nim\\.c")
                   (("\"/bin/sh\", 7") (format #f "~s, ~s" sh (string-length sh)))))))
           (replace 'build
             (lambda* (#:key (parallel-build? #t) #:allow-other-keys)
               (setenv "XDG_CACHE_HOME" "./cache-home")
               (setenv "HOME" "./cache-home")
               (mkdir-p "./cache-home")
               (invoke "sh" "build.sh"
                       "--parallel"
                       (if parallel-build?
                         (number->string (parallel-job-count))
                         "1"))
               (sleep 5)        ; Wait for the parallel builds to finish.
               (invoke "./bin/nim" "c" "-d:release" "koch")
               (invoke "./koch" "boot" "-d:release")
               (invoke "./koch" "tools")))
           (replace 'check
             (lambda* (#:key tests? #:allow-other-keys)
               (when tests?
                 (invoke "./koch" "tests"))))
           (replace 'install
             (lambda* (#:key outputs #:allow-other-keys)
               (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
                 (mkdir-p bin)
                 (invoke "./install.sh" bin)
                 (for-each (lambda (file)
                             (install-file file bin))
                           (delete "testament" (find-files "bin"))))))
           (add-after 'install 'install-completions
             (lambda* (#:key outputs #:allow-other-keys)
               (let* ((share (string-append (assoc-ref outputs "out") "/share"))
                      (bash  (string-append share "/bash-completion/completions"))
                      (zsh   (string-append share "/zsh/vendor_completions")))
                 (mkdir-p bash)
                 (mkdir-p zsh)
                 (copy-file "tools/nim.bash-completion"
                            (string-append bash "/nim"))
                 (copy-file "dist/nimble/nimble.bash-completion"
                            (string-append bash "/nimble"))
                 (copy-file "tools/nim.zsh-completion"
                            (string-append zsh "/_nim"))
                 (copy-file "dist/nimble/nimble.bash-completion"
                            (string-append zsh "/_nimble"))))))))
    (inputs (list libgc openssl pcre sqlite))
    (native-inputs (list nss-certs parallel))
    (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)))
dules.scm (guix-module-name?): Likewise. * nix/libstore/optimise-store.cc: Likewise. Ludovic Courtès 2018-11-10services: dovecot: Set correct default value for the "auth" service....* gnu/services/mail.scm (dovecot-configuration): Set 'service-count' to 0 for the "auth" service. Clément Lassieur 2018-11-10services: dovecot: Allow to set 'process-limit'....* doc/guix.texi (Mail Services): Update accordingly. * gnu/services/mail.scm (service-configuration)[process-limit]: New field. (dovecot-configuration)[services]: Set 'process-limit' to its correct default value. Clément Lassieur 2018-11-10services: dovecot: Allow to set 'client-limit'....* doc/guix.texi (Mail Services): Update accordingly. * gnu/services/mail.scm (service-configuration)[client-limit]: New field. (dovecot-configuration)[services]: Set 'client-limit' to its correct default value. Clément Lassieur 2018-03-09services: dovecot: Copy dovecot.conf to /etc/dovecot....Many Dovecot utilities compiled with assumption of ‘/etc/dovecot/dovecot.conf’ existence. * gnu/services/mail.scm (dovecot-shepherd-service): Move config generation. Invoke ‘dovecot’ without ‘-c’ flag. (%dovecot-activation): Copy ‘dovecot.conf’ to ‘/etc/dovecot’. (dovecot-service-type): Make ‘%dovecot-activation’ non-constant. Oleg Pykhalov 2017-12-23gnu: dovecot: Update to 2.3.0....* gnu/packages/mail.scm (dovecot): Update to 2.3.0. * gnu/services/mail.scm (dovecot-configuration)[director-doveadm-port] [ssl-parameters-regenerate]: Delete fields. [ssl-protocols]: Rename to... [ssl-min-protocol]: ...this. [mail-log-prefix, mdbox-rotate-size, ssl-cipher-list, imap-logout-format]: Update default values. * doc/guix.texi (Mail Services): Reflect the above changes to the service. Tobias Geerinckx-Rice 2017-04-19services: Make exim-service-type use mail-aliases-service-type...* gnu/services/mail.scm (exim-configuration)[aliases]: Remove field. (exim-activation, exim-shepherd-service): Remove alias from matches. (exim-etc): Remove procedure. (exim-service-type): Extend mail-aliases-service-type instead of etc-service-type. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Carlo Zancanaro 2017-04-19services: Add mail-aliases-service-type....* gnu/services/mail.scm (mail-aliases-etc): New procedure. (mail-aliases-service-type): New variable. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Carlo Zancanaro 2017-04-01services: dovecot: Fix passwd and userdb 'args' types....* gnu/services/mail.scm (passwd-configuration)[args] (userdb-configuration)[args]: Change type from 'free-form-args' to 'space-separated-string-list'. * doc/guix.texi (Mail Services): Document it. Clément Lassieur 2017-03-12services: dovecot: Reimplement proper configuration functions....* gnu/services/mail.scm (uglify-field-name, serialize-field, serialize-string) (space-separated-string-list?, serialize-space-separated-string-list) (file-name?, serialize-file-name, serialize-boolean): Add them. These functions were inadvertently changed while being factorized in gnu/service/configuration.scm. Signed-off-by: Clément Lassieur <clement@lassieur.org> Clément Lassieur 2017-03-12services: dovecot: Fix unix_listeners and fifo_listeners path types....* gnu/services/mail.scm (unix-listener-configuration)[path] (fifo-listener-configuration)[path]: Change type from 'file-name' to 'string'. * doc/guix.texi (Mail Services): Document it. Signed-off-by: Clément Lassieur <clement@lassieur.org> Clément Lassieur 2017-03-10services: Add exim-service-type....* gnu/services/mail.scm (<exim-configuration>): New record type. (exim-computed-config-file, exim-shepherd-service, exim-activation, exim-etc, exim-profile): New procedures. (exim-service-type, %exim-accounts): New variables. * doc/guix.text (Mail Services): Document it. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Carlo Zancanaro 2017-01-25services: Fix 'mkdir-p' in activation scripts....* gnu/services/cups.scm (%cups-activation): Import (guix build utils). * gnu/services/mail.scm (opensmtpd-activation): Idem. * gnu/services/networking.scm (ntp-service-activation): Idem. * gnu/services/spice.scm (spice-vdagent-activation): Idem. * gnu/services/ssh.scm (openssh-activation): Idem. (dropbear-activation): Idem. * gnu/services/vpn.scm (%openvpn-activation): Idem. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Clément Lassieur 2016-11-26services: Factorize configuration abstraction....* gnu/services/mail.scm and gnu/services/cups.scm (&configuration-error) (configuration-error, configuration-field-error) (configuration-missing-field, configuration-field, serialize-configuration) (validate-configuration, define-configuration, uglify-field-name) (serialize-field, serialize-package, serialize-string) (serialize-space-separated-string-list, space-separated-string-list?) (serialize-file-name, file-name?, serialize-field-name) (generate-documentation): Move duplicate code... * gnu/services/configuration.scm: ...to this new file. * gnu/local.mk (GNU_SYSTEM_MODULES): Add configuration.scm. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Julien Lepiller 2016-11-26services: Add opensmtpd service....* gnu/services/mail.scm (<opensmtpd-configuration>): New record type. (%default-opensmtpd-config-file, %opensmtpd-accounts): New variables. (opensmtpd-shepherd-service, opensmtpd-activation): New procedures. (opensmtpd-service-type): New variable. * doc/guix.texi (Mail Services): Document it. 宋文武 2016-09-27gnu: New default Dovecot service postmaster_address...* gnu/services/mail.scm (dovecot-configuration): Change default for postmaster-address, as dovecot is now requiring a non-empty value and will fail to start up otherwise. * doc/guix.texi (Mail Services): Update. Andy Wingo 2016-09-16doc: "filesystem" -> "file system"...* doc/guix.texi: "filesystem" -> "file system" * gnu/packages/admin.scm: "filesystem" -> "file system" * gnu/packages/cdrom.scm: "filesystem" -> "file system" * gnu/packages/compression.scm: "filesystem" -> "file system" * gnu/packages/disk.scm: "filesystem" -> "file system" * gnu/packages/gnome.scm: "filesystem" -> "file system" * gnu/packages/irc.scm: "filesystem" -> "file system" * gnu/packages/linux.scm: "filesystem" -> "file system" * gnu/packages/mail.scm: "filesystem" -> "file system" * gnu/packages/mpd.scm: "filesystem" -> "file system" * gnu/packages/ocaml.scm: "filesystem" -> "file system" * gnu/packages/perl.scm: "filesystem" -> "file system" * gnu/packages/python.scm: "filesystem" -> "file system" * gnu/packages/search.scm: "filesystem" -> "file system" * gnu/packages/tls.scm: "filesystem" -> "file system" * gnu/services/mail.scm: "filesystem" -> "file system" John Darrington 2016-09-10system: Use 'file-append' to denote file names....* gnu/services/avahi.scm, gnu/services/base.scm, gnu/services/databases.scm, gnu/services/dbus.scm, gnu/services/desktop.scm, gnu/services/dict.scm, gnu/services/mail.scm, gnu/services/networking.scm, gnu/services/sddm.scm, gnu/services/spice.scm, gnu/services/ssh.scm, gnu/services/web.scm, gnu/services/xorg.scm, gnu/system.scm: Replace the #~(string-append #$pkg "/bin/foo") idiom with (file-append pkg "/bin/foo"). Ludovic Courtès 2016-07-21services: Export *-service-type and *-configuration....This allows users to use 'modify-services' and similar constructs for all these service types. * gnu/services/avahi.scm: export avahi-configuration. * gnu/services/base.scm: export gpm-configuration and rngd-configuration. * gnu/services/databases.scm: export *-service-type and *-configuration. * gnu/services/dbus.scm: export dbus-configuration. * gnu/services/dict.scm: export dicod-service-type. * gnu/services/lirc.scm: export lirc-configuration and lirc-service-type. * gnu/services/mail.scm: export dovecot-service-type. * gnu/services/web.scm: export nginx-configuration and nginx-service-type. * gnu/services/xorg.scm: export screen-locker and screen-locker?. * gnu/services/ssh.scm: export lsh-configuration and lsh-service-type. * gnu/services/desktop.scm: export *-service, *-service-type and *-configuration. * gnu/services/networking.scm: export *-configuration and *-service-type. Co-authored-by: Ludovic Courtès <ludo@gnu.org> Tomáš Čech 2016-01-29services: Rename 'dmd' services to 'shepherd'....* gnu/services/shepherd.scm (dmd-root-service-type, %dmd-root-service) (dmd-service-type, <dmd-service>, dmd-service, dmd-service?) (make-dmd-service, dmd-service-documentation, dmd-service-provision) (dmd-service-requirement, dmd-service-respawn, dmd-service-start) (dmd-service-stop, dmd-service-auto-start?, dmd-service-modules) (dmd-service-imported-modules, dmd-service-file-name, dmd-service-file) (dmd-service-back-edges): Rename to... (shepherd-root-service-type, %shepherd-root-service, shepherd-service-type) (<shepherd-service>, shepherd-service, shepherd-service?) (make-shepherd-service, shepherd-service-documentation) (shepherd-service-provision, shepherd-service-requirement) (shepherd-service-respawn, shepherd-service-start) (shepherd-service-stop, shepherd-service-auto-start?) (shepherd-service-modules, shepherd-service-imported-modules) (shepherd-service-file-name, shepherd-service-file) (shepherd-service-back-edges): ...this * gnu/services.scm: Adjust comments. * gnu/services/avahi.scm (avahi-dmd-service): Rename to... (avahi-shepherd-service): ... this. * gnu/services/base.scm (%root-file-system-dmd-service) (file-system->dmd-service-name, mapped-device->dmd-service-name) (dependency->dmd-service-name, file-system-dmd-service) (mingetty-dmd-service, nscd-dmd-service, guix-dmd-service) (guix-publish-dmd-service, udev-dmd-service, gpm-dmd-service): Rename to... (%root-file-system-shepherd-service) (file-system->shepherd-service-name, mapped-device->shepherd-service-name) (dependency->shepherd-service-name, file-system-shepherd-service) (mingetty-shepherd-service, nscd-shepherd-service, guix-shepherd-service) (guix-publish-shepherd-service, udev-shepherd-service) (gpm-shepherd-service): ... this. * gnu/services/databases.scm (postgresql-dmd-service): Rename to... (postgresql-shepherd-service): ... this. * gnu/services/desktop.scm (upower-dmd-service, elogind-dmd-service): Rename to... (upower-shepherd-service, elogind-shepherd-service): ... this. * gnu/services/dbus.scm (dbus-dmd-service): Rename to... (dbus-shepherd-service): ... this. * gnu/services/lirc.scm (lirc-dmd-service): Rename to... (lirc-shepherd-service): ... this. * gnu/services/mail.scm (dovecot-dmd-service): Rename to... (dovecot-shepherd-service): ... this. * gnu/services/networking.scm (ntp-dmd-service, tor-dmd-service) (bitlbee-dmd-service, wicd-dmd-service, network-manager-dmd-service): Rename to... (dbus-shepherd-service): ... this. * gnu/services/ssh.scm (lsh-dmd-service): Rename to... (lsh-shepherd-service): ... this. * gnu/services/web.scm (nginx-dmd-service): Rename to... (nginx-shepherd-service): ... this. * gnu/services/xorg.scm (slim-dmd-service): Rename to... (slim-shepherd-service): ... this. * gnu/system.scm (essential-services): Use '%shepherd-root-service'. * gnu/system/install.scm (cow-store-service-type): Adjust accordingly. * guix/scripts/system.scm (dmd-service-node-label, dmd-service-node-type) (export-dmd-graph): Likewise. * tests/guix-system.sh: Likewise. * tests/services.scm ("dmd-service-back-edges"): Rename to... ("shepherd-service-back-edges"): Adjust accordingly. * doc/guix.texi: Likewise. * doc/images/service-graph.dot: Use 'shepherd' service name. Alex Kost 2016-01-29Rename (gnu services dmd) to (gnu services shepherd)....* gnu/services/dmd.scm: Rename to... * gnu/services/shepherd.scm: ... this. * gnu/system.scm: Use it. * gnu/system/install.scm: Likewise. * gnu/services/xorg.scm: Likewise. * gnu/services/web.scm: Likewise. * gnu/services/ssh.scm: Likewise. * gnu/services/networking.scm: Likewise. * gnu/services/mail.scm: Likewise. * gnu/services/lirc.scm: Likewise. * gnu/services/desktop.scm: Likewise. * gnu/services/dbus.scm: Likewise. * gnu/services/databases.scm: Likewise. * gnu/services/base.scm: Likewise. * gnu/services/avahi.scm: Likewise. * guix/scripts/system.scm: Likewise. * tests/services.scm: Likewise. * tests/guix-system.sh: Likewise. * doc/guix.texi (Shepherd Services): Adjust accordingly. * gnu-system.am (GNU_SYSTEM_MODULES): Likewise. * po/guix/POTFILES.in: Likewise. Alex Kost 2015-12-18gnu: Add dovecot service...* gnu/services/mail.scm: New file. (&dovecot-configuration-error, dovecot-configuration-error?) (dovecot-service, dovecot-configuration, dict-configuration) (passdb-configuration, userdb-configuration) (unix-listener-configuration, fifo-listener-configuration) (inet-listener-configuration, service-configuration) (protocol-configuration, plugin-configuration, mailbox-configuration) (namespace-configuration, opaque-dovecot-configuration): New public variables. * gnu-system.am (GNU_SYSTEM_MODULES): Add (gnu services mail). * doc/guix.texi (Mail Services): New node. Andy Wingo