(define-module (gn packages maths) #:use-module (gnu packages) #:use-module (guix packages) #:use-module (guix download) #:use-module (guix utils) #:use-module (guix gexp) #:use-module (gnu packages gcc) #:use-module (gnu packages gperf) #:use-module (gnu packages maths) #:use-module (gnu packages texinfo) #:use-module (gn packages gnulib) #:use-module (srfi srfi-1)) (define-public octave-3.4.3 (package (inherit octave-cli) (name "octave") (version "3.4.3") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/octave/octave-" version ".tar.gz")) (sha256 (base32 "04lh3crzwpramvfvxq34n2r29pmfl37rssj853nz9a3pyq7wrrir")) (patches (search-patches "gnulib-gets.patch" "octave-nested-class.patch")))) (arguments (substitute-keyword-arguments (package-arguments octave-cli) ((#:configure-flags cf) `(cons "--enable-docs=no" ; docs fail to build ,cf)) ((#:tests? _ #f) #f) ; tests hang ((#:phases phases) `(modify-phases ,phases (add-after 'unpack 'patch-configure-script (lambda _ (substitute* '("configure" "src/DLD-FUNCTIONS/__delaunayn__.cc" "src/DLD-FUNCTIONS/__voronoi__.cc" "src/DLD-FUNCTIONS/convhulln.cc") (("qhull/qhull.h") "libqhull/libqhull.h") (("qhull/qhull_a.h") "libqhull/qhull_a.h")) #t)) (add-after 'unpack 'update-gnulib (lambda* (#:key inputs #:allow-other-keys) (let ((gnulib (assoc-ref inputs "gnulib"))) (install-file (string-append gnulib "/lib/fseeko.c") "libgnu") #t))) (replace 'configure-makeinfo (lambda* (#:key inputs #:allow-other-keys) (substitute* "src/help.cc" (("\"makeinfo\"") (string-append "\"" (assoc-ref inputs "texinfo") "/bin/makeinfo\""))) #t)))))) (native-inputs `(("gnulib" ,(package-source gnulib)) ("gcc-5" ,gcc-5) ,@(fold alist-delete (package-native-inputs octave-cli) '("lzip")))) (inputs `(("glpk" ,glpk-4.48) ("gperf" ,gperf) ,@(fold alist-delete (package-inputs octave-cli) ;; suitesparse provides cholmod_common_struct, may need older version '("glpk" "suitesparse")))))) ;; 4.49 is the last version with _glp_lpx_simplex exported ;; 4.49 is the version where all lpx_ routines were removed (define-public glpk-4.48 (package (inherit glpk) (version "4.48") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/glpk/glpk-" version ".tar.gz")) (sha256 (base32 "1cddqsdcfwavdklg7hsfifppsry81dx3c17wzk6r22mjjpwcihmb")))))) (define-public suitesparse-3.5.0 (package (inherit suitesparse) (version "3.5.0") (source (origin (method url-fetch) (uri (string-append "http://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-" version ".tar.gz")) (sha256 (base32 "0npn7c1j5qag5m2r0cmh3bwc42c1jk8k2yg2cfyxlcrp0h7wn4rc")))) (arguments (substitute-keyword-arguments (package-arguments suitesparse) ((#:phases phases) `(modify-phases ,phases (add-after 'unpack 'unpack-metis (lambda* (#:key inputs #:allow-other-keys) (let ((metis (assoc-ref inputs "metis-source"))) (invoke "tar" "xvf" metis) ;; backported from 4.0.3 (substitute* (find-files "metis-4.0") (("log2") "ilog2"))) #t)) (add-after 'unpack 'fix-source (lambda _ (substitute* "UFconfig/Makefile" (("Lib/") "")) ;; octave-3.4.3 expects it to be built with -fPIC (substitute* "UFconfig/UFconfig.mk" (("-O3") "-O3 -fPIC")) #t)) (add-before 'install 'prepare-directories (lambda* (#:key outputs #:allow-other-keys) (let ((out (assoc-ref outputs "out"))) (mkdir-p (string-append out "/lib")) (mkdir-p (string-append out "/include"))) #t)))))) (native-inputs `(("metis-source" ,(origin (method url-fetch) (uri "http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/OLD/metis-4.0.1.tar.gz") (sha256 (base32 "0lnkdfdrmmyy67h356bgdc06acvmcr26av9kdvqlws12znrr5iv0")))) ,@(package-native-inputs suitesparse))) (inputs `(,@(fold alist-delete (package-inputs suitesparse) '("metis")))))) (define-public gsl-x86-64-v2 (package/inherit gsl (name "gsl-x86-64-v2") (arguments (substitute-keyword-arguments (package-arguments gsl) ((#:make-flags flags #~'()) #~(append (list "CFLAGS=-march=x86-64-v2" "CXXFLAGS=-march=x86-64-v2") #$flags)) ((#:configure-flags flags #~'()) #~(append (list (string-append "--libdir=" #$output "/lib/glibc-hwcaps/x86-64-v2")) #$flags)) ;; The building machine can't necessarily run the code produced. ((#:tests? _ #t) #f) ((#:phases phases #~%standard-phases) #~(modify-phases #$phases (add-after 'install 'remove-extra-files (lambda _ (delete-file-recursively (string-append #$output "/bin")) (delete-file-recursively (string-append #$output "/include")))))))) (supported-systems '("x86_64-linux")) (properties `((hidden? . #t) (tunable? . #f))))) (define-public gsl-x86-64-v3 (package/inherit gsl (name "gsl-x86-64-v3") (arguments (substitute-keyword-arguments (package-arguments gsl) ((#:make-flags flags #~'()) #~(append (list "CFLAGS=-march=x86-64-v3" "CXXFLAGS=-march=x86-64-v3") #$flags)) ((#:configure-flags flags #~'()) #~(append (list (string-append "--libdir=" #$output "/lib/glibc-hwcaps/x86-64-v3")) #$flags)) ;; The building machine can't necessarily run the code produced. ((#:tests? _ #t) #f) ((#:phases phases #~%standard-phases) #~(modify-phases #$phases (add-after 'install 'remove-extra-files (lambda _ (delete-file-recursively (string-append #$output "/bin")) (delete-file-recursively (string-append #$output "/include")))))))) (supported-systems '("x86_64-linux")) (properties `((hidden? . #t) (tunable? . #f))))) (define-public gsl-x86-64-v4 (package/inherit gsl (name "gsl-x86-64-v4") (outputs '("out" "static")) (arguments (substitute-keyword-arguments (package-arguments gsl) ((#:make-flags flags #~'()) #~(append (list "CFLAGS=-march=x86-64-v4" "CXXFLAGS=-march=x86-64-v4") #$flags)) ((#:configure-flags flags #~'()) #~(append (list (string-append "--libdir=" #$output "/lib/glibc-hwcaps/x86-64-v4")) #$flags)) ;; The building machine can't necessarily run the code produced. ((#:tests? _ #t) #f) ((#:phases phases #~%standard-phases) #~(modify-phases #$phases (add-after 'install 'remove-extra-files (lambda _ (delete-file-recursively (string-append #$output "/bin")) (delete-file-recursively (string-append #$output "/include")))))))) (supported-systems '("x86_64-linux")) (properties `((hidden? . #t) (tunable? . #f))))) ;; This copy of gsl will automatically use the libraries that target the ;; x86_64 psABI which the hardware supports. (define-public gsl-hwcaps (package/inherit gsl (name "gsl-hwcaps") (arguments (substitute-keyword-arguments (package-arguments gsl) ((#:phases phases #~%standard-phases) #~(modify-phases #$phases (add-after 'install 'install-optimized-libraries (lambda* (#:key inputs outputs #:allow-other-keys) (let ((hwcaps "/lib/glibc-hwcaps")) (copy-recursively (string-append (assoc-ref inputs "gsl-x86-64-v2") hwcaps "/x86-64-v2") (string-append #$output hwcaps "/x86-64-v2")) (copy-recursively (string-append (assoc-ref inputs "gsl-x86-64-v3") hwcaps "/x86-64-v3") (string-append #$output hwcaps "/x86-64-v3")) (copy-recursively (string-append (assoc-ref inputs "gsl-x86-64-v4") hwcaps "/x86-64-v4") (string-append #$output hwcaps "/x86-64-v4"))))))))) (native-inputs (modify-inputs (package-native-inputs gsl) (append gsl-x86-64-v2 gsl-x86-64-v3 gsl-x86-64-v4))) (properties `((tunable? . #f)))))