sverweij/mscgen_js

View on GitHub
Makefile

Summary

Maintainability
Test Coverage

.SUFFIXES: .js .css .html .msc .mscin .msgenny .svg .png .jpg
GIT=git
GIT_CURRENT_BRANCH=$(shell utl/get_current_git_branch.sh)
GIT_PRODUCTION_DEPLOYMENT_BRANCH=master
PNG2FAVICO=utl/png2favico.sh
RESIZE=utl/resize.sh
IOSRESIZE=utl/iosresize.sh
SEDVERSION=utl/sedversion.sh
NPM=npm
SASS=node_modules/.bin/sass --style compressed --no-source-map

ifeq ($(GIT_PRODUCTION_DEPLOYMENT_BRANCH), $(GIT_CURRENT_BRANCH))
    BUILDDIR=dist
    MODE=production
else
    BUILDDIR=dist/$(GIT_CURRENT_BRANCH)
    MODE=development
endif

GENERATED_STYLESHEETS=src/style/interp.css \
    src/style/doc.css
GENERATED_SOURCES=$(GENERATED_STYLESHEETS)
REMOVABLEPRODDIRS=$(BUILDDIR)/style \
    $(BUILDDIR)/fonts
PRODDIRS=$(BUILDDIR) \
    $(REMOVABLEPRODDIRS)
FONTS=$(BUILDDIR)/fonts/controls.eot \
    $(BUILDDIR)/fonts/controls.svg \
    $(BUILDDIR)/fonts/controls.ttf \
    $(BUILDDIR)/fonts/controls.woff
FAVICONMASTER=src/images/xu.png
FAVICONS=$(BUILDDIR)/favicon.ico \
    $(BUILDDIR)/favicon-16.png \
    $(BUILDDIR)/favicon-24.png \
    $(BUILDDIR)/favicon-32.png \
    $(BUILDDIR)/favicon-48.png \
    $(BUILDDIR)/favicon-64.png \
    $(BUILDDIR)/favicon-128.png \
    $(BUILDDIR)/favicon-144.png \
    $(BUILDDIR)/favicon-152.png \
    $(BUILDDIR)/favicon-195.png \
    $(BUILDDIR)/favicon-228.png \
    $(BUILDDIR)/favicon-512.png \
    $(BUILDDIR)/iosfavicon-57.png \
    $(BUILDDIR)/iosfavicon-72.png \
    $(BUILDDIR)/iosfavicon-114.png \
    $(BUILDDIR)/iosfavicon-120.png \
    $(BUILDDIR)/iosfavicon-144.png \
    $(BUILDDIR)/iosfavicon-152.png \
    $(BUILDDIR)/maskable_icon.png

.PHONY: help build deploy-gh-pages clean prerequisites

help:
    @echo " --------------------------------------------------------"
    @echo "| Just downloaded the mscgen_js sources?                 |"
    @echo "|  First run 'make prerequisites'                        |"
    @echo " --------------------------------------------------------"
    @echo
    @echo "Most important build targets:"
    @echo
    @echo "build"
    @echo " -> this is probably the target you want when"
    @echo "    hosting mscgen_js"
    @echo
    @echo " creates the production version (minified js, images,"
    @echo " html)"
    @echo
    @echo "clean"
    @echo " removes everything created by build
    @echo
    @echo "deploy-gh-pages"
    @echo " deploys the build to gh-pages"
    @echo "  - 'master' branch: the root of gh-pages"
    @echo "  - other branches : in ./branche-name"
    @echo
    @echo " --------------------------------------------------------"
    @echo "| More information and other targets: see wikum/build.md |"
    @echo " --------------------------------------------------------"
    @echo


# production rules
$(BUILDDIR)/%.html: src/%.html tracking.id tracking.host siteverification.id
    $(SEDVERSION) < $< > $@

$(BUILDDIR)/%.xml: src/%.xml
    cp $< $@

$(BUILDDIR)/robots.txt: src/robots.txt
    cp $< $@

$(BUILDDIR)/%.json: src/%.json
    cp $< $@

%.css: %.scss
    $(SASS) $< $@

$(BUILDDIR)/style/%.css: src/style/%.css
    cp $< $@

$(BUILDDIR)/fonts/%: src/fonts/%
    cp $< $@

$(BUILDDIR)/favicon.ico: $(FAVICONMASTER)
    $(PNG2FAVICO) $< $@

$(BUILDDIR)/favicon-%.png: $(FAVICONMASTER)
    $(RESIZE) $< $@

$(BUILDDIR)/iosfavicon-%.png: $(FAVICONMASTER)
    $(IOSRESIZE) $< $@

$(BUILDDIR)/maskable_icon.png: src/images/maskable_icon.png
    cp $< $@

$(PRODDIRS):
    mkdir -p $@

# dependencies
include src/dependencies.mk

# file targets prod
$(BUILDDIR)/index.html: $(PRODDIRS) \
    src/index.html \
    $(BUILDDIR)/style/interp.css \
    $(BUILDDIR)/mscgen-interpreter.min.js \
    $(BUILDDIR)/manifest.json \
    $(BUILDDIR)/images/ \
    $(BUILDDIR)/samples/ \
    $(BUILDDIR)/sitemap.xml \
    $(BUILDDIR)/robots.txt \
    $(FAVICONS) \
    $(FONTS)

LIVE_DOC_DEPS=$(PRODDIRS) \
    $(BUILDDIR)/style/doc.css \
    $(BUILDDIR)/mscgen-inpage.js \
    $(BUILDDIR)/mscgen-inpage.js.map \
    $(BUILDDIR)/images/ \
    $(FAVICONS) \
    $(FONTS)

$(BUILDDIR)/embed.html: $(LIVE_DOC_DEPS) src/embed.html

$(BUILDDIR)/tutorial.html: $(LIVE_DOC_DEPS) src/tutorial.html

siteverification.id:
    @echo yoursiteverifactionidhere > $@

tracking.id:
    @echo yourtrackingidhere > $@

tracking.host:
    @echo auto > $@

$(BUILDDIR)/images/: src/images
    cp -R $< $@

$(BUILDDIR)/samples/: src/samples
    cp -R $< $@

# $(shell echo production)
$(BUILDDIR)/mscgen-interpreter.min.js:
    npx webpack --output-path $(BUILDDIR) --mode $(MODE)

$(BUILDDIR)/mscgen-inpage.js: node_modules/mscgenjs-inpage/dist/mscgen-inpage.js
    cp $< $@

$(BUILDDIR)/mscgen-inpage.js.map: node_modules/mscgenjs-inpage/dist/mscgen-inpage.js.map
    cp $< $@

$(BUILDDIR)/script/mscgen-inpage.js: $(BUILDDIR)/mscgen-inpage.js
    cp $< $@

$(BUILDDIR)/script/mscgen-inpage.js.map: $(BUILDDIR)/mscgen-inpage.js.map
    cp $< $@

# "phony" targets
prerequisites:
    $(NPM) install

build: $(BUILDDIR)/index.html $(BUILDDIR)/embed.html $(BUILDDIR)/tutorial.html
    BUILDDIR=$(BUILDDIR) npx sw-precache --config .sw-precache-config.js

deploy-gh-pages: build
    @echo Deploying build `utl/getver` to $(BUILDDIR)
    $(GIT) -C $(BUILDDIR) add --all .
    $(GIT) -C $(BUILDDIR) commit -m "build `utl/getver`"
    $(GIT) -C $(BUILDDIR) push origin gh-pages
    $(GIT) -C $(BUILDDIR) status


clean-the-build:
    rm -rf $(REMOVABLEPRODDIRS) \
        $(BUILDDIR)/images \
        $(BUILDDIR)/samples \
        $(BUILDDIR)/index.html \
        $(BUILDDIR)/embed.html \
        $(BUILDDIR)/tutorial.html \
        $(BUILDDIR)/mscgen-inpage.js \
        $(BUILDDIR)/mscgen-interpreter.min.js \
        $(BUILDDIR)/mscgen-interpreter.min.js.map \
        $(BUILDDIR)/manifest.json \
        $(BUILDDIR)/service-worker.js \
    rm -rf coverage

clean-generated-sources:
    rm -rf $(GENERATED_SOURCES)

clean: clean-the-build clean-generated-sources
    rm -rf $(FAVICONS)