                                                  straight--build-cache)))
                straight--build-cache))))
 
-(defun straight--build-package (recipe &optional interactive)
+(defun straight--build-package (recipe &optional interactive parent-recipe)
   (straight--with-plist recipe
       (package)
-    (message "Building package %S..." package)
-    (straight--symlink-package recipe)
-    (straight--compute-dependencies package)
-    (dolist (dependency (straight--get-dependencies package))
-      (straight-use-package (straight--get-recipe dependency)
-                            interactive 'straight-style))
-    (message "Building package %S..." package)
-    (straight--generate-package-autoloads recipe)
-    (straight--byte-compile-package recipe)
-    (straight--update-build-mtime recipe)
-    (message "Building package %S...done" package)))
+    (straight--with-progress (if parent-recipe
+                                 (format "Building package %S (dependency of %S)"
+                                         package (plist-get parent-recipe :package))
+                               (format "Building package %S" package))
+      (straight--symlink-package recipe)
+      (straight--compute-dependencies package)
+      (dolist (dependency (straight--get-dependencies package))
+        (straight-use-package (straight--get-recipe dependency)
+                              interactive 'straight-style
+                              recipe))
+      (if parent-recipe
+          (message (concat "Finished checking dependencies, building "
+                           "package %S (dependency of %S)")
+                   package (plist-get parent-recipe :package))
+        (message "Finished checking dependencies, building package %S..."
+                 package))
+      (straight--generate-package-autoloads recipe)
+      (straight--byte-compile-package recipe)
+      (straight--update-build-mtime recipe))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;; Loading packages


(defun straight--get-gnu-elpa-recipe (package)
  (unless (straight--repository-is-available-p gnu-elpa-recipe)
    (straight--clone-repository gnu-elpa-recipe))
  (straight--with-plist gnu-elpa-recipe
      (local-repo)
    (when (file-exists-p (straight--dir


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;; Utility functions

(defmacro straight--with-progress (task &rest body)
  (declare (indent 1))
  (let ((task-sym (make-symbol "task")))
    `(let ((,task-sym ,task))
       (prog2
           (message "%s..." ,task-sym)
           (progn
             ,@body)
         (message "%s...done" ,task-sym)))))

(defmacro straight--with-plist (plist props &rest body)
  (declare (indent 2))
