# ccwl --- Concise Common Workflow Language # Copyright © 2022, 2024 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 . include Makefile.include DOT = dot EMACS = emacs GIT = git GPG = gpg GUILD = guild GUILE = guile LZIP = lzip SKRIBILO = skribilo FIND_DEPENDENCIES = build-aux/find-dependencies.scm GENERATE_CWL_OUTPUT = build-aux/generate-cwl-output.sh TEST_DRIVER = build-aux/test-driver.scm top_level_module_dir = $(project) sources = $(wildcard $(top_level_module_dir)/*.scm) objects = $(sources:.scm=.go) scripts = $(wildcard scripts/*) tests = $(wildcard tests/*.scm) test_data = $(wildcard tests/*.cwl) doc_sources = doc/ccwl.skb doc_info = $(doc_sources:.skb=.info) doc_html = $(doc_sources:.skb=.html) doc_data = doc/hello.c.gz doc/hello.tar doc/hello.txt \ doc/spell-check-text.txt doc/dictionary fonts = $(addprefix $(GUIX_ENVIRONMENT)/share/fonts/web/, charter_regular.woff2 FiraCode-Regular.woff2 FiraCode-SemiBold.woff2) distribute_files = $(sources) $(scripts) $(tests) $(test_data) \ $(doc_sources) doc/skribilo.scm $(doc_data) $(DOC_SCM) $(DOC_OTHER) \ pre-inst-env guix.scm Makefile configure configure.scm \ $(FIND_DEPENDENCIES) $(GENERATE_CWL_OUTPUT) $(TEST_DRIVER) \ COPYING NEWS.org README.org scmdir = $(datarootdir)/guile/site/$(guile_effective_version)/$(top_level_module_dir) godir = $(libdir)/guile/$(guile_effective_version)/site-ccache/$(top_level_module_dir) .PHONY: all check clean dist distcheck info install # Build all: $(objects) %.go: %.scm GUILE_AUTO_COMPILE=0 $(GUILD) compile -L . -o $@ $< # Run tests check: $(tests) $(TEST_DRIVER) $(GUILE) --no-auto-compile -L . $(TEST_DRIVER) $(tests) # Build documentation include .depends .depends: $(doc_sources) $(FIND_DEPENDENCIES) $(GUILE) --no-auto-compile $(FIND_DEPENDENCIES) > $@ info: $(doc_info) html: $(doc_html) doc: mkdir -p $(dir $@) $(DOC_IMAGES:.png=.dot) $(DOC_OUT): | doc %.cwl: %.scm ./pre-inst-env ccwl compile $< > $@ doc/capture-output-file.out: doc/capture-output-file.cwl doc/hello.tar $(GENERATE_CWL_OUTPUT) $(GENERATE_CWL_OUTPUT) $< --archive $(word 2, $^) doc/capture-output-file-with-parameter-reference.out: doc/capture-output-file-with-parameter-reference.cwl doc/hello.tar $(GENERATE_CWL_OUTPUT) $(GENERATE_CWL_OUTPUT) $< --archive $(word 2, $^) --extractfile hello.txt doc/capture-stdout.out: doc/capture-stdout.cwl $(GENERATE_CWL_OUTPUT) $(GENERATE_CWL_OUTPUT) $< --message '"Hello World!"' doc/checksum.out: doc/checksum.cwl doc/hello.txt $(GENERATE_CWL_OUTPUT) $(GENERATE_CWL_OUTPUT) $< --file $(word 2, $^) doc/decompress-compile-run.out: doc/decompress-compile-run.cwl doc/hello.c.gz $(GENERATE_CWL_OUTPUT) $(GENERATE_CWL_OUTPUT) $< --compressed-source $(word 2, $^) doc/hello-world.out: doc/hello-world.cwl $(GENERATE_CWL_OUTPUT) $(GENERATE_CWL_OUTPUT) $< --message '"Hello World!"' doc/pass-stdin.out: doc/pass-stdin.cwl doc/hello.txt $(GENERATE_CWL_OUTPUT) $(GENERATE_CWL_OUTPUT) $< --file $(word 2, $^) doc/spell-check.out: doc/spell-check.cwl doc/spell-check-text.txt doc/dictionary $(GENERATE_CWL_OUTPUT) $(GENERATE_CWL_OUTPUT) $< --text-file $(word 2, $^) --dictionary $(word 3, $^) doc/hello.tar.out: doc/hello.tar echo "$$ tar --list --file $(notdir $<)" > $@ tar --list --file $< >> $@ %.dot: %.scm ./pre-inst-env ccwl compile --to=dot $< > $@ %.png: %.dot $(DOT) -Tpng -o$@ $< $(doc_info): $(doc_sources) doc/skribilo.go $(DOC_IMAGES) $(DOC_SCM) $(DOC_OUT) $(DOC_OTHER) ./pre-inst-env $(SKRIBILO) --target=info $< --output=$@ $(doc_html): $(doc_sources) doc/skribilo.go $(DOC_IMAGES) $(DOC_SCM) $(DOC_OUT) $(DOC_OTHER) rm -rf $@ mkdir -p $@ ./pre-inst-env $(SKRIBILO) --target=html $< --output=$@/index.html cp -v $(DOC_IMAGES) $@ # Install install: $(sources) $(objects) $(scripts) $(doc_info) install -D $(sources) --target-directory $(scmdir) install -D $(objects) --target-directory $(godir) install -D $(scripts) --target-directory $(bindir) install -D $(doc_info) --target-directory $(infodir) # Build distribution tarball dist_archive = $(project)-$(version).tar.lz dist: $(dist_archive) distsign: $(dist_archive).asc $(dist_archive): .git/refs/heads/main $(GIT) archive --prefix $(basename $(basename $@))/ --format=tar main $(distribute_files) \ | $(LZIP) --force --output $@ %.asc: % $(GPG) --detach-sign --armor $< distcheck: $(dist_archive) $(GUILE) build-aux/distcheck.scm $(version) $< # Build website website: website/index.html website/manual/dev/en website/fonts website/index.html: README.org build-aux/build-home-page.el $(EMACS) -Q --batch --load build-aux/build-home-page.el --funcall build-website website/manual/dev/en: $(doc_html) rm -rf $@ mkdir -p $(dir $@) cp -vr $^ $@ website/fonts: $(fonts) rm -rf $@ mkdir -p $@ cp -v $^ $@/ # Clean clean: rm -f .$(objects) $(dist_archive) $(dist_archive).asc \ .depends Makefile.include website/index.html \ $(DOC_SCM:.scm=.cwl) $(DOC_IMAGES) $(DOC_IMAGES:.png=.dot) $(DOC_OUT) \ $(doc_info) doc/skribilo.go rm -rf $(doc_html) website/manual website/fonts