diff --git a/tools/setup.lisp b/tools/setup.lisp index 13f161543420f11a2022953b4f37045df393abd8..7c781afd43469950023ae3de9888b64cf9955a31 100644 --- a/tools/setup.lisp +++ b/tools/setup.lisp @@ -203,3 +203,33 @@ (compile-file src :error-file nil :output-file obj)) (when load (load name :verbose t))))))))) + + + +;;; CAT-IF-ANYTHING-CHAGNED + +(defun cat-if-anything-changed (output-file &rest input-files) + (flet ((add-correct-type (pathname) + (make-pathname :type (c:backend-fasl-file-type c:*target-backend*) + :defaults pathname))) + (let* ((output-file (add-correct-type output-file)) + (write-date (file-write-date output-file)) + (input-namestrings + (mapcar #'(lambda (file) + (let ((file (add-correct-type file))) + (let ((src-write-date (file-write-date file))) + (unless src-write-date + (error "Missing file: ~S" file)) + (when (and write-date + (> src-write-date write-date)) + (setf write-date nil))) + (unix-namestring file))) + input-files))) + (cond ((null write-date) + (format t "~S out of date.~%" (namestring output-file)) + (run-program "/bin/cat" input-namestrings + :output output-file + :if-output-exists :supersede + :error t)) + (t + (format t "~S up to date.~%" (namestring output-file)))))))