Makefile 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. SHELL=/usr/bin/env bash
  2. SED ?= $(shell which gsed 2>/dev/null || which sed)
  3. MKDOCS_PAGES=$(shell cd ../mkdocs/docs/ && find * -type f -name '*.md' | sort)
  4. .PHONY: all
  5. all: JSON_for_Modern_C++.tgz
  6. docSet.dsidx: docSet.sql
  7. # generate index
  8. sqlite3 docSet.dsidx <docSet.sql
  9. JSON_for_Modern_C++.docset: Info.plist docSet.dsidx
  10. rm -fr JSON_for_Modern_C++.docset JSON_for_Modern_C++.tgz
  11. mkdir -p JSON_for_Modern_C++.docset/Contents/Resources/Documents/
  12. cp icon*.png JSON_for_Modern_C++.docset
  13. cp Info.plist JSON_for_Modern_C++.docset/Contents
  14. # build and copy documentation
  15. $(MAKE) build -C ../mkdocs
  16. cp -r ../mkdocs/site/* JSON_for_Modern_C++.docset/Contents/Resources/Documents
  17. # patch CSS to hide navigation items
  18. echo -e "\n\nheader, footer, nav.md-tabs, nav.md-tabs--active, div.md-sidebar--primary, a.md-content__button { display: none; }" >> "$$(ls JSON_for_Modern_C++.docset/Contents/Resources/Documents/assets/stylesheets/main.*.min.css)"
  19. # fix spacing
  20. echo -e "\n\ndiv.md-sidebar div.md-sidebar--secondary, div.md-main__inner { top: 0; margin-top: 0 }" >> "$$(ls JSON_for_Modern_C++.docset/Contents/Resources/Documents/assets/stylesheets/main.*.min.css)"
  21. # remove "JSON for Modern C++" from page titles (fallback)
  22. find JSON_for_Modern_C++.docset/Contents/Resources/Documents -type f -exec $(SED) -i 's| - JSON for Modern C++</title>|</title>|' {} +
  23. # replace page titles with name from index, if available
  24. for page in $(MKDOCS_PAGES); do \
  25. case "$$page" in \
  26. */index.md) path=$${page/\/index.md/} ;; \
  27. *) path=$${page/.md/} ;; \
  28. esac; \
  29. title=$$(sqlite3 docSet.dsidx "SELECT name FROM searchIndex WHERE path='$$path/index.html'" | tr '\n' ',' | $(SED) -e 's/,/, /g' -e 's/, $$/\n/'); \
  30. if [ "x$$title" != "x" ]; then \
  31. $(SED) -i "s%<title>.*</title>%<title>$$title</title>%" "JSON_for_Modern_C++.docset/Contents/Resources/Documents/$$path/index.html"; \
  32. fi \
  33. done
  34. # clean up
  35. rm JSON_for_Modern_C++.docset/Contents/Resources/Documents/sitemap.*
  36. # copy index
  37. cp docSet.dsidx JSON_for_Modern_C++.docset/Contents/Resources/
  38. JSON_for_Modern_C++.tgz: JSON_for_Modern_C++.docset
  39. tar --exclude='.DS_Store' -cvzf JSON_for_Modern_C++.tgz JSON_for_Modern_C++.docset
  40. # install docset for Zeal documentation browser (https://zealdocs.org/)
  41. .PHONY: install_docset_zeal
  42. install_docset_zeal: JSON_for_Modern_C++.docset
  43. docset_root=$${XDG_DATA_HOME:-$$HOME/.local/share}/Zeal/Zeal/docsets; \
  44. rm -rf $$docset_root/JSON_for_Modern_C++.docset; \
  45. mkdir -p $$docset_root; \
  46. cp -r JSON_for_Modern_C++.docset $$docset_root/
  47. # list mkdocs pages missing from the docset index
  48. .PHONY: list_missing_pages
  49. list_missing_pages: docSet.dsidx
  50. @for page in $(MKDOCS_PAGES); do \
  51. case "$$page" in \
  52. */index.md) path=$${page/\/index.md/} ;; \
  53. *) path=$${page/.md/} ;; \
  54. esac; \
  55. if [ "x$$page" != "xindex.md" -a "x$$(sqlite3 docSet.dsidx "SELECT COUNT(*) FROM searchIndex WHERE path='$$path/index.html'")" = "x0" ]; then \
  56. echo $$page; \
  57. fi \
  58. done
  59. # list paths in the docset index without a corresponding mkdocs page
  60. .PHONY: list_removed_paths
  61. list_removed_paths: docSet.dsidx
  62. @for path in $$(sqlite3 docSet.dsidx "SELECT path FROM searchIndex"); do \
  63. page=$${path/\/index.html/.md}; \
  64. page_index=$${path/index.html/index.md}; \
  65. page_found=0; \
  66. for p in $(MKDOCS_PAGES); do \
  67. if [ "x$$p" = "x$$page" -o "x$$p" = "x$$page_index" ]; then \
  68. page_found=1; \
  69. fi \
  70. done; \
  71. if [ "x$$page_found" = "x0" ]; then \
  72. echo $$path; \
  73. fi \
  74. done
  75. .PHONY: clean
  76. clean:
  77. rm -f docSet.dsidx
  78. rm -fr JSON_for_Modern_C++.docset JSON_for_Modern_C++.tgz