diff --git a/asdf.asd b/asdf.asd
index 7dce25a2191a2e8f83e2b8bb75cd6114bfb05058..6c440a4b2f9c3260fd259aa075c33bcb84cdea9a 100644
--- a/asdf.asd
+++ b/asdf.asd
@@ -12,7 +12,7 @@
   :licence "MIT"
   :description "Another System Definition Facility"
   :long-description "ASDF builds Common Lisp software organized into defined systems."
-  :version "2.012.2" ;; to be automatically updated by bin/bump-revision
+  :version "2.012.3" ;; to be automatically updated by bin/bump-revision
   :depends-on ()
   :components
   ((:file "asdf")
diff --git a/asdf.lisp b/asdf.lisp
index 3d2fce9b84391f96dc8e942c7b6917b0e2c7ae58..ef7265cc0b41b50d3a9a4a52d0ad8b14be8e4237 100644
--- a/asdf.lisp
+++ b/asdf.lisp
@@ -1,5 +1,5 @@
 ;;; -*- mode: common-lisp; package: asdf; -*-
-;;; This is ASDF 2.012.2: Another System Definition Facility.
+;;; This is ASDF 2.012.3: Another System Definition Facility.
 ;;;
 ;;; Feedback, bug reports, and patches are all welcome:
 ;;; please mail to <asdf-devel@common-lisp.net>.
@@ -83,7 +83,7 @@
          ;; "2.345.6" would be a development version in the official upstream
          ;; "2.345.0.7" would be your seventh local modification of official release 2.345
          ;; "2.345.6.7" would be your seventh local modification of development version 2.345.6
-         (asdf-version "2.012.2")
+         (asdf-version "2.012.3")
          (existing-asdf (fboundp 'find-system))
          (existing-version *asdf-version*)
          (already-there (equal asdf-version existing-version)))
@@ -501,7 +501,7 @@ starting the separation from the end, e.g. when called with arguments
          ;; Giving :unspecific as argument to make-pathname is not portable.
          ;; See CLHS make-pathname and 19.2.2.2.3.
          ;; We only use it on implementations that support it.
-         (or #+(or ccl gcl lispworks sbcl) :unspecific)))
+         (or #+(or clozure gcl lispworks sbcl) :unspecific)))
     (destructuring-bind (name &optional (type unspecific))
         (split-string filename :max 2 :separator ".")
       (if (equal name "")
@@ -558,6 +558,17 @@ pathnames."
     :unless (eq k key)
     :append (list k v)))
 
+#+mcl
+(eval-when (:compile-toplevel :load-toplevel :execute)
+  (ccl:define-entry-point (_getenv "getenv") ((name :string)) :string))
+
+#+mcl
+(defun %getenv (x)
+  (ccl:with-cstrs ((name x))
+    (let ((value (_getenv name)))
+      (unless (ccl:%null-ptr-p value)
+        (ccl:%get-cstring value)))))
+
 (defun* getenv (x)
   (#+(or abcl clisp) ext:getenv
    #+allegro sys:getenv
@@ -566,7 +577,10 @@ pathnames."
    #+ecl si:getenv
    #+gcl system:getenv
    #+lispworks lispworks:environment-variable
+   #+mcl %getenv
    #+sbcl sb-ext:posix-getenv
+   #-(or abcl allegro clisp clozure cmu ecl gcl lispworks mcl sbcl scl)
+   (lambda (x) (declare (ignore x)) (error "getenv not available on your implementation"))
    x))
 
 (defun* directory-pathname-p (pathname)
@@ -2528,7 +2542,7 @@ located."
 (defparameter *implementation-features*
   '((:acl :allegro)
     (:lw :lispworks)
-    (:digitool) ; before clozure, so it won't get preempted by ccl
+    (:mcl :digitool) ; before clozure, so it won't get preempted by ccl
     (:ccl :clozure)
     (:corman :cormanlisp)
     (:abcl :armedbear)
@@ -2576,7 +2590,6 @@ located."
                       ccl::*openmcl-minor-version*
                       (logand ccl::fasl-version #xFF))
     #+cmu (substitute #\- #\/ s)
-    #+digitool (subseq s 8)
     #+ecl (format nil "~A~@[-~A~]" s
                   (let ((vcs-id (ext:lisp-implementation-vcs-id)))
                     (when (>= (length vcs-id) 8)
@@ -2585,8 +2598,9 @@ located."
     #+lispworks (format nil "~A~@[~A~]" s
                         (when (member :lispworks-64bit *features*) "-64bit"))
     ;; #+sbcl (format nil "~a-fasl~d" s sb-fasl:+fasl-file-version+) ; f-f-v redundant w/ version
-    #+(or cormanlisp mcl sbcl scl) s
-    #-(or allegro armedbear clisp clozure cmu cormanlisp digitool
+    #+mcl (subseq s 8)
+    #+(or cormanlisp sbcl scl) s
+    #-(or allegro armedbear clisp clozure cmu cormanlisp
           ecl gcl lispworks mcl sbcl scl) s))
 
 (defun* first-feature (features)
@@ -2736,7 +2750,7 @@ located."
 (defun* directory* (pathname-spec &rest keys &key &allow-other-keys)
   (apply 'directory pathname-spec
          (append keys '#.(or #+allegro '(:directories-are-files nil :follow-symbolic-links nil)
-                             #+ccl '(:follow-links nil)
+                             #+clozure '(:follow-links nil)
                              #+clisp '(:circle t :if-does-not-exist :ignore)
                              #+(or cmu scl) '(:follow-links nil :truenamep nil)
                              #+sbcl (when (find-symbol "RESOLVE-SYMLINKS" "SB-IMPL") '(:resolve-symlinks nil))))))
@@ -3405,8 +3419,8 @@ with a different configuration, so the configuration would be re-read then."
          (dirs
           #-cormanlisp
           (ignore-errors
-            (directory* wild . #.(or #+ccl '(:directories t :files nil)
-                                     #+digitool '(:directories t))))
+            (directory* wild . #.(or #+clozure '(:directories t :files nil)
+                                     #+mcl '(:directories t))))
           #+cormanlisp (cl::directory-subdirs directory))
          #+(or abcl allegro lispworks scl)
          (dirs (remove-if-not #+abcl #'extensions:probe-directory