################################################################################
#
#  Makefile for generalized web build
#
################################################################################



#===============================================================================
#  Definitions  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#===============================================================================

SRCDIR = .
BUILDDIR = build

PUG = pug
PUGFLAGS = --pretty --path .
PUGFLAGS_PROD = --path .
PUGDIR = $(SRCDIR)
TMPLDIR = $(SRCDIR)/assets/templates

SASS = sassc
SASSFLAGS = --line-numbers --style expanded
SASSFLAGS_PROD = --style compressed
SASSEXT = scss
SASSDIR = $(SRCDIR)/assets/style
CSSDIR = $(BUILDDIR)/assets/style

JS = cp
JSFLAGS =
JSFLAGS_PROD =
JSSRCDIR = $(SRCDIR)/assets/scripts
JSDIR = $(BUILDDIR)/assets/scripts

JSVENDOR = cp
JSVENDORFLAGS =
JSVENDORFLAGS_PROD =
JSVENDORSRCDIR = $(SRCDIR)/assets/scripts/vendor
JSVENDORDIR = $(BUILDDIR)/assets/scripts/vendor
JQUERY_VERSION = 1.12.0

IMG = cp
IMGFLAGS =
IMGFLAGS_PROD =
IMGSRCDIR = $(SRCDIR)/assets/media/images
IMGDIR = $(BUILDDIR)/assets/media/images

VID = cp
VIDFLAGS =
VIDFLAGS_PROD =
VIDSRCDIR = $(SRCDIR)/assets/media/video
VIDDIR = $(BUILDDIR)/assets/media/video

FONT = cp
FONTFLAGS =
FONTFLAGS_PROD =
FONTSRCDIR = $(SRCDIR)/assets/fonts
FONTDIR = $(BUILDDIR)/assets/fonts

EXT = cp
EXTFLAGS =
EXTFLAGS_PROD =
EXTDIR = $(SRCDIR)/assets/extras


#===============================================================================
#  Files  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#===============================================================================

PUGTEMPLATES = $(shell find $(TMPLDIR) -type f -name \*.pug -print)
PUGFILES = $(shell find $(PUGDIR) -type d -path $(TMPLDIR) -prune -o -type f -name \*.pug -print)
MDFILES = $(shell find $(PUGDIR) -type d -path $(TMPLDIR) -prune -o -type f -name \*.md -print)
HTMLFILES = $(patsubst $(PUGDIR)/%.pug, $(BUILDDIR)/%.html, $(PUGFILES))

SASSFILES = $(wildcard $(SASSDIR)/[^_]*.$(SASSEXT))
SASSSTUBS = $(wildcard $(SASSDIR)/_*.$(SASSEXT))
CSSFILES = $(patsubst $(SASSDIR)/%.$(SASSEXT), $(CSSDIR)/%.css, $(SASSFILES))

JSFILES_SRC = $(wildcard $(JSSRCDIR)/*.js)
JSFILES = $(patsubst $(JSSRCDIR)/%, $(JSDIR)/%, $(JSFILES_SRC))

JSVENDORFILES_SRC = $(wildcard $(JSVENDORSRCDIR)/*.js)
JSVENDORFILES = $(patsubst $(JSVENDORSRCDIR)/%, $(JSVENDORDIR)/%, $(JSVENDORFILES_SRC))

IMGFILES_SRC = $(wildcard $(IMGSRCDIR)/*)
IMGFILES = $(patsubst $(IMGSRCDIR)/%, $(IMGDIR)/%, $(IMGFILES_SRC))

VIDFILES_SRC = $(wildcard $(VIDSRCDIR)/*)
VIDFILES = $(patsubst $(VIDSRCDIR)/%, $(VIDDIR)/%, $(VIDFILES_SRC))

FONTFILES_SRC = $(wildcard $(FONTSRCDIR)/*)
FONTFILES = $(patsubst $(FONTSRCDIR)/%, $(FONTDIR)/%, $(FONTFILES_SRC))

FEEDFILES_SRC = $(wildcard $(EXTDIR)/feed.*)
TXTFILES_SRC = $(wildcard $(EXTDIR)/*.txt)
PNGFILES_SRC = $(wildcard $(EXTDIR)/*.png)
ICOFILES_SRC = $(wildcard $(EXTDIR)/*.ico)
XMLFILES_SRC = $(wildcard $(EXTDIR)/*.xml)
HTACCESS_SRC = $(wildcard $(EXTDIR)/.htaccess)
CNAME_SRC = $(wildcard $(EXTDIR)/CNAME)

FEEDFILES = $(patsubst $(EXTDIR)/%, $(BUILDDIR)/%, $(FEEDFILES_SRC))
TXTFILES = $(patsubst $(EXTDIR)/%, $(BUILDDIR)/%, $(TXTFILES_SRC))
PNGFILES = $(patsubst $(EXTDIR)/%, $(BUILDDIR)/%, $(PNGFILES_SRC))
ICOFILES = $(patsubst $(EXTDIR)/%, $(BUILDDIR)/%, $(ICOFILES_SRC))
XMLFILES = $(patsubst $(EXTDIR)/%, $(BUILDDIR)/%, $(XMLFILES_SRC))
HTACCESS = $(patsubst $(EXTDIR)/%, $(BUILDDIR)/%, $(HTACCESS_SRC))
CNAME = $(patsubst $(EXTDIR)/%, $(BUILDDIR)/%, $(CNAME_SRC))


#===============================================================================
#  Rules  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#===============================================================================

.PHONY: all html css js jsvendor img vid font extras feed production deploy clean

all: html css js jsvendor img vid font extras feed

#:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

html: $(HTMLFILES)

$(HTMLFILES): $(PUGTEMPLATES) $(MDFILES)

$(BUILDDIR)/%.html: $(PUGDIR)/%.pug
	if [[ ! -d $(dir $@) ]]; then mkdir -p $(dir $@); fi
	$(PUG) $(PUGFLAGS) -o $(dir $@) $<
	if [[ `grep '{{JQUERY_VERSION}}' $@` ]]; then sed -i "s/{{JQUERY_VERSION}}/$(JQUERY_VERSION)/" $@; fi

#:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

css: $(CSSFILES)

$(CSSFILES): $(SASSFILES) $(SASSSTUBS)

$(CSSDIR)/%.css: $(SASSDIR)/%.$(SASSEXT)
	if [[ ! -d $(dir $@) ]]; then mkdir -p $(dir $@); fi
	$(SASS) $(SASSFLAGS) $< $@

#:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

js: $(JSFILES)

$(JSFILES): $(JSFILES_SRC)

$(JSDIR)/%.js: $(JSSRCDIR)/%.js
	if [[ ! -d $(dir $@) ]]; then mkdir -p $(dir $@); fi
	$(JS) $(JSFLAGS) $< $@

#:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

jsvendor: $(JSVENDORFILES)

$(JSVENDORFILES): $(JSVENDORFILES_SRC)

$(JSVENDORDIR)/%.js: $(JSVENDORSRCDIR)/%.js
	if [[ ! -d $(dir $@) ]]; then mkdir -p $(dir $@); fi
	$(JSVENDOR) $(JSVENDORFLAGS) $< $@

#:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

img: $(IMGFILES)

$(IMGFILES): $(IMGFILES_SRC)

$(IMGDIR)/%: $(IMGSRCDIR)/%
	if [[ ! -d $(dir $@) ]]; then mkdir -p $(dir $@); fi
	$(IMG) $(IMGFLAGS) $< $@

#:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

vid: $(VIDFILES)

$(VIDFILES): $(VIDFILES_SRC)

$(VIDDIR)/%: $(VIDSRCDIR)/%
	if [[ ! -d $(dir $@) ]]; then mkdir -p $(dir $@); fi
	$(VID) $(VIDFLAGS) $< $@

#:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

font: $(FONTFILES)

$(FONTFILES): $(FONTFILES_SRC)

$(FONTDIR)/%: $(FONTSRCDIR)/%
	if [[ ! -d $(dir $@) ]]; then mkdir -p $(dir $@); fi
	$(FONT) $(FONTFLAGS) $< $@

#:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

extras: $(FEEDFILES) $(TXTFILES) $(PNGFILES) $(ICOFILES) $(XMLFILES) $(HTACCESS) $(CNAME)

$(BUILDDIR)/feed.%: $(EXTDIR)/feed.%
	$(EXT) $(EXTFLAGS) $< $@

$(BUILDDIR)/%.txt: $(EXTDIR)/%.txt
	$(EXT) $(EXTFLAGS) $< $@

$(BUILDDIR)/%.png: $(EXTDIR)/%.png
	$(EXT) $(EXTFLAGS) $< $@

$(BUILDDIR)/%.ico: $(EXTDIR)/%.ico
	$(EXT) $(EXTFLAGS) $< $@

$(BUILDDIR)/%.xml: $(EXTDIR)/%.xml
	$(EXT) $(EXTFLAGS) $< $@

$(BUILDDIR)/.htaccess: $(EXTDIR)/.htaccess
	$(EXT) $(EXTFLAGS) $< $@

$(BUILDDIR)/CNAME: $(EXTDIR)/CNAME
	$(EXT) $(EXTFLAGS) $< $@

#:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

feed: $(FEEDFILES_SRC)

$(FEEDFILES_SRC): $(PUGFILES) $(MDFILES)
	./mkfeed.py feed.rss
	mv feed.rss extras/feed.rss
	./mkfeed.py feed.atom
	mv feed.atom extras/feed.atom

#:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

production: all

#:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

deploy: production

#:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

clean:
	rm -v $(HTMLFILES)     \
	      $(CSSFILES)      \
	      $(JSFILES)       \
	      $(JSVENDORFILES) \
	      $(IMGFILES)      \
	      $(VIDFILES)      \
	      $(FONTFILES)     \
	      $(FEEDFILES)     \
	      $(TXTFILES)      \
	      $(PNGFILES)      \
	      $(ICOFILES)      \
	      $(XMLFILES)      \
	      $(HTACCESS)      \
	      $(CNAME)