aboutsummaryrefslogtreecommitdiff
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2015, 2016 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2016, 2017, 2020, 2022 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2019, 2020, 2022 Marius Bakke <marius@gnu.org>
;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
;;; Copyright © 2020 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
;;; Copyright © 2020 Julien Lepiller <julien@lepiller.eu>
;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
;;; Copyright © 2023 Nicolas Graves <ngraves@ngraves.fr>
;;;
;;; 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 icu4c)
  #:use-module (gnu packages)
  #:use-module (gnu packages cpio)
  #:use-module (gnu packages java)
  #:use-module (gnu packages perl)
  #:use-module (gnu packages pkg-config)
  #:use-module (gnu packages python)
  #:use-module (guix gexp)
  #:use-module (guix licenses)
  #:use-module (guix packages)
  #:use-module (guix utils)
  #:use-module (guix download)
  #:use-module (guix git-download)
  #:use-module (guix build-system ant)
  #:use-module (guix build-system gnu))

(define-public icu4c
  (package
    (name "icu4c")
    (version "71.1")
    (source (origin
              (method url-fetch)
              (uri (string-append
                    "https://github.com/unicode-org/icu/releases/download/release-"
                    (string-map (lambda (x) (if (char=? x #\.) #\- x)) version)
                    "/icu4c-"
                    (string-map (lambda (x) (if (char=? x #\.) #\_ x)) version)
                    "-src.tgz"))
              (sha256
               (base32 "1gqywaqj9jmdwrng9lm6inyqmi5j2cz36db9dcqg3yk13zjyd9v7"))))
    (build-system gnu-build-system)
    (native-inputs
     (append (list python-minimal)
             (if (%current-target-system)
                 ;; When cross-compiling, this package needs a source directory
                 ;; of a native-build of itself.
                 (list icu4c-build-root)
                 '())))
    (inputs
     (list perl))
    (arguments
     (list
      #:configure-flags
      #~(list
         "--enable-rpath"
         #$@(if (%current-target-system)
                #~((string-append "--with-cross-build="
                                  #+(this-package-native-input
                                     "icu4c-build-root")))
                #~()))
      #:phases
      #~(modify-phases %standard-phases
          (add-after 'unpack 'chdir-to-source
            (lambda _ (chdir "source")))
          (add-after 'chdir-to-source 'update-LDFLAGS
            (lambda _
              ;; Do not create a "data-only" libicudata.so because it causes
              ;; problems on some architectures (notably armhf and MIPS).
              (substitute* "config/mh-linux"
                (("LDFLAGSICUDT=-nodefaultlibs -nostdlib")
                 "LDFLAGSICUDT="))))
          #$@(if (target-riscv64?)
                 #~((add-after 'unpack 'disable-failing-test
                      ;; It is unknown why this test is failing.
                      (lambda _
                        (substitute* "source/test/intltest/numbertest_api.cpp"
                          (("(TESTCASE_AUTO\\(unitUsage\\));" all)
                           (string-append "//" all))))))
                 #~())
          (add-after 'install 'avoid-coreutils-reference
            ;; Don't keep a reference to the build tools.
            (lambda _
              (substitute* (find-files (string-append #$output "/lib/icu")
                                       "\\.inc$")
                (("INSTALL_CMD=.*/bin/install") "INSTALL_CMD=install")))))))
    (synopsis "International Components for Unicode")
    (description
     "ICU is a set of C/C++ and Java libraries providing Unicode and
globalisation support for software applications.  This package contains the
C/C++ part.")
    (license x11)
    (home-page "http://site.icu-project.org/")))

(define-public icu4c-73
  (package
    (inherit icu4c)
    (name "icu4c")
    (version "73.1")
    (source (origin
              (method url-fetch)
              (uri (string-append
                    "https://github.com/unicode-org/icu/releases/download/release-"
                    (string-map (lambda (x) (if (char=? x #\.) #\- x)) version)
                    "/icu4c-"
                    (string-map (lambda (x) (if (char=? x #\.) #\_ x)) version)
                    "-src.tgz"))
              (sha256
               (base32
                "0iccpdvc0kvpww5a31k9gjkqigyz016i7v80r9zamd34w4fl6mx4"))
              (patches
               (append
                (search-patches
                 "icu4c-icu-22132-fix-vtimezone.patch"
                 "icu4c-fix-TestHebrewCalendarInTemporalLeapYear.patch")
                (origin-patches (package-source icu4c))))))))

(define-public icu4c-70
  (package
    (inherit icu4c)
    (version "70.1")
    (source (origin
              (method url-fetch)
              (uri (string-append
                    "https://github.com/unicode-org/icu/releases/download/release-"
                    (string-map (lambda (x) (if (char=? x #\.) #\- x)) version)
                    "/icu4c-"
                    (string-map (lambda (x) (if (char=? x #\.) #\_ x)) version)
                    "-src.tgz"))
              (sha256
               (base32
                "1m9zgkaf5lyh65nyc6n0n5bs2f5k53nnj1ih6nskpwbvq4l5884d"))))
    (arguments
     (if (target-riscv64?)
       (substitute-keyword-arguments (package-arguments icu4c)
         ((#:phases phases)
          #~(modify-phases #$phases
              (replace 'disable-failing-test
                ;; It is unknown why these tests are failing.
                (lambda _
                  (substitute* "source/test/cintltst/ucptrietest.c"
                    ((".*addTest.*") ""))
                  (substitute* "source/test/intltest/numbertest_api.cpp"
                    (("(TESTCASE_AUTO\\(unitUsage\\));" all)
                     (string-append "//" all))))))))
       (package-arguments icu4c)))))

(define-public icu4c-69
  (package
    (inherit icu4c)
    (version "69.1")
    (source (origin
              (method url-fetch)
              (uri (string-append
                    "https://github.com/unicode-org/icu/releases/download/release-"
                    (string-map (lambda (x) (if (char=? x #\.) #\- x)) version)
                    "/icu4c-"
                    (string-map (lambda (x) (if (char=? x #\.) #\_ x)) version)
                    "-src.tgz"))
              (sha256
               (base32
                "0icps0avkwy5df3wwc5kybxcg63hcgk4phdh9g244g0xrmx7pfjc"))))))

(define-public icu4c-build-root
  (package
    (inherit icu4c)
    (name "icu4c-build-root")
    (arguments
     (substitute-keyword-arguments (package-arguments icu4c)
       ((#:tests? _ #f)
         #f)
        ((#:out-of-source? _ #t)
         #t)
        ((#:phases phases)
         #~(modify-phases #$phases
             (replace 'install
               (lambda _
                 (copy-recursively "../build" #$output)))))))
    (native-inputs '())))

(define-public java-icu4j
  (package
    (name "java-icu4j")
    (version "70.1")
    (source (origin
              (method url-fetch)
              (uri (string-append
                    "https://github.com/unicode-org/icu/releases/download/release-"
                    (string-map (lambda (x) (if (char=? x #\.) #\- x)) version)
                    "/icu4j-"
                    (string-map (lambda (x) (if (char=? x #\.) #\_ x)) version)
                    ".tgz"))
              (sha256
               (base32 "0qrs75iyzn19kf54q55jn8wf6xjlpkrihdwqpxm39jdh2hz4cgvj"))))
    (build-system ant-build-system)
    (arguments
     `(#:make-flags
       ,#~(list
           (string-append "-Djunit.core.jar="
                          (car (find-files
                                #$(this-package-native-input "java-junit")
                                ".*.jar$")))
           (string-append "-Djunit.junitparams.jar="
                          (car (find-files
                                #$(this-package-native-input "java-junitparams")
                                ".*.jar$")))
           (string-append "-Djunit.hamcrest.jar="
                          (car (find-files
                                #$(this-package-native-input "java-hamcrest-core")
                                ".*.jar$"))))
       #:phases
       (modify-phases %standard-phases
         (add-before 'configure 'chdir
           (lambda _
             (chdir "..")))
         (add-before 'build 'remove-ivy
           (lambda _
             ;; This target wants to download ivy and use it to download
             ;; junit.
             (substitute* "build.xml"
               (("depends=\"test-init-junit-dependency\"") ""))))
         (replace 'install
           (lambda* (#:key outputs #:allow-other-keys)
             (let ((share (string-append (assoc-ref outputs "out")
                                         "/share/java/")))
               (mkdir-p share)
               (install-file "icu4j.jar" share)))))))
    (native-inputs
     (list java-junit java-junitparams java-hamcrest-core))
    (home-page "http://site.icu-project.org/")
    (synopsis "International Components for Unicode")
    (description
     "ICU is a set of C/C++ and Java libraries providing Unicode and
globalisation support for software applications.  This package contains the
Java part.")
    (license x11)))

(define-public icu4c-for-skia
  ;; The current version of skia needs this exact commit
  ;; for its test dependencies.
  (let ((commit "a0718d4f121727e30b8d52c7a189ebf5ab52421f")
        (revision "0"))
    (package
      (inherit icu4c)
      (name "icu4c-for-skia")
      (version "skia")
      (source
       (origin
         (method git-fetch)
         (uri (git-reference
               (url "https://chromium.googlesource.com/chromium/deps/icu.git")
               (commit commit)))
         (file-name (git-file-name name version))
         (sha256
          (base32 "1qxws2p91f6dmhy7d3967r5ygz06r88pkmpm97px067x0zzdz384"))))
      (arguments
       (list
        #:make-flags #~(list (string-append "DESTDIR=" #$output))
        #:configure-flags #~(list "--prefix=" "--exec-prefix=")
        #:phases
        #~(modify-phases %standard-phases
            (add-after 'unpack 'chdir-to-source
              (lambda _ (chdir "source")))
            (replace 'configure
              (lambda* (#:key inputs parallel-build? configure-flags
                        #:allow-other-keys)
                (setenv "CONFIG_SHELL" (which "sh"))
                (setenv "OPTS" (string-join configure-flags))
                (invoke "./runConfigureICU" "Linux/gcc"
                        "--disable-layout" "--disable-tests")))
            (add-after 'install 'install-cleanup
              (lambda* (#:key make-flags #:allow-other-keys)
                (with-directory-excursion "data"
                  (apply invoke "make" "clean" make-flags))))
            (add-after 'install-cleanup 'configure-filtered-data
              (lambda* (#:key configure-flags #:allow-other-keys)
                (setenv "OPTS" (string-join configure-flags))
                (setenv "ICU_DATA_FILTER_FILE"
                        (string-append (getcwd) "/../filters/common.json"))
                (invoke "./runConfigureICU" "Linux/gcc"
                        "--disable-layout" "--disable-tests")))
            (add-after 'configure-filtered-data 'build-filtered-data
              (lambda* (#:key parallel-build? make-flags #:allow-other-keys)
                (let ((job-count (if parallel-build?
                                     (number->string (parallel-job-count))
                                     "1")))
                  (apply invoke "make" "-j" job-count make-flags)
                  (setenv "DESTDIR" #$output)
                  (invoke "bash" "../scripts/copy_data.sh" "common"))))
            (add-after 'build-filtered-data 'install-scripts-and-data
              (lambda _
                (let* ((share (string-append #$output "/share"))
                       (scripts (string-append share "/scripts"))
                       (data (string-append share "/data/common")))
                  ;; Install scripts.
                  (mkdir-p scripts)
                  (copy-recursively "../scripts/" scripts)
                  ;; Install data.
                  (mkdir-p data)
                  (copy-recursively "./dataout/common/data/out/tmp" data)
                  (symlink (string-append data "/icudt69l.dat")
                           (string-append data "/icudtl.dat")))))
            (add-before 'check 'disable-failing-uconv-test
              (lambda _
                (substitute* "extra/uconv/Makefile.in"
                  (("check: check-local")
                   "")))))))
      (native-inputs (list cpio pkg-config python)))))
/commit/build-aux/build-self.scm?id=ac4d2ec81a9f7c439b21b4c4ae4a2e949c78ab2e'>build-self: Emit a useful message upon error....* build-aux/build-self.scm (build): Raise a '&message' condition instead of calling 'error'. Ludovic Courtès 2018-09-13build-self: Add a dummy (git) module to 'compute-guix-derivation'....Fixes a regression introduced in aed0a594058a59bc3bb1d2686391dc0e8a181b1f. * build-aux/build-self.scm (build-program)[fake-git]: New variable. Use it as an imported module. Ludovic Courtès 2018-09-09Merge branch 'master' into core-updatesMarius Bakke 2018-09-06build-self: Accomodate upgrades from May 2016 and earlier....Reported by Paul Garlick <pgarlick@tourbillion-technology.com>. Fixes a bug whereby "old" Guix instances (before mid-May 2018) would fail to pull to current master. Specifically, Paul reported being unable to upgrade from 6f84dc4314cd84550d9fc7e7afa11c495edc45a5 (a commit that predates that addition of the 'bootstrap' phase on gnu-build-system on 'master' and that also predates the new 'guix pull'.) * build-aux/build-self.scm (guile-gcrypt)[arguments]: New field. Ludovic Courtès 2018-09-04Switch to Guile-Gcrypt....This removes (guix hash) and (guix pk-crypto), which now live as part of Guile-Gcrypt (version 0.1.0.) * guix/gcrypt.scm, guix/hash.scm, guix/pk-crypto.scm, tests/hash.scm, tests/pk-crypto.scm: Remove. * configure.ac: Test for Guile-Gcrypt. Remove LIBGCRYPT and LIBGCRYPT_LIBDIR assignments. * m4/guix.m4 (GUIX_ASSERT_LIBGCRYPT_USABLE): Remove. * README: Add Guile-Gcrypt to the dependencies; move libgcrypt as "required unless --disable-daemon". * doc/guix.texi (Requirements): Likewise. * gnu/packages/bash.scm, guix/derivations.scm, guix/docker.scm, guix/git.scm, guix/http-client.scm, guix/import/cpan.scm, guix/import/cran.scm, guix/import/crate.scm, guix/import/elpa.scm, guix/import/gnu.scm, guix/import/hackage.scm, guix/import/texlive.scm, guix/import/utils.scm, guix/nar.scm, guix/pki.scm, guix/scripts/archive.scm, guix/scripts/authenticate.scm, guix/scripts/download.scm, guix/scripts/hash.scm, guix/scripts/pack.scm, guix/scripts/publish.scm, guix/scripts/refresh.scm, guix/scripts/substitute.scm, guix/store.scm, guix/store/deduplication.scm, guix/tests.scm, tests/base32.scm, tests/builders.scm, tests/challenge.scm, tests/cpan.scm, tests/crate.scm, tests/derivations.scm, tests/gem.scm, tests/nar.scm, tests/opam.scm, tests/pki.scm, tests/publish.scm, tests/pypi.scm, tests/store-deduplication.scm, tests/store.scm, tests/substitute.scm: Adjust imports. * gnu/system/vm.scm: Likewise. (guile-sqlite3&co): Rename to... (gcrypt-sqlite3&co): ... this. Add GUILE-GCRYPT. (expression->derivation-in-linux-vm)[config]: Remove. (iso9660-image)[config]: Remove. (qemu-image)[config]: Remove. (system-docker-image)[config]: Remove. * guix/scripts/pack.scm: Adjust imports. (guile-sqlite3&co): Rename to... (gcrypt-sqlite3&co): ... this. Add GUILE-GCRYPT. (self-contained-tarball)[build]: Call 'make-config.scm' without #:libgcrypt argument. (squashfs-image)[libgcrypt]: Remove. [build]: Call 'make-config.scm' without #:libgcrypt. (docker-image)[config, json]: Remove. [build]: Add GUILE-GCRYPT to the extensions Remove (guix config) from the imported modules. * guix/self.scm (specification->package): Remove "libgcrypt", add "guile-gcrypt". (compiled-guix): Remove #:libgcrypt. [guile-gcrypt]: New variable. [dependencies]: Add it. [*core-modules*]: Remove #:libgcrypt from 'make-config.scm' call. Add #:extensions. [*config*]: Remove #:libgcrypt from 'make-config.scm' call. (%dependency-variables): Remove %libgcrypt. (make-config.scm): Remove #:libgcrypt. * build-aux/build-self.scm (guile-gcrypt): New variable. (make-config.scm): Remove #:libgcrypt. (build-program)[fake-gcrypt-hash]: New variable. Add (gcrypt hash) to the imported modules. Adjust load path assignments. * gnu/packages/package-management.scm (guix)[propagated-inputs]: Add GUILE-GCRYPT. [arguments]: In 'wrap-program' phase, add GUILE-GCRYPT to the search path. Ludovic Courtès 2018-07-27build-self: Default to Guile 2.2 when building a standalone Guix....* build-aux/build-self.scm (build): Change #:guile-version to default to "2.2" when PULL-VERSION is greater than 0. Ludovic Courtès 2018-07-27gnu: guile: Remove version 2.2.2....* gnu/packages/guile.scm (guile-2.2.2): Remove. * guix/self.scm (guile-for-build): Remove special case for "2.2.2". (guix-derivation): Likewise. * build-aux/build-self.scm (build): Likewise. Ludovic Courtès 2018-06-26build-self: Inherit the daemon connection from the parent process....Fixes <https://bugs.gnu.org/31892>. Reported by Vagrant Cascadian <vagrant@debian.org>. * build-aux/build-self.scm (build): Define 'port' and wrap 'open-pipe*' call in 'with-input-from-port'. (build-program): Use 'port->connection' or 'open-connection' instead of 'with-store.' Ludovic Courtès 2018-06-21build-self: Avoid recompilations of 'compute-guix-derivation'....* build-aux/build-self.scm (build-program)["compute-guix-derivation"]: Honor the SOURCE command-line argument. Add a VERSION command-line argument and honor it. (build): Pass VERSION to BUILD. Ludovic Courtès 2018-06-18self: Define derived '-directory' variables in config.scm....This is a followup to d6b5aa0b031f0e7091f7424ac616d1c4d10fed5b. * guix/self.scm (%config-variables): Remove %CONFIG-DIRECTORY, %STATE-DIRECTORY, %STORE-DATABASE-DIRECTORY, and %STORE-DIRECTORY. (make-config.scm): Define them here. * build-aux/build-self.scm (%config-variables, make-config.scm): Likewise. Ludovic Courtès 2018-06-18build-self: Do not rely on '%store-database-directory'....Guix'es older than one week don't have this variable so requiring it would break things for them. * build-aux/build-self.scm (%config-variables): Remove '%store-database-directory'. Ludovic Courtès 2018-06-18build: Remove checks for 'nix-instantiate'....* guix/import/snix.scm (open-nixpkgs): Use "nix-instantiate" unconditionally. * configure.ac: Remove check for 'nix-instantiate'. * guix/config.scm.in (%nix-instantiate): Remove. * guix/self.scm (%dependency-variables): Remove '%nix-instantiate'. (make-config.scm): Remove it from the generated "config.scm". * build-aux/build-self.scm (%dependency-variables, make-config.scm): Likewise. Ludovic Courtès 2018-06-18self: Make (guix config) generation really stateless....Previously the %CONFIG-VARIABLES list would be generated based on what the current (guix config) contains. Thus, it would include '%guix-register-program', which we recently removed, because existing (guix config) most likely contained that variable. Since its value could differ from machine to machine, the build farm could be building a different config.scm, thereby preventing people from getting substitutes. * guix/self.scm (%config-variables): Turn into a white list instead of taking all the remaining variables from the current (guix config). * build-aux/build-self.scm (%config-variables): Likewise. Ludovic Courtès 2018-06-09self: Produce a complete package with the 'guix' command....* guix/self.scm (guix-command): New procedure. (compiled-guix): Add #:pull-version parameter. [command, package]: New variables. Honor PULL-VERSION. (guix-derivation): Add #:pull-version and pass it to 'compiled-guix'. * build-aux/build-self.scm (build-program): Add #:pull-version parameter. Pass it to 'guix-derivation'. (build): Add #:pull-version and pass it to 'build-program'. * build-aux/compile-as-derivation.scm: Pass #:pull-version to BUILD. Ludovic Courtès 2018-04-08build-self: Add missing 'close-pipe' call....* build-aux/build-self.scm (build): Call 'close-pipe'. Ludovic Courtès 2018-04-08build-self: Use (guix self)....This mitigates <https://bugs.gnu.org/27284>. * build-aux/build-self.scm (libgcrypt, zlib, gzip, bzip2, xz) (false-if-wrong-guile, package-for-current-guile, guile-json) (guile-ssh, guile-git, guile-bytestructures, matching-guile-2.2): Remove. (%dependency-variables, %persona-variables, %config-variables): New variables. (make-config.scm, load-path-expression, gexp->script) (build-program): New procedures. (build): Rewrite to simply delegate to 'guix-derivation'. Ludovic Courtès 2018-02-15pull: Update the %sbindir variable in (guix config) when building....Fixes <https://bugs.gnu.org/30370>. * build-aux/build-self.scm (guix): New variable. (builder): Use it. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Diego Nicola Barbato 2017-12-13pull: Add (guix profiling) to the build environment....Reported by Ricardo Wurmus. * build-aux/build-self.scm (build): Add (guix profiling). Ludovic Courtès