diff --git a/Makefile b/Makefile index c06dfab..8e646e1 100644 --- a/Makefile +++ b/Makefile @@ -5,4 +5,6 @@ SITE_AUTHOR_EMAIL = correl@gmail.com SITE_TWITTER = correlr SITE_GITHUB = correl/sicp +BABEL_LANGUAGES = scheme dot + include org-jekyll.mk diff --git a/org-jekyll.mk b/org-jekyll.mk index bf7cd63..4e842f2 100644 --- a/org-jekyll.mk +++ b/org-jekyll.mk @@ -13,23 +13,28 @@ SITE_GITHUB ?= ORG_DIR ?= . BUILD_DIR ?= _build SITE_DIR ?= _site -OUTPUT_DIR = $(BUILD_DIR)/_org -CODE_DIR = $(BUILD_DIR)/_src +BABEL_LANGUAGES ?= emacs-lisp JEKYLL_CONFIG = $(BUILD_DIR)/_config.yml JEKYLL_OPTS += -s $(BUILD_DIR) +ORG_BUILD_DIR = $(BUILD_DIR)/_org +ORG_ASSET_DIR = $(BUILD_DIR)/org + targets = $(BUILD_DIR) $(SITE_DIR) mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST))) -org_files := $(patsubst %.org,$(OUTPUT_DIR)/%.html,$(notdir $(wildcard $(ORG_DIR)/*.org))) -tangle_org_files := $(shell grep -il '+BEGIN_SRC .* :tangle yes' $(ORG_DIR)/*.org) -tangle_output_files := $(patsubst %.org,$(CODE_DIR)/%.src.txt,$(notdir $(tangle_org_files))) -tangle_tmp := $(shell tempfile -s .org) +org_files := $(wildcard $(ORG_DIR)/*.org) +tangle_org_files := $(addprefix $(ORG_ASSET_DIR)/,$(notdir $(shell grep -l ':tangle ' $(org_files)))) +org_asset_files := $(addprefix $(ORG_ASSET_DIR)/,$(notdir $(org_files))) +html_files := $(patsubst %.org,$(ORG_BUILD_DIR)/%.html,$(notdir $(org_files))) +load_languages := $(shell echo "$(BABEL_LANGUAGES)" | sed -r 's/(\S+)/\(\1 . ''t\)/g') V ?= 0 -org_verbose_0 = @echo " ORG " $(?F); +stderr_verbose_0 = 2>/dev/null +stderr_verbose = $(stderr_verbose_$(V)) +org_verbose_0 = @echo " ORG " $<; org_verbose = $(org_verbose_$(V)) -tangle_verbose_0 = @echo " CODE " $(?F); +tangle_verbose_0 = @echo " CODE " $(1); tangle_verbose = $(tangle_verbose_$(V)) jekyll_verbose_0 = @echo " BUILD jekyll"; jekyll_verbose = $(jekyll_verbose_$(V)) @@ -40,12 +45,12 @@ serve_verbose = $(jekyll_verbose_$(V)) default: all -all: jekyll +all: build clean: rm -rf $(targets) -$(JEKYLL_CONFIG): +jekyll-config: $(config_verbose) echo "\ # Site settings \n\ name: \"$(SITE_NAME)\" \n\ @@ -64,37 +69,67 @@ permalinks: pretty \n\ collections: \n\ org: \n\ output: true \n\ - src: \n\ - output: true \n\ \n\ defaults: \n\ - scope: \n\ - path: \"\" \n\ + path: \"\"\n\ type: \"org\" \n\ values: \n\ - layout: \"page\" \n\ - author: \"$(SITE_AUTHOR)\" \n\ -" > $@ + layout: \"org\" \n\ +" > $(JEKYLL_CONFIG) -jekyll: assets org-html org-code $(JEKYLL_CONFIG) +build: assets org jekyll-config $(jekyll_verbose) jekyll build $(JEKYLL_OPTS) -serve: assets org-html org-code $(JEKYLL_CONFIG) +serve: assets org jekyll-config $(serve_verbose) jekyll serve $(JEKYLL_OPTS) -$(BUILD_DIR): - mkdir -p $@ +org: $(org_asset_files) $(html_files) -$(OUTPUT_DIR): - mkdir -p $@ +$(ORG_BUILD_DIR)/%.html: $(ORG_ASSET_DIR)/%.html + @mkdir -p $(@D) + @mv $< $@ -$(CODE_DIR): - mkdir -p $@ +$(ORG_ASSET_DIR)/%.org: $(ORG_DIR)/%.org + @mkdir -p $(@D) + @cp $< $@ -$(OUTPUT_DIR)/%.html: $(ORG_DIR)/%.org +define tangle + $(tangle_verbose) emacs --batch -u ${USER} \ + --eval " \ +(progn \ + (require 'org) \ + (org-babel-do-load-languages \ + 'org-babel-load-languages \ + '($(load_languages))) \ + (org-babel-tangle-file \"$(1)\"))" $(stderr_verbose) +endef + +$(ORG_ASSET_DIR)/%.html: $(ORG_ASSET_DIR)/%.org + $(if $(shell grep ':tangle ' $<),$(call tangle,$<)) $(org_verbose) emacs --batch -u ${USER} --eval " \ (progn \ (require 'org) \ + (require 'ox) \ + \ + (org-babel-do-load-languages \ + 'org-babel-load-languages \ + '($(load_languages))) \ + (setq org-confirm-babel-evaluate nil) \ + \ + (defun org-jekyll.mk/inject-frontmatter (string backend info) \ + (when (and (org-export-derived-backend-p backend 'html) \ + (not (eq 0 (string-match \"---\" string)))) \ + (let ((title (org-export-data (plist-get info :title) info)) \ + (author (org-export-data (plist-get info :author) info))) \ + (replace-regexp-in-string (rx buffer-start) \ + (concat \"---\\n\" \ + (format \"title: \\\"%s\\\"\\n\" title) \ + (format \"author: \\\"%s\\\"\\n\" author) \ + \"---\\n\") \ + string)))) \ + (add-to-list 'org-export-filter-final-output-functions \ + 'org-jekyll.mk/inject-frontmatter) \ \ (setq org-publish-project-alist \ '( \ @@ -102,7 +137,7 @@ $(OUTPUT_DIR)/%.html: $(ORG_DIR)/%.org :base-directory \".\" \ :base-extension \"org\" \ \ - :publishing-directory \"$(abspath $(OUTPUT_DIR))\" \ + :publishing-directory \"$(abspath $(@D))\" \ :recursive t \ :publishing-function org-html-publish-to-html \ :headline-levels 4 \ @@ -110,147 +145,140 @@ $(OUTPUT_DIR)/%.html: $(ORG_DIR)/%.org :html-extension \"html\" \ :htmlized-source t \ :with-toc nil \ - :body-only t) \ + :body-only t \ + :babel-evaluate t) \ (\"jekyll\" :components (\"org-jekyll\")))) \ \ (find-file \"$<\") \ (org-publish-current-file 't)) \ -" 2>/dev/null - -$(CODE_DIR)/%.src.txt: $(ORG_DIR)/%.org - @sed "s/:tangle yes/:tangle $(subst /,\/,$(abspath $@))/g" "$<" > $(tangle_tmp) - $(tangle_verbose) emacs --batch -u ${USER} \ - --eval "(require 'org)" \ - --eval "(org-babel-tangle-file \"$(tangle_tmp)\")" 2>/dev/null ; - @rm $(tangle_tmp) - -org-html: $(OUTPUT_DIR) $(org_files) -org-code: $(CODE_DIR) $(tangle_output_files) +" $(stderr_verbose) .PHONY: assets assets_verbose_0 = @echo Extracting assets to $(BUILD_DIR); assets_verbose = $(assets_verbose_$(V)) -assets: $(BUILD_DIR) +assets: + @mkdir -p $(BUILD_DIR) $(assets_verbose) echo '' \ 'begin-base64 664 -\n'\ - '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\n'\ '====\n'\ | sed 's/^ //' | uudecode | tar zx -C $(BUILD_DIR)