5 (pushnew :cl *features*)
7 ;; Don't try to optimize so much in ECL.
8 ;; Therefore functions can be redefined (essential for share libraries).
9 #+ecl (declaim (optimize (debug 2)))
12 (let ((version-num (+ (* 10000 system::*gcl-major-version*)
13 (* 100 system::*gcl-minor-version*)
14 system::*gcl-extra-version*)))
15 (when (> version-num 20603)
16 (pushnew :gcl-working-proclaims *features*)))
19 (setf ext:*gc-verbose* nil)
21 ;; In server.lisp, we load up sb-bsd-sockets for sbcl. This also
22 ;; causes asdf to be loaded. Not normally a problem, but
23 ;; asdf::*output-translations* is not NIL when maxima is restarted.
24 ;; If you give maxima.core (as a binary distribution) to someone else,
25 ;; the translations are wrong. The solution is to clear the
26 ;; translations before saving the core.
28 ;; This should really be done for all lisps that might have asdf2
29 ;; loaded. Currently, I (rtoy) thinks this only happens with sbcl.
31 ;; (This issue was brought to my attention by Zach Beane, on irc.
32 ;; Solution by Nikodemus Siivola.)
34 (pushnew 'asdf::clear-configuration *save-hooks*)
36 ;; If you want maxima to use long-floats for arithmetic, use this:
37 #+(and nil (or clisp scl))
38 (pushnew :flonum-long *features*)
40 ;; If you want maxima to use double-double-floats, use this:
41 #+(and nil cmu double-double)
42 (pushnew :flonum-double-double *features*)
44 (setf *load-verbose* nil)
46 (defvar *maxima-build-time* (multiple-value-list (get-decoded-time)))
48 (export '*maxima-build-time*)
51 (defun do-compile-ecl (file &rest args)
52 ;; Not sure about this. Compile twice. The first produces a .o
53 ;; file. The second produces the .fas file to keep defsystem happy
54 ;; because defsystem needs to load the files while compiling so
55 ;; macros and such are defined.
56 (let* ((output (getf args :output-file))
57 (object-output (compile-file-pathname output :system-p t)))
58 (and (apply #'compile-file file :output-file object-output args)
59 (c:build-fasl output :lisp-files (list object-output)))))
62 (defun build-maxima-lib ()
63 (labels ((list-all-objects (module)
64 (if (eql (mk::component-type module) :file)
65 (list (mk::component-full-pathname module :binary))
66 (apply #'append (mapcar #'list-all-objects (mk::component-components module))))))
67 (let* ((files (list-all-objects (mk:find-system 'maxima))))
70 (c::build-static-library "binary-ecl/maxima-lib" :lisp-files (print files))
71 (let ((c::*ld-format* (concatenate 'string c::*ld-format* " /LIBPATH:binary-ecl")))
72 (c::build-fasl "binary-ecl/maxima" :lisp-files '(maxima-lib))))
74 (let ((obj (mapcar #'(lambda (p)
75 ;; Convert dir/foo.fas to dir/foo.o
76 (make-pathname :type "o" :defaults p))
78 (c::build-program "binary-ecl/maxima" :lisp-files obj
80 (let ((x (symbol-value (find-symbol "*AUTOCONF-LD-FLAGS*"
81 (find-package "MAXIMA")))))
82 (if (and x (not (string= x ""))) (list x)))
83 :epilogue-code '(progn (cl-user::run)))))))
85 (defun maxima-binary-pathname ()
89 (make-pathname :name "binary-cmucl"
90 :directory (pathname-directory *load-truename*))
92 (make-pathname :name "binary-scl"
93 :directory (pathname-directory *load-truename*))
95 (make-pathname :name "binary-sbcl"
96 :directory (pathname-directory *load-truename*))
101 #+(and openmcl (not 64-bit-target))
103 #+(and openmcl 64-bit-target)
108 (make-pathname :name "binary-lispworks"
109 :directory (pathname-directory *load-truename*))
112 #-(or clisp cmu scl sbcl gcl allegro openmcl abcl lispworks ecl)
113 "binary-unknownlisp")
115 (mk:defsystem "maxima"
116 :source-extension "lisp"
117 :binary-pathname (maxima-binary-pathname)
118 #+ecl :compiler-options #+ecl (:system-p t)
119 #+ecl :compiler #+ecl do-compile-ecl
122 (:module proclaim :source-pathname ""
125 ((:file "maxima-package")
126 (:file "numerical/f2cl-package")
127 (:file "numerical/slatec")
128 (:file "command-line")
130 #+gcl-working-proclaims
131 (:private-file "tools/sys-proclaim")))
132 (:module package :source-pathname ""
133 ;; On ECL all runtime alterations to the system (i.e from repl)
134 ;; at runtime are not part of the final executable if they aren't.
136 #-ecl :load-only #-ecl t
139 (:file "maxima-package")
140 #+ecl (:file "ecl-port")
141 ;; If a file is declared as private-file it is loaded
142 ;; from the build tree (which makes an out-of-tree
143 ;; build possible), but not compiled (which means
144 ;; with ECL or ABCL it won't end up in the final image)
145 ;; => no out-of-tree build for ECL.
146 #-(or ecl abcl lispworks) (:private-file "autoconf-variables")
147 #+(or ecl abcl lispworks) (:file "autoconf-variables")
149 (:module intl :source-pathname ""
152 ;; Some versions of CMUCL already
153 ;; have a compatible version of
154 ;; INTL, so skip it if we have
156 #+#.(cl:if (cl:and (cl:member :cmu cl:*features*) (cl:find-package '#:intl)) '(or) '(and))
158 (:module info :source-pathname ""
162 (:module sloop :source-pathname ""
165 (:module declarations :source-pathname ""
168 (:module destructuring-let :source-pathname ""
171 (:module compatibility-macros1 :source-pathname ""
175 (:module defmfun :source-pathname ""
177 ((:file "defmfun-check")))
178 (:module compatibility-macros :source-pathname ""
179 :depends-on ("defmfun")
181 (#+gcl (:file "gcl-compat")
183 (:module prerequisites :source-pathname ""
184 :depends-on ("defmfun")
188 (:module maxima-language-compiler-macros :source-pathname ""
189 :depends-on ("defmfun")
192 (:module command-line :source-pathname ""
193 :depends-on ("defmfun")
194 :depends-on ("getopt")
196 ((:file "command-line")))
197 (:module getopt :source-pathname ""
198 :depends-on ("defmfun")
201 (:module fundamental-macros :source-pathname ""
202 :depends-on ("defmfun")
206 (:module utility-macros :source-pathname ""
207 :depends-on ("defmfun")
211 (:module other-macros :source-pathname ""
212 :depends-on ("defmfun")
218 (:file "safe-recursion")))
219 (:module rat-macros :source-pathname ""
220 :depends-on ("defmfun")
224 #+gcl (:file "optimize") ; jfa check this
225 (:module utilities :source-pathname ""
226 :depends-on ("defmfun" "utility-macros")
237 (:module commands :source-pathname ""
238 :depends-on ("defmfun" "compatibility-macros1")
242 (:module evaluator :source-pathname ""
243 :depends-on ("defmfun")
248 ;; The free versions of Allegro and Lispworks have a heap limit.
249 ;; Let's not compile these routines so that we can at least
250 ;; get the rest of maxima built.
252 :depends-on ("defmfun")
254 ((:module packages :source-pathname ""
256 ((:file "f2cl-package")
258 (:module f2cl-lib :source-pathname ""
260 ((:file "f2cl-lib")))
261 (:module slatec :source-pathname "slatec"
262 :depends-on ("f2cl-lib" "packages")
263 #+(or allegro-cl-trial lispworks-personal-edition) :load-only
264 #+(or allegro-cl-trial lispworks-personal-edition) t
269 :depends-on ("xermsg"))
272 :depends-on ("fdump" "j4save" "xercnt" "xerhlt" "xerprn" "xersve"))
276 :depends-on ("xgetua"))
278 :depends-on ("j4save"))
280 :depends-on ("xermsg"))
284 :depends-on ("dcsevl" "initds" "xermsg"))
286 :depends-on ("xermsg"))
288 :depends-on ("d9lgmc" "dcsevl" "dgamlm" "initds" "xermsg"))
291 :depends-on ("d9lgmc" "dgamma" "xermsg"))
293 ;; Bessel J functions
295 :depends-on ("dcsevl" "initds" "xermsg"))
297 :depends-on ("dcsevl" "initds" "xermsg"))
299 :depends-on ("d9b0mp" "dcsevl" "initds"))
301 :depends-on ("d9b1mp" "dcsevl" "initds" "xermsg"))
305 :depends-on ("dasyjy" "djairy" "dlngam" "xermsg"))
306 ;; Bessel I functions
308 :depends-on ("dcsevl" "initds"))
310 :depends-on ("dcsevl" "initds" "xermsg"))
312 :depends-on ("dbsi0e" "dcsevl" "initds" "xermsg"))
314 :depends-on ("dbsi1e" "dcsevl" "initds" "xermsg"))
317 :depends-on ("dasyik" "dlngam" "xermsg"))
319 :depends-on ("zabs" "zbinu"))
321 ;; Bessel J function for complex
322 ;; arg and real order.
326 :depends-on ("zabs" "zasyi" "zbknu" "zmlri" "zs1s2" "zseri"))
328 :depends-on ("zabs" "zacai" "zbknu" "zexp" "zsqrt"))
330 :depends-on ("zabs" "zdiv" "zexp" "zmlt" "zsqrt"))
332 :depends-on ("zabs" "zbinu"))
334 :depends-on ("zabs" "zasyi" "zbuni" "zmlri" "zseri" "zuoik" "zwrsk"))
336 :depends-on ("dgamln" "zabs" "zdiv" "zexp" "zkscl"
337 "zlog" "zmlt" "zshch" "zsqrt" "zuchk"))
339 :depends-on ("zabs" "zuni1" "zuni2"))
343 :depends-on ("zabs" "zlog" "zuchk"))
345 :depends-on ("zabs"))
347 :depends-on ("dgamln" "zabs" "zexp" "zlog" "zmlt"))
350 :depends-on ("zabs" "zdiv"))
352 :depends-on ("zabs" "zexp" "zlog"))
354 :depends-on ("dgamln" "zabs" "zdiv" "zlog" "zmlt" "zuchk"))
356 (:file "zsqrt" :depends-on ("zabs"))
359 :depends-on ("zabs" "zdiv" "zlog" "zsqrt"))
361 :depends-on ("zabs" "zuchk" "zunik" "zuoik"))
363 :depends-on ("zabs" "zairy" "zuchk" "zunhj" "zuoik"))
365 :depends-on ("zdiv" "zlog" "zsqrt"))
367 :depends-on ("zabs" "zlog" "zuchk" "zunhj" "zunik"))
369 :depends-on ("zabs" "zbknu" "zrati"))
371 ;; Bessel Y functions
373 :depends-on ("d9b0mp" "dbesj0" "dcsevl" "initds" "xermsg"))
375 :depends-on ("d9b1mp" "dbesj1" "dcsevl" "initds" "xermsg"))
377 :depends-on ("dasyjy" "dbesy0" "dbesy1" "dbsynu" "dyairy" "xermsg"))
379 :depends-on ("dgamma" "xermsg"))
383 :depends-on ("zbesh"))
385 :depends-on ("zabs" "zacon" "zbknu" "zbunk" "zuoik"))
387 :depends-on ("zabs" "zbinu" "zbknu" "zmlt" "zs1s2"))
389 :depends-on ("zunk1" "zunk2"))
391 :depends-on ("zabs" "zs1s2" "zuchk" "zunik"))
393 :depends-on ("zabs" "zairy" "zs1s2" "zuchk" "zunhj"))
395 ;; Bessel K functions
397 :depends-on ("dbesi0" "dbsk0e" "dcsevl" "initds" "xermsg"))
399 :depends-on ("dbesi0" "dcsevl" "initds" "xermsg"))
401 :depends-on ("dbesi1" "dbsk1e" "dcsevl" "initds" "xermsg"))
403 :depends-on ("dbesi1" "dcsevl" "initds" "xermsg"))
405 :depends-on ("dasyik" "dbesk0" "dbesk1" "dbsk0e" "dbsk1e" "dbsknu" "xermsg"))
407 :depends-on ("dgamma" "xermsg"))
409 :depends-on ("zabs" "zacon" "zbknu" "zbunk" "zuoik"))
413 :depends-on ("dcsevl" "initds" "xermsg"))
415 :depends-on ("d9aimp" "dcsevl" "initds"))
417 :depends-on ("d9aimp" "daie" "dcsevl" "initds" "xermsg"))
419 :depends-on ("d9aimp" "dcsevl" "initds"))
421 :depends-on ("d9aimp" "dbie" "dcsevl" "initds" "xermsg"))
423 :depends-on ("zabs" "zbinu" "zdiv" "zsqrt"))
426 :depends-on ("dcsevl" "derfc" "initds"))
428 :depends-on ("dcsevl" "initds" "xermsg"))
429 ;; Exponential integrals
431 :depends-on ("dcsevl" "initds" "xermsg"))
435 :depends-on ("d9upak"))
438 :source-pathname "slatec"
439 #+(or allegro-cl-trial lispworks-personal-edition) :load-only
440 #+(or allegro-cl-trial lispworks-personal-edition) t
450 ;; Core integration routines
461 :depends-on ("dqcheb" "dqk15w"))
464 :depends-on ("dqcheb"
485 :depends-on ("dqagpe"))
496 :depends-on ("dqagie"
500 :depends-on ("dqc25f"
504 :depends-on ("dqc25s"
508 :depends-on ("dqc25c"
510 ;; Simplified interface routines
513 :depends-on ("dqage"))
515 :depends-on ("dqagse"))
517 :depends-on ("dqagie"))
519 :depends-on ("dqawfe"))
521 :depends-on ("dqawoe"))
523 :depends-on ("dqawse"))
525 :depends-on ("dqawce"))
530 (:module simplification :source-pathname ""
531 :depends-on ("defmfun")
540 (:module numeric-bigfloat :source-pathname ""
541 :depends-on ("defmfun" #-gcl "package"
545 (:module server :source-pathname ""
546 :depends-on ("defmfun")
547 :components ((:file "server")))
548 (:module i-o :source-pathname ""
549 :depends-on ("defmfun" "compatibility-macros" "compatibility-macros1")
556 (:module factoring :source-pathname ""
557 :depends-on ("defmfun")
565 (:module ifactor :source-pathname ""
566 :depends-on ("defmfun")
569 (:module rational-functions :source-pathname ""
570 :depends-on ("defmfun" "rat-macros" "other-macros" "compatibility-macros1")
579 (:module maxima-language-compiler :source-pathname ""
580 :depends-on ("defmfun" "maxima-language-compiler-macros")
601 (:module numerical-functions :source-pathname ""
602 :depends-on ("defmfun" "trigonometry")
607 :depends-on ("ellipt"))
610 (:module reader :source-pathname ""
611 :depends-on ("defmfun" "compatibility-macros" "compatibility-macros1")
614 (:module display :source-pathname ""
615 :depends-on ("defmfun")
620 (:module gcd :source-pathname ""
621 :depends-on ("defmfun")
625 (:module documentation :source-pathname ""
626 :depends-on ("defmfun")
630 (:module algebraic-database :source-pathname ""
631 :depends-on ("defmfun" "compatibility-macros1")
636 (:file "askp")) ;does this belong here?
638 (:module integration :source-pathname ""
639 :depends-on ("defmfun" "pattern-matching")
644 (:module taylor-series :source-pathname ""
645 :depends-on ("defmfun")
646 :components ((:file "hayat")))
647 (:module definite-integration :source-pathname ""
648 :depends-on ("defmfun")
652 (:module trigonometry :source-pathname ""
653 :depends-on ("pattern-matching" "defmfun")
658 (:module special-functions :source-pathname ""
659 :depends-on ("defmfun")
662 (:module matrix-algebra :source-pathname ""
663 :depends-on ("defmfun")
668 (:module determinants :source-pathname ""
669 :depends-on ("defmfun")
674 (:module pattern-matching :source-pathname ""
675 :depends-on ("defmfun" "compatibility-macros1")
681 (:module limits :source-pathname ""
682 :depends-on ("defmfun")
683 :components ((:file "tlimit")
685 (:module solve :source-pathname ""
686 :depends-on ("defmfun" "compatibility-macros1")
694 (:module debugging :source-pathname ""
695 :depends-on ("defmfun" "compatibility-macros1")
699 (:module miscellaneous :source-pathname ""
700 :depends-on ("defmfun" "pattern-matching" "compatibility-macros1")
716 (:file "rand-mt19937")
720 (:file "expintegral")
723 (:module polynomial :source-pathname ""
724 :depends-on ("defmfun")
726 ((:file "polynomialp")))
727 (:module poisson-series :source-pathname ""
728 :depends-on ("defmfun")
732 (:module translated-packages :source-pathname ""
733 :depends-on ("maxima-language-compiler-macros"
734 "compatibility-macros1"
742 (:file "todd-coxeter")
745 (:module graphics-drivers :source-pathname ""
746 :depends-on ("defmfun")
748 ((:file "gnuplot_def")
749 (:file "xmaxima_def")))
750 (:module final :source-pathname ""
751 :depends-on ("defmfun")
752 ;; These are not compiled, for whatever reason, except on ecl:
753 ;; On ECL all runtime alterations to the system (i.e from repl)
754 ;; at runtime are not part of the final executable if they aren't.
756 #-ecl :load-only #-ecl t
760 ;; If a file is declared as private-file it is loaded
761 ;; from the build tree (which makes an out-of-tree
762 ;; build possible), but not compiled (which means
763 ;; that with ECL or ABCL it won't end up in the final image)
764 ;; => no out-of-tree build for ECL.
765 (:file "share-subdirs")
766 (:file "init-cl")))))