anchor.diff:                 nyxt/version)
     :perform (compile-op
               (o c)
  -            (flet ((ensure-parent-exists (file)
  +            (labels ((ensure-parent-exists (file)
                        (ensure-all-directories-exist
  -                      (list (directory-namestring file)))))
  +                      (list (directory-namestring file))))
  +                     (install-file (file dest)
  +                       (ensure-parent-exists dest)
  +                       (copy-file file dest)))
                 (let ((desktop-file (merge-pathnames* "applications/nyxt.desktop" *datadir*)))
  -                (ensure-parent-exists desktop-file)
  -                (copy-file (system-relative-pathname c "assets/nyxt.desktop")
  -                                desktop-file))
  +                (install-file (system-relative-pathname c "assets/nyxt.desktop")
  +                              desktop-file))
                 (mapc (lambda (icon-size)
                         (let ((icon-file (format nil "~a/icons/hicolor/~ax~a/apps/nyxt.png"
                                                  *datadir* icon-size icon-size)))
  -                        (ensure-parent-exists icon-file)
  -                        (copy-file (system-relative-pathname
  -                                         c
  -                                         (format nil "assets/nyxt_~ax~a.png"
  -                                                 icon-size icon-size))
  -                                        icon-file)))
  +                        (install-file (system-relative-pathname
  +                                       c
  +                                       (format nil "assets/nyxt_~ax~a.png"
  +                                               icon-size icon-size))
  +                                      icon-file)))
                       '(16 32 128 256 512))
                 (let ((binary-file (merge-pathnames* "nyxt" *bindir*)))
  -                (ensure-parent-exists binary-file)
  -                (copy-file (system-relative-pathname c "nyxt") binary-file)
  -                ;; TODO: Use iolib/os:file-permissions instead of chmod?  Too verbose?
  -                (run-program (list "chmod" "+x" (native-namestring binary-file))))
  +                (install-file (system-relative-pathname c "nyxt") binary-file)
  +                (make-executable binary-file))
                 (flet ((copy-directory (source destination &key verbose-p)
                          "Copy the content (the file tree) of SOURCE to DESTINATION."
                          (when verbose-p
  
positive.code:                                             (merge-pathnames*
                                               (subpathp file (ensure-directory-pathname source))
                                               (ensure-pathname destination :truenamize t :ensure-directory t))))
                                        (ensure-parent-exists destination-file)
                                        (copy-file file destination-file))))
                                  (directory-files subdirectory))))))
                  (handler-case
                      (progn
                        (format *error-output* "~&;; Copying Git files to ~s.~%" *dest-source-dir*)
                        (dolist (file (cons
                                       ;; Find `libnyxt' file regardless of its extension:
                                       (subpathp (first (delete-if
                                                         (complement (lambda (file)
                                                                       (string-prefix-p "libnyxt" (pathname-name file))))
                                                         (directory-files (system-relative-pathname
                                                                           :nyxt "libraries/web-extensions"))))
                                                 (system-source-directory :nyxt))
                                       (mapcan (lambda (dir)
                                                 (split-string
                                                  (run-program `("git" "-C" ,(native-namestring
                                                                              (system-source-directory :nyxt))
                                                                       "ls-files" ,dir)
                                                               :output '(:string :stripped t))
                                                  :separator '(#\newline #\return #\linefeed)))
                                               '("source" "libraries"))))
                          (let ((dest (merge-pathnames* file *dest-source-dir*)))
                            (ensure-parent-exists dest)
                            (copy-file (system-relative-pathname :nyxt file)
                                       dest))))
                    (condition (c)
                      (format *error-output* "~&;; Git copy error: ~a" c)
                      (format *error-output* "~&;; Fallback to copying whole directories instead.~%")
  
negative.code:                       (copy-directory (system-relative-pathname :nyxt dir)
                                        (merge-pathnames* dir *dest-source-dir*)
                                        :verbose-p t))))
                  (let ((libnyxt-dest (merge-pathnames* "libnyxt.so" *nyxt-libdir*)))
                    (install-file (system-relative-pathname :nyxt "libraries/web-extensions/libnyxt.so")
                                  libnyxt-dest)
                    (make-executable libnyxt-dest))
                  (install-file (system-source-file :nyxt) (merge-pathnames* "nyxt.asd" *dest-source-dir*))))))
  
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;; Library subsystems:
  