;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2017, 2018, 2020–2022 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2019 Jesse Gibbons <jgibbons2357+guix@gmail.com>
;;; Copyright © 2019, 2020, 2021 Timotej Lazar <timotej.lazar@araneo.si>
;;; Copyright © 2019, 2022 Liliana Marie Prikler <liliana.prikler@gmail.com>
;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2021 Leo Famulari <leo@famulari.name>
;;; Copyright © 2023 Zheng Junjie <873216071@qq.com>
;;; Copyright © 2023 Sarthak Shah <shahsarthakw@gmail.com>
;;;
;;; 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 toys)
  #:use-module (gnu packages)
  #:use-module (gnu packages base)
  #:use-module (gnu packages bash)
  #:use-module (gnu packages bison)
  #:use-module (gnu packages flex)
  #:use-module (gnu packages gtk)
  #:use-module (gnu packages man)
  #:use-module (gnu packages maths)
  #:use-module (gnu packages multiprecision)
  #:use-module (gnu packages ncurses)
  #:use-module (gnu packages perl)
  #:use-module (gnu packages pretty-print)
  #:use-module (gnu packages pkg-config)
  #:use-module (gnu packages xml)
  #:use-module (gnu packages xorg)
  #:use-module (guix build-system gnu)
  #:use-module (guix build-system copy)
  #:use-module (guix build-system meson)
  #:use-module (guix download)
  #:use-module (guix gexp)
  #:use-module (guix git-download)
  #:use-module ((guix licenses) #:prefix license:)
  #:use-module (guix packages)
  #:use-module (guix utils))

(define-public daikichi
  (package
    (name "daikichi")
    (version "0.3.0")
    (source (origin
              (method git-fetch)
              (uri (git-reference
                    (url "https://gitlab.com/lilyp/daikichi")
                    (commit version)))
              (file-name (git-file-name name version))
              (sha256
               (base32
                "1y35f1qpxl743s0s83dg5ivkvprv19mqn0azm14k3y8pmp6cs52z"))))
    (build-system meson-build-system)
    (arguments
     (list #:phases
           #~(modify-phases %standard-phases
               (add-after 'unpack 'hard-code-test-paths
                 (lambda* (#:key inputs #:allow-other-keys)
                   (substitute* (list "test-dat.in" "test-strings.in")
                     (("(basename|cmp|diff|mktemp|rm|sed|seq)" cmd)
                      (search-input-file inputs
                                         (string-append "bin/" cmd)))))))))
    (inputs (list bash-minimal coreutils sed
                  diffutils
                  fmt gmp))
    (native-inputs (list pkg-config))
    (home-page "https://gitlab.com/lilyp/daikichi")
    (synopsis "Display random fortunes")
    (description "Daikichi is an alternative implementation of
@command{fortune}, which displays random quotes from a database.
This package provides just the utilities and no quotes.")
    (license license:gpl3+)
    (native-search-paths
     (list (search-path-specification
            (variable "DAIKICHI_FORTUNE_PATH")
            (files '("share/fortunes")))))))

(define-public fortunes-jkirchartz
  ;; No public release.
  ;; Note to updaters: Please ensure that new quotes do not bring harm
  ;; rather than fortune.
  (let ((commit "2e32ba0a57e3842dc06c8128d880ab4c8ec3aefc")
        (revision "0"))
    (package
      (name "fortunes-jkirchartz")
      (version (git-version "0" revision commit))
      (source (origin
                (method git-fetch)
                (uri (git-reference
                      (url "https://github.com/JKirchartz/fortunes")
                      (commit commit)))
                (file-name (git-file-name name version))
                (sha256
                 (base32
                  "1ym4ldzww5yfd76q7zvhi491bqlykfjnc215bqx1cbj0c8ndb2l4"))
                (snippet
                 #~(for-each delete-file
                             ;; incompatible license
                             '("BibleAbridged")))))
      (build-system copy-build-system)
      (native-inputs (list daikichi gnu-make))
      (arguments
       (list #:install-plan
             #~`(("." "share/fortunes" #:include-regexp ("\\.dat$")))
             #:phases
             #~(modify-phases %standard-phases
                 (add-after 'unpack 'patch-source
                   (lambda* (#:key inputs native-inputs #:allow-other-keys)
                     (substitute* "showerthoughts"
                       (("&lt;") "<")
                       (("&gt;") ">")
                       (("&amp;") "&"))
                     (substitute* "Makefile"
                       (("strfile") "daikichi pack"))))
                 (add-before 'install 'build
                   (lambda _
                     (invoke "make")))
                 (add-after 'build 'check
                   (lambda* (#:key inputs tests? #:allow-other-keys)
                     (when tests?
                       (apply
                        invoke
                        (search-input-file inputs "libexec/daikichi/test-dat")
                        (find-files "." "\\.dat$"))))))))
      (home-page "https://github.com/JKirchartz/fortunes")
      (synopsis "Collection of fortunes")
      (description "This package contains a large collection of quotes to
display via @command{fortune}, drawn from sources all around the world.")
      (license license:unlicense))))

(define-public lolcat
  (package
    (name "lolcat")
    (version "1.5")
    (source
     (origin
       (method git-fetch)
       (uri (git-reference
             (url "https://github.com/jaseg/lolcat")
             (commit (string-append "v" version))))
       (sha256
        (base32
         "1vq5y4wzjnj5r9jd085mifw84wz6hnp8p9gnd2d3x3jg9xwb0jmc"))
       (file-name (git-file-name name version))))
    (build-system gnu-build-system)
    (arguments
     (list
      #:tests? #f                    ; no check target
      #:make-flags
      #~(list (string-append "CC=" #$(cc-for-target)))
      #:phases
      #~(modify-phases %standard-phases
          (delete 'bootstrap)
          (delete 'configure)
          (replace 'install
            (lambda _
              (let ((dest (string-append #$output "/bin")))
                (mkdir-p dest)
                (install-file "lolcat" dest)
                (install-file "censor" dest)))))))
    (home-page "https://github.com/jaseg/lolcat")
    (synopsis "Rainbow coloring effect for text console display")
    (description "@command{lolcat} concatenates files and streams like
regular @command{cat}, but it also adds terminal escape codes between
characters and lines resulting in a rainbow effect.")
    (license license:wtfpl2)))

(define-public oneko
  (package
    (name "oneko")
    (version "1.2.sakura.5")
    (source
     (origin
       (method url-fetch)
       (uri (string-append
             "http://www.daidouji.com/oneko/distfiles/oneko-" version ".tar.gz"))
       (sha256
        (base32 "0bxjlbafn10sfi5d06420pg70rpvsiy5gdbm8kspd6qy4kqhabic"))
       (patches (search-patches "oneko-remove-nonfree-characters.patch"))
       (modules '((guix build utils)))
       (snippet
        ;; Remove bitmaps with copyright issues.
        '(begin
           (for-each delete-file-recursively
                     (cons* "bitmaps/bsd" "bitmaps/sakura" "bitmaps/tomoyo"
                            "bitmasks/bsd" "bitmasks/sakura" "bitmasks/tomoyo"
                            (find-files "cursors" "(bsd|card|petal).*\\.xbm")))))))
    (build-system gnu-build-system)
    (native-inputs
     (list imake))
    (inputs
     (list libx11 libxext))
    (arguments
     `(#:tests? #f ; no tests
       #:phases
       (modify-phases %standard-phases
         (replace 'configure
           (lambda _
             (invoke "xmkmf")
             ;; Fix incorrectly generated compiler flags.
             (substitute* "Makefile"
               (("(CDEBUGFLAGS = ).*" _ front) (string-append front "-O2\n")))))
         (replace 'install
           (lambda* (#:key outputs make-flags #:allow-other-keys)
             (let* ((out (assoc-ref outputs "out"))
                    (bin (string-append out "/bin"))
                    (doc (string-append out "/share/doc/" ,name "-" ,version))
                    (man (string-append out "/share/man"))
                    (man6 (string-append man "/man6"))
                    (man6-ja (string-append man "/ja/man6")))
               (install-file "oneko" bin)
               (mkdir-p man6)
               (mkdir-p man6-ja)
               (copy-file "oneko.man" (string-append man6 "/oneko.6"))
               (copy-file "oneko.man.jp" (string-append man6-ja "/oneko.6"))
               (for-each (lambda (file) (install-file file doc))
                         (find-files "." "README.*"))))))))
    (home-page "http://www.daidouji.com/oneko/")
    (synopsis "Cute cat chasing your mouse pointer")
    (description
     "Oneko displays an animated cat or dog that chases the mouse pointer---now
an actual mouse or a bone---around the screen while you work.

It was written for the X Window system and does not work well on Wayland.")
    (license license:public-domain))) ; see https://directory.fsf.org/wiki/Oneko

(define-public sl
  (package
    (name "sl")
    (version "5.02")
    (source
     (origin
       (method git-fetch)
       (uri (git-reference
             (url "https://github.com/mtoyoda/sl")
             (commit version)))
       (file-name (git-file-name name version))
       (sha256
        (base32 "1zrfd71zx2px2xpapg45s8xvi81xii63yl0h60q72j71zh4sif8b"))))
    (build-system gnu-build-system)
    (inputs
     (list ncurses))
    (arguments
     `(#:phases
       (modify-phases %standard-phases
         (delete 'configure)            ; no configure script
         (delete 'check)                ; no tests
         (replace 'install              ; no ‘make install’ target
           (lambda* (#:key outputs #:allow-other-keys)
             (let* ((out (assoc-ref outputs "out"))
                    (bin (string-append out "/bin"))
                    (man (string-append out "/share/man"))
                    (man1 (string-append man "/man1"))
                    (man1-ja (string-append man "/ja/man1")))
               (install-file "sl" bin)
               (install-file "sl.1" man1)
               (mkdir-p man1-ja)
               (copy-file "sl.1.ja" (string-append man1-ja "/sl.1"))
               #t))))))
    (home-page "http://www.tkl.iis.u-tokyo.ac.jp/~toyoda/index_e.html")
    (synopsis "Joke command to correct typing \"sl\" by mistake")
    (description
     "@dfn{SL} (for Steam Locomotive) displays one of several animated trains
on the text terminal.  It serves no useful purpose but to discourage mistakenly
typing @command{sl} instead of @command{ls}.")
    (license (license:non-copyleft "file://LICENSE"
                                   "See LICENSE in the distribution."))))

(define-public filters
  (package
    (name "filters")
    (version "2.55")
    (source
     (origin
       (method git-fetch)
       (uri (git-reference
             (url "git://git.joeyh.name/filters")
             (commit version)))
       (file-name (git-file-name name version))
       (sha256
        (base32 "1gaigpda1w9wxfh8an3sam1hpacc1bhxl696w4yj0vzhc6izqvxs"))
       (modules '((guix build utils)))
       (snippet '(begin
                   ;; kenny is under nonfree Artistic License (Perl) 1.0.
                   (delete-file "kenny")
                   (substitute* "Makefile"
                     (("kenny")
                      ""))))))
    (build-system gnu-build-system)
    (arguments
     `(#:parallel-build? #f             ;y.tab.h fails otherwise
       #:make-flags
       (list (string-append "CC=" ,(cc-for-target))
             (string-append "prefix=" (assoc-ref %outputs "out")))
       #:phases
       (modify-phases %standard-phases
         (delete 'configure)
         (add-after 'unpack 'respect-prefix
           (lambda _
             (substitute* "Makefile"
               (("/usr/games")
                "$(prefix)/bin/")
               (("/usr")
                "$(prefix)"))
             #t)))
       #:tests? #f))                    ; no test suite
    (native-inputs
     (list bison flex))
    (inputs
     (list perl))
    (home-page "https://joeyh.name/code/filters/")
    (synopsis "Various amusing text filters")
    (description
     "The filters collection harks back to the late 1980s, when various text
filters were written to munge written language in amusing ways.  The earliest
and best known were legends such as the Swedish Chef filter and B1FF.

This package contains the following filter commands:
@enumerate
@item b1ff: a satire of a stereotypical Usenet newbie
@item censor: comply with the @acronym{CDA, Communications Decency Act}
@item chef: convert English to Mock Swedish
@item cockney: Cockney English
@item elee: k3wl hacker slang
@item fanboy: a stereotypical fan (supports custom fandoms)
@item fudd: Elmer Fudd
@item jethro: hillbilly text filter
@item jibberish: a random selection of these filters
@item jive: Jive English
@item ken: turn English into Cockney
@item kraut: a bad German accent
@item ky00te: a very cute accent
@item LOLCAT: as seen in Internet GIFs everywhere
@item nethackify: wiped-out text as found in nethack
@item newspeak: à la 1984
@item nyc: Brooklyn English
@item pirate: talk like a pirate
@item rasterman: straight from the keyboard of Carsten Haitzler
@item scottish: fake Scottish (Dwarven) accent
@item scramble: scramble the \"inner\" letters of each word
@item spammer: turn honest text into something liable to be flagged as spam
@item studly: studly caps.
@item uniencode: use glorious Unicode to the fullest possible extent
@item upside-down: flip the text upside down
@end enumerate

The GNU project hosts a similar collection of filters, the GNU talkfilters.")
    (license                      ; see debian/copyright
     (list license:gpl2+          ; most of the filters
           license:gpl2           ; rasterman, ky00te.dir/* nethackify, pirate
           license:gpl3+          ; scramble, scottish
           license:public-domain  ; jethro, kraut, ken, studly
           license:gpl1+          ; cockney, jive, nyc only say "gpl"
           license:expat))))     ; newspeak

(define-public xsnow
  (package
    (name "xsnow")
    (version "3.7.7")
    (source
     (origin
       (method url-fetch)
       (uri (string-append
             "https://www.ratrabbit.nl/downloads/xsnow/xsnow-"
             version ".tar.gz"))
       (sha256
        (base32 "1wiwlqbc6lfcq69hln8mxsms327sjbdpv0mmkfi9j2xrcgmw41bs"))))
    (build-system gnu-build-system)
    (arguments
     '(#:phases
       (modify-phases %standard-phases
         (add-before 'configure 'fix-install-path
           (lambda _
             ;; Install program to bin instead of games.
             (substitute* "src/Makefile.in"
               (("(gamesdir = \\$\\(exec_prefix\\)/)games" _ prefix)
                (string-append prefix "bin")))
             #t)))))
    (inputs
     (list gsl libx11 libxpm libxt libxml2))
    (native-inputs
     (list pkg-config))
    (propagated-inputs
     (list gdk-pixbuf gtk+))
    (home-page "https://www.ratrabbit.nl/ratrabbit/xsnow/index.html")
    (synopsis "Let it snow on the desktop")
    (description "@code{Xsnow} animates snowfall and Santa with reindeer on
the desktop background.  Additional customizable effects include wind, stars
and various scenery elements.")
    (license license:gpl3+)))

(define-public xpenguins
  (package
    (name "xpenguins")
    (version "3.2.1")
    (source
     (origin
       (method url-fetch)
       (uri (string-append
             "https://ratrabbit.nl/downloads/xpenguins/xpenguins-"
             version ".tar.gz"))
       (sha256
        (base32 "03qwc7gf21d2ixkrxxwwgayj6f5fv1kg4b7ggx90j5269il63adm"))))
    (build-system gnu-build-system)
    (arguments
     (list
      #:phases
      #~(modify-phases %standard-phases
          (add-before 'configure 'fix-install-path
            (lambda _
              ;; Install program to bin/ instead of games/.
              (substitute* "src/Makefile.in"
                (("(gamesdir = \\$\\(exec_prefix\\)/)games" _ prefix)
                 (string-append prefix "bin"))))))))
    (inputs
     (list gtk+ libx11 libxml2 libxpm libxt))
    (native-inputs
     (list pkg-config))
    (home-page
     "https://www.ratrabbit.nl/ratrabbit/software/xpenguins/index.html")
    (synopsis "Let penguins take over your desktop!")
    (description "Xpenguins is a vintage application showing penguins running,
flying and falling on the desktop, using windows as run paths.")
    (license license:gpl2+)))

(define-public xfishtank
  (package
    (name "xfishtank")
    (version "3.2.1")
    (source
     (origin
       (method url-fetch)
       (uri (string-append
             "https://www.ratrabbit.nl/downloads/xfishtank/xfishtank-"
             version "~pre1.tar.gz"))
       ;; Version has ~pre1 in it.  Guix store does not allow tilde in file
       ;; names.  Save it in the Store using a hyphen.
       (file-name (string-append name "-" version "-pre1.tar.gz"))
       (sha256
        (base32 "16i9diawkmar6dhx5xn0mflr2h585gamab6137hvxzgaczx55lwp"))))
    (build-system gnu-build-system)
    (arguments
     (list
      #:phases
      #~(modify-phases %standard-phases
          (add-before 'configure 'fix-install-path
            (lambda _
              ;; Install program to bin/ instead of games/.
              (substitute* "src/Makefile.in"
                (("(gamesdir = \\$\\(exec_prefix\\)/)games" _ prefix)
                 (string-append prefix "bin"))))))))
    (inputs
     (list gtk+ libx11 libxml2 libxpm libxt))
    (native-inputs
     (list pkg-config))
    (home-page
     "https://www.ratrabbit.nl/ratrabbit/software/xfishtank/index.html")
    (synopsis "Let fish swim over your desktop!")
    (description "Xfishtank is a vintage application that uses the X11
protocol.  It shows fishes swimming over the desktop.")
    (license (list license:expat license:gpl3+))))

(define-public nyancat
  (package
    (name "nyancat")
    (version "1.5.2")
    (source
      (origin
        (method git-fetch)
        (uri (git-reference
               (url "https://github.com/klange/nyancat")
               (commit version)))
        (file-name (git-file-name name version))
        (sha256
         (base32
          "1mg8nm5xzcq1xr8cvx24ym2vmafkw53rijllwcdm9miiz0p5ky9k"))))
    (build-system gnu-build-system)
    (arguments
     `(#:make-flags '(,(string-append "CC=" (cc-for-target)))
       #:phases
       (modify-phases %standard-phases
         (delete 'configure) ; no configure script
         (replace 'install
           (lambda* (#:key outputs #:allow-other-keys)
             (let* ((out (assoc-ref outputs "out"))
                    (bin (string-append out "/bin"))
                    (man (string-append out "/share/man/man1")))
               (install-file "src/nyancat" bin)
               (install-file "nyancat.1" man))
             #t)))))
    (home-page "https://nyancat.dakko.us/")
    (synopsis "Nyan cat telnet server")
    (description
     "This is an animated, color, ANSI-text telnet server that renders a loop
of the Nyan Cat / Poptart Cat animation.")
    (license license:ncsa)))

(define-public cbonsai
  (package
    (name "cbonsai")
    (version "1.3.1")
    (source (origin
              (method git-fetch)
              (uri (git-reference
                     (url "https://gitlab.com/jallbrit/cbonsai.git")
                     (commit (string-append "v" version))))
              (file-name (git-file-name name version))
              (sha256
               (base32
                "1krsrf7gilmpnba6hjgz8mk32vs55b4i1rxlp7ajrw0v487blljw"))))
    (build-system gnu-build-system)
    (arguments
     `(#:tests? #f ; No test suite
       #:make-flags
       (list (string-append "CC=" ,(cc-for-target))
             (string-append "PREFIX=" (assoc-ref %outputs "out")))
       #:phases
       (modify-phases %standard-phases
         (delete 'configure) ; No ./configure script
         (add-after 'install 'install-doc
           (lambda* (#:key outputs #:allow-other-keys)
             (let* ((out (assoc-ref outputs "out"))
                    (doc (string-append out "/share/doc/" ,name "-"
                                        ,(package-version this-package))))
               (install-file "README.md" doc)))))))
    (native-inputs
     (list pkg-config scdoc))
    (inputs
     (list ncurses))
    (home-page "https://gitlab.com/jallbrit/cbonsai")
    (synopsis "Grow bonsai trees in a terminal")
    (description "Cbonsai is a bonsai tree generator using ASCII art.  It
creates, colors, and positions a bonsai tree, and is configurable.")
    (license license:gpl3+)))
(license (license:non-copyleft "file://COPYRIGHT")))) (define-public libfixposix (package (name "libfixposix") (version "0.4.3") (home-page "https://github.com/sionescu/libfixposix") (source (origin (method git-fetch) (uri (git-reference (url home-page) (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "1x4q6yspi5g2s98vq4qszw4z3zjgk9l5zs8471w4d4cs6l97w08j")))) (build-system gnu-build-system) (native-inputs (list autoconf automake libtool pkg-config check)) (native-search-paths (list (search-path-specification (variable "C_INCLUDE_PATH") (files '("include"))))) (synopsis "Thin wrapper over POSIX syscalls") (description "The purpose of libfixposix is to offer replacements for parts of POSIX whose behaviour is inconsistent across *NIX flavours.") (license license:boost1.0))) (define-public libhx (package (name "libhx") (version "4.9") (source (origin (method url-fetch) (uri (string-append "https://inai.de/files/libhx/" "libHX-" version ".tar.xz")) (sha256 (base32 "16rwp8b2j8l0m27rffvb7ma350r79l611sa135hzfywkdli2bqh2")))) (build-system gnu-build-system) (home-page "https://inai.de/projects/libhx/") (synopsis "C library with common data structures and functions") (description "This is a C library (with some C++ bindings available) that provides data structures and functions commonly needed, such as maps, deques, linked lists, string formatting and autoresizing, option and config file parsing, type checking casts and more.") (license license:lgpl2.1+))) (define-public libcsptr (package (name "libcsptr") (version "2.0.3") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/Snaipe/libcsptr") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "056yg1irxi90ccgf646jxzngbsm946ckyzn8ykl92h6d2mnr141a")))) (build-system gnu-build-system) (native-inputs (list autoconf automake libtool)) (home-page "https://snai.pe/c/c-smart-pointers/") (synopsis "Smart pointers for GNU C") (description "This package is an attempt at bringing smart pointers like C++'s unique_ptr and shared_ptr to C through GCC's cleanup attribute.") (license license:expat))) (define-public libwuya ;; This commit is the one before "wuy_pool.h" was removed from libwuya, ;; which libleak currently requires. (let ((revision "1") (commit "883502041044f4616cfbf75c8f2bb60059f704a9")) (package (name "libwuya") (version (git-version "0.0" revision commit)) (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/WuBingzheng/libwuya") (commit commit))) (file-name (git-file-name name version)) (sha256 (base32 "1xrsqbgr13g2v0ag165ryp7xrwzv41xfygzk2a3445ca98c1qpdc")))) (build-system gnu-build-system) (arguments `(#:tests? #f ;no test suite #:phases (modify-phases %standard-phases (add-after 'unpack 'patch-lua-includes (lambda _ (substitute* '("wuy_cflua.h" "wuy_cflua.c") (("<lua5\\.1/") "<")) #t)) (add-after 'unpack 'add--fPIC-to-CFLAGS (lambda _ (substitute* "Makefile" (("CFLAGS[^\n]*" all) (string-append all " -fPIC"))) #t)) (add-before 'build 'set-CC (lambda _ (setenv "CC" "gcc") #t)) (delete 'configure) ;no configure script (replace 'install (lambda* (#:key outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) (include-dir (string-append out "/include")) (headers (find-files "." "\\.h$"))) (for-each (lambda (h) (install-file h include-dir)) headers) (install-file "libwuya.a" (string-append out "/lib")) #t)))))) (inputs (list lua)) (home-page "https://github.com/WuBingzheng/libwuya/") (synopsis "C library implementing various data structures") (description "The @code{libwuya} library implements data structures such as dictionaries, skip lists, and memory pools.") ;; There is no clear information as to what license this is distributed ;; under, but it is included (bundled) with libleak from the same author ;; under the GNU GPL v2 or later license, so use this here until it is ;; clarified (see: https://github.com/WuBingzheng/libwuya/issues/2). (license license:gpl2+)))) (define-public packcc (package (name "packcc") (version "1.8.0") (home-page "https://github.com/arithy/packcc") (source (origin (method git-fetch) (uri (git-reference (url home-page) (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "0b25p7ri1l2l20awyknljfnj7r4rg7cf2x3bljijx5q6j8rxdcsg")))) (build-system gnu-build-system) (arguments '(#:phases (modify-phases %standard-phases (delete 'configure) (add-before 'build 'chdir (lambda _ (chdir "build/gcc"))) (add-before 'check 'pre-check (lambda _ (setenv "CC" "gcc") ;; The style tests are supposed to be skipped when ;; uncrustify is unavailable, but a stray version ;; check prevents it from working. This can be ;; removed for future versions of PackCC. (substitute* "../../tests/style.d/style.bats" (("^[[:blank:]]+check_uncrustify_version") "")))) (replace 'install (lambda* (#:key outputs #:allow-other-keys) (let ((out (assoc-ref outputs "out"))) (install-file "release/bin/packcc" (string-append out "/bin")) (install-file "../../README.md" (string-append out "/share/doc/packcc")))))))) (native-inputs (list bats)) (synopsis "Packrat parser generator for C") (description "PackCC is a packrat parser generator for the C programming language. Its main features are: @itemize @item Generates a parser in C from a grammar described in a PEG. @item Gives your parser great efficiency by packrat parsing. @item Supports direct and indirect left-recursive grammar rules. @end itemize The grammar of your parser can be described in a @acronym{PEG, Parsing Expression Grammar}. The PEG is a top-down parsing language, and is similar to the regular-expression grammar. The PEG does not require tokenization to be a separate step, and tokenization rules can be written in the same way as any other grammar rules.") (license license:expat))) (define-public sfsexp (package (name "sfsexp") (version "1.4.1") (home-page "https://github.com/mjsottile/sfsexp") (source (origin (method git-fetch) (uri (git-reference (url home-page) (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "03srnpc7p1j7ygd0wx9gybcxhqm50kjzkybh1xs75nwz97q3y2dq")))) (build-system gnu-build-system) (native-inputs (list autoconf automake libtool)) (synopsis "Symbolic expression library for C and C++") (description "sfsexp is a C/C++ library to read, parse, modify, and create symbolic expressions.") (license license:lgpl2.1+))) (define-public c-template-sort ;; The latest commit is used as there is no release. (let ((commit "24f5b8b13810ad130109c7b56daf8e99ab0fe1b8") (revision "0")) (package (name "c-template-sort") (version (git-version "0.0.0" revision commit)) (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/swenson/sort") (commit commit))) (file-name (git-file-name name version)) (sha256 (base32 "0q3pgw51rjq7pb6gc7zx9i48pckyl930lcab4ngxrpa5a8flq850")))) (build-system copy-build-system) (arguments (list #:install-plan #~'(("sort.h" "include/sort.h") ("sort_extra.h" "include/sort_extra.h")) #:phases #~(modify-phases %standard-phases (add-before 'install 'check (lambda* (#:key tests? #:allow-other-keys) (when tests? (invoke "make" "test" (string-append "CC=" #$(cc-for-target))))))))) (home-page "https://github.com/swenson/sort") (synopsis "C implementation of many sorting algorithms") (description "This package provides a header-only C library, that implements several sorting algorithms. It is configured using macros and supports user-defined types.") (license license:expat)))) (define-public sparse (package (name "sparse") (version "0.6.4") (source (origin (method url-fetch) (uri (string-append "mirror://kernel.org/software/devel/sparse/dist/" "sparse-" version ".tar.xz")) (sha256 (base32 "0z1qds52144nvsdnl82r3zs3vax618v920jmffyyssmwj54qpcka")))) (build-system gnu-build-system) (inputs (list perl)) (arguments '(#:make-flags `(,(string-append "PREFIX=" (assoc-ref %outputs "out"))) #:phases (modify-phases %standard-phases (delete 'configure) (add-after 'unpack 'patch-cgcc (lambda _ (substitute* "cgcc" (("'cc'") (string-append "'" (which "gcc") "'")))))))) (synopsis "Semantic C parser for Linux development") (description "Sparse is a semantic parser for C and is required for Linux development. It provides a compiler frontend capable of parsing most of ANSI C as well as many GCC extensions, and a collection of sample compiler backends, including a static analyzer also called @file{sparse}. Sparse provides a set of annotations designed to convey semantic information about types, such as what address space pointers point to, or what locks a function acquires or releases.") (home-page "https://sparse.wiki.kernel.org/index.php/Main_Page") (license license:expat))) (define-public libestr (package (name "libestr") (version "0.1.11") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/rsyslog/libestr") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "1ca4rj90c0dn7kqpbcchkflxjw88a7rxcnwbr0gply4a28i01nd8")))) (build-system gnu-build-system) (arguments `(#:phases (modify-phases %standard-phases ;; autogen.sh calls configure at the end of the script. (replace 'bootstrap (lambda _ (invoke "autoreconf" "-vfi")))))) (native-inputs (list autoconf automake pkg-config libtool)) (home-page "https://github.com/rsyslog/libestr") (synopsis "Helper functions for handling strings") (description "This C library contains some essential string manipulation functions and more, like escaping special characters.") (license license:lgpl2.1+))) (define-public libfastjson (package (name "libfastjson") (version "0.99.9") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/rsyslog/libfastjson") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "12rqcdqxazw8czzxbivdapdgj19pcswpw1jp2915sxbljis83g6q")))) (build-system gnu-build-system) (native-inputs (list autoconf automake libtool)) (home-page "https://github.com/rsyslog/libfastjson") (synopsis "Fast JSON library for C") (description "libfastjson is a fork from json-c aiming to provide: a small library with essential JSON handling functions, sufficiently good JSON support (not 100% standards compliant), and very fast processing.") (license license:expat))) (define-public liblogging (package (name "liblogging") (version "1.0.6") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/rsyslog/liblogging") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "1l32m0y65svf5vxsgw935jnqs6842rcqr56dmzwqvr00yfrjhjkp")))) (build-system gnu-build-system) (arguments `(#:phases (modify-phases %standard-phases ;; autogen.sh calls configure at the end of the script. (replace 'bootstrap (lambda _ (invoke "autoreconf" "-vfi")))))) (native-inputs (list autoconf automake pkg-config libtool ;; For rst2man.py python-docutils)) (home-page "https://github.com/rsyslog/liblogging") (synopsis "Easy to use and lightweight signal-safe logging library") (description "Liblogging is an easy to use library for logging. It offers an enhanced replacement for the syslog() call, but retains its ease of use.") (license license:bsd-2))) (define-public liblognorm (package (name "liblognorm") (version "2.0.6") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/rsyslog/liblognorm.git") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "1pyy1swvq6jj12aqma42jimv71z8m66zy6ydd5v19cp2azm4krml")))) (build-system gnu-build-system) (arguments (list #:parallel-tests? #false ;not supported #:phases '(modify-phases %standard-phases ;; These tests fail because tmp.rulebase is never created. This ;; looks rather harmless. (add-after 'unpack 'delete-failing-tests (lambda _ (substitute* "tests/Makefile.am" (("string_rb_simple.sh ") "") (("string_rb_simple_2_lines.sh ") ""))))))) (inputs (list json-c libestr libfastjson)) (native-inputs (list autoconf automake libtool pkg-config)) (home-page "https://www.liblognorm.com") (synopsis "Fast samples-based log normalization library") (description "Liblognorm normalizes event data into well-defined name-value pairs and a set of tags describing the message.") ;; liblognorm is very slowly transitioning to ASL2.0 ;; See https://github.com/rsyslog/liblognorm/issues/329 (license license:lgpl2.1+))) (define-public unifdef (package (name "unifdef") (version "2.12") (source (origin (method url-fetch) ;; https://dotat.at/prog/unifdef/unifdef-2.12.tar.xz (uri (string-append "https://dotat.at/prog/" name "/" name "-" version ".tar.xz")) (sha256 (base32 "00647bp3m9n01ck6ilw6r24fk4mivmimamvm4hxp5p6wxh10zkj3")) (modules '((guix build utils))) (snippet '(begin (delete-file-recursively "FreeBSD") (delete-file-recursively "win32") #t)))) (build-system gnu-build-system) (arguments `(#:phases (modify-phases %standard-phases (delete 'configure)) #:make-flags (list (string-append "CC=" ,(cc-for-target)) (string-append "prefix=" %output)) #:tests? #f)) ;no test suite (native-inputs (list perl)) (home-page "https://dotat.at/prog/unifdef/") (synopsis "Utility to selectively processes conditional C preprocessor") (description "The @command{unifdef} utility selectively processes conditional C preprocessor @code{#if} and @code{#ifdef} directives. It removes from a file both the directives and the additional text that they delimit, while otherwise leaving the file alone. It can be useful for avoiding distractions when studying code that uses @code{#ifdef} heavily for portability.") (license (list license:bsd-2 ;all files except... license:bsd-3)))) ;...the unidef.1 manual page (define-public byacc (package (name "byacc") (version "20221106") (source (origin (method url-fetch) (uri (string-append "https://invisible-mirror.net/archives/byacc/byacc-" version ".tgz")) (sha256 (base32 "04lxggjarbidfq8ba5q6kwgqys4lhidbnz8gf3vrrb5wgcibx6d8")))) (build-system gnu-build-system) (home-page "https://invisible-island.net/byacc/byacc.html") (synopsis "Berkeley Yacc LALR parser generator") (description "Berkeley Yacc is an LALR(1) parser generator. Yacc reads the grammar specification from a file and generates an LALR(1) parser for it. The parsers consist of a set of LALR(1) parsing tables and a driver routine written in the C programming language.") (license license:public-domain))) (define-public aws-c-common (package (name "aws-c-common") ;; Update only when updating aws-crt-cpp. (version "0.6.20") (source (origin (method git-fetch) (uri (git-reference (url (string-append "https://github.com/awslabs/" name)) (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "089grcj58n4xs41kmnpaqpwsalcisjbqqb5yqahxxyfx2lf1j9c9")))) (build-system cmake-build-system) (arguments '(#:configure-flags '("-DBUILD_SHARED_LIBS=ON"))) (synopsis "Amazon Web Services core C library") (supported-systems '("i686-linux" "x86_64-linux")) (description "This library provides common C99 primitives, configuration, data structures, and error handling for the @acronym{AWS,Amazon Web Services} SDK.") (home-page "https://github.com/awslabs/aws-c-common") (license license:asl2.0))) (define-public aws-checksums (package (name "aws-checksums") ;; Update only when updating aws-crt-cpp. (version "0.1.12") (source (origin (method git-fetch) (uri (git-reference (url (string-append "https://github.com/awslabs/" name)) (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "054f2hkmkxhw83q7zsz349k82xk6bkrvlsab088pf7kn9wd4hy4k")))) (build-system cmake-build-system) (arguments '(#:configure-flags (list "-DBUILD_SHARED_LIBS=ON" (string-append "-DCMAKE_PREFIX_PATH=" (assoc-ref %build-inputs "aws-c-common"))))) (inputs (list aws-c-common)) (synopsis "Amazon Web Services checksum library") (description "This library provides cross-Platform hardware accelerated CRC32c and CRC32 with fallback to efficient C99 software implementations.") (home-page "https://github.com/awslabs/aws-checksums") (license license:asl2.0))) (define-public aws-c-event-stream (package (name "aws-c-event-stream") ;; Update only when updating aws-crt-cpp. (version "0.2.7") (source (origin (method git-fetch) (uri (git-reference (url (string-append "https://github.com/awslabs/" name)) (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "0xwwr7gdgfrphk6j7vk12rgimfim6m4qnj6hg8hgg16cplhvsfzh")))) (build-system cmake-build-system) (arguments '(#:configure-flags (list "-DBUILD_SHARED_LIBS=ON" (string-append "-DCMAKE_PREFIX_PATH=" (assoc-ref %build-inputs "aws-c-common"))))) (propagated-inputs (list aws-c-common aws-c-io aws-checksums)) (inputs (list aws-c-cal s2n)) (synopsis "Amazon Web Services client-server message format library") (description "This library is a C99 implementation for @acronym{AWS,Amazon Web Services} event stream encoding, a binary format for bidirectional client-server communication.") (home-page "https://github.com/awslabs/aws-c-event-stream") (license license:asl2.0))) (define-public aws-c-io (package (name "aws-c-io") ;; Update only when updating aws-crt-cpp. (version "0.10.20") (source (origin (method git-fetch) (uri (git-reference (url (string-append "https://github.com/awslabs/" name)) (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "07l5rfbm1irkigfv51sfygs992af8rxicmay97frbx6z21khdjnr")))) (build-system cmake-build-system) (arguments '(#:configure-flags (list "-DBUILD_SHARED_LIBS=ON" (string-append "-DCMAKE_PREFIX_PATH=" (assoc-ref %build-inputs "aws-c-common")) "-DENABLE_NET_TESTS=OFF"))) (propagated-inputs (list aws-c-cal aws-c-common s2n)) (synopsis "Event driven framework for implementing application protocols") (description "This library provides a C99 framework for constructing event-driven, asynchronous network application protocols.") (home-page "https://github.com/awslabs/aws-c-io") (license license:asl2.0))) (define-public aws-c-cal (package (name "aws-c-cal") ;; Update only when updating aws-crt-cpp. (version "0.5.17") (source (origin (method git-fetch) (uri (git-reference (url (string-append "https://github.com/awslabs/" name)) (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "0gd7xfzv509vcysifzfa8j2rykkc1prhiry7953snblkzm7airm5")))) (build-system cmake-build-system) (arguments '(#:configure-flags (list "-DBUILD_SHARED_LIBS=ON" (string-append "-DCMAKE_PREFIX_PATH=" (assoc-ref %build-inputs "aws-c-common"))))) (propagated-inputs (list aws-c-common)) (inputs `(("openssl" ,openssl) ("openssl:static" ,openssl "static"))) (synopsis "Amazon Web Services Crypto Abstraction Layer") (description "This library provides a C99 wrapper for hash, HMAC, and ECC cryptographic primitives for the @acronym{AWS,Amazon Web Services} SDK.") (home-page "https://github.com/awslabs/aws-c-cal") (license license:asl2.0))) (define-public aws-c-sdkutils (package (name "aws-c-sdkutils") ;; Update only when updating aws-crt-cpp. (version "0.1.2") (source (origin (method git-fetch) (uri (git-reference (url (string-append "https://github.com/awslabs/" name)) (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "14wpl3dxwjbbzas44v6m6m3ll89rgz34x9gb140qz624gwzs9v0v")))) (build-system cmake-build-system) (arguments '(#:configure-flags (list "-DBUILD_SHARED_LIBS=ON" (string-append "-DCMAKE_PREFIX_PATH=" (assoc-ref %build-inputs "aws-c-common"))))) (propagated-inputs (list aws-c-common)) (synopsis "Amazon Web Service utility library") (description "This library provides for parsing and management of profiles for the @acronym{AWS,Amazon Web Services} SDK.") (home-page "https://github.com/awslabs/aws-c-sdkutils") (license license:asl2.0))) (define-public pcl (package (name "pcl") (version "1.12") (source (origin (method url-fetch) (uri (string-append "http://www.xmailserver.org/pcl-" version ".tar.gz")) (sha256 (base32 "06ly65rq4iyj2p4704i215c8y4rgspwl8sxfaifmf4ahfr30bcz7")))) (build-system gnu-build-system) (home-page "http://www.xmailserver.org/libpcl.html") (synopsis "Portable Coroutine Library") (description "The @acronym{PCL, Portable Coroutine Library} implements the low level functionality for coroutines.") (license license:gpl2+))) (define-public aws-c-http (package (name "aws-c-http") ;; Update only when updating aws-crt-cpp. (version "0.6.13") (source (origin (method git-fetch) (uri (git-reference (url (string-append "https://github.com/awslabs/" name)) (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "125glc9b3906r95519zqfbzzz6wj5ib4im2n45yxrigwkkpffbq9")))) (build-system cmake-build-system) (arguments '(#:configure-flags (list "-DBUILD_SHARED_LIBS=ON" (string-append "-DCMAKE_PREFIX_PATH=" (assoc-ref %build-inputs "aws-c-common")) "-DENABLE_NET_TESTS=OFF"))) (propagated-inputs (list aws-c-compression aws-c-io)) (synopsis "Amazon Web Services HTTP library") (description "This library provides a C99 implementation of the HTTP/1.1 and HTTP/2 specifications.") (home-page "https://github.com/awslabs/aws-c-http") (license license:asl2.0))) (define-public aws-c-compression (package (name "aws-c-compression") ;; Update only when updating aws-crt-cpp. (version "0.2.14") (source (origin (method git-fetch) (uri (git-reference (url (string-append "https://github.com/awslabs/" name)) (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "0fs3zhhzxsb9nfcjpvfbcq79hal7si2ia1c09scab9a8m264f4vd")))) (build-system cmake-build-system) (arguments '(#:configure-flags (list "-DBUILD_SHARED_LIBS=ON" (string-append "-DCMAKE_PREFIX_PATH=" (assoc-ref %build-inputs "aws-c-common"))))) (propagated-inputs (list aws-c-common)) (synopsis "Amazon Web Services compression library") (description "This library provides a C99 implementation of compression algorithms, currently limited to Huffman encoding and decoding.") (home-page "https://github.com/awslabs/aws-c-compression") (license license:asl2.0))) (define-public aws-c-auth (package (name "aws-c-auth") ;; Update only when updating aws-crt-cpp. (version "0.6.11") (source (origin (method git-fetch) (uri (git-reference (url (string-append "https://github.com/awslabs/" name)) (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "0frfnbifkrib9l68mj92a3g1x8xc8hpdlzbga2a801zgf2flx4fy")) (patches (search-patches "aws-c-auth-install-private-headers.patch")))) (build-system cmake-build-system) (arguments '(#:configure-flags (list "-DBUILD_SHARED_LIBS=ON" (string-append "-DCMAKE_PREFIX_PATH=" (assoc-ref %build-inputs "aws-c-common")) "-DENABLE_NET_TESTS=OFF"))) (propagated-inputs (list aws-c-cal aws-c-common aws-c-http aws-c-io aws-c-sdkutils)) (synopsis "Amazon Web Services client-side authentication library") (description "This library provides a C99 implementation for AWS client-side authentication.") (home-page "https://github.com/awslabs/aws-c-auth") (license license:asl2.0))) (define-public aws-c-s3 (package (name "aws-c-s3") ;; Update only when updating aws-crt-cpp. (version "0.1.38") (source (origin (method git-fetch) (uri (git-reference (url (string-append "https://github.com/awslabs/" name)) (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "0n2y8hzb1bx3vnzlpb5hsav18dg33pwav0mpji6krz98y2l8msya")))) (build-system cmake-build-system) (arguments '(#:configure-flags (list "-DBUILD_SHARED_LIBS=ON" (string-append "-DCMAKE_PREFIX_PATH=" (assoc-ref %build-inputs "aws-c-common")) "-DENABLE_NET_TESTS=OFF"))) (propagated-inputs (list aws-c-auth aws-c-http aws-checksums)) (synopsis "Amazon Web Services client library for Amazon S3") (description "This library provides a C99 client implementation of the Simple Storage Service (S3) protocol for object storage.") (home-page "https://github.com/awslabs/aws-c-s3") (license license:asl2.0))) (define-public aws-c-mqtt (package (name "aws-c-mqtt") ;; Update only when updating aws-crt-cpp. (version "0.7.10") (source (origin (method git-fetch) (uri (git-reference (url (string-append "https://github.com/awslabs/" name)) (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "0qmzx8b4wcsq9s99q2zrhx1s3jdmfy8zs16qys9bqv45gspi3ybr")))) (build-system cmake-build-system) (arguments '(#:configure-flags (list "-DBUILD_SHARED_LIBS=ON" (string-append "-DCMAKE_PREFIX_PATH=" (assoc-ref %build-inputs "aws-c-common"))))) (propagated-inputs (list aws-c-http aws-c-io)) (synopsis "Amazon Web Services MQTT library") (description "This library provides a C99 implementation of the Message Queuing Telemetry Transport (MQTT) publish-subscribe messaging protocol.") (home-page "https://github.com/awslabs/aws-c-mqtt") (license license:asl2.0))) ;; Note: there is another mimalloc embedded in rust-mimalloc (version 1.6.4). (define-public mimalloc (package (name "mimalloc") (version "2.1.2") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/microsoft/mimalloc") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "1pyf05snc1ib7zjjm9kspvbmynd8lmxqw72qcpz8lcyzyywmz24i")))) (build-system cmake-build-system) (arguments `(#:build-type "Release" ,@(if (target-ppc32?) `(#:configure-flags '("-DMI_USE_LIBATOMIC=ON")) '()))) (synopsis "General purpose memory allocator") (description "@code{mimalloc} is a drop-in replacement for @code{malloc}.") (home-page "https://microsoft.github.io/mimalloc/") (license license:expat))) ;;; The package is named orangeduck-mpc to differentiate it from GNU mpc. (define-public orangeduck-mpc ;; The last release lacks an 'install' target. (let ((commit "7c910e9303833c349f7432188ff77f2745254df2") (revision "0")) (package (name "orangeduck-mpc") (version (git-version "0.9.0" revision commit)) (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/orangeduck/mpc") (commit commit))) (file-name (git-file-name name version)) (sha256 (base32 "01a4vcxdnz0fbn90c9zc3jzklyqqvp9sfjpjwpq0f5r0l2pp37ad")) (patches (search-patches "orangeduck-mpc-fix-pkg-config.patch")))) (build-system gnu-build-system) (arguments (list #:make-flags #~(list (string-append "CC=" #$(cc-for-target)) (string-append "PREFIX=" #$output)) #:phases #~(modify-phases %standard-phases (add-after 'unpack 'patch-Makefile (lambda _ (substitute* "Makefile" ;; Do not attempt to alter the permissions, ;; otherwise 'install' would error with ;; "cannot stat [...] Permission denied" ;; errors. (("\\s\\-m[0-9]{3}\\s") " ")))) (delete 'configure)))) (home-page "https://github.com/orangeduck/mpc") (synopsis "Parser Combinator library for C ") (description "@code{mpc} is a lightweight Parser Combinator library for C. @code{mpc} can help with tasks such as: @itemize @item Building a new programming language @item Building a new data format @item Parsing an existing programming language @item Parsing an existing data format @item Embedding a Domain Specific Language @item Implementing Greenspun's Tenth Rule. @end itemize") (license license:bsd-2)))) ;;; Factored out of the ck package so that it can be adjusted and called on ;;; the host side easily, without impacting the package definition. (define (gnu-triplet->ck-machine target) (letrec-syntax ((matches (syntax-rules (=>) ((_ (target-prefix => machine) rest ...) (if (string-prefix? target-prefix target) machine (matches rest ...))) ((_) (error "unsupported target" target))))) ;; This basically reproduces the logic handling the ;; PLATFORM variable in the configure script of ck. (matches ("x86_64" => "x86_64") ("i586" => "x86") ("i686" => "x86") ("aarch64" => "aarch64") ("arm" => "arm") ("ppc64" => "ppc64") ("ppc" => "ppc") ("s390x" => "s390x") ("riscv64" => "riscv64") ("sparc64" => "sparcv9")))) (define-public ck (package (name "ck") (version "0.7.1") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/concurrencykit/ck") (commit version))) (file-name (git-file-name name version)) (sha256 (base32 "020yzfpvymdc8lc44znlnxmxb8mvp42g4nb4p8k814klazqvwh0x")))) (build-system gnu-build-system) (arguments (list #:phases #~(modify-phases %standard-phases (replace 'configure ;; ck uses a custom configure script that stumbles on ;; '--enable-fast-install', among other things. (lambda* (#:key parallel-build? #:allow-other-keys) (define target-machine #$(and=> (%current-target-system) gnu-triplet->ck-machine)) (when target-machine ;; The configure script doesn't currently work for ;; cross-compiling (see: ;; https://github.com/concurrencykit/ck/issues/191). (error "ck cannot currently be cross-compiled")) ;; The custom configure script doesn't make cross-compilation ;; adjustments itself, so manually set the archiver, compiler ;; and linker. (setenv "AR" #$(ar-for-target)) (setenv "CC" #$(cc-for-target)) (setenv "LD" #$(ld-for-target)) (apply invoke "./configure" `(,@(if target-machine (list (string-append "--profile=" target-machine)) '()) ,(string-append "--prefix=" #$output) ,(string-append "--mandir=" #$output "/share/man") ,(string-append "--cores=" (if parallel-build? (number->string (parallel-job-count)) "1"))))))))) (home-page "https://github.com/concurrencykit/ck") (synopsis "C library for concurrent systems") (description "Concurrency Kit (@code{ck}) provides concurrency primitives, safe memory reclamation mechanisms and non-blocking (including lock-free) data structures designed to aid in the research, design and implementation of high performance concurrent systems developed in C99+.") (license (list license:bsd-2 ;everything except... license:asl2.0)))) ;src/ck_hp.c (define-public tinydir (package (name "tinydir") (version "1.2.6") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/cxong/tinydir") (commit version))) (file-name (git-file-name name version)) (sha256 (base32 "143n6yabznxk032gv5g2k8glf0kzicarg9cx0714zsbfmzj8lr07")) (patches (search-patches "tinydir-fix-cbehave-test.patch")) (modules '((guix build utils))) (snippet '(delete-file-recursively "tests/cbehave")))) (build-system cmake-build-system) (arguments (list #:phases #~(modify-phases %standard-phases (add-after 'unpack 'path-cmake (lambda _ (substitute* "tests/CMakeLists.txt" (("^include_dir.*cbehave.*") (string-append "include_directories("#$cbehave "/include)")) (("^add_subdir.*cbeha.*") "")))) (add-before 'configure 'chdir (lambda _ (chdir "tests"))) (replace 'install (lambda _ (install-file "../tinydir.h" (string-append #$output "/include"))))))) (native-inputs (list cbehave)) (home-page "https://github.com/cxong/tinydir") (synopsis "List directories programmatically") (description "@code{tinydir} is a header-only C wrapper for listing directory contents.") (license license:bsd-2))) (define-public libdispatch (package (name "libdispatch") (version "5.9.2") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/apple/swift-corelibs-libdispatch") (commit (string-append "swift-" version "-RELEASE")))) (file-name (git-file-name name version)) (sha256 (base32 "02k90asz0yxrcmy67mmqqc68n8f16jf445l0n7jryb7nk30bgmm6")))) (build-system cmake-build-system) (arguments (list #:phases #~(modify-phases %standard-phases ;; Use Clang instead of GCC. (add-before 'configure 'prepare-build-environment (lambda _ (setenv "AR" "llvm-ar") (setenv "NM" "llvm-nm") (setenv "CC" "clang") (setenv "CXX" "clang++")))))) (native-inputs (list clang llvm)) (home-page "https://apple.github.io/swift-corelibs-libdispatch/") (synopsis "Concurrent code execution on multicore hardware") (description "Grand Central Dispatch (GCD or libdispatch) implements a concurrency model wherein program tasks are divided into work items. These can be run sequentially or in parallel, with optional synchronization in between, and GCD will take care of dispatching tasks to available cores.") (license license:asl2.0))) (define-public utf8-h ;; The latest tag is used as there is no release. (let ((commit "500d4ea9f4c3449e5243c088d8af8700f7189734") (revision "0")) (package (name "utf8-h") (version (git-version "0.0.0" revision commit)) (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/sheredom/utf8.h") (commit commit))) (file-name (git-file-name "utf8.h" version)) (sha256 (base32 "0x9f7ivww8c7cigf4ck0hfx2bm79qgx6q4ccwzqbzkrmcrl9shfb")))) (build-system cmake-build-system) (arguments (list #:phases #~(modify-phases %standard-phases (delete 'build) (delete 'configure) (replace 'check (lambda* (#:key tests? #:allow-other-keys) (when tests? (with-directory-excursion "test" (invoke "cmake" ".") (invoke "make"))))) (replace 'install (lambda* (#:key outputs #:allow-other-keys) (install-file "utf8.h" (string-append #$output "/include/utf8"))))))) (home-page "https://github.com/sheredom/utf8.h") (synopsis "Single header UTF-8 string functions for C and C++") (description "A simple one header solution to supporting UTF-8 strings in C and C++. The functions it provides are like those from the C header string.h, but with a utf8* prefix instead of the str* prefix.") (license license:unlicense)))) (define-public utest-h ;; The latest commit is used as there is no release. (let ((commit "54458e248f875f1a51f0af8bec8ca6ae7761b9d1") (revision "0")) (package (name "utest-h") (version (git-version "0.0.0" revision commit)) (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/sheredom/utest.h") (commit commit))) (file-name (git-file-name "utest.h" version)) (sha256 (base32 "1ikl5jwmjdw1mblqyl2kvnqwkjgaz78c1h7mjcfmzjc0d3h8kh44")))) (build-system cmake-build-system) (arguments `(#:phases (modify-phases %standard-phases (delete 'build) (delete 'configure) (replace 'check (lambda* (#:key tests? #:allow-other-keys) (when tests? (with-directory-excursion "test" (invoke "cmake" ".") (invoke "make"))))) (replace 'install (lambda* (#:key outputs #:allow-other-keys) (let ((out (assoc-ref outputs "out"))) (install-file "utest.h" (string-append out "/include")))))))) (home-page "https://www.duskborn.com/utest_h/") (synopsis "Single-header unit testing framework for C and C++") (description "This package provides a header-only unit testing library for C/C++.") (license license:unlicense)))) (define-public nsync (package (name "nsync") (version "1.26.0") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/google/nsync") (commit version))) (file-name (git-file-name name version)) (sha256 (base32 "0qg58kkcbm4zqkql8j5yvrb7fpx09qsf7j93dwqb9s1y69l70kx4")))) (build-system cmake-build-system) (home-page "https://github.com/google/nsync") (synopsis "C library for synchronization primitives") (description "nsync is a C library that exports various synchronization primitives: @enumerate @item locks, @item condition variables, @item run-once initialization, @item waitable counter (useful for barriers), @item waitable bit (useful for cancellation, or other conditions). @end enumerate ") (license license:asl2.0))) (define-public ispc (package (name "ispc") (version "1.19.0") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/ispc/ispc") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "0yhcgyzjlrgs920lm0l6kygj2skanfb6qkxbdgm69r8c2xkzkaa3")))) (inputs (list ncurses)) (native-inputs (list bison clang flex m4 python)) (build-system cmake-build-system) (supported-systems '("x86_64-linux" "i686-linux" "aarch64-linux" "armhf-linux")) (arguments `(#:tests? #f #:configure-flags `(,,(string-append "-DCMAKE_C_COMPILER=" (cc-for-target)) ,,(string-append "-DCMAKE_CXX_COMPILER=" (cxx-for-target)) ,(string-append "-DCLANG_EXECUTABLE=" (assoc-ref %build-inputs "clang") "/bin/clang") ,(string-append "-DCLANGPP_EXECUTABLE=" (assoc-ref %build-inputs "clang") "/bin/clang++")) #:phases (modify-phases %standard-phases (add-before 'configure 'patch-curses-requirement (lambda _ (substitute* "CMakeLists.txt" (("\\bCURSES_CURSES_LIBRARY\\b") "CURSES_LIBRARY")))) ;; Note: This works around the following issue: ;; <https://github.com/ispc/ispc/issues/1865> ;; Because GCC in Guix does not have multilib support. (add-before 'configure 'patch-target-archs (lambda _ (substitute* "cmake/GenerateBuiltins.cmake" (("\\bforeach \\(bit 32 64\\)") ,(if (target-64bit?) "foreach (bit 64)" "foreach (bit 32)")) (("\\bforeach \\(arch .*?\\)") ,(if (target-x86?) "foreach (arch \"x86\")" "foreach (arch \"arm\")")) (("\\bforeach \\(os_name \"windows\" .*?\\)") "foreach (os_name \"linux\")"))))))) (synopsis "Implicit SPMD Program Compiler") (description "ISPC is a compiler for a variant of the C programming language, with extensions for single program, multiple data programming. Under the SPMD model, the programmer writes a program that generally appears to be a regular serial program, though the execution model is actually that a number of program instances execute in parallel on the hardware.") (home-page "https://github.com/ispc/ispc") (license license:bsd-3))) (define-public pcg-c (let ((commit "83252d9c23df9c82ecb42210afed61a7b42402d7") (revision "1")) (package (name "pcg-c") (version (git-version "0.0.0" revision commit)) (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/imneme/pcg-c") (commit commit))) (file-name (git-file-name name version)) (sha256 (base32 "0768h0vw75a3smk39qsz1504v04a43s5w1ili1ijbixxv8gm42nf")) (modules '((guix build utils))) ;; Autogenerated files with some tests from test-high. If ;; 128-bit integers are not supported, the build fails, but ;; this is checked when building the tests. (snippet #~(delete-file-recursively "sample")))) (build-system gnu-build-system) (arguments (list #:test-target "test" #:make-flags #~(list "CC=gcc" (string-append "PREFIX=" #$output)) #:phases #~(modify-phases %standard-phases (delete 'configure) (add-after 'unpack 'disable-sample (lambda _ (substitute* "Makefile" ((".*cd sample.*") "")))) (add-after 'unpack 'set-shared-library (lambda _ (substitute* '("Makefile" "src/Makefile") (("\\.a") "\\.so") ((".*ar .*") "\t$(CC) $(CFLAGS) -o $@ $(LDFLAGS) -shared $^") ((".*ranlib.*") "") ((".*CFLAGS \\+=.*O3.*" orig) (string-append orig "CFLAGS += -fPIC\n"))))) (add-before 'install 'make-dirs (lambda _ (mkdir-p (string-append #$output "/lib")) (mkdir-p (string-append #$output "/include"))))))) (home-page "https://www.pcg-random.org") (synopsis "C implementation of the PCG random generators") (description "The Permuted Congruential Generator (PCG) extends the Linear Congruential Generator (LCG) with a permutation function to increase output randomness while retaining speed, simplicity, and conciseness.") (license (list license:expat license:asl2.0))))) ; dual licensed