You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

262 lines
7.6 KiB

  1. ################################################################################
  2. #
  3. # Makefile for generalized web build
  4. #
  5. ################################################################################
  6. #===============================================================================
  7. # Definitions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  8. #===============================================================================
  9. SRCDIR = .
  10. BUILDDIR = build
  11. PUG = pug
  12. PUGFLAGS = --pretty --path .
  13. PUGFLAGS_PROD = --path .
  14. PUGDIR = $(SRCDIR)
  15. TMPLDIR = $(SRCDIR)/assets/templates
  16. SASS = sassc
  17. SASSFLAGS = --line-numbers --style expanded
  18. SASSFLAGS_PROD = --style compressed
  19. SASSEXT = scss
  20. SASSDIR = $(SRCDIR)/assets/style
  21. CSSDIR = $(BUILDDIR)/assets/style
  22. JS = cp
  23. JSFLAGS =
  24. JSFLAGS_PROD =
  25. JSSRCDIR = $(SRCDIR)/assets/scripts
  26. JSDIR = $(BUILDDIR)/assets/scripts
  27. JSVENDOR = cp
  28. JSVENDORFLAGS =
  29. JSVENDORFLAGS_PROD =
  30. JSVENDORSRCDIR = $(SRCDIR)/assets/scripts/vendor
  31. JSVENDORDIR = $(BUILDDIR)/assets/scripts/vendor
  32. JQUERY_VERSION = 1.12.0
  33. IMG = cp
  34. IMGFLAGS =
  35. IMGFLAGS_PROD =
  36. IMGSRCDIR = $(SRCDIR)/assets/media/images
  37. IMGDIR = $(BUILDDIR)/assets/media/images
  38. VID = cp
  39. VIDFLAGS =
  40. VIDFLAGS_PROD =
  41. VIDSRCDIR = $(SRCDIR)/assets/media/video
  42. VIDDIR = $(BUILDDIR)/assets/media/video
  43. FONT = cp
  44. FONTFLAGS =
  45. FONTFLAGS_PROD =
  46. FONTSRCDIR = $(SRCDIR)/assets/fonts
  47. FONTDIR = $(BUILDDIR)/assets/fonts
  48. EXT = cp
  49. EXTFLAGS =
  50. EXTFLAGS_PROD =
  51. EXTDIR = $(SRCDIR)/assets/extras
  52. #===============================================================================
  53. # Files ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  54. #===============================================================================
  55. PUGTEMPLATES = $(shell find $(TMPLDIR) -type f -name \*.pug -print)
  56. PUGFILES = $(shell find $(PUGDIR) -type d -path $(TMPLDIR) -prune -o -type f -name \*.pug -print)
  57. MDFILES = $(shell find $(PUGDIR) -type d -path $(TMPLDIR) -prune -o -type f -name \*.md -print)
  58. HTMLFILES = $(patsubst $(PUGDIR)/%.pug, $(BUILDDIR)/%.html, $(PUGFILES))
  59. SASSFILES = $(wildcard $(SASSDIR)/[^_]*.$(SASSEXT))
  60. SASSSTUBS = $(wildcard $(SASSDIR)/_*.$(SASSEXT))
  61. CSSFILES = $(patsubst $(SASSDIR)/%.$(SASSEXT), $(CSSDIR)/%.css, $(SASSFILES))
  62. JSFILES_SRC = $(wildcard $(JSSRCDIR)/*.js)
  63. JSFILES = $(patsubst $(JSSRCDIR)/%, $(JSDIR)/%, $(JSFILES_SRC))
  64. JSVENDORFILES_SRC = $(wildcard $(JSVENDORSRCDIR)/*.js)
  65. JSVENDORFILES = $(patsubst $(JSVENDORSRCDIR)/%, $(JSVENDORDIR)/%, $(JSVENDORFILES_SRC))
  66. IMGFILES_SRC = $(wildcard $(IMGSRCDIR)/*)
  67. IMGFILES = $(patsubst $(IMGSRCDIR)/%, $(IMGDIR)/%, $(IMGFILES_SRC))
  68. VIDFILES_SRC = $(wildcard $(VIDSRCDIR)/*)
  69. VIDFILES = $(patsubst $(VIDSRCDIR)/%, $(VIDDIR)/%, $(VIDFILES_SRC))
  70. FONTFILES_SRC = $(wildcard $(FONTSRCDIR)/*)
  71. FONTFILES = $(patsubst $(FONTSRCDIR)/%, $(FONTDIR)/%, $(FONTFILES_SRC))
  72. FEEDFILES_SRC = $(wildcard $(EXTDIR)/feed.*)
  73. TXTFILES_SRC = $(wildcard $(EXTDIR)/*.txt)
  74. SVGFILES_SRC = $(wildcard $(EXTDIR)/*.svg)
  75. PNGFILES_SRC = $(wildcard $(EXTDIR)/*.png)
  76. ICOFILES_SRC = $(wildcard $(EXTDIR)/*.ico)
  77. XMLFILES_SRC = $(wildcard $(EXTDIR)/*.xml)
  78. HTACCESS_SRC = $(wildcard $(EXTDIR)/.htaccess)
  79. MANIFEST_SRC = $(wildcard $(EXTDIR)/site.webmanifest)
  80. CNAME_SRC = $(wildcard $(EXTDIR)/CNAME)
  81. FEEDFILES = $(patsubst $(EXTDIR)/%, $(BUILDDIR)/%, $(FEEDFILES_SRC))
  82. TXTFILES = $(patsubst $(EXTDIR)/%, $(BUILDDIR)/%, $(TXTFILES_SRC))
  83. SVGFILES = $(patsubst $(EXTDIR)/%, $(BUILDDIR)/%, $(SVGFILES_SRC))
  84. PNGFILES = $(patsubst $(EXTDIR)/%, $(BUILDDIR)/%, $(PNGFILES_SRC))
  85. ICOFILES = $(patsubst $(EXTDIR)/%, $(BUILDDIR)/%, $(ICOFILES_SRC))
  86. XMLFILES = $(patsubst $(EXTDIR)/%, $(BUILDDIR)/%, $(XMLFILES_SRC))
  87. HTACCESS = $(patsubst $(EXTDIR)/%, $(BUILDDIR)/%, $(HTACCESS_SRC))
  88. MANIFEST = $(patsubst $(EXTDIR)/%, $(BUILDDIR)/%, $(MANIFEST_SRC))
  89. CNAME = $(patsubst $(EXTDIR)/%, $(BUILDDIR)/%, $(CNAME_SRC))
  90. #===============================================================================
  91. # Rules ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  92. #===============================================================================
  93. .PHONY: all html css js jsvendor img vid font extras feed production deploy clean
  94. all: html css js jsvendor img vid font extras feed
  95. #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  96. html: $(HTMLFILES)
  97. $(HTMLFILES): $(PUGTEMPLATES) $(MDFILES)
  98. $(BUILDDIR)/%.html: $(PUGDIR)/%.pug
  99. if [[ ! -d $(dir $@) ]]; then mkdir -p $(dir $@); fi
  100. $(PUG) $(PUGFLAGS) -o $(dir $@) $<
  101. if [[ `grep '{{JQUERY_VERSION}}' $@` ]]; then sed -i "s/{{JQUERY_VERSION}}/$(JQUERY_VERSION)/" $@; fi
  102. #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  103. css: $(CSSFILES)
  104. $(CSSFILES): $(SASSFILES) $(SASSSTUBS)
  105. $(CSSDIR)/%.css: $(SASSDIR)/%.$(SASSEXT)
  106. if [[ ! -d $(dir $@) ]]; then mkdir -p $(dir $@); fi
  107. $(SASS) $(SASSFLAGS) $< $@
  108. #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  109. js: $(JSFILES)
  110. $(JSFILES): $(JSFILES_SRC)
  111. $(JSDIR)/%.js: $(JSSRCDIR)/%.js
  112. if [[ ! -d $(dir $@) ]]; then mkdir -p $(dir $@); fi
  113. $(JS) $(JSFLAGS) $< $@
  114. #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  115. jsvendor: $(JSVENDORFILES)
  116. $(JSVENDORFILES): $(JSVENDORFILES_SRC)
  117. $(JSVENDORDIR)/%.js: $(JSVENDORSRCDIR)/%.js
  118. if [[ ! -d $(dir $@) ]]; then mkdir -p $(dir $@); fi
  119. $(JSVENDOR) $(JSVENDORFLAGS) $< $@
  120. #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  121. img: $(IMGFILES)
  122. $(IMGFILES): $(IMGFILES_SRC)
  123. $(IMGDIR)/%: $(IMGSRCDIR)/%
  124. if [[ ! -d $(dir $@) ]]; then mkdir -p $(dir $@); fi
  125. $(IMG) $(IMGFLAGS) $< $@
  126. #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  127. vid: $(VIDFILES)
  128. $(VIDFILES): $(VIDFILES_SRC)
  129. $(VIDDIR)/%: $(VIDSRCDIR)/%
  130. if [[ ! -d $(dir $@) ]]; then mkdir -p $(dir $@); fi
  131. $(VID) $(VIDFLAGS) $< $@
  132. #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  133. font: $(FONTFILES)
  134. $(FONTFILES): $(FONTFILES_SRC)
  135. $(FONTDIR)/%: $(FONTSRCDIR)/%
  136. if [[ ! -d $(dir $@) ]]; then mkdir -p $(dir $@); fi
  137. $(FONT) $(FONTFLAGS) $< $@
  138. #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  139. extras: $(FEEDFILES) $(TXTFILES) $(SVGFILES) $(PNGFILES) $(ICOFILES) $(XMLFILES) $(HTACCESS) $(MANIFEST) $(CNAME)
  140. $(BUILDDIR)/feed.%: $(EXTDIR)/feed.%
  141. $(EXT) $(EXTFLAGS) $< $@
  142. $(BUILDDIR)/%.txt: $(EXTDIR)/%.txt
  143. $(EXT) $(EXTFLAGS) $< $@
  144. $(BUILDDIR)/%.svg: $(EXTDIR)/%.svg
  145. $(EXT) $(EXTFLAGS) $< $@
  146. $(BUILDDIR)/%.png: $(EXTDIR)/%.png
  147. $(EXT) $(EXTFLAGS) $< $@
  148. $(BUILDDIR)/%.ico: $(EXTDIR)/%.ico
  149. $(EXT) $(EXTFLAGS) $< $@
  150. $(BUILDDIR)/%.xml: $(EXTDIR)/%.xml
  151. $(EXT) $(EXTFLAGS) $< $@
  152. $(BUILDDIR)/.htaccess: $(EXTDIR)/.htaccess
  153. $(EXT) $(EXTFLAGS) $< $@
  154. $(BUILDDIR)/site.webmanifest: $(EXTDIR)/site.webmanifest
  155. $(EXT) $(EXTFLAGS) $< $@
  156. $(BUILDDIR)/CNAME: $(EXTDIR)/CNAME
  157. $(EXT) $(EXTFLAGS) $< $@
  158. #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  159. feed: $(FEEDFILES_SRC)
  160. $(FEEDFILES_SRC): $(PUGFILES) $(MDFILES)
  161. ./mkfeed.py feed.rss
  162. mv feed.rss extras/feed.rss
  163. ./mkfeed.py feed.atom
  164. mv feed.atom extras/feed.atom
  165. #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  166. production: all
  167. #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  168. deploy: production
  169. #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  170. clean:
  171. rm -v $(HTMLFILES) \
  172. $(CSSFILES) \
  173. $(JSFILES) \
  174. $(JSVENDORFILES) \
  175. $(IMGFILES) \
  176. $(VIDFILES) \
  177. $(FONTFILES) \
  178. $(FEEDFILES) \
  179. $(TXTFILES) \
  180. $(SVGFILES) \
  181. $(PNGFILES) \
  182. $(ICOFILES) \
  183. $(XMLFILES) \
  184. $(HTACCESS) \
  185. $(MANIFEST) \
  186. $(CNAME)