sys-base: Further cl-launch improvement.
authorMark Wooding <mdw@distorted.org.uk>
Wed, 26 Nov 2008 21:23:09 +0000 (21:23 +0000)
committerMark Wooding <mdw@distorted.org.uk>
Wed, 26 Nov 2008 21:23:09 +0000 (21:23 +0000)
If CL_LAUNCH_FILE is unset, assume that we've been invoked with the
program name as the first argument anyway.  We can arrange for this to
be the case fairly easily.

The problem is that

  #! /usr/bin/cl-launch -X ... --

doesn't work on Linux because cl-launch is a script.  Besides, it
hard-codes the path of cl-launch.  Putting

  #! /bin/sh
  #|
  exec cl-launch -f "$0" -- "$0" "$@"
  |#
  ... lisp here ...

seems sufficient for one-off Lisp scripts.

sys-base.lisp

index bb1cd45..904c165 100644 (file)
 (defun set-command-line-arguments ()
   (setf *raw-command-line*
        (or (when (member :cl-launched *features*)
-             (cons (or (funcall (intern "GETENV" (find-package :cl-launch))
-                                "CL_LAUNCH_FILE")
-                       "<unknown-script>")
-                   (symbol-value (intern "*ARGUMENTS*"
-                                         (find-package :cl-launch)))))
+             (let* ((cll-package (find-package :cl-launch))
+                    (name (funcall (intern "GETENV" cll-package)
+                                   "CL_LAUNCH_FILE"))
+                    (args (symbol-value (intern "*ARGUMENTS*"
+                                                cll-package))))
+               (if name
+                   (cons name args)
+                   args)))
            #+cmu ext:*command-line-strings*
            #+sbcl sb-ext:*posix-argv*
            #+ecl (loop from i below (ext:argc) collect (ext:argv i))