--- a
+++ b/contrib/asdf-stub.lisp
@@ -0,0 +1,26 @@
+(load "../asdf/asdf")
+
+(setf asdf::*central-registry*
+      '((merge-pathnames "systems/" (truename (sb-ext:posix-getenv "SBCL_HOME")))))
+(push :sb-building-contrib *features*)
+(asdf:operate 'asdf:load-op *system*)
+
+(defvar *system-stub* (make-pathname :name *system* :type "lisp"))
+
+(when (probe-file (compile-file-pathname *system-stub*))
+  (error "fasl file exists"))
+
+(with-open-file (s *system-stub* :direction :output :if-exists :error)
+  (print '(unless (member "ASDF" *modules* :test #'string=)
+	   (load (merge-pathnames "asdf/asdf.fasl" (truename (sb-ext:posix-getenv "SBCL_HOME")))))
+	 s)
+  ;; This addition to *central-registry* allows us to find contribs
+  ;; even if the user has frobbed the original contents.
+  (print `(let ((asdf:*central-registry* (cons (merge-pathnames "systems/"
+								(truename (sb-ext:posix-getenv "SBCL_HOME")))
+					       asdf:*central-registry*)))
+	   (asdf::module-provide-asdf ,*system*))
+	 s))
+
+(compile-file *system-stub*)
+(delete-file *system-stub*)