# Settings
MAKEFILES=Makefile $(wildcard *.mk)
JEKYLL=jekyll
+JEKYLL_VERSION=3.8.5
PARSER=bin/markdown_ast.rb
DST=_site
+# Check Python 3 is installed and determine if it's called via python3 or python
+# (https://stackoverflow.com/a/4933395)
+PYTHON3_EXE := $(shell which python3 2>/dev/null)
+ifneq (, $(PYTHON3_EXE))
+ ifeq (,$(findstring Microsoft/WindowsApps/python3,$(subst \,/,$(PYTHON3_EXE))))
+ PYTHON := python3
+ endif
+endif
+
+ifeq (,$(PYTHON))
+ PYTHON_EXE := $(shell which python 2>/dev/null)
+ ifneq (, $(PYTHON_EXE))
+ PYTHON_VERSION_FULL := $(wordlist 2,4,$(subst ., ,$(shell python --version 2>&1)))
+ PYTHON_VERSION_MAJOR := $(word 1,${PYTHON_VERSION_FULL})
+ ifneq (3, ${PYTHON_VERSION_MAJOR})
+ $(error "Your system does not appear to have Python 3 installed.")
+ endif
+ PYTHON := python
+ else
+ $(error "Your system does not appear to have any Python installed.")
+ endif
+endif
+
+
# Controls
.PHONY : commands clean files
.NOTPARALLEL:
## commands : show all commands.
commands :
- @grep -h -E '^##' ${MAKEFILES} | sed -e 's/## //g'
+ @grep -h -E '^##' ${MAKEFILES} | sed -e "s/## //g"
+
+## docker-serve : use docker to build the site
+docker-serve :
+ docker run --rm -it -v ${PWD}:/srv/jekyll -p 127.0.0.1:4000:4000 jekyll/jekyll:${JEKYLL_VERSION} make serve
## serve : run a local server.
serve : lesson-md
@find . -name '*.pyc' -exec rm {} \;
## clean-rmd : clean intermediate R files (that need to be committed to the repo).
-clear-rmd :
+clean-rmd :
@rm -rf ${RMD_DST}
@rm -rf fig/rmd-*
## workshop-check : check workshop homepage.
workshop-check :
- @bin/workshop_check.py .
+ @${PYTHON} bin/workshop_check.py .
## ----------------------------------------
## Commands specific to lesson websites.
# Lesson source files in the order they appear in the navigation menu.
MARKDOWN_SRC = \
index.md \
- CONDUCT.md \
+ CODE_OF_CONDUCT.md \
setup.md \
$(sort $(wildcard _episodes/*.md)) \
reference.md \
## lesson-md : convert Rmarkdown files to markdown
lesson-md : ${RMD_DST}
-# Use of .NOTPARALLEL makes rule execute only once
-${RMD_DST} : ${RMD_SRC}
- @bin/knit_lessons.sh ${RMD_SRC}
+_episodes/%.md: _episodes_rmd/%.Rmd
+ @bin/knit_lessons.sh $< $@
## lesson-check : validate lesson Markdown.
lesson-check : lesson-fixme
- @bin/lesson_check.py -s . -p ${PARSER} -r _includes/links.md
+ @${PYTHON} bin/lesson_check.py -s . -p ${PARSER} -r _includes/links.md
## lesson-check-all : validate lesson Markdown, checking line lengths and trailing whitespace.
lesson-check-all :
- @bin/lesson_check.py -s . -p ${PARSER} -r _includes/links.md -l -w --permissive
+ @${PYTHON} bin/lesson_check.py -s . -p ${PARSER} -r _includes/links.md -l -w --permissive
## unittest : run unit tests on checking tools.
unittest :
- @bin/test_lesson_check.py
+ @${PYTHON} bin/test_lesson_check.py
## lesson-files : show expected names of generated files for debugging.
lesson-files :