diff --git a/Makefile b/Makefile index f08136c..512c8b6 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,35 @@ +# Usage example + +## +## Local configuration +## + +## +## Configuration of input variables for libraries +## +PLANTUML_SRC_DIR = $(SOURCE_DIR)/plantuml +PLANTUML_DEST_DIR = $(IMAGES_DIR)/plantuml + +MOCODO_SRC_DIR = $(SOURCE_DIR)/mocodo +MOCODO_DEST_DIR = $(IMAGES_DIR)/mocodo + +GRAPHVIZ_SRC_DIR = $(SOURCE_DIR)/graphviz +GRAPHVIZ_DEST_DIR = $(IMAGES_DIR)/graphviz + +## +## Include libraries +## +include mocodo.mk +include dot.mk +include plantuml.mk + +## +## Rules +## + +.PHONY: build +build: plantuml-build mocodo-build graphviz-build + +.PHONY: clean +clean: plantuml-clean mocodo-clean graphviz-clean --include mocodo.mk --include dot.mk --include plantuml.mk diff --git a/README.md b/README.md index 6ab2e52..4725684 100644 --- a/README.md +++ b/README.md @@ -1,60 +1,113 @@ + + +[![Build Status](https://cicd.apps.glenux.net/api/badges/glenux/makefiles-forever/status.svg)](https://cicd.apps.glenux.net/glenux/makefiles-forever) +![License LGPL3.0-or-later](https://img.shields.io/badge/license-LGPL3.0--or--later-blue.svg) +[![Donate on patreon](https://img.shields.io/badge/patreon-donate-orange.svg)](https://patreon.com/glenux) + +> :information_source: This project is available on our self-hosted server and +> on CodeBerg and GitHub as mirrors. For the latest updates and comprehensive +> version of our project, please visit our primary repository at: +> . + # Makefiles Forever A drop-in collection of makefiles libraries for your projects ## Description -* plantuml.makefile — Build [plantuml](https://plantuml.com/) diagrams -* dot.mk — Build [graphviz](https://graphviz.org/) graph diagrams -* mocodo.mk — Build [mocodo](http://mocodo.wingi.net/) entity-relation and logical diagrams +* plantuml.mk — Automate the building [plantuml](https://plantuml.com/) diagrams. +* graphviz.mk — Streamline the creation of [graphviz](https://graphviz.org/) graph diagrams. +* mocodo.mk — Facilitate the development of [mocodo](http://mocodo.wingi.net/) entity-relation and logical diagrams. +* mypaint.mk - Automate the conversion of [mypaint](https://mypaint.app/) openraster images to usual image formats. ## Usage -Add this repository as a GIT submodule of your project +### Adding to your project + +To include 'Makefiles Forever' in your project, add this repository as a GIT +submodule: ```shell-session $ git submodule add https://github.com/glenux/makefiles-forever .makefiles ``` -Include needed features in the end of your makefile +### Configuring your makefiles + +In your project's makefile, include the necessary modules. __The `include` instructions must be located +after your existing targets__. ```makefile -# [...] +# [...variable definitions...] --include .makefiles/featureA.mk --include .makefiles/featureB.mk +# Include as many Makefiles Forever features as your want +include .makefiles/plantuml.mk +include .makefiles/mocodo.mk +# [...include as many modules as you want...] + +# [...targets definitions...] ``` Declare API variables (ex: `*_SRC_DIR`, `*_DEST_DIR`) for each module ```makefile -# Configuration for featureA from Makefiles Forever -FEATUREA_SRC_DIR=/path/to/somewhere -FEATUREA_DEST_DIR=/some/other/path +# PlantUML Configuration +PLANTUML_SRC_DIR=/path/to/plantuml/files +PLANTUML_DEST_DIR=/path/to/output/directory -# Configuration for featureB from Makefiles Forever -FEATUREA_SRC_DIR=/another/path -FEATUREB_DEST_DIR=/a/different/one +# Mocodo Configuration +MOCODO_SRC_DIR=/path/to/mocodo/files +MOCODO_DEST_DIR=/path/to/output/directory + +# [...you the external variables of the modules you included...] + +# [ ... etc ...] ``` -Use pre-defined targets as dependencies of your targets: +Use pre-defined targets in your build process, as dependencies of your existing +targets: ```makefile -build: featureA-build -build: featureB-build -clean: featureA-clean -clean: featureB-clean +build: plantuml-build mocodo-build graphviz-build + +clean: plantuml-clean mocodo-clean graphviz-clean ``` Feature files usually define more targets than just build and clean, and you can use those too! -## Good practices for coding .mk files +## Best practices used in our .mk modules -* Keep task parallelism in mind - * Make all targets available from root makefile - * Do not descend in subdirectories +* Parallel Execution: We ensure targets are available from the root makefile and avoid descending into subdirectories for parallel execution. +* Modular Design: We keep our makefiles modular for easy maintenance and scalability. +* Documentation: We comment our makefiles for clarity and ease of use by others. + +## Contributing + +Contributions are what make the open-source community such an amazing place to +learn, inspire, and create. Any contributions you make are **greatly +appreciated**. + +## Troubleshooting and Support + +If you encounter any issues or need support, please open an issue in +[the project's issue tracker](https://code.apps.glenux.net/glenux/makefiles-forever/issues). +We strive to be responsive and helpful. + +## License + +Distributed under the LGPL-3.0-or-later License. See `LICENSE` file for more +information. + +## Acknowledgments + +* A special thanks to all contributors and users of this project for their + valuable feedback and support. diff --git a/graphviz.mk b/graphviz.mk index f3a0e7c..e00c47b 100644 --- a/graphviz.mk +++ b/graphviz.mk @@ -1,3 +1,8 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +# +# SPDX-FileCopyrightText: 2023 Glenn Y. Rolland +# Copyright © 2023 Glenn Y. Rolland + ## ## GRAPHVIZ MODULE ## @@ -15,11 +20,18 @@ GRAPHVIZ_DEST_DIR ?= ## Find .dot graphs GRAPHVIZ_DOT := $(shell find $(GRAPHVIZ_SRC_DIR) \( -name '*.dot' ! -name '_*' \)) GRAPHVIZ_DOT_SVG := $(patsubst $(GRAPHVIZ_SRC_DIR)/%.dot,$(GRAPHVIZ_DEST_DIR)/%.dot.svg,$(GRAPHVIZ_DOT)) +GRAPHVIZ_DOT_PNG := $(patsubst $(GRAPHVIZ_SRC_DIR)/%.dot,$(GRAPHVIZ_DEST_DIR)/%.dot.png,$(GRAPHVIZ_DOT)) +GRAPHVIZ_DOT_PDF := $(patsubst $(GRAPHVIZ_SRC_DIR)/%.dot,$(GRAPHVIZ_DEST_DIR)/%.dot.pdf,$(GRAPHVIZ_DOT)) ## Find .circo graphs GRAPHVIZ_CIRCO := $(shell find $(GRAPHVIZ_SRC_DIR) \( -name '*.circo' ! -name '_*' \)) GRAPHVIZ_CIRCO_SVG := $(patsubst $(GRAPHVIZ_SRC_DIR)/%.circo,$(GRAPHVIZ_DEST_DIR)/%.circo.svg,$(GRAPHVIZ_CIRCO)) +GRAPHVIZ_CIRCO_PNG := $(patsubst $(GRAPHVIZ_SRC_DIR)/%.circo,$(GRAPHVIZ_DEST_DIR)/%.circo.png,$(GRAPHVIZ_CIRCO)) +GRAPHVIZ_CIRCO_PDF := $(patsubst $(GRAPHVIZ_SRC_DIR)/%.circo,$(GRAPHVIZ_DEST_DIR)/%.circo.pdf,$(GRAPHVIZ_CIRCO)) + GRAPHVIZ_SVG := $(GRAPHVIZ_DOT_SVG) $(GRAPHVIZ_CIRCO_SVG) +GRAPHVIZ_PNG := $(GRAPHVIZ_DOT_PNG) $(GRAPHVIZ_CIRCO_PNG) +GRAPHVIZ_PDF := $(GRAPHVIZ_DOT_PDF) $(GRAPHVIZ_CIRCO_PDF) ## ## Prerequisistes (system packages) @@ -30,27 +42,48 @@ GRAPHVIZ_APT_PACKAGES := graphviz ## Rules ## -$(GRAPHVIZ_DEST_DIR)/%.dot.svg: $(GRAPHVIZ_SRC_DIR)/%.dot +$(GRAPHVIZ_DEST_DIR): + mkdir -p $(GRAPHVIZ_DEST_DIR) + +$(GRAPHVIZ_DEST_DIR)/%.dot.svg: $(GRAPHVIZ_SRC_DIR)/%.dot | $(GRAPHVIZ_DEST_DIR) dot -Tsvg $< > $@ -$(GRAPHVIZ_DEST_DIR)/%.circo.svg: $(GRAPHVIZ_SRC_DIR)/%.circo +$(GRAPHVIZ_DEST_DIR)/%.circo.svg: $(GRAPHVIZ_SRC_DIR)/%.circo | $(GRAPHVIZ_DEST_DIR) circo -Tsvg $< > $@ $(GRAPHVIZ_SVG): | $(GRAPHVIZ_DEST_DIR) +$(GRAPHVIZ_PDF): | $(GRAPHVIZ_DEST_DIR) + +$(GRAPHVIZ_PNG): | $(GRAPHVIZ_DEST_DIR) + +.PHONY: graphviz-build-dot-svg graphviz-build-dot-svg: $(GRAPHVIZ_DOT_SVG) +.PHONY: graphviz-build-circo-svg graphviz-build-circo-svg: $(GRAPHVIZ_CIRCO_SVG) +.PHONY: graphviz-build-svg graphviz-build-svg: graphviz-build-dot-svg graphviz-build-circo-svg +.PHONY: graphviz-buil graphviz-build: graphviz-build-svg # Clean # +.PHONY: graphviz-clean-svg graphviz-clean-svg: rm -f $(GRAPHVIZ_SVG) -graphviz-clean: graphviz-clean-svg +.PHONY: graphviz-clean-pdf +graphviz-clean-pdf: + rm -f $(GRAPHVIZ_PDF) + +.PHONY: graphviz-clean-png +graphviz-clean-png: + rm -f $(GRAPHVIZ_PNG) + +.PHONY: graphviz-clean +graphviz-clean: graphviz-clean-svg graphviz-clean-png graphviz-clean-pdf diff --git a/mocodo.mk b/mocodo.mk index be26f04..b04a440 100644 --- a/mocodo.mk +++ b/mocodo.mk @@ -1,3 +1,8 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +# +# SPDX-FileCopyrightText: 2023 Glenn Y. Rolland +# Copyright © 2023 Glenn Y. Rolland + ## ## MOCODO MODULE ## @@ -5,26 +10,31 @@ ## ## External variables (API) ## -MOCODO_OPT=--colors brewer-6 --shapes verdana -MOCODO_SRC_DIR= -MOCODO_DEST_DIR= +MOCODO_OPT ?= --colors brewer-6 --shapes verdana +MOCODO_SRC_DIR ?= +MOCODO_DEST_DIR ?= ## -## Internal variables +## Internal variables (lazy recursive evaluation) ## -MOCODO_MCD_FILES=$(shell find $(MOCODO_SRC_DIR) \( -name '*.mcd' ! -name '_*' \)) -MOCODO_MCD_MLD=$(patsubst $(MOCODO_SRC_DIR)/%.mcd,$(MOCODO_DEST_DIR)/%.mcd.mld,$(MOCODO_MCD_FILES)) -MOCODO_MCD_SVG=$(patsubst $(MOCODO_SRC_DIR)/%.mcd,$(MOCODO_DEST_DIR)/%.mcd.svg,$(MOCODO_MCD_FILES)) -MOCODO_MCD_PDF=$(patsubst $(MOCODO_SRC_DIR)/%.mcd,$(MOCODO_DEST_DIR)/%.mcd.pdf,$(MOCODO_MCD_FILES)) -MOCODO_MLD_FILES=$(shell find $(MOCODO_SRC_DIR) \( -name '*.mld' ! -name '_*' \)) $(MOCODO_MCD_MLD) -MOCODO_MLD_SVG=$(patsubst $(MOCODO_SRC_DIR)/%.mld,$(MOCODO_DEST_DIR)/%.mld.svg,$(MOCODO_MLD_FILES)) -MOCODO_MLD_PDF=$(patsubst $(MOCODO_SRC_DIR)/%.mld,$(MOCODO_DEST_DIR)/%.mld.pdf,$(MOCODO_MLD_FILES)) +## Find .mcd and .mld files +## Convert .mcd to .mcd.mld, .mcd.svg and .mcd.pdf files +## Convert .mld to .mld.svg, and .mld.pdf files + +MOCODO_MCD_FILES = $(shell find $(MOCODO_SRC_DIR) \( -name '*.mcd' ! -name '_*' \)) +MOCODO_MCD_MLD = $(patsubst $(MOCODO_SRC_DIR)/%.mcd,$(MOCODO_DEST_DIR)/%.mcd.mld,$(MOCODO_MCD_FILES)) +MOCODO_MCD_SVG = $(patsubst $(MOCODO_SRC_DIR)/%.mcd,$(MOCODO_DEST_DIR)/%.mcd.svg,$(MOCODO_MCD_FILES)) +MOCODO_MCD_PDF = $(patsubst $(MOCODO_SRC_DIR)/%.mcd,$(MOCODO_DEST_DIR)/%.mcd.pdf,$(MOCODO_MCD_FILES)) + +MOCODO_MLD_FILES = $(shell find $(MOCODO_SRC_DIR) \( -name '*.mld' ! -name '_*' \)) $(MOCODO_MCD_MLD) +MOCODO_MLD_SVG = $(patsubst $(MOCODO_SRC_DIR)/%.mld,$(MOCODO_DEST_DIR)/%.mld.svg,$(MOCODO_MLD_FILES)) +MOCODO_MLD_PDF = $(patsubst $(MOCODO_SRC_DIR)/%.mld,$(MOCODO_DEST_DIR)/%.mld.pdf,$(MOCODO_MLD_FILES)) ## ## Prerequisistes (system packages) ## -MOCODO_APT_PACKAGES=ghostscript librsvg2-bin +MOCODO_APT_PACKAGES = ghostscript librsvg2-bin ## ## Rules @@ -71,26 +81,56 @@ $(MOCODO_DEST_DIR)/%.mcd.pdf: $(MOCODO_SRC_DIR)/%.mcd.svg # rsvg-convert -f pdf $< > $@ rsvg-convert -f ps $< | gs -sDEVICE=pdfwrite -sOutputFile=$@ -f - +.PHONY: mocodo-mcd-mld mocodo-mcd-mld: $(MOCODO_MCD_MLD) +.PHONY: mocodo-mcd-svg mocodo-mcd-svg: $(MOCODO_MCD_SVG) + +.PHONY: mocodo-mld-pdf +mocodo-mcd-pdf: $(MOCODO_MCD_PDF) + +.PHONY: mocodo-mld-svg mocodo-mld-svg: $(MOCODO_MLD_SVG) -mocodo-mcd-pdf: $(MOCODO_MCD_PDF) +.PHONY: mocodo-mld-pdf mocodo-mld-pdf: $(MOCODO_MLD_PDF) +.PHONY: mocodo-svg mocodo-svg: mocodo-mcd-svg mocodo-mld-svg +.PHONY: mocodo-pdf mocodo-pdf: mocodo-mcd-pdf mocodo-mld-pdf +.PHONY: mocodo-clean-mld mocodo-clean-mld: rm -f $(MOCODO_MCD_MLD) +.PHONY: mocodo-clean-svg mocodo-clean-svg: rm -f $(MOCODO_MCD_SVG) $(MOCODO_MLD_SVG) +.PHONY: mocodo-clean-pdf mocodo-clean-pdf: rm -f $(MOCODO_MCD_PDF) $(MOCODO_MLD_PDF) +.PHONY: mocodo-clean mocodo-clean: mocodo-clean-mld mocodo-clean-svg mocodo-clean-pdf +.PHONY: mocodo-info +mocodo-info: + @echo "MOCODO:" + @echo " External variables:" + @echo " MOCODO_OPT: $(MOCODO_OPT)" + @echo " MOCODO_SRC_DIR: $(MOCODO_SRC_DIR)" + @echo " MOCODO_DEST_DIR: $(MOCODO_DEST_DIR)" + @echo " Internal variables" + @echo " MOCODO_MCD_FILES: $(MOCODO_MCD_FILES)" + @echo " MOCODO_MLD_FILES: $(MOCODO_MLD_FILES)" + @echo " MOCODO_MCD_MLD: $(MOCODO_MCD_MLD)" + @echo " MOCODO_MCD_SVG: $(MOCODO_MCD_SVG)" + @echo " MOCODO_MCD_PDF: $(MOCODO_MCD_PDF)" + @echo " MOCODO_MLD_FILES: $(MOCODO_MLD_FILES)" + @echo " MOCODO_MLD_SVG: $(MOCODO_MLD_SVG)" + @echo " MOCODO_MLD_PDF: $(MOCODO_MLD_PDF)" + diff --git a/mypaint.mk b/mypaint.mk index e69de29..75b2417 100644 --- a/mypaint.mk +++ b/mypaint.mk @@ -0,0 +1,100 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +# +# SPDX-FileCopyrightText: 2023 Glenn Y. Rolland +# Copyright © 2023 Glenn Y. Rolland + +## +## MYPAINT MODULE +## + +## +## External variables (API) +## +MYPAINT_SUFFIX ?= ora +MYPAINT_SRC_DIR ?= +MYPAINT_DEST_DIR ?= +MYPAINT_PDF_DENSITY ?= 75 +MYPAINT_JPG_QUALITY ?= 100 + +## +## Internal variables (lazy recursive evaluation) +## + +## Find .ora files +MYPAINT_ORA = $(shell find $(MYPAINT_SRC_DIR) \( -name '*.ora' ! -name '_*' \)) +MYPAINT_ORA_PNG = $(patsubst $(MYPAINT_SRC_DIR)/%.ora,$(MYPAINT_DEST_DIR)/%.ora.png,$(MYPAINT_ORA)) +MYPAINT_ORA_JPG = $(patsubst $(MYPAINT_SRC_DIR)/%.ora,$(MYPAINT_DEST_DIR)/%.ora.jpg,$(MYPAINT_ORA)) +MYPAINT_ORA_PDF = $(patsubst $(MYPAINT_SRC_DIR)/%.ora,$(MYPAINT_DEST_DIR)/%.ora.pdf,$(MYPAINT_ORA)) + +## +## Prerequisistes (system packages) +## +MYPAINT_APT_PACKAGES := unzip mypaint imagemagick + +## +## Rules +## + +$(MYPAINT_DEST_DIR): + mkdir -p $(MYPAINT_DEST_DIR) + +$(MYPAINT_DEST_DIR)/%.ora.png: $(MYPAINT_SRC_DIR)/%.ora | $(MYPAINT_DEST_DIR) + TMPDIR="$$(mktemp -d)" \ + && unzip -q $< -d "$$TMPDIR" mergedimage.png \ + && touch "$$TMPDIR/mergedimage.png" \ + && mv "$$TMPDIR/mergedimage.png" $@ + +$(MYPAINT_DEST_DIR)/%.ora.jpg: $(MYPAINT_DEST_DIR)/%.ora.png | $(MYPAINT_DEST_DIR) + convert -quality $(MYPAINT_JPG_QUALITY) $< $@ + +$(MYPAINT_DEST_DIR)/%.ora.pdf: $(MYPAINT_DEST_DIR)/%.ora.png | $(MYPAINT_DEST_DIR) + convert -density $(MYPAINT_PDF_DENSITY) $< $@ + +.PHONY: mypaint-ora-jpg +mypaint-ora-jpg: $(MYPAINT_ORA_JPG) + +.PHONY: mypaint-ora-png +mypaint-ora-png: $(MYPAINT_ORA_PNG) + +.PHONY: mypaint-ora-pdf +mypaint-ora-pdf: $(MYPAINT_ORA_PDF) + +.PHONY: mypaint-jpg +mypaint-jpg: mypaint-ora-jpg + +.PHONY: mypaint-png +mypaint-png: mypaint-ora-png + +.PHONY: mypaint-pdf +mypaint-pdf: mypaint-ora-pdf + +.PHONY: mypaint-clean-jpg +mypaint-clean-jpg: + rm -f $(MYPAINT_ORA_JPG) + +.PHONY: mypaint-clean-png +mypaint-clean-png: + rm -f $(MYPAINT_ORA_PNG) + +.PHONY: mypaint-clean-pdf +mypaint-clean-pdf: + rm -f $(MYPAINT_ORA_PDF) + +.PHONY: mypaint-clean +mypaint-clean: mypaint-clean-pdf mypaint-clean-jpg + +.PHONY: mypaint-info +mypaint-info: + @echo "MYPAINT:" + @echo " External variables:" + @echo " MYPAINT_SUFFIX: $(MYPAINT_SUFFIX)" + @echo " MYPAINT_SRC_DIR: $(MYPAINT_SRC_DIR)" + @echo " MYPAINT_DEST_DIR: $(MYPAINT_DEST_DIR)" + @echo " MYPAINT_PDF_DENSITY: $(MYPAINT_PDF_DENSITY)" + @echo " MYPAINT_JPG_QUALITY: $(MYPAINT_JPG_QUALITY)" + @echo " Internal variables" + @echo " MYPAINT_ORA: $(MYPAINT_ORA)" + @echo " MYPAINT_ORA_PNG: $(MYPAINT_ORA_PDF)" + @echo " MYPAINT_ORA_PDF: $(MYPAINT_ORA_PDF)" + @echo " MYPAINT_ORA_JPG: $(MYPAINT_ORA_JPG)" + diff --git a/plantuml.mk b/plantuml.mk index 1393d0a..dfa646a 100644 --- a/plantuml.mk +++ b/plantuml.mk @@ -1,3 +1,8 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +# +# SPDX-FileCopyrightText: 2023 Glenn Y. Rolland +# Copyright © 2023 Glenn Y. Rolland + ## ## PLANTUML MODULE ## @@ -5,30 +10,91 @@ ## ## External variables (API) ## -PLANTUML_SRC_DIR= -PLANTUML_DEST_DIR= +PLANTUML_SUFFIX ?= uml +PLANTUML_SRC_DIR ?= +PLANTUML_DEST_DIR ?= +PLANTUML_PLANTUML_COMMAND ?= podman run -i plantuml/plantuml plantuml +PLANTUML_RSVGCONVERT_COMMAND ?= rsvg-convert +PLANTUML_GHOSTSCRIPT_COMMAND ?= gs ## -## Internal variables +## Internal variables (lazy recursive evaluation) ## -## Find .uml graphs -PLANTUML_UML=$(shell find $(PLANTUML_SRC_DIR) \( -name '*.uml' ! -name '_*' \)) -PLANTUML_UML_SVG=$(patsubst $(PLANTUML_SRC_DIR)/%.uml,$(PLANTUML_DEST_DIR)/%.uml.svg,$(PLANTUML_UML)) +## Find .uml files +PLANTUML_UML = $(shell find $(PLANTUML_SRC_DIR) \( -name '*.uml' ! -name '_*' \)) +PLANTUML_UML_PNG = $(patsubst $(PLANTUML_SRC_DIR)/%.uml,$(PLANTUML_DEST_DIR)/%.uml.png,$(PLANTUML_UML)) +PLANTUML_UML_SVG = $(patsubst $(PLANTUML_SRC_DIR)/%.uml,$(PLANTUML_DEST_DIR)/%.uml.svg,$(PLANTUML_UML)) +PLANTUML_UML_PDF = $(patsubst $(PLANTUML_SRC_DIR)/%.uml,$(PLANTUML_DEST_DIR)/%.uml.pdf,$(PLANTUML_UML)) +## +## Prerequisistes (system packages) +## +GRAPHVIZ_APT_PACKAGES := plantuml librsvg2-bin ghostscript ## ## Rules ## -$(PLANTUML_DEST_DIR)/%.uml.svg: $(PLANTUML_SRC_DIR)/%.uml - plantuml -pipe -tsvg < $< > $@ + +$(PLANTUML_DEST_DIR): + mkdir -p $(PLANTUML_DEST_DIR) + +$(PLANTUML_DEST_DIR)/%.uml.png: $(PLANTUML_SRC_DIR)/%.uml | $(PLANTUML_DEST_DIR) + $(PLANTUML_PLANTUML_COMMAND) -pipe -tpng < $< > $@ + +$(PLANTUML_DEST_DIR)/%.uml.svg: $(PLANTUML_SRC_DIR)/%.uml | $(PLANTUML_DEST_DIR) + $(PLANTUML_PLANTUML_COMMAND) -pipe -tsvg < $< > $@ + +$(PLANTUML_DEST_DIR)/%.uml.pdf: $(PLANTUML_DEST_DIR)/%.uml.svg | $(PLANTUML_DEST_DIR) + $(PLANTUML_RSVGCONVERT_COMMAND) -f ps $< | $(PLANTUML_GHOSTSCRIPT_COMMAND) -sDEVICE=pdfwrite -sOutputFile=$@ -f - -plantuml-uml-svg: +.PHONY: plantuml-uml-svg +plantuml-uml-svg: $(PLANTUML_UML_SVG) -plantuml-svg: +.PHONY: plantuml-uml-png +plantuml-uml-png: $(PLANTUML_UML_PNG) +.PHONY: plantuml-uml-pdf +plantuml-uml-pdf: $(PLANTUML_UML_PDF) + +.PHONY: plantuml-svg +plantuml-svg: plantuml-uml-svg + +.PHONY: plantuml-png +plantuml-png: plantuml-uml-png + +.PHONY: plantuml-pdf +plantuml-pdf: plantuml-uml-pdf + +.PHONY: plantuml-clean-svg plantuml-clean-svg: + rm -f $(PLANTUML_UML_SVG) -plantuml-clean: +.PHONY: plantuml-clean-png +plantuml-clean-png: + rm -f $(PLANTUML_UML_PNG) + +.PHONY: plantuml-clean-pdf +plantuml-clean-pdf: + rm -f $(PLANTUML_UML_PDF) + +.PHONY: plantuml-clean +plantuml-clean: plantuml-clean-pdf plantuml-clean-svg + +.PHONY: plantuml-info +plantuml-info: + @echo "PLANTUML:" + @echo " External variables:" + @echo " PLANTUML_SUFFIX: $(PLANTUML_SUFFIX)" + @echo " PLANTUML_DEST_DIR: $(PLANTUML_DEST_DIR)" + @echo " PLANTUML_SRC_DIR: $(PLANTUML_SRC_DIR)" + @echo " PLANTUML_PLANTUML_COMMAND: $(PLANTUML_PLANTUML_COMMAND)" + @echo " PLANTUML_RSVGCONVERT_COMMAND: $(PLANTUML_RSVGCONVERT_COMMAND)" + @echo " PLANTUML_GHOSTSCRIPT_COMMAND: $(PLANTUML_GHOSTSCRIPT_COMMAND)" + @echo " Internal variables" + @echo " PLANTUML_UML: $(PLANTUML_UML)" + @echo " PLANTUML_UML_PDF: $(PLANTUML_UML_PDF)" + @echo " PLANTUML_UML_PNG: $(PLANTUML_UML_PNG)" + @echo " PLANTUML_UML_SVG: $(PLANTUML_UML_SVG)"