Makefile 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. SHELL = /bin/bash
  2. DOCS_DIR = $(realpath .)/sources
  3. SPHINX_TEMPLATE = $(realpath .)/sphinx_template
  4. HTML_OUTPUT_DIR = $(realpath .)/output/html
  5. TAGS_OUTPUT = $(realpath .)/output/tags
  6. # Which documentation to build. Use like this: make SOURCE=<id>
  7. SOURCE=
  8. ${SOURCE}:
  9. @ # Do not print commands
  10. # Get docs info from JSON file to an array
  11. readarray -t DOCS < <(
  12. jq --raw-output --arg id $@ \
  13. '.[] | select(.id == $$id) | .id, .name, .repository, .sphinx_dir, .tags' \
  14. documentation.json
  15. )
  16. # Extract properties from array to named variable
  17. DOCS_ID=$${DOCS[0]}
  18. DOCS_NAME=$${DOCS[1]}
  19. DOCS_REPOSITORY=$${DOCS[2]}
  20. DOCS_SPHINXDIR=$${DOCS[3]}
  21. DOCS_TAGS=$${DOCS[4]}
  22. # Download source file (repository) if first time
  23. mkdir --parents ${DOCS_DIR}
  24. if [ ! -d "${DOCS_DIR}/$${DOCS_ID}" ]
  25. then
  26. git clone "$${DOCS_REPOSITORY}" "${DOCS_DIR}/$${DOCS_ID}"
  27. fi
  28. # Enter directory with source files
  29. cd "${DOCS_DIR}/$${DOCS_ID}"
  30. # Find tags to process
  31. releases=$$(git tag | grep -E "$${DOCS_TAGS}")
  32. # For every tag...
  33. for release in $${releases}
  34. do
  35. echo "Switching to tag: $${release}"
  36. git checkout $${release}
  37. sphinx-build -c "${SPHINX_TEMPLATE}" \
  38. -b dirhtml \
  39. -D project="$${DOCS_NAME}" \
  40. -D release="$${release}" \
  41. "$${DOCS_SPHINXDIR}" \
  42. "${HTML_OUTPUT_DIR}/$${DOCS_ID}/$${release}"
  43. done
  44. # Convert the list of tags to a JSON array
  45. releases=$$(echo "$${releases}" | jq --raw-input '[.]' | jq --slurp --compact-output 'add')
  46. # Create list of tags
  47. TAGS_LIST=$$(echo '[]' | jq --argjson rel $${releases} --arg id $${DOCS_ID} '. + [{ "id": $$id, "rel": $$rel }]')
  48. # Put list of tags to file
  49. mkdir --parents ${TAGS_OUTPUT}
  50. echo "$${TAGS_LIST}" > "${TAGS_OUTPUT}/$${DOCS_ID}.json"
  51. help:
  52. @echo "Usage: make SOURCE=<id>"
  53. clean:
  54. rm --recursive --force sources output
  55. .ONESHELL:
  56. .SUFFIXES:
  57. .PHONY: ${SOURCE} clean help
  58. .DELETE_ON_ERROR: