;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès ;;; Copyright © 2015 Eric Bavier ;;; Copyright © 2016, 2017, 2019 Nicolas Goaziou ;;; Copyright © 2018 Tobias Geerinckx-Rice ;;; ;;; 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 . (define-module (gnu packages plotutils) #:use-module ((guix licenses) #:prefix license:) #:use-module (guix packages) #:use-module (guix download) #:use-module (guix build-system gnu) #:use-module (gnu packages algebra) #:use-module (gnu packages bdw-gc) #:use-module (gnu packages emacs) #:use-module (gnu packages xorg) #:use-module (gnu packages image) #:use-module (gnu packages ghostscript) #:use-module (gnu packages guile) #:use-module (gnu packages gl) #:use-module (gnu packages gtk) #:use-module (gnu packages maths) #:use-module (gnu packages perl) #:use-module (gnu packages pkg-config) #:use-module (gnu packages python) #:use-module (gnu packages readline) #:use-module (gnu packages texinfo) #:use-module (gnu packages tex) #:use-module (gnu packages compression) #:use-module (gnu packages)) (define-public plotutils (package (name "plotutils") (versiondnl GNU Guix --- Functional package management for GNU dnl Copyright © 2012, 2013, 2014, 2015, 2016, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org> dnl Copyright © 2014 Mark H Weaver <mhw@netris.org> dnl Copyright © 2017, 2020, 2021, 2023 Efraim Flashner <efraim@flashner.co.il> dnl Copyright © 2021 Chris Marusich <cmmarusich@gmail.com> dnl dnl This file is part of GNU Guix. dnl dnl GNU Guix is free software; you can redistribute it and/or modify it dnl under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 3 of the License, or (at dnl your option) any later version. dnl dnl GNU Guix is distributed in the hope that it will be useful, but dnl WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the dnl GNU General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. dnl GUIX_SYSTEM_TYPE dnl dnl Determine the Guix host system type, and store it in the dnl `guix_system' variable. AC_DEFUN([GUIX_SYSTEM_TYPE], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_PATH_PROG([SED], [sed]) AC_ARG_WITH(system, AS_HELP_STRING([--with-system=SYSTEM], [Platform identifier (e.g., `i686-linux').]), [guix_system="$withval"], [case "$host_cpu" in i*86) machine_name="i686";; amd64) machine_name="x86_64";; arm|armv[[7-9]]*) # Here we want to exclude CPUs such as "armv6l". On ARMv7 # machines, we normally get "armv7l". However, in Guix, we # configure with --build=arm-unknown-linux-gnueabihf, leading # to just "arm", so we also have to allow it. # # TODO: If not cross-compiling, add a sanity check to make # sure this build machine has the needed features to # support executables compiled using our armhf gcc, # configured with: # --with-arch=armv7-a # --with-float=hard # --with-mode=thumb # --with-fpu=vfpv3-d16 machine_name="armhf";; *) machine_name="$host_cpu";; esac case "$host_os" in linux-gnu*) # For backward compatibility, strip the `-gnu' part. guix_system="$machine_name-linux";; linux-musl*) guix_system="$machine_name-linux";; gnu*) # Always use i586 for GNU/Hurd. guix_system="i586-gnu";; *) # Strip the version number from names such as `gnu0.3', # `darwin10.2.0', etc. guix_system="$machine_name-`echo $host_os | "$SED" -e's/[0-9.]*$//g'`";; esac]) AC_MSG_CHECKING([for the Guix system type]) AC_MSG_RESULT([$guix_system]) AC_SUBST([guix_system]) ]) dnl GUIX_ASSERT_SUPPORTED_SYSTEM dnl dnl Assert that this is a system to which the distro is ported. AC_DEFUN([GUIX_ASSERT_SUPPORTED_SYSTEM], [ AC_REQUIRE([GUIX_SYSTEM_TYPE]) AC_ARG_WITH([courage], [AS_HELP_STRING([--with-courage], [Assert that even if this platform is unsupported, you will be courageous and port the GNU System distribution to it (see "GNU Distribution" in the manual.)])], [guix_courageous="$withval"], [guix_courageous="no"]) # Currently only Linux-based systems are supported, and only on some # platforms. case "$guix_system" in x86_64-linux|i686-linux|armhf-linux|aarch64-linux|powerpc64le-linux|riscv64-linux|i586-gnu) ;; mips64el-linux|powerpc-linux) AC_MSG_WARN([building Guix on `$guix_system', which is not supported]) ;; *) if test "x$guix_courageous" = "xyes"; then AC_MSG_WARN([building Guix on `$guix_system', which is not supported]) else AC_MSG_ERROR([`$guix_system' is not a supported platform. See "GNU Distribution" in the manual, or try `--with-courage'.]) fi ;; esac ]) dnl GUIX_ASSERT_GUILE_FEATURES FEATURES dnl dnl Assert that FEATURES are provided by $GUILE. AC_DEFUN([GUIX_ASSERT_GUILE_FEATURES], [ for guix_guile_feature in $1 do AC_MSG_CHECKING([whether $GUILE provides feature '$guix_guile_feature']) if "$GUILE" -c "(exit (provided? '$guix_guile_feature))" then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) AC_MSG_ERROR([$GUILE does not support feature '$guix_guile_feature', which is required.]) fi done ]) dnl GUIX_CHECK_GUILE_SSH dnl dnl Check whether a recent-enough Guile-SSH is available. AC_DEFUN([GUIX_CHECK_GUILE_SSH], [ dnl Check whether '#:nodelay' parameter to 'make-session' (introduced in dnl 0.13.0) is present. AC_CACHE_CHECK([whether Guile-SSH is available and recent enough], [guix_cv_have_recent_guile_ssh], [GUILE_CHECK([retval], [(and (@ (ssh channel) channel-send-eof) (@ (ssh popen) open-remote-pipe) (@ (ssh dist node) node-eval) (@ (ssh auth) userauth-gssapi!) ((@ (ssh session) make-session) #:nodelay #t))]) if test "$retval" = 0; then guix_cv_have_recent_guile_ssh="yes" else guix_cv_have_recent_guile_ssh="no" fi]) ]) dnl GUIX_CHECK_GUILE_SQLITE3 dnl dnl Check whether a recent-enough Guile-Sqlite3 is available. AC_DEFUN([GUIX_CHECK_GUILE_SQLITE3], [ dnl Check whether 'sqlite-bind-arguments' is available. It was introduced dnl in February 2018: dnl <https://notabug.org/guile-sqlite3/guile-sqlite3/commit/1cd1dec96a9999db48c0ff45bab907efc637247f>. AC_CACHE_CHECK([whether Guile-Sqlite3 is available and recent enough], [guix_cv_have_recent_guile_sqlite3], [GUILE_CHECK([retval], [(@ (sqlite3) sqlite-bind-arguments)]) if test "$retval" = 0; then guix_cv_have_recent_guile_sqlite3="yes" else guix_cv_have_recent_guile_sqlite3="no" fi]) ]) dnl GUIX_CHECK_GUILE_JSON dnl dnl Check whether a recent-enough Guile-JSON is available. AC_DEFUN([GUIX_CHECK_GUILE_JSON], [ dnl Check whether we're using Guile-JSON 4.3+, which provides dnl 'define-json-mapping'. AC_CACHE_CHECK([whether Guile-JSON is available and recent enough], [guix_cv_have_recent_guile_json], [GUILE_CHECK([retval], [(use-modules (json)) (define-json-mapping <frob> make-frob frob? json->frob (a frob-a) (b frob-b \"bee\")) (exit (equal? (json->frob (open-input-string \"{ \\\"a\\\": 1, \\\"bee\\\": 2 }\")) (make-frob 1 2)))]) if test "$retval" = 0; then guix_cv_have_recent_guile_json="yes" else guix_cv_have_recent_guile_json="no" fi]) ]) dnl GUIX_CHECK_GUILE_GCRYPT dnl dnl Check whether a recent-enough Guile-Gcrypt is available. AC_DEFUN([GUIX_CHECK_GUILE_GCRYPT], [ dnl Check whether we're using Guile-Gcrypt 0.2.x or later. 0.2.0 dnl introduced the 'hash-algorithm' macro and related code. AC_CACHE_CHECK([whether Guile-Gcrypt is available and recent enough], [guix_cv_have_recent_guile_gcrypt], [GUILE_CHECK([retval], [(use-modules (gcrypt hash)) (equal? (hash-algorithm sha256) (lookup-hash-algorithm 'sha256))]) if test "$retval" = 0; then guix_cv_have_recent_guile_gcrypt="yes" else guix_cv_have_recent_guile_gcrypt="no" fi]) ]) dnl GUIX_CHECK_GUILE_GIT dnl dnl Check whether a recent-enough Guile-Git is available. AC_DEFUN([GUIX_CHECK_GUILE_GIT], [ dnl Check whether we're using Guile-Git 0.3.0 or later. 0.3.0 dnl introduced SSH authentication support and more. AC_CACHE_CHECK([whether Guile-Git is available and recent enough], [guix_cv_have_recent_guile_git], [GUILE_CHECK([retval], [(use-modules (git) (git auth) (git submodule)) (let ((auth (%make-auth-ssh-agent))) repository-close! object-lookup-prefix (make-clone-options #:fetch-options (make-fetch-options auth)))]) if test "$retval" = 0; then guix_cv_have_recent_guile_git="yes" else guix_cv_have_recent_guile_git="no" fi]) ]) dnl GUIX_CHECK_GUILE_ZLIB dnl dnl Check whether a recent-enough Guile-zlib is available. AC_DEFUN([GUIX_CHECK_GUILE_ZLIB], [ dnl Check whether we're using Guile-zlib 0.1.0 or later. dnl 0.1.0 introduced the 'make-zlib-input-port' and related code. AC_CACHE_CHECK([whether Guile-zlib is available and recent enough], [guix_cv_have_recent_guile_zlib], [GUILE_CHECK([retval], [(use-modules (zlib)) make-zlib-input-port]) if test "$retval" = 0; then guix_cv_have_recent_guile_zlib="yes" else guix_cv_have_recent_guile_zlib="no" fi]) ]) dnl GUIX_TEST_ROOT_DIRECTORY AC_DEFUN([GUIX_TEST_ROOT_DIRECTORY], [ AC_CACHE_CHECK([for unit test root directory], [ac_cv_guix_test_root], [ac_cv_guix_test_root="`pwd`/test-tmp"]) ]) dnl 'BINPRM_BUF_SIZE' constant in Linux (we leave room for the trailing zero.) dnl The Hurd has a limit of about a page (see exec/hashexec.c.) m4_define([LINUX_HASH_BANG_LIMIT], 127) dnl Hardcoded 'sun_path' length in <sys/un.h>. m4_define([SOCKET_FILE_NAME_LIMIT], 108) dnl GUIX_SOCKET_FILE_NAME_LENGTH AC_DEFUN([GUIX_SOCKET_FILE_NAME_LENGTH], [ AC_CACHE_CHECK([the length of the installed socket file name], [ac_cv_guix_socket_file_name_length], [ac_cv_guix_socket_file_name_length="`echo -n "$guix_localstatedir/guix/daemon-socket/socket" | wc -c`"]) ]) dnl GUIX_TEST_SOCKET_FILE_NAME_LENGTH AC_DEFUN([GUIX_TEST_SOCKET_FILE_NAME_LENGTH], [ AC_REQUIRE([GUIX_TEST_ROOT_DIRECTORY]) AC_CACHE_CHECK([the length of the socket file name used in tests], [ac_cv_guix_test_socket_file_name_length], [ac_cv_guix_test_socket_file_