Skip to content

Commit 2417bec

Browse files
committed
Use keyword/value command-line arguments for depcheck
This is to make it easier to add more options without dealing with positional argument issues.
1 parent 96beb45 commit 2417bec

File tree

2 files changed

+63
-28
lines changed

2 files changed

+63
-28
lines changed

depcheck.lisp

Lines changed: 48 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,7 @@
111111
(asdf:component-name system))))
112112
(when (and (stringp value) (zerop (length value)))))))
113113
(check-attribute 'asdf:system-description :description)
114-
;; Not yet
115-
;;(check-attribute 'asdf:system-license :license)
114+
(check-attribute 'asdf:system-license :license)
116115
(check-attribute 'asdf:system-author :author))))
117116

118117
(defun compute-dependencies (system-file system-name)
@@ -190,27 +189,54 @@
190189
(sb-alien:alien-funcall
191190
(sb-alien:extern-alien "disable_lossage_handler" (function sb-alien:void)))
192191
(setf *print-pretty* nil)
193-
(when (equalp (second argv) "--asdf-version")
194-
(format t "~A~%" (asdf:asdf-version))
195-
(sb-ext:exit :code 0))
196-
(when (equalp (second argv) "--sbcl-version")
197-
(format t "~A~%" (lisp-implementation-version))
198-
(sb-ext:exit :code 0))
199-
(unless (getenv "DEPCHECK_DEBUG")
200-
(sb-ext:disable-debugger))
201-
(setenv "SBCL_HOME"
202-
(load-time-value
203-
(directory-namestring sb-int::*core-string*)))
204-
#+nil
205-
(setenv "CC" "gcc")
206-
(eval *load-op-wrapper*)
207-
(when (getenv "DEPCHECK_FRESH_FASLS")
208-
(set-fasl-output-directory (pathname (format nil "/tmp/depcheck/~D/"
209-
(getpid)))))
210-
(destructuring-bind (index project system dependency-file errors-file
211-
&optional *metadata-required-p*)
212-
(rest argv)
192+
(sb-ext:disable-debugger)
193+
(let (index project system dependency-file errors-file
194+
(args (rest argv)))
195+
(macrolet ((check-args (&rest vars)
196+
`(progn
197+
,@(loop for var in vars
198+
for flag = (format nil "--~A"
199+
(string-downcase var))
200+
collect
201+
`(unless ,var
202+
(error "Missing option ~S" ,flag))))))
203+
(loop
204+
(when (endp args)
205+
(check-args index project system dependency-file errors-file)
206+
(return))
207+
(let ((arg (pop args)))
208+
(cond ((equal arg "--index")
209+
(setf index (pop args)))
210+
((equal arg "--project")
211+
(setf project (pop args)))
212+
((equal arg "--system")
213+
(setf system (pop args)))
214+
((equal arg "--dependency-file")
215+
(setf dependency-file (pop args)))
216+
((equal arg "--errors-file")
217+
(setf errors-file (pop args)))
218+
;; Optional args follow
219+
((equal arg "--asdf-version")
220+
(write-line (asdf:asdf-version))
221+
(sb-ext:exit :code 0))
222+
((equal arg "--sbcl-version")
223+
(write-line (lisp-implementation-version))
224+
(sb-ext:exit :code 0))
225+
((equal arg "--debug")
226+
(sb-ext:enable-debugger))
227+
((equal arg "--metadata-required")
228+
(setf *metadata-required-p* t))
229+
((equal arg "--fasl-directory")
230+
(let ((path (pop args)))
231+
(ensure-directories-exist path)
232+
(set-fasl-output-directory (truename path))))
233+
(t
234+
(error "Unknown argument ~S" arg))))))
213235
(setf *systems* (load-asdf-system-table index))
236+
(setenv "SBCL_HOME"
237+
(load-time-value
238+
(directory-namestring sb-int::*core-string*)))
239+
(eval *load-op-wrapper*)
214240
(with-open-file (*error-output* errors-file
215241
:if-exists :supersede
216242
:direction :output)

dist-cache.lisp

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -252,17 +252,26 @@ if needed."
252252
"If true, a depcheck will fail if :author/:description/:license
253253
options are missing from a system.")
254254

255-
(defun depcheck (primary-system sub-system)
255+
(defun depcheck (primary-system sub-system &key fasl-directory)
256256
(ensure-system-file-index)
257257
(ensure-in-anonymous-directory
258-
(let ((win (temporary-pathname "depcheck-win.txt"))
259-
(fail (temporary-pathname "depcheck-fail.txt")))
258+
(let* ((win (temporary-pathname "depcheck-win.txt"))
259+
(fail (temporary-pathname "depcheck-fail.txt"))
260+
(args (mapcan #'identity
261+
(list
262+
(list :index (native (translate-logical-pathname *system-file-index-file*)))
263+
(list :project primary-system)
264+
(list :system sub-system)
265+
(list :dependency-file win)
266+
(list :errors-file fail)
267+
(when *system-metadata-required-p*
268+
(list :metadata-required))
269+
(when fasl-directory
270+
(list :fasl-directory fasl-directory))))))
260271
(ignore-errors (delete-file win))
261272
(ignore-errors (delete-file fail))
262273
(ignore-errors
263-
(run "depcheck"
264-
(native (translate-logical-pathname *system-file-index-file*))
265-
primary-system sub-system win fail *system-metadata-required-p*))
274+
(apply #'run "depcheck" args))
266275
(let* ((won (probe-file win))
267276
(first-line (and won (ignore-errors (first-line-of win))))
268277
(result (and first-line (split-spaces first-line))))

0 commit comments

Comments
 (0)