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.

slides.mk 6.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. ################################################################################
  2. # The name of the file containing the markdown formatted slides. If
  3. # the given file name doesn't have the "md" file extension it is
  4. # assumed to be a manifest file.
  5. SOURCE ?= slides.md
  6. SLIDE_SOURCE ?= $(SOURCE)
  7. HANDOUT_SOURCE ?= $(SOURCE)
  8. BUILD_DIR ?= build
  9. ################################################################################
  10. # Should the SOURCE file(s) be used to create a README.md and
  11. # README.html files?
  12. GEN_README ?= YES
  13. ################################################################################
  14. # Files which are generated and should be removed with `make clean'.
  15. GEN_FILES ?=
  16. ################################################################################
  17. # Other dependencies which the GEN_FILES should be rebuilt for.
  18. OTHER_DEPS ?=
  19. ################################################################################
  20. # Set the aspect ration for beamer slides. 169 is the option for wide
  21. # screen (16:9) and 43 is for full screen (4:3).
  22. ASPECT_RATIO ?= 43
  23. ################################################################################
  24. DIAGRAMS ?=
  25. ################################################################################
  26. # Override the default slide level in pandoc.
  27. PANDOC_SLIDE_LEVEL ?=
  28. ################################################################################
  29. # Where dependencies should live.
  30. DEVALOT_SLIDES_DIR ?= vendor/devalot-slides
  31. ################################################################################
  32. # Third-party tools that are needed to build the slides.
  33. PANDOC ?= pandoc
  34. EDIFY ?= edify
  35. ################################################################################
  36. BEAMER_OPTS = --smart --template $(DEVALOT_SLIDES_DIR)/beamer/template.tex
  37. BEAMER_OPTS += -V theme:default -V colortheme:seahorse
  38. BEAMER_OPTS += -V classoption:aspectratio=$(ASPECT_RATIO)
  39. BEAMER_OPTS += -H $(DEVALOT_SLIDES_DIR)/beamer/extra-hdr.tex
  40. # Things blow up when using XeLaTeX.
  41. # BEAMER_OPTS += --latex-engine=xelatex
  42. ifneq ($(PANDOC_SLIDE_LEVEL),)
  43. BEAMER_OPTS += --slide-level=$(PANDOC_SLIDE_LEVEL)
  44. endif
  45. ################################################################################
  46. FILTER = $(PANDOC) -Sf markdown -t json $(1) | $(EDIFY) filter
  47. MESSAGE = echo "==> $(1)"
  48. DEBUG ?=
  49. ################################################################################
  50. # A PDF containing all slides and notes.
  51. HANDOUT_TOC_LEVEL = $(shell expr $(PANDOC_SLIDE_LEVEL) - 1)
  52. HANDOUT_TEMPLATE ?= $(DEVALOT_SLIDES_DIR)/handout/training.tex
  53. HANDOUT_OPTIONS ?= --smart --toc --toc-depth=$(HANDOUT_TOC_LEVEL) --chapters --number-sections --template $(HANDOUT_TEMPLATE)
  54. ################################################################################
  55. # Export all variables to the shell scripts.
  56. export
  57. ################################################################################
  58. .PHONEY: all clean auto start outline
  59. ################################################################################
  60. # Create all files.
  61. all:: $(GEN_FILES)
  62. ################################################################################
  63. # Remove all generated files.
  64. clean::
  65. rm -rf $(GEN_FILES) $(BUILD_DIR)
  66. ################################################################################
  67. # Automatically rebuild all targets when any source files change.
  68. auto::
  69. @ while :; do \
  70. $(MAKE) --no-print-directory || exit $$?; \
  71. inotifywait -qre modify $(SLIDE_SOURCE_FILES) $(HANDOUT_SOURCE_FILES) $(OTHER_DEPS); \
  72. done
  73. ################################################################################
  74. # Start a presentation.
  75. start:: $(BUILD_DIR)/$(notdir $(basename $(word 1,$(SLIDE_SOURCE))))-slide.pdf
  76. impressive -ff -u 5 -w --nologo --transition None $<
  77. ################################################################################
  78. # Produce an outline of the document.
  79. outline::
  80. @ $(CAT_OUTLINE_SRC) | \
  81. $(EDIFY) outline \
  82. $(if $(TIME_KEY),-a $(TIME_KEY)) \
  83. $(if $(TIME_FILE),-f $(TIME_FILE))
  84. ################################################################################
  85. define DEVALOT_MAKE_DIAGRAM
  86. GEN_FILES += $(2)
  87. OTHER_DEPS += $(2)
  88. $(2): $(1)
  89. endef
  90. ################################################################################
  91. $(foreach d,$(DIAGRAMS),$(eval \
  92. $(call DEVALOT_MAKE_DIAGRAM,$(d),$(basename $(d)).pdf)))
  93. ################################################################################
  94. # Create a PDF from a source file.
  95. #
  96. # $1: The input, either a manifest file or a markdown file.
  97. # $2: Destination directory for the PDF file.
  98. # $3: Destination file suffix (e.g. -slide or -handout).
  99. # $4: The script to use to create the PDF.
  100. define BUILD_PDF_FILE
  101. all:: $(2)/$(notdir $(basename $(1)))$(3).pdf
  102. ifneq ($$(suffix $(1)),.md)
  103. $(2)/$(notdir $(basename $(1)))$(3).pdf: $$(shell $(EDIFY) stitch --list $(1))
  104. endif
  105. $(2)/$(notdir $(basename $(1)))$(3).pdf: $(1) $(OTHER_DEPS)
  106. @ $(call MESSAGE,$$@)
  107. @ mkdir -p `dirname $$@`
  108. @ sh $(if $(DEBUG),-xe) $(DEVALOT_SLIDES_DIR)/bin/$(4) $(1) $$@
  109. endef
  110. ################################################################################
  111. # Slides.
  112. $(foreach s,$(SLIDE_SOURCE),$(eval \
  113. $(call BUILD_PDF_FILE,$(s),$(BUILD_DIR),-slide,slide.sh)))
  114. ################################################################################
  115. # Handouts.
  116. $(foreach h,$(HANDOUT_SOURCE),$(eval \
  117. $(call BUILD_PDF_FILE,$(h),$(BUILD_DIR),-handout,handout.sh)))
  118. ################################################################################
  119. # Rules for generating a README.md file (when requested).
  120. ifeq ($(GEN_README),YES)
  121. GEN_FILES += README.md README.html
  122. README.md: $(SLIDE_SOURCE_FILES) $(OTHER_DEPS)
  123. @ $(call MESSAGE,$@)
  124. @ $(call FILTER,$(SLIDE_FILE:.pdf=.md)) | \
  125. $(PANDOC) -f json -t markdown --atx-headers -o $@.tmp
  126. @ sed -r 's|^</?div.*$$||' < $@.tmp > $@
  127. @ rm $@.tmp
  128. README.html: README.md
  129. @ $(call MESSAGE,$@)
  130. @ $(PANDOC) -f markdown -t html5 -s -o $@ $<
  131. endif
  132. ################################################################################
  133. # Helper makefiles.
  134. include $(DEVALOT_SLIDES_DIR)/mk/graphviz.mk
  135. include $(DEVALOT_SLIDES_DIR)/mk/mscgen.mk