From c550ff6cdc8264c66c13ab3b21e61fccedf9735e Mon Sep 17 00:00:00 2001 From: Arun Isaac Date: Tue, 29 Jun 2021 18:09:27 +0530 Subject: Makefile: Track dependencies automatically. * build-aux/find-dependencies.scm: New file. * Makefile.am (DOC_IMAGES): Delete variable. (.depends): New target. Include it in the Makefile. ($(SKRIBILO_BUILD_DIR)/ccwl.info, $(SKRIBILO_BUILD_DIR)/ccwl.html): Depend on DOC_OTHER_DEPENDENCIES. (clean-local): Delete .depends. * .gitignore: Add .depends. --- build-aux/find-dependencies.scm | 77 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 build-aux/find-dependencies.scm (limited to 'build-aux') diff --git a/build-aux/find-dependencies.scm b/build-aux/find-dependencies.scm new file mode 100644 index 0000000..fb68e9c --- /dev/null +++ b/build-aux/find-dependencies.scm @@ -0,0 +1,77 @@ +;;; ccwl --- Concise Common Workflow Language +;;; Copyright © 2021 Arun Isaac +;;; +;;; This file is part of ccwl. +;;; +;;; ccwl is free software: you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation, either version 3 of the License, or +;;; (at your option) any later version. +;;; +;;; ccwl is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;;; General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with ccwl. If not, see . + +;;; Commentary: + +;; This script scans source files and prints dependencies for make to +;; pick up. + +;;; Code: + +(use-modules (srfi srfi-1) + (srfi srfi-171) + (ice-9 match) + (skribilo reader skribe)) + +(define (skribilo-document file) + "Read skribilo FILE and return the document form." + (call-with-input-file file + (lambda (port) + (port-transduce (tfilter (match-lambda + (('document _ ...) #t) + (_ #f))) + (rany identity) + (make-skribe-reader) + port)))) + +(define (find-dependencies document) + "Return a list of dependencies of the skribilo form DOCUMENT. Each +dependency is of the form (tag . file). tag may either be the symbol +'image or the symbol 'other." + (match document + (('image args ...) + (apply (lambda* (#:key file #:allow-other-keys) + `((image . ,file))) + args)) + (('source args ...) + (apply (lambda* (#:key file #:allow-other-keys) + `((other . ,file))) + args)) + (('scheme-source file) + `((other . ,file))) + (('source-ref file _ ...) + `((other . ,file))) + ((elements ...) + (append-map find-dependencies elements)) + (atom '()))) + +;; Print dependencies +(let ((dependencies + (find-dependencies (skribilo-document "doc/ccwl.skb")))) + (format #t "DOC_IMAGES = ~a~%" + (string-join (filter-map (match-lambda + (('image . file) file) + (_ #f)) + dependencies) + " ")) + (format #t "DOC_OTHER_DEPENDENCIES = ~a~%" + (string-join (filter-map (match-lambda + (('other . file) file) + (_ #f)) + dependencies) + " "))) -- cgit v1.2.3