~ruther/guix-local

44c737c7c16497741011616204420f5f6e717050 — Nigko Yerden 1 year, 22 days ago c467d3d
gnu: Add reduce.

* gnu/packages/math.scm (reduce): New variable.
* gnu/packages/patches/reduce-unbundle-libffi.patch: New file.
* gnu/local.mk (dist_patch_DATA): Register file.

Change-Id: Ic85be7dc490f005f7ba65c418250cc9681fbb3a8
Signed-off-by: Andreas Enge <andreas@enge.fr>
3 files changed, 232 insertions(+), 0 deletions(-)

M gnu/local.mk
M gnu/packages/algebra.scm
A gnu/packages/patches/reduce-unbundle-libffi.patch
M gnu/local.mk => gnu/local.mk +1 -0
@@ 2167,6 2167,7 @@ dist_patch_DATA =						\
  %D%/packages/patches/rtags-separate-rct.patch			\
  %D%/packages/patches/racket-chez-scheme-bin-sh.patch		\
  %D%/packages/patches/racket-rktio-bin-sh.patch		\
  %D%/packages/patches/reduce-unbundle-libffi.patch             \
  %D%/packages/patches/remake-impure-dirs.patch			\
  %D%/packages/patches/restartd-update-robust.patch             \
  %D%/packages/patches/restic-0.9.6-fix-tests-for-go1.15.patch	\

M gnu/packages/algebra.scm => gnu/packages/algebra.scm +106 -0
@@ 17,6 17,7 @@
;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2023 Mehmet Tekman <mtekman89@gmail.com>
;;; Copyright © 2025 Sharlatan Hellseher <sharlatanus@gmail.com>
;;; Copyright © 2025 Nigko Yerden <nigko.yerden@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 36,6 37,7 @@
(define-module (gnu packages algebra)
  #:use-module (gnu packages)
  #:use-module (gnu packages autotools)
  #:use-module (gnu packages base)
  #:use-module (gnu packages bash)
  #:use-module (gnu packages bison)
  #:use-module (gnu packages boost)


@@ 46,14 48,17 @@
  #:use-module (gnu packages documentation)
  #:use-module (gnu packages flex)
  #:use-module (gnu packages fltk)
  #:use-module (gnu packages fontutils)
  #:use-module (gnu packages gcc)
  #:use-module (gnu packages gl)
  #:use-module (gnu packages graphviz)
  #:use-module (gnu packages image)
  #:use-module (gnu packages java)
  #:use-module (gnu packages libffi)
  #:use-module (gnu packages maths)
  #:use-module (gnu packages mpi)
  #:use-module (gnu packages multiprecision)
  #:use-module (gnu packages ncurses)
  #:use-module (gnu packages networking)
  #:use-module (gnu packages ocaml)
  #:use-module (gnu packages perl)


@@ 1875,3 1880,104 @@ and not by the available RAM.")
    (description (string-append (package-description form)
                                "  This package also includes
@code{parform}, a version of FORM parallelized using OpenMPI."))))

(define-public reduce
  (package
    (name "reduce")
    (version "2024-08-12")
    (source (origin
              (method url-fetch)
              (uri (string-append
                    "mirror://sourceforge/reduce-algebra/snapshot_"
                    version "/Reduce-svn6860-src.tar.gz"))
              (sha256
               (base32
                "13bij9d4dj96vd5di59skz77s2fihj7awmkx403fvh9rd04ly25z"))
              (modules '((guix build utils)))
              (patches (search-patches "reduce-unbundle-libffi.patch"))
              ;; remove binaries and unnecessary parts
              ;; to ensure we build from source files only
              (snippet '(map delete-file-recursively
                         (append (find-files "csl/generated-c" "\\.img$")
                          '("psl" "vsl"
                            "jlisp"
                            "jslisp"
                            "libedit"
                            "macbuild"
                            "MacPorts"
                            "mac-universal"
                            "reduce2"
                            "winbuild64"
                            "common-lisp"
                            "contrib"
                            "generic/qreduce"
                            "web/htdocs/images/Thumbs.db")
                          (find-files "csl"
                           "^(embedded|new-embedded|winbuild|support-packages)$"
                           #:directories? #t)
                          (find-files "libraries"
                           "^(original|wineditline|libffi|libffi-for-mac)$"
                           #:directories? #t))))))
    (build-system gnu-build-system)
    (arguments
     (list #:configure-flags
           #~(list "--without-autogen"
                   ;; fix conflict with internal build name determination
                   "--build="
                   "--with-csl"
                   (string-append "CPPFLAGS=-I"
                                  #$freetype
                                  "/include/freetype2"))
           #:make-flags #~(list "csl")
           #:phases
           #~(modify-phases %standard-phases
               (replace 'check
                 (lambda* (#:key tests? #:allow-other-keys)
                   (when tests?
                     (invoke "scripts/testall.sh" "--csl" "--noregressions"))))
               (add-before 'patch-source-shebangs 'autogen
                 (lambda _
                   (invoke "sh" "autogen.sh")))
               (add-after 'install 'fix-install
                 (lambda _
                   (copy-file "bin/rfcsl"
                              (string-append #$output "/bin/rfcsl"))
                   (copy-file "generic/newfront/redfront.1"
                              (string-append #$output
                                             "/share/man/man1/rfcsl.1"))
                   (let ((.desktop-file
                          "debianbuild/reduce/debian/redcsl.desktop")
                         (icon "debianbuild/reduce/debian/reduce.png"))
                     (install-file .desktop-file
                                   (string-append #$output
                                                  "/share/applications"))
                     (install-file icon
                                   (string-append
                                    #$output
                                    "/share/icons/hicolor/32x32/apps")))
                   (with-directory-excursion #$output
                     (map (lambda (dir)
                            (map (lambda (file)
                                   (chmod file #o444))
                                 (find-files dir)))
                          '("share/man/man1" "share/reduce/fonts"))))))))
    (native-inputs (list autoconf automake libtool which))
    (inputs
     ;; bundled libraries: fox (adjusted) editline (adjusted)
     ;; crlibm softfloat
     (list freetype libffi libx11 libxext libxft ncurses))
    (synopsis "Portable general-purpose computer algebra system")
    (description
     "REDUCE is a portable general-purpose computer algebra system.  It is a
system for doing scalar, vector and matrix algebra by computer, which also
supports arbitrary precision numerical approximation and interfaces to
gnuplot to provide graphics.  It can be used interactively for simple
calculations but also provides a full programming language, with a syntax
similar to other modern programming languages.  REDUCE supports alternative
user interfaces including Run-REDUCE, TeXmacs and GNU Emacs.  This package
provides the Codemist Standard Lisp (CSL) version of REDUCE.  It uses the
gnuplot program, if installed, to draw figures.")
    (home-page "https://reduce-algebra.sourceforge.io/")
    (license (license:non-copyleft "file://README"
                                   "See README in the distribution."))))


A gnu/packages/patches/reduce-unbundle-libffi.patch => gnu/packages/patches/reduce-unbundle-libffi.patch +125 -0
@@ 0,0 1,125 @@
This patch unbundles libffi.

Index: autogen.sh
===================================================================
diff --git a/autogen.sh b/autogen.sh
--- a/autogen.sh	(revision 6860)
+++ b/autogen.sh	(working copy)
@@ -142,18 +142,6 @@
   ;;
 *--with-csl* | *--with-both*)
   L="$L ./csl ./csl/cslbase ./csl/cslbase-nothrow ./libraries/SoftFloat-3a/source"
-# On Apple m1 (ie arm64) I will want to build a universal version of the
-# libffi library and that is done in a way that differs from standrad builds.
-  case "`uname -s` `uname -m`" in
-  *Darwin*arm64*)
-    L="$L ./libraries/libffi-for-mac/libffi-3.3-arm64"
-    L="$L ./libraries/libffi-for-mac/libffi-3.3-x86_64"
-    L="$L ./libraries/libffi"
-    ;;
-  *)
-    L="$L ./libraries/libffi"
-    ;;
-  esac
   case $a in
   *--without-fox* | *with-fox=no* | \
   *--without-gui* | *with-gui=no*)
Index: configure.ac
===================================================================
diff --git a/configure.ac b/configure.ac
--- a/configure.ac	(revision 6860)
+++ b/configure.ac	(working copy)
@@ -1389,37 +1389,6 @@
   cd "$builddir"
 fi
 
-AC_MSG_NOTICE([About to configure libffi])
-mkdir -p libffi
-if test `uname` = "Darwin" && test "$enable_universal" != "no"
-then
-# This is a messy script that arranges to build a universal version of
-# the library on MacOS. It does this by building arm64 and an x86_64
-# separately and then merging the resulting libraries.
-  sed "s+@srcdir@+$abssrcdir+" \
-     < $abssrcdir/libraries/libffi-for-mac/Makefile \
-     > libffi/Makefile
-else
-  cd libffi
-  setpasscc
-  doconfig="$SHELL $abssrcdir/libraries/libffi/configure -C $filtered \
-          $pass_host \
-          CPPFLAGS=\"$CPPFLAGS\" \
-          CFLAGS=\"$CFLAGS\" \
-          CXXFLAGS=\"$CXXFLAGS\" \
-          LDFLAGS=\"$LDFLAGS\" \
-          $passcc \
-          --disable-multi-os-directory \
-          --disable-docs \
-          --prefix=\"$builddir\" \
-          --libdir=\"$builddir/lib\" \
-          --includedir=\"$builddir/include\""
-  AC_MSG_NOTICE([doconfig = $doconfig])
-  printf "\n\n+++ About to configure libffi +++\n\n"
-  eval "$doconfig"
-  cd "$builddir"
-fi
-
 AC_MSG_NOTICE([About to configure libsoftfloat])
 mkdir -p softfloat
 cd softfloat
Index: csl/cslbase/Makefile.am
===================================================================
diff --git a/csl/cslbase/Makefile.am b/csl/cslbase/Makefile.am
--- a/csl/cslbase/Makefile.am	(revision 6860)
+++ b/csl/cslbase/Makefile.am	(working copy)
@@ -807,35 +807,6 @@
 
 endif !crlibm
 
-LIBFFIDEPS=../lib/libffi.a ../include/ffi.h
-
-FFIDEP = ../include/ffi.h
-FFIINC = -I../include
-AM_CPPFLAGS     += $(FFINC)
-reduce_CPPFLAGS += $(FFINC)
-bootstrapreduce_CPPFLAGS += $(FFINC)
-csl_CPPFLAGS    += $(FFINC)
-flatcsl_CPPFLAGS    += $(FFINC)
-
-# The following ugly dependencies are here so that one can go, for
-# instance, "make csl.o" in a clean tree and libffi building will get
-# triggered.
-
-
-csl_LDADD += ../lib/libffi.a
-flatcsl_LDADD += ../lib/libffi.a
-bootstrapreduce_LDADD += ../lib/libffi.a
-reduce_LDADD += ../lib/libffi.a
-
-csl_DEPENDENCIES += $(LIBFFIDEPS)
-flatcsl_DEPENDENCIES += $(LIBFFIDEPS)
-bootstrapreduce_DEPENDENCIES += $(LIBFFIDEPS)
-reduce_DEPENDENCIES += $(LIBFFIDEPS)
-
-$(LIBFFIDEPS):
-	@printf "About to build libffi for %s ($@)\n" `pwd`
-	-$(TRACE)@$(MAKE) -C ../libffi install
-
 SOFTFLOATDEPS=../lib/libsoftfloat.a ../include/softfloat.h
 
 SOFTFLOATDEP = ../include/softfloat.h
Index: csl/cslbase/configure.ac
===================================================================
diff --git a/csl/cslbase/configure.ac b/csl/cslbase/configure.ac
--- a/csl/cslbase/configure.ac	(revision 6860)
+++ b/csl/cslbase/configure.ac	(working copy)
@@ -146,8 +146,8 @@
   AC_DEFINE(WITHOUT_FFI, [1], [remove the foreign function support])
 fi
 
+AC_SEARCH_LIBS([ffi_call], [ffi])
 
-
 # What host am I on?
 AC_CANONICAL_HOST()