Handle run-program with :directory nil.
[sbcl.git] / src / code / module.lisp
index c21efc4..a6b47b4 100644 (file)
@@ -23,7 +23,7 @@
    It is used by PROVIDE and REQUIRE.")
 
 (defvar *module-provider-functions* (list 'module-provide-contrib)
-  "See function documentation for REQUIRE")
+  "See function documentation for REQUIRE.")
 \f
 ;;;; PROVIDE and REQUIRE
 
   (let* ((filesys-name (string-downcase (string name)))
          (unadorned-path
           (merge-pathnames
-           (make-pathname :directory (list :relative filesys-name)
+           (make-pathname :directory (list :relative "contrib")
                           :name filesys-name)
-           (truename (posix-getenv "SBCL_HOME"))))
+           (truename (or (sbcl-homedir-pathname)
+                         (return-from module-provide-contrib nil)))))
          (fasl-path (merge-pathnames
                      (make-pathname :type *fasl-file-type*)
                      unadorned-path))
     ;; be removed by the time we get round to trying to load it.
     ;; Maybe factor out the logic in the LOAD guesser as to which file
     ;; was meant, so that we can use it here on open streams instead?
-    (when (or (probe-file unadorned-path)
-              (probe-file fasl-path)
-              (probe-file lisp-path))
-      (load unadorned-path)
-      t)))
+    (let ((file (or (probe-file fasl-path)
+                    (probe-file unadorned-path)
+                    (probe-file lisp-path))))
+      (when file
+        (handler-bind
+            (((or style-warning sb!int:package-at-variance) #'muffle-warning))
+          (load file))
+        t))))