Compare commits

...

9 commits

5 changed files with 160 additions and 24 deletions

View file

@ -1,6 +1,6 @@
# Makefiles forever
# Makefiles Forever
A collection of makefiles for every imaginable use
A drop-in collection of makefiles libraries for your projects
## Description
@ -10,15 +10,48 @@ A collection of makefiles for every imaginable use
## Usage
* Add this repository as a GIT submodule of your project
Add this repository as a GIT submodule of your project
git submodule add
```shell-session
$ git submodule add https://github.com/glenux/makefiles-forever .makefiles
```
* Include needed features in your makefile
Include needed features in the end of your makefile
-include path/to/makefiles-forever/feature.mk
```makefile
# [...]
## Good practices
-include .makefiles/featureA.mk
-include .makefiles/featureB.mk
```
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
# Configuration for featureB from Makefiles Forever
FEATUREA_SRC_DIR=/another/path
FEATUREB_DEST_DIR=/a/different/one
```
Use pre-defined targets as dependencies of your targets:
```makefile
build: featureA-build
build: featureB-build
clean: featureA-clean
clean: featureB-clean
```
Feature files usually define more targets than just build and clean, and you
can use those too!
## Good practices for coding .mk files
* Keep task parallelism in mind
* Make all targets available from root makefile

57
graphviz.mk Normal file
View file

@ -0,0 +1,57 @@
##
## GRAPHVIZ MODULE
##
##
## External variables influencing build process (API)
##
GRAPHVIZ_SRC_DIR ?=
GRAPHVIZ_DEST_DIR ?=
##
## Internal variables
##
## 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))
## 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_SVG := $(GRAPHVIZ_DOT_SVG) $(GRAPHVIZ_CIRCO_SVG)
##
## Prerequisistes (system packages)
##
GRAPHVIZ_APT_PACKAGES := graphviz
##
## Rules
##
$(GRAPHVIZ_DEST_DIR)/%.dot.svg: $(GRAPHVIZ_SRC_DIR)/%.dot
dot -Tsvg $< > $@
$(GRAPHVIZ_DEST_DIR)/%.circo.svg: $(GRAPHVIZ_SRC_DIR)/%.circo
circo -Tsvg $< > $@
$(GRAPHVIZ_SVG): | $(GRAPHVIZ_DEST_DIR)
mkdir -p $(GRAPHVIZ_DEST_DIR)
graphviz-build-dot-svg: $(GRAPHVIZ_DOT_SVG)
graphviz-build-circo-svg: $(GRAPHVIZ_CIRCO_SVG)
graphviz-build-svg: graphviz-build-dot-svg graphviz-build-circo-svg
graphviz-build: graphviz-build-svg
# Clean
#
graphviz-clean-svg:
rm -f $(GRAPHVIZ_SVG)
graphviz-clean: graphviz-clean-svg

View file

@ -1,22 +1,35 @@
##
## MOCODO MODULE
##
## API
MOCODO_DIRECTORIES=?.
##
## External variables (API)
##
MOCODO_OPT=--colors brewer-6 --shapes verdana
MOCODO_SRC_DIR=
MOCODO_DEST_DIR=
## INTERNALS
MOCODO_MCD_FILES=$(shell find $(IMAGES_DIR) \( -name '*.mcd' ! -name '_*' \))
MOCODO_MCD_MLD=$(patsubst $(IMAGES_DIR)/%.mcd,$(BUILD_IMAGES_DIR)/%.mcd.mld,$(MOCODO_MCD_FILES))
MOCODO_MCD_SVG=$(patsubst $(IMAGES_DIR)/%.mcd,$(BUILD_IMAGES_DIR)/%.mcd.svg,$(MOCODO_MCD_FILES))
MOCODO_MCD_PDF=$(patsubst $(IMAGES_DIR)/%.mcd,$(BUILD_IMAGES_DIR)/%.mcd.pdf,$(MOCODO_MCD_FILES))
##
## Internal variables
##
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 $(IMAGES_DIR) \( -name '*.mld' ! -name '_*' \)) $(MOCODO_MCD_MLD)
MOCODO_MLD_SVG=$(patsubst $(IMAGES_DIR)/%.mld,$(BUILD_IMAGES_DIR)/%.mld.svg,$(MOCODO_MLD_FILES))
MOCODO_MLD_PDF=$(patsubst $(IMAGES_DIR)/%.mld,$(BUILD_IMAGES_DIR)/%.mld.pdf,$(MOCODO_MLD_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
%.mcd.mld: %.mcd
##
## Rules
##
$(MOCODO_DEST_DIR)/%.mcd.mld: $(MOCODO_SRC_DIR)/%.mcd
tmp=$$(mktemp -d) \
&& pipenv run mocodo \
$(MOCODO_OPT) \
@ -28,7 +41,7 @@ MOCODO_APT_PACKAGES=ghostscript librsvg2-bin
&& rm -fr $${tmp} \
&& touch --reference $< $@
%.mcd.svg: %.mcd
$(MOCODO_DEST_DIR)/%.mcd.svg: $(MOCODO_SRC_DIR)/%.mcd
tmp=$$(mktemp -d) \
&& pipenv run mocodo \
$(MOCODO_OPT) \
@ -40,7 +53,7 @@ MOCODO_APT_PACKAGES=ghostscript librsvg2-bin
&& rm -fr $${tmp} \
&& touch --reference $< $@
%.mld.svg: %.mld
$(MOCODO_DEST_DIR)/%.mld.svg: $(MOCODO_SRC_DIR)/%.mld
tmp=$$(mktemp -d) \
&& pipenv run mocodo \
$(MOCODO_OPT) \
@ -50,15 +63,14 @@ MOCODO_APT_PACKAGES=ghostscript librsvg2-bin
&& rm -fr $${tmp} \
&& touch --reference $< $@
%.mld.pdf: %.mld.svg
$(MOCODO_DEST_DIR)/%.mld.pdf: $(MOCODO_SRC_DIR)/%.mld.svg
# rsvg-convert -f pdf $< > $@
rsvg-convert -f ps $< | gs -sDEVICE=pdfwrite -sOutputFile=$@ -f -
%.mcd.pdf: %.mcd.svg
$(MOCODO_DEST_DIR)/%.mcd.pdf: $(MOCODO_SRC_DIR)/%.mcd.svg
# rsvg-convert -f pdf $< > $@
rsvg-convert -f ps $< | gs -sDEVICE=pdfwrite -sOutputFile=$@ -f -
mocodo-mcd-mld: $(MOCODO_MCD_MLD)
mocodo-mcd-svg: $(MOCODO_MCD_SVG)

View file

View file

@ -0,0 +1,34 @@
##
## PLANTUML MODULE
##
##
## External variables (API)
##
PLANTUML_SRC_DIR=
PLANTUML_DEST_DIR=
##
## Internal variables
##
## 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))
##
## Rules
##
$(PLANTUML_DEST_DIR)/%.uml.svg: $(PLANTUML_SRC_DIR)/%.uml
plantuml -pipe -tsvg < $< > $@
plantuml-uml-svg:
plantuml-svg:
plantuml-clean-svg:
plantuml-clean: