--- title: makefile --- ``` # --------------------------------------- # Author: David Marsh # --------------------------------------- # # This Makefile is used to generate files for XXX # for usage: make help # more info: make about # # Copyright (C) 2022 David Marsh rdmarsh@gmail.com # # This program 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. # # This program 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 this program. If not, see . # MAKE FLAGS #MAKEFLAGS += -j4 # FILE EXTENSIONS # --------------------------------------- # change only if needed JSN ?= json J2 ?= j2 # SOURCE DIR and FILENAMES # --------------------------------------- # change only if needed name := XXX prog := $(name).py bakdir := ../$(name)_back cfgdir := ~/.$(name) cmddir := _cmds defdir := _defs jnjdir := _jnja jsndir := _json # EXECUTABLE AND PROGRAM FLAGS # --------------------------------------- # change only if needed CURL ?= curl JQ ?= jq AWK ?= awk JINJA ?= jinja2 # for testing non-required commands GREP ?= grep GREPFLAGS += -l # for backup TAR ?= tar TARFLAGS += -cvf # pip for install PIP ?= pip # BUILD SOURCE AND TARGTS # --------------------------------------- # do not change XXXSOURCES := $(wildcard $(defdir)/[A-Z]*.$(JSN)) XXXTARGETS := $(patsubst $(defdir)/%.$(JSN),$(cmddir)/%.py,$(CMDSOURCES)) NONXXXTARGETS := $(filter-out $(XXXSOURCES),$(XXXTARGETS)) # COLOUR OUTPUT # --------------------------------------- # do not change NO_COLOR=\x1b[0m OK_COLOR=\x1b[32;01m OK_STRING=$(OK_COLOR)[OK]$(NO_COLOR) # TARGETS # --------------------------------------- # do not change .PHONY: all all: init ## Build everything @echo XXX @echo "$@ $(OK_STRING)" .PHONY: init init: | PYTHON-exists JINJA-exists ## Check prerequisites, initialise dirs, get swagger file, create definition files @echo "$@ $(OK_STRING)" .PHONY: PYTHON-exists CURL-exists JINJA-exists JQ-exists PIP-exists PYTHON-exists: ; which python3 CURL-exists: ; which $(CURL) JINJA-exists: ; which $(JINJA) JQ-exists: ; which $(JQ) PIP-exists: ; which $(PIP) $(bakdir) $(cmddir) $(defdir) $(cfgdir): mkdir -p $@ chown $$(id -u):$$(id -g) $@ chmod 700 $@ @echo "$@ $(OK_STRING)" # BUILD AND INSTALL COMMANDS # ======================================= # do not change # TESTS # ======================================= # do not change .PHONY: test test: @echo "$@ $(OK_STRING)" # BACKUP # ======================================= # do not change .PHONY: back back: nomac $(bakdir) ## TAR and backup (eg ../name_backup/name.YYYY-MM-DD.tar.gz) $(TAR) $(TARFLAGS) $(bakdir)/$(name).$(shell date +%Y-%m-%d).tar.gz . @echo "$@ $(OK_STRING)" .PHONY: clean clean: nomac ## Remove generated files $(RM) -r __pycache__ $(RM) -r $(cmddir) $(defdir) $(RM) $(CMDTARGETS) $(RM) $(name) $(RM) $(prog) $(RM) engine.py @echo "$@ $(OK_STRING)" .PHONY: nomac nomac: ## Remove unneeded mac files $(RM) .DS_Store @echo "$@ $(OK_STRING)" # ABOUT COPY HELP # ======================================= # do not change .PHONY: about about: ## About this Makefile @echo @echo 'This Makefile is used to generate files for $(name)' @echo @echo 'Run "make help" to for how to run' @echo .PHONY: copying copying: ## Copyright notice @echo @echo 'Copyright (C) 2022 David Marsh' @echo 'rdmarsh@gmail.com' @echo @echo 'This program is free software: you can redistribute it and/or modify' @echo 'it under the terms of the GNU General Public License as published by' @echo 'the Free Software Foundation, either version 3 of the License, or' @echo '(at your option) any later version.' @echo @echo 'This program comes with ABSOLUTELY NO WARRANTY.' @echo 'This is free software, and you are welcome to redistribute it' @echo 'under certain conditions. View the file "LICENSE" for details.' @echo .PHONY: help help: ## Show this help @awk 'BEGIN {FS = ":.*##"; printf "\nUsage: make [flags] [option]\n"} /^[$$()% \.0-9a-zA-Z_-]+:.*?##/ { printf " \033[36mmake %-12s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST) @echo @echo 'Useful make flags:' @echo ' make -n dry run' @echo ' make -j run simultaneous jobs' @echo ' make -B force make target' @echo ```