From: Raymond T. <rt...@us...> - 2009-07-13 15:25:31
|
Update of /cvsroot/maxima/maxima/src In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv4939/src Modified Files: Makefile.am clisp-depends.mk cmucl-depends.mk command-line.lisp ecl-depends.mk gcl-depends.mk init-cl.lisp maxima-package.lisp maxima.in maxima.system Added Files: getopt.lisp Log Message: Add support for allowing user to supply options to the underlying lisp. src/getopt.lisp: o New file for argument parsing, based on Kevin Rosenberg's getopt. src/Makefile.am: o Add new file src/maxima-package.lisp: o Add defpackage for getopt. src/maxima.system: o Compile getopt src/maxima.in: o Add -X/--lisp-options so we can pass the given options to the underlying lisp. o Call underlying lisp with lisp options. src/command-line.lisp: o Use getopt to process arguments. o Comment out (for now) the old argument processor. o Reindent a few items. o Change how --help prints out help. The help string is printed on a separate line, to make it easier to separate out the options from the help. src/init-cl.lisp: o Add -X/--lisp-options. o Indent neatly. src/clisp-depends.mk: src/cmucl-depends.mk: src/ecl-depends.mk: src/gcl-depends.mk: o Update dependency to include getopt. --- NEW FILE: getopt.lisp --- ;;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; Package: getopt -*- ;;;; ************************************************************************* ;;;; FILE IDENTIFICATION ;;;; ;;;; Name: main.lisp ;;;; Purpose: Command line option processing like GNU's getopt_long ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: Sep 2003 ;;;; ;;;; $Id: getopt.lisp,v 1.1 2009/07/13 15:25:24 rtoy Exp $ ;;;; ;;;; ************************************************************************* ;;;; This file has been modified from the original to support the ;;;; needs of maxima. Basically, we changed getopt so that: ;;;; ;;;; - "-ab" is recognized as two separate options: "-a" "-b" ;;;; ;;;; - Exact matches are treated as matches, even if the match is an ;;;; ambiguous prefix. Hence, "--batch" will match the option ;;;; "--batch", even though it is an ambiguous prefix for ;;;; "--batch-lisp" and "--batch--string". But "--bat" is still an ;;;; error since it is ambiguous and is not an exact match for any ;;;; option. ;;;; ;;;; To comply with the license, we include the license here: ;;;; ;;;; ************************************************************************* ;;;; Copyright (C) 2003 by Kevin M. Rosenberg. ;;;; ;;;; All rights reserved. ;;;; ;;;; Redistribution and use in source and binary forms, with or without ;;;; modification, are permitted provided that the following conditions ;;;; are met: ;;;; 1. Redistributions of source code must retain the above copyright ;;;; notice, this list of conditions and the following disclaimer. ;;;; 2. Redistributions in binary form must reproduce the above copyright ;;;; notice, this list of conditions and the following disclaimer in the ;;;; documentation and/or other materials provided with the distribution. ;;;; 3. Neither the name of the author nor the names of the contributors ;;;; may be used to endorse or promote products derived from this software ;;;; without specific prior written permission. ;;;; ;;;; THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND ;;;; ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ;;;; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ;;;; ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE ;;;; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ;;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ;;;; OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ;;;; HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ;;;; LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY ;;;; OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ;;;; SUCH DAMAGE. ;;;; ************************************************************************* (in-package #-gcl #:getopt #+gcl "GETOPT") (defun is-short-option (arg) (and (>= (length arg) 2) (char= #\- (schar arg 0)) (char/= #\- (schar arg 1)))) (defun is-option-terminator (arg) (and (= 2 (length arg)) (char= #\- (schar arg 0)) (char= #\- (schar arg 1)))) (defun is-long-option (arg) (and (> (length arg) 2) (char= #\- (schar arg 0)) (char= #\- (schar arg 1)) (char/= #\- (schar arg 2)))) (defun decompose-arg (arg option-type) "Returns base-name,argument" (let ((start (ecase option-type (:long 2) (:short 1))) (name-end (position #\= arg))) (values (subseq arg start name-end) (when name-end (subseq arg (1+ name-end)))))) (defun analyze-arg (arg) "Analyzes an argument. Returns option-type,base-name,argument" (let* ((option-type (cond ((is-short-option arg) :short) ((is-long-option arg) :long) (t :arg)))) (if (or (eq option-type :short) (eq option-type :long)) (multiple-value-bind (base arg) (decompose-arg arg option-type) (values option-type base arg)) (values :arg arg nil)))) (defun find-option (name options &key allow-exact-match) "Find an option in option list. Handles using unique abbreviations" (let* ((option-names (mapcar #'car options)) (pos (match-unique-abbreviation name option-names :allow-exact-match allow-exact-match))) (when pos (nth pos options)))) (defun match-option (arg options &key allow-exact-match) "Matches an argument to an option. Returns option-list,option-type,base-name,argument" (multiple-value-bind (option-type base-name argument) (analyze-arg arg) (let ((match (find-option base-name options :allow-exact-match allow-exact-match))) (values match option-type (when match (car match)) argument)))) ;;; EXPORTED functions (defun match-unique-abbreviation (abbr strings &key (allow-exact-match nil)) "Returns position of ABBR in STRINGS. ABBR may be a unique abbreviation. Returns NIL if no match found." (let ((len (length abbr)) (matches nil)) (dotimes (i (length strings)) (let* ((s (nth i strings)) (l (length s))) (cond ((= len l) (when (string= abbr s) (if allow-exact-match (return-from match-unique-abbreviation i) (push (cons s i) matches)))) ((< len l) (when (string= abbr (subseq s 0 len)) (push (cons s i) matches)))))) (when (= 1 (length matches)) (cdr (first matches))))) (defun getopt (args options &key allow-exact-match) "Processes a list of arguments and options. Returns three values: - Non-option arguments - An alist of options consisting of the option name and the value, if any - A list of any option names that were not recognized options is a list of option lists. The fields of the list are - NAME name of the long option - HAS-ARG with legal values of :NONE, :REQUIRED, :OPTIONAL - VAL value to return for a option with no arguments" (do ((pos args (cdr pos)) (finished-options) (out-opts) (out-args) (errors)) ((null pos) (values (nreverse out-args) (nreverse out-opts) errors)) (cond (finished-options (push (car pos) out-args)) ((is-option-terminator (car pos)) (setq finished-options t)) (t (let ((arg (car pos))) (multiple-value-bind (option-list option-type base-name argument) (match-option (car pos) options :allow-exact-match allow-exact-match) (cond ((and option-list (not (eq option-type :arg))) (cond (argument (case (second option-list) (:none (push base-name errors)) (t (push (cons base-name argument) out-opts)))) ((null argument) (if (and (eq :required (second option-list)) (null (cdr pos))) (push base-name errors) (case (second option-list) (:none (push (cons base-name (third option-list)) out-opts)) (:required ;; Next arg is the value. (push (cons base-name (second pos)) out-opts) (setf pos (cdr pos))) (:optional ;; Optional arg. If the next arg is an option ;; arg, we use the default value. Otherwise we ;; use the next arg as the value. (if (or (is-short-option (second pos)) (is-long-option (second pos))) (push (cons base-name (third option-list)) out-opts) (progn (push (cons base-name (second pos)) out-opts) (setf pos (cdr pos)))))))))) (t (cond ((eq :long option-type) (push (nth-value 0 (decompose-arg arg option-type)) errors)) ((eq :short option-type) (cond ((<= (length (car pos)) 2) ;; Unrecognized short option (one character) (push (nth-value 0 (decompose-arg arg option-type)) errors)) (t ;; We have option that's not matched, but ;; looks like a short option like "-abc". ;; Expand this to '("-a" "-b" "-c") and ;; effectively replace "-abc" with the ;; replacement. We setf the cdr because ;; the do loop will remove "-abc" for us. (setf (cdr pos) (append (map 'list #'(lambda (x) (concatenate 'string "-" (string x))) (subseq (car pos) 1)) (cdr pos)))))) (t (push arg out-args))))))))))) Index: Makefile.am =================================================================== RCS file: /cvsroot/maxima/maxima/src/Makefile.am,v retrieving revision 1.85 retrieving revision 1.86 diff -u -d -r1.85 -r1.86 --- Makefile.am 31 Mar 2009 19:40:58 -0000 1.85 +++ Makefile.am 13 Jul 2009 15:25:23 -0000 1.86 @@ -344,6 +344,7 @@ gamma.lisp \ generate-sys-proclaim.lisp \ generr.lisp \ +getopt.lisp \ gnuplot.lisp \ grind.lisp \ hayat.lisp \ Index: clisp-depends.mk =================================================================== RCS file: /cvsroot/maxima/maxima/src/clisp-depends.mk,v retrieving revision 1.34 retrieving revision 1.35 diff -u -d -r1.34 -r1.35 --- clisp-depends.mk 6 May 2009 15:31:25 -0000 1.34 +++ clisp-depends.mk 13 Jul 2009 15:25:24 -0000 1.35 @@ -11,6 +11,7 @@ binary-clisp/maxima.mem : commac.lisp binary-clisp/maxima.mem : mormac.lisp binary-clisp/maxima.mem : compat.lisp +binary-clisp/maxima.mem : getopt.lisp binary-clisp/maxima.mem : command-line.lisp binary-clisp/maxima.mem : defopt.lisp binary-clisp/maxima.mem : defcal.lisp Index: cmucl-depends.mk =================================================================== RCS file: /cvsroot/maxima/maxima/src/cmucl-depends.mk,v retrieving revision 1.35 retrieving revision 1.36 diff -u -d -r1.35 -r1.36 --- cmucl-depends.mk 6 May 2009 15:31:25 -0000 1.35 +++ cmucl-depends.mk 13 Jul 2009 15:25:24 -0000 1.36 @@ -11,6 +11,7 @@ binary-cmucl/maxima.core : commac.lisp binary-cmucl/maxima.core : mormac.lisp binary-cmucl/maxima.core : compat.lisp +binary-cmucl/maxima.core : getopt.lisp binary-cmucl/maxima.core : command-line.lisp binary-cmucl/maxima.core : defopt.lisp binary-cmucl/maxima.core : defcal.lisp Index: command-line.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/command-line.lisp,v retrieving revision 1.12 retrieving revision 1.13 diff -u -d -r1.12 -r1.13 --- command-line.lisp 3 Apr 2009 17:08:20 -0000 1.12 +++ command-line.lisp 13 Jul 2009 15:25:24 -0000 1.13 @@ -49,11 +49,15 @@ (format t " ~a" (cl-option-description (first names) arg)) (dolist (name (rest names)) (format t ", ~a" (cl-option-description name arg))) - (format t ":") + (terpri) (if help-string - (format t " ~a" help-string)) - (format t "~%")))) + (format t " ~a" help-string)) + (terpri)))) +;; Old argument processing. Leaving this here for now, but if getopts +;; works well enough, then these should be removed. +#+(or) +(progn (defun parse-args (args cl-option-list) (if (null args) nil @@ -98,36 +102,84 @@ (defun process-args (args cl-option-list) (parse-args (expand-args args) cl-option-list)) +) + +(defun process-args (args cl-option-list) + (flet ((fixup (options) + ;; Massage cl-option into the format wanted by getopt. + ;; Basically, remove any leading dashes, and if the + ;; cl-option includes an argument, treat it as a required + ;; argument. + (let ((opts nil)) + (dolist (o options) + (dolist (name (cl-option-names o)) + (push (list (string-left-trim "-" name) + (if (cl-option-argument o) + :required + :none) + nil) + opts))) + (nreverse opts)))) + (let ((options (fixup cl-option-list))) + (multiple-value-bind (non-opts opts errors) + (getopt:getopt args options :allow-exact-match t) + ;; Look over all of opts and run the action + (dolist (o opts) + ;; NOTE: This assumes every short option has an equivalent + ;; long option. If that's not true, we need a separate + ;; check for matching short option names. + (let ((cl-opt (find (concatenate 'string "--" (car o)) + cl-option-list + :test #'(lambda (desired e) + (member desired (cl-option-names e) :test #'equal))))) + (when cl-opt + (cond ((and (cl-option-action cl-opt) (cl-option-argument cl-opt)) + (funcall (cl-option-action cl-opt) (cdr o))) + ((cl-option-action cl-opt) + (funcall (cl-option-action cl-opt))))))) + (dolist (o errors) + (format t "Warning: argument ~A not recognized~%" o)) + ;; What do we do about non-option arguments? We just ignore them for now. + )))) + (defun get-application-args () - #+clisp (rest ext:*args*) + #+clisp + (rest ext:*args*) - #+ecl (let ((result (ext:command-args))) - (do ((removed-arg nil (pop result))) - ((or (equal removed-arg "--") (equal nil result)) result))) + #+ecl + (let ((result (ext:command-args))) + (do ((removed-arg nil (pop result))) + ((or (equal removed-arg "--") (equal nil result)) result))) - #+cmu (let ((result lisp::lisp-command-line-list)) - (do ((removed-arg nil (pop result))) - ((or (equal removed-arg "--") (equal nil result)) result))) + #+cmu + (let ((result lisp::lisp-command-line-list)) + (do ((removed-arg nil (pop result))) + ((or (equal removed-arg "--") (equal nil result)) result))) - #+scl (let ((result ext:*command-line-strings*)) - (do ((removed-arg nil (pop result))) - ((or (equal removed-arg "--") (equal nil result)) result))) + #+scl + (let ((result ext:*command-line-strings*)) + (do ((removed-arg nil (pop result))) + ((or (equal removed-arg "--") (equal nil result)) result))) - #+sbcl (rest sb-ext:*posix-argv*) + #+sbcl + (rest sb-ext:*posix-argv*) - #+gcl (let ((result si::*command-args*)) - (do ((removed-arg nil (pop result))) - ((or (equal removed-arg "--") (equal nil result)) result))) + #+gcl + (let ((result si::*command-args*)) + (do ((removed-arg nil (pop result))) + ((or (equal removed-arg "--") (equal nil result)) result))) #+allegro (let ((args (system:command-line-arguments :application t))) ;; Skip the first arg, which is the full path to alisp. (rest args)) - #+lispworks (rest system:*line-arguments-list*) + #+lispworks + (rest system:*line-arguments-list*) - #+openmcl (let ((result (rest (ccl::command-line-arguments)))) - (do ((removed-arg nil (pop result))) - ((or (equal removed-arg "--") (equal nil result)) result))) + #+openmcl + (let ((result (rest (ccl::command-line-arguments)))) + (do ((removed-arg nil (pop result))) + ((or (equal removed-arg "--") (equal nil result)) result))) ) Index: ecl-depends.mk =================================================================== RCS file: /cvsroot/maxima/maxima/src/ecl-depends.mk,v retrieving revision 1.11 retrieving revision 1.12 diff -u -d -r1.11 -r1.12 --- ecl-depends.mk 6 May 2009 15:31:25 -0000 1.11 +++ ecl-depends.mk 13 Jul 2009 15:25:24 -0000 1.12 @@ -12,6 +12,7 @@ binary-ecl/maxima : commac.lisp binary-ecl/maxima : mormac.lisp binary-ecl/maxima : compat.lisp +binary-ecl/maxima : getopt.lisp binary-ecl/maxima : command-line.lisp binary-ecl/maxima : defopt.lisp binary-ecl/maxima : defcal.lisp Index: gcl-depends.mk =================================================================== RCS file: /cvsroot/maxima/maxima/src/gcl-depends.mk,v retrieving revision 1.37 retrieving revision 1.38 diff -u -d -r1.37 -r1.38 --- gcl-depends.mk 6 May 2009 15:31:25 -0000 1.37 +++ gcl-depends.mk 13 Jul 2009 15:25:24 -0000 1.38 @@ -16,6 +16,7 @@ binary-gcl/maxima : commac.lisp binary-gcl/maxima : mormac.lisp binary-gcl/maxima : compat.lisp +binary-gcl/maxima : getopt.lisp binary-gcl/maxima : command-line.lisp binary-gcl/maxima : defopt.lisp binary-gcl/maxima : defcal.lisp Index: init-cl.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/init-cl.lisp,v retrieving revision 1.147 retrieving revision 1.148 diff -u -d -r1.147 -r1.148 --- init-cl.lisp 9 Jul 2009 15:55:21 -0000 1.147 +++ init-cl.lisp 13 Jul 2009 15:25:24 -0000 1.148 @@ -572,6 +572,10 @@ ;; (mapc #'(lambda (x) (format t "\"~a\"~%" x)) (get-application-args)) ;; (terpri) (let ((maxima-options nil)) + ;; Note: The current option parsing code expects every short + ;; option to have an equivalent long option. No check is made for + ;; this, so please make sure this holds. Or change the code in + ;; process-args in command-line.lisp. (setf maxima-options (list (make-cl-option :names '("-b" "--batch") @@ -640,9 +644,9 @@ :action #'(lambda (file) #-sbcl (load file) #+sbcl (with-compilation-unit nil (load file))) :help-string "Preload <lisp-file>.") - (make-cl-option :names '("-q" "--quiet") - :action #'(lambda () (declare (special *maxima-quiet*)) (setq *maxima-quiet* t)) - :help-string "Suppress Maxima start-up message.") + (make-cl-option :names '("-q" "--quiet") + :action #'(lambda () (declare (special *maxima-quiet*)) (setq *maxima-quiet* t)) + :help-string "Suppress Maxima start-up message.") (make-cl-option :names '("-r" "--run-string") :argument "<string>" :action #'(lambda (string) @@ -672,10 +676,16 @@ ($quit)) :help-string "Display the default installed version.") - (make-cl-option :names '("--very-quiet") - :action #'(lambda () (declare (special *maxima-quiet* *display-labels-p*)) - (setq *maxima-quiet* t *display-labels-p* nil)) - :help-string "Suppress expression labels and Maxima start-up message."))) + (make-cl-option :names '("--very-quiet") + :action #'(lambda () (declare (special *maxima-quiet* *display-labels-p*)) + (setq *maxima-quiet* t *display-labels-p* nil)) + :help-string "Suppress expression labels and Maxima start-up message.") + (make-cl-option :names '("-X" "--lisp-options") + :argument "<Lisp options>" + :action #'(lambda (&rest opts) + (format t "Lisp options: ~A" opts)) + :help-string "Options to be given to the underlying Lisp") + )) (process-args (get-application-args) maxima-options)) (values input-stream batch-flag)) Index: maxima-package.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/maxima-package.lisp,v retrieving revision 1.49 retrieving revision 1.50 diff -u -d -r1.49 -r1.50 --- maxima-package.lisp 14 Mar 2009 03:20:32 -0000 1.49 +++ maxima-package.lisp 13 Jul 2009 15:25:25 -0000 1.50 @@ -18,6 +18,12 @@ (:export #:cl-option #:make-cl-option #:list-cl-options #:process-args #:get-application-args)) +;; Kevin Rosenberg's getopt package +(defpackage getopt + (:use :cl) + (:export #:match-unique-abbreviation + #:getopt)) + ;; GCL has SLOOP built in but it's slightly different now... (defpackage :cl-sloop (:use :common-lisp) Index: maxima.in =================================================================== RCS file: /cvsroot/maxima/maxima/src/maxima.in,v retrieving revision 1.30 retrieving revision 1.31 diff -u -d -r1.30 -r1.31 --- maxima.in 3 Jun 2009 02:57:00 -0000 1.30 +++ maxima.in 13 Jul 2009 15:25:25 -0000 1.31 @@ -93,17 +93,16 @@ arg9=$9 while [ -n "$1" ]; do case $1 in - -l ) MAXIMA_LISP=$2 ; shift;; - --lisp ) MAXIMA_LISP=$2 ; shift;; + -l|--lisp ) MAXIMA_LISP=$2 ; shift;; --lisp=*) MAXIMA_LISP=`echo "$1" | sed 's/--lisp=//'` ;; - -u ) MAXIMA_VERSION=$2 ; shift;; - --use-version ) MAXIMA_VERSION=$2 ; shift;; + -u|--use-version ) MAXIMA_VERSION=$2 ; shift;; --use-version=*) MAXIMA_VERSION=`echo "$1" | sed 's/--use-version=//'` ;; - --userdir ) : ; shift;; # noop; handled by process_userdir_argument - --userdir=*) : ;; # noop; handled by process_userdir_argument - -v ) verbose=true;; - --verbose ) verbose=true;; + -X|--lisp-options) MAXIMA_LISP_OPTIONS="$2" ; shift ;; + --lisp-options=*) MAXIMA_LISP_OPTIONS=`echo "$1" | sed 's/--lisp-options=//'` ;; + --userdir ) : ; shift;; # noop; handled by process_userdir_argument + --userdir=*) : ;; # noop; handled by process_userdir_argument + -v|--verbose ) verbose=true;; *) ;; esac shift @@ -130,36 +129,36 @@ fi if [ "$MAXIMA_LISP" = "clisp" ]; then if [ "$layout_autotools" = "true" ]; then - exec "$MAXIMA_IMAGESDIR/binary-$MAXIMA_LISP/@CLISP_RUNTIME@" -q -M "$maxima_image_base.mem" "" -- "$arg1" "$arg2" "$arg3" "$arg4" "$arg5" "$arg6" "$arg7" "$arg8" "$arg9" + exec "$MAXIMA_IMAGESDIR/binary-$MAXIMA_LISP/@CLISP_RUNTIME@" $MAXIMA_LISP_OPTIONS -q -M "$maxima_image_base.mem" "" -- "$arg1" "$arg2" "$arg3" "$arg4" "$arg5" "$arg6" "$arg7" "$arg8" "$arg9" else - exec "@CLISP_NAME@" -q -M "$maxima_image_base.mem" "" -- "$arg1" "$arg2" "$arg3" "$arg4" "$arg5" "$arg6" "$arg7" "$arg8" "$arg9" + exec "@CLISP_NAME@" $MAXIMA_LISP_OPTIONS -q -M "$maxima_image_base.mem" "" -- "$arg1" "$arg2" "$arg3" "$arg4" "$arg5" "$arg6" "$arg7" "$arg8" "$arg9" fi elif [ "$MAXIMA_LISP" = "cmucl" ]; then if [ "$layout_autotools" = "true" ]; then - exec "$MAXIMA_IMAGESDIR/binary-$MAXIMA_LISP/@CMUCL_RUNTIME@" -quiet -core "$maxima_image_base.core" -eval '(cl-user::run)' -- "$arg1" "$arg2" "$arg3" "$arg4" "$arg5" "$arg6" "$arg7" "$arg8" "$arg9" + exec "$MAXIMA_IMAGESDIR/binary-$MAXIMA_LISP/@CMUCL_RUNTIME@" $MAXIMA_LISP_OPTIONS -quiet -core "$maxima_image_base.core" -eval '(cl-user::run)' -- "$arg1" "$arg2" "$arg3" "$arg4" "$arg5" "$arg6" "$arg7" "$arg8" "$arg9" else - exec "@CMUCL_NAME@" -quiet -core "$maxima_image_base.core" -eval '(cl-user::run)' -- "$arg1" "$arg2" "$arg3" "$arg4" "$arg5" "$arg6" "$arg7" "$arg8" "$arg9" + exec "@CMUCL_NAME@" $MAXIMA_LISP_OPTIONS -quiet -core "$maxima_image_base.core" -eval '(cl-user::run)' -- "$arg1" "$arg2" "$arg3" "$arg4" "$arg5" "$arg6" "$arg7" "$arg8" "$arg9" fi elif [ "$MAXIMA_LISP" = "scl" ]; then if [ "$layout_autotools" = "true" ]; then - exec "$MAXIMA_IMAGESDIR/binary-$MAXIMA_LISP/@SCL_RUNTIME@" -quiet -core "$maxima_image_base.core" -eval '(cl-user::run)' -- "$arg1" "$arg2" "$arg3" "$arg4" "$arg5" "$arg6" "$arg7" "$arg8" "$arg9" + exec "$MAXIMA_IMAGESDIR/binary-$MAXIMA_LISP/@SCL_RUNTIME@" $MAXIMA_LISP_OPTIONS -quiet -core "$maxima_image_base.core" -eval '(cl-user::run)' -- "$arg1" "$arg2" "$arg3" "$arg4" "$arg5" "$arg6" "$arg7" "$arg8" "$arg9" else - exec "@SCL_NAME@" -quiet -core "$maxima_image_base.core" -eval '(cl-user::run)' -- "$arg1" "$arg2" "$arg3" "$arg4" "$arg5" "$arg6" "$arg7" "$arg8" "$arg9" + exec "@SCL_NAME@" $MAXIMA_LISP_OPTIONS -quiet -core "$maxima_image_base.core" -eval '(cl-user::run)' -- "$arg1" "$arg2" "$arg3" "$arg4" "$arg5" "$arg6" "$arg7" "$arg8" "$arg9" fi elif [ "$MAXIMA_LISP" = "gcl" ]; then - exec "$maxima_image_base" -eval '(cl-user::run)' -f -- "$arg1" "$arg2" "$arg3" "$arg4" "$arg5" "$arg6" "$arg7" "$arg8" "$arg9" + exec "$maxima_image_base" -eval '(cl-user::run)' $MAXIMA_LISP_OPTIONS -f -- "$arg1" "$arg2" "$arg3" "$arg4" "$arg5" "$arg6" "$arg7" "$arg8" "$arg9" elif [ "$MAXIMA_LISP" = "acl" ]; then # FIXME: arguments need in a manner consistent with the way they are extracted # in the function get-application-args in command-line.lisp - exec "@ACL_NAME@" -I "$maxima_image_base.dxl" -e '(cl-user::run)' "$arg1" "$arg2" "$arg3" "$arg4" "$arg5" "$arg6" "$arg7" "$arg8" "$arg9" + exec "@ACL_NAME@" -I "$maxima_image_base.dxl" $MAXIMA_LISP_OPTIONS -e '(cl-user::run)' "$arg1" "$arg2" "$arg3" "$arg4" "$arg5" "$arg6" "$arg7" "$arg8" "$arg9" elif [ "$MAXIMA_LISP" = "openmcl" ]; then # FIXME: arguments need in a manner consistent with the way they are extracted # in the function get-application-args in command-line.lisp - exec "@OPENMCL_NAME@" -I "$maxima_image_base.image" -e '(cl-user::run)' -- "$arg1" "$arg2" "$arg3" "$arg4" "$arg5" "$arg6" "$arg7" "$arg8" "$arg9" + exec "@OPENMCL_NAME@" -I "$maxima_image_base.image" $MAXIMA_LISP_OPTIONS -e '(cl-user::run)' -- "$arg1" "$arg2" "$arg3" "$arg4" "$arg5" "$arg6" "$arg7" "$arg8" "$arg9" elif [ "$MAXIMA_LISP" = "ecl" ]; then - exec "$maxima_image_base" -- "$arg1" "$arg2" "$arg3" "$arg4" "$arg5" "$arg6" "$arg7" "$arg8" "$arg9" + exec "$maxima_image_base" $MAXIMA_LISP_OPTIONS -- "$arg1" "$arg2" "$arg3" "$arg4" "$arg5" "$arg6" "$arg7" "$arg8" "$arg9" elif [ "$MAXIMA_LISP" = "sbcl" ]; then - exec "@SBCL_NAME@" --core "$maxima_image_base.core" --noinform --end-runtime-options --eval '(cl-user::run)' --end-toplevel-options "$arg1" "$arg2" "$arg3" "$arg4" "$arg5" "$arg6" "$arg7" "$arg8" "$arg9" + exec "@SBCL_NAME@" --core "$maxima_image_base.core" --noinform $MAXIMA_LISP_OPTIONS --end-runtime-options --eval '(cl-user::run)' --end-toplevel-options "$arg1" "$arg2" "$arg3" "$arg4" "$arg5" "$arg6" "$arg7" "$arg8" "$arg9" else echo "$0: lisp=\"$MAXIMA_LISP\" not known. Use --list-avail to see possible options." >&2 exit 1 Index: maxima.system =================================================================== RCS file: /cvsroot/maxima/maxima/src/maxima.system,v retrieving revision 1.74 retrieving revision 1.75 diff -u -d -r1.74 -r1.75 --- maxima.system 6 May 2009 15:30:20 -0000 1.74 +++ maxima.system 13 Jul 2009 15:25:25 -0000 1.75 @@ -139,7 +139,10 @@ :components ((:file "mormac") (:file "compat"))) (:module command-line :source-pathname "" + :depends-on (getopt) :components ((:file "command-line"))) + (:module getopt :source-pathname "" + :components ((:file "getopt"))) (:module fundamental-macros :source-pathname "" :components ((:file "defopt") (:file "defcal") |