2019-01-01 18:42:00 +01:00
|
|
|
# Copyright (c) 2016-2019 Martin Donath <martin.donath@squidfunk.com>
|
2017-11-21 21:32:25 +01:00
|
|
|
|
|
|
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
|
|
# of this software and associated documentation files (the "Software"), to
|
|
|
|
# deal in the Software without restriction, including without limitation the
|
|
|
|
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
|
|
# sell copies of the Software, and to permit persons to whom the Software is
|
|
|
|
# furnished to do so, subject to the following conditions:
|
|
|
|
|
|
|
|
# The above copyright notice and this permission notice shall be included in
|
|
|
|
# all copies or substantial portions of the Software.
|
|
|
|
|
|
|
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
|
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
|
|
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
|
|
# IN THE SOFTWARE.
|
|
|
|
|
2019-09-28 19:32:02 +02:00
|
|
|
all: clean lint build
|
2017-11-21 21:32:25 +01:00
|
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
2019-09-28 19:32:02 +02:00
|
|
|
# Constants
|
2017-11-21 21:32:25 +01:00
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
|
2019-09-28 19:32:02 +02:00
|
|
|
# Directory for NPM executables
|
|
|
|
BIN = $(shell npm bin)
|
2017-11-21 21:32:25 +01:00
|
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# Rules
|
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
# Build distribution files
|
2019-09-28 19:32:02 +02:00
|
|
|
build: material
|
2017-11-21 21:32:25 +01:00
|
|
|
|
|
|
|
# Clean distribution files
|
|
|
|
clean:
|
|
|
|
rm -rf material
|
|
|
|
|
|
|
|
# Lint source files
|
2019-09-28 19:32:02 +02:00
|
|
|
lint:
|
|
|
|
${BIN}/tslint -p tsconfig.json "src/**/*.ts"
|
|
|
|
${BIN}/stylelint `find src/assets -name *.scss`
|
|
|
|
|
|
|
|
# Start development server
|
|
|
|
start: clean
|
|
|
|
${BIN}/webpack --watch
|
|
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# Targets
|
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
# Create top-level build directory
|
|
|
|
material/.:
|
|
|
|
@ echo "+ $@"
|
|
|
|
@ mkdir -p $@
|
|
|
|
|
|
|
|
# Create secondary build directory
|
|
|
|
material%/.:
|
|
|
|
@ echo "+ $@"
|
|
|
|
@ mkdir -p $@
|
|
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
# Expand prerequisites twice
|
|
|
|
.SECONDEXPANSION:
|
|
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
# Web font specimen
|
|
|
|
FONTS_SPECIMEN = $(subst src,material,$(wildcard src/assets/fonts/specimen/*))
|
|
|
|
material/assets/fonts/specimen: ${FONTS_SPECIMEN}
|
|
|
|
material/assets/fonts/specimen/%: src/assets/fonts/specimen/% | $$(@D)/.
|
|
|
|
@ echo "+ $@"
|
|
|
|
@ cp $< $@
|
2017-11-21 21:32:25 +01:00
|
|
|
|
2019-09-28 19:32:02 +02:00
|
|
|
# Web fonts
|
|
|
|
FONTS = $(subst src,material,$(wildcard src/assets/fonts/*.css))
|
|
|
|
material/assets/fonts: $$@/specimen ${FONTS}
|
|
|
|
material/assets/fonts/%.css: src/assets/fonts/%.css | $$(@D)/.
|
|
|
|
@ echo "+ $@"
|
|
|
|
@ ${BIN}/csso $< -o $@
|
2017-11-21 21:32:25 +01:00
|
|
|
|
2019-09-28 19:32:02 +02:00
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
# Icons
|
|
|
|
IMAGES_ICONS = $(subst src,material,$(wildcard src/assets/images/icons/*.svg))
|
|
|
|
material/assets/images/icons: ${IMAGES_ICONS}
|
|
|
|
material/assets/images/icons/%: src/assets/images/icons/% | $$(@D)/.
|
|
|
|
@ echo "+ $@"
|
|
|
|
@ ${BIN}/svgo -q -i $< -o $@ --disable=removeViewBox
|
|
|
|
|
|
|
|
# Images
|
|
|
|
IMAGES = $(subst src,material,$(wildcard src/assets/images/*.png))
|
|
|
|
material/assets/images: $$@/icons ${IMAGES}
|
|
|
|
material/assets/images/%.png: src/assets/images/%.png | $$(@D)/.
|
|
|
|
@ echo "+ $@"
|
|
|
|
@ cp $< $@
|
|
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
# Search stemmer locations
|
|
|
|
LUNR_SOURCE = node_modules/lunr-languages/min
|
|
|
|
LUNR_TARGET = material/assets/javascripts/lunr
|
|
|
|
|
|
|
|
# Search stemmer languages
|
|
|
|
LUNR_LANGUAGES = $(shell echo ${LUNR} \
|
|
|
|
| grep -oE '\.[a-z]{2}\.' \
|
|
|
|
| sed 's/\./"/g' \
|
|
|
|
| paste -sd "," -)
|
|
|
|
|
|
|
|
# Search stemmers
|
|
|
|
LUNR = $(subst ${LUNR_SOURCE},${LUNR_TARGET},$(wildcard ${LUNR_SOURCE}/*.js))
|
|
|
|
material/assets/javascripts/lunr: ${LUNR}
|
|
|
|
material/assets/javascripts/lunr/%.js: ${LUNR_SOURCE}/%.js | $$(@D)/.
|
|
|
|
@ echo "+ $@"
|
|
|
|
@ cp $< $@
|
|
|
|
|
|
|
|
# All scripts
|
|
|
|
material/assets/javascripts: $$@/lunr
|
2017-11-21 21:32:25 +01:00
|
|
|
|
2019-09-28 19:32:02 +02:00
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
# Stylesheets
|
|
|
|
STYLESHEETS = $(subst src,material,$(wildcard src/assets/stylesheets/a*.scss))
|
|
|
|
material/assets/stylesheets: $(patsubst %.scss,%.css,${STYLESHEETS})
|
|
|
|
material/assets/stylesheets/%.css: src/assets/stylesheets/%.scss | $$(@D)/.
|
|
|
|
@ echo "+ $@"
|
|
|
|
@ ${BIN}/node-sass -q \
|
|
|
|
--source-map $@.map \
|
|
|
|
--source-map-contents false \
|
|
|
|
--include-path node_modules/modularscale-sass/stylesheets \
|
|
|
|
--include-path node_modules/material-design-color \
|
|
|
|
--include-path node_modules/material-shadows \
|
|
|
|
$< $@
|
|
|
|
@ ${BIN}/postcss $@ -m -u autoprefixer -u css-mqpacker -o $@
|
|
|
|
@ ${BIN}/csso $@ -o $(basename $@).min.css \
|
|
|
|
--input-source-map $@.map \
|
|
|
|
--source-map $(basename $@).min.css.map
|
|
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
# All assets
|
|
|
|
material/assets: $$@/fonts $$@/images $$@/javascripts $$@/stylesheets
|
|
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
# Templates
|
|
|
|
HTML = $(subst src,material,$(shell find src -type f -name "*.html" ))
|
|
|
|
material/%.html: src/%.html | $$(@D)/.
|
|
|
|
@ echo "+ $@"
|
|
|
|
@ ${BIN}/html-minifier \
|
|
|
|
--collapse-boolean-attributes \
|
|
|
|
--minify-css \
|
|
|
|
--minify-js \
|
|
|
|
--no-include-auto-generated-tags \
|
|
|
|
--remove-comments \
|
|
|
|
--remove-script-type-attributes \
|
|
|
|
--remove-style-link-type-attributes \
|
|
|
|
$< | awk 'NF' > $@
|
|
|
|
|
|
|
|
# Python files
|
|
|
|
material/%.py: src/%.py
|
|
|
|
@ echo "+ $@"
|
|
|
|
@ cp $< $@
|
|
|
|
|
|
|
|
# Theme configuration
|
|
|
|
material/%.yml: src/%.yml
|
|
|
|
@ echo "+ $@"
|
|
|
|
@ cp $< $@
|
|
|
|
|
|
|
|
# Theme
|
|
|
|
NAME = $(shell jq -r '.name' package.json)
|
|
|
|
VERSION = $(shell jq -r '.version' package.json)
|
|
|
|
material: $$@/assets $$@/__init__.py $$@/mkdocs_theme.yml ${HTML}
|
|
|
|
@ sed -i "" 's/\$$md-name\$$/${NAME}/' $@/base.html
|
|
|
|
@ sed -i "" 's/\$$md-version\$$/${VERSION}/' $@/base.html
|
|
|
|
@ sed -i "" 's/\$$md-lunr-languages\$$/${LUNR_LANGUAGES}/' $@/base.html
|
|
|
|
@ echo "\n ${NAME}-${VERSION}\n"
|
2017-11-21 21:32:25 +01:00
|
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
# Special targets
|
2019-09-28 19:32:02 +02:00
|
|
|
.PHONY: .FORCE build clean lint start
|
2017-11-21 21:32:25 +01:00
|
|
|
.FORCE:
|
2019-09-28 19:32:02 +02:00
|
|
|
|
|
|
|
# Keep directories
|
|
|
|
.PRECIOUS: material%/.
|