From 0fe80f6274a3b4d3d719d8488dfa540aca329fa5 Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Wed, 20 Sep 2017 22:39:42 +0100 Subject: [PATCH] sys-base.lisp (set-command-line-arguments): Rewrite to use `uiop' properly. The code is taken from commit 6e21a5d25bca57a78f052d6a24b97b88e83cc6fb of Sod (https://git.distorted.org.uk/~mdw/sod/). --- sys-base.lisp | 50 ++++++++++++++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/sys-base.lisp b/sys-base.lisp index 4a90b93..e370fde 100644 --- a/sys-base.lisp +++ b/sys-base.lisp @@ -38,28 +38,34 @@ (defun set-command-line-arguments () (setf *command-line* - (or (when (member :cl-launch *features*) - (let* ((uiop-package (find-package :uiop)) - (cll-package (find-package :cl-launch)) - (name (some (intern "GETENV" - (or uiop-package cll-package)) - (list "__CL_ARGV0" "CL_LAUNCH_FILE"))) - (args (symbol-value - (if uiop-package - (intern "*COMMAND-LINE-ARGUMENTS*" - uiop-package) - (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)) - #+clisp (loop with argv = (ext:argv) - for i from 7 below (length argv) - collect (aref argv i)) - '("" "--" ""))) - (setf *program-name* (pathname-name (car *command-line*)))) + (let ((uiop-package (find-package :uiop)) + (cll-package (find-package :cl-launch))) + (cons (or (and uiop-package + (funcall (intern "ARGV0" uiop-package))) + (and cll-package + (some (intern "GETENV" cll-package) + (list "__CL_ARGV0" "CL_LAUNCH_FILE"))) + #+sbcl (car sb-ext:*posix-argv*) + #+cmu (car ext:*command-line-strings*) + #+clisp (aref (ext:argv) 0) + #+ecl (ext:argv 0) + "") + (cond (uiop-package + (funcall (intern "COMMAND-LINE-ARGUMENTS" + uiop-package))) + (cll-package + (symbol-value (intern "*ARGUMENTS*" cll-package))) + (t #.(or (car '(#+sbcl (cdr sb-ext:*posix-argv*) + #+cmu (cdr ext:*command-line-strings*) + #+clisp (coerce (subseq (ext:argv) 8) + 'list) + #+ecl (loop for i from 1 + below (ext:argc) + collect (ext:argv i)))) + (error "Unsupported Lisp.")))))) + + *program-name* (pathname-name (car *command-line*)))) + (set-command-line-arguments) #-clisp -- 2.11.0