source: trunk/abcl/src/org/armedbear/lisp/abcl-contrib.lisp @ 14232

Last change on this file since 14232 was 14232, checked in by Mark Evenson, 8 years ago

Fixes #261: ABCL-CONTRIB finding logic widened to Debian packaging conventions.

Thanks for Christoph.

File size: 2.3 KB
RevLine 
[13303]1(in-package :system)
2
3(require :asdf)
4
[13730]5;;; TODO possibly allow customization in system.lisp?
[13303]6(defun find-system-jar () 
[13730]7  (flet ((match-system-jar (p)
8           "Match `abcl.jar` or `abcl-1.0.1.jar` or `abcl-1.0.1-something.jar`"
9           (and (pathnamep p)
10                (equal (pathname-type p) "jar")
11                (java:jstatic "matches"
12                              "java.util.regex.Pattern" 
[14232]13                              "abcl(-[0-9]\\.[0-9]\\.[0-9]([+~-].+)?)?" 
[13730]14                              (pathname-name p))
15                p)))
16    (dolist (loader (java:dump-classpath))
17      (let ((abcl-jar (some #'match-system-jar loader)))
18        (when abcl-jar
19          (return abcl-jar))))))
[13303]20
21(defvar *abcl-jar* nil
22  "Pathname of the jar that ABCL was loaded from.
23Initialized via SYSTEM::FIND-SYSTEM-JAR.")
24
25(defvar *abcl-contrib* nil
26  "Pathname of the ABCL contrib.
27Initialized via SYSTEM:FIND-CONTRIB")
28
[13730]29(defun find-contrib (&key (verbose nil))
[13303]30"Attempt to find the ABCL contrib jar and add its contents to ASDF."
31  (unless *abcl-contrib*
32    (unless *abcl-jar*
33      (setf *abcl-jar* (find-system-jar)))
34    (when *abcl-jar*
[13730]35      (let* ((abcl-contrib-name
36              (concatenate 'string "abcl-contrib"
37                           (subseq (pathname-name *abcl-jar*) 4)))
38             (abcl-contrib (make-pathname :defaults *abcl-jar*
39                                          :name abcl-contrib-name)))
40  (if (probe-file abcl-contrib)
41            (progn
42              (setf *abcl-contrib* abcl-contrib)
43              (dolist (asdf-file
44                        (directory (make-pathname :device (list *abcl-contrib*)
45                                                  :directory '(:absolute :wild)
46                                                  :name :wild
47                                                  :type "asd")))
[14065]48                (let ((asdf-directory (make-pathname :defaults asdf-file :name nil :type nil)))
49                  (unless (find asdf-directory asdf:*central-registry* :test #'equal)
50                    (push asdf-directory asdf:*central-registry*)
51                    (format verbose "~&Added ~A to ASDF.~&" asdf-directory))))
[13730]52              *abcl-contrib*)
53        (format verbose "Failed to find abcl-contrib at '~A'." abcl-contrib))))))
[13303]54
[13730]55(when (find-contrib :verbose t)
[13303]56  (provide :abcl-contrib))
57
58
59
[13730]60
61
62
63
[13303]64       
65 
Note: See TracBrowser for help on using the repository browser.