Makefile 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. LUA ?= lua
  2. LUA_FLAGS ?=-O2 --plugin plugins/fold-defgeneric.lisp --plugin plugins/fold-bool.lisp
  3. TEST_FLAGS ?=-fstrict
  4. TEST_ARGS ?=
  5. OUT_DIR ?= bin
  6. DOCS_DIR ?= docs_tmp
  7. PAGES_DIR ?= docs
  8. ROCKS_DIR ?= rock
  9. URN ?= ${LUA} bin/urn.lua
  10. LIBS := $(shell find lib -type f -name "*.lisp")
  11. MAIN_TESTS := $(shell find tests -type f -name '*.lisp' ! -name '*-helpers.lisp')
  12. DOC_TESTS := $(LIBS:lib/%.lisp=test_%)
  13. ifeq (${TIME},1)
  14. LUA_FLAGS += --time
  15. TEST_FLAGS += --time
  16. endif
  17. ifeq (${QUIET},1)
  18. TEST_ARGS += --quiet
  19. endif
  20. .PHONY: all ${OUT_DIR}/urn.lua \
  21. test gen_coverage ${MAIN_TESTS} ${DOC_TESTS} \
  22. docs publish_docs \
  23. rock tasks
  24. # Compilation of source code
  25. all: ${OUT_DIR}/urn.lua
  26. ${OUT_DIR}/urn.lua: urn/cli.lisp
  27. @mkdir -p $(shell dirname $@)
  28. ${URN} $^ -o $@ ${LUA_FLAGS} --shebang --chmod
  29. # Unit tests
  30. test: ${MAIN_TESTS} ${DOC_TESTS}
  31. gen_coverage:
  32. ${URN} $(shell find lib urn -type f -name "*.lisp") --gen-coverage
  33. ${MAIN_TESTS}:
  34. $(eval TMP := $(shell mktemp -d))
  35. ${URN} $(basename $@) --run -o ${TMP} ${TEST_FLAGS} -- ${TEST_ARGS}
  36. @rm -rf ${TMP}.lisp ${TMP}.lua ${TMP}
  37. ${DOC_TESTS}:
  38. $(eval TMP := $(shell mktemp -d))
  39. ${URN} plugins/doc-test --run -o ${TMP} ${TEST_FLAGS} -- ${TEST_ARGS} $(@:test_%=%)
  40. @rm -rf ${TMP}.lisp ${TMP}.lua ${TMP}
  41. # Documentation generation
  42. docs:
  43. rm -rf ${DOCS_DIR}
  44. @mkdir -p ${DOCS_DIR}
  45. ${URN} ${LIBS} --docs ${DOCS_DIR}
  46. publish_docs: docs
  47. git checkout gh-pages
  48. rm -rf ${PAGES_DIR}
  49. mv ${DOCS_DIR} ${PAGES_DIR}
  50. bundler exec jekyll build
  51. git add ${PAGES_DIR}
  52. git commit -m "Update docs"
  53. git push origin gh-pages
  54. git checkout master
  55. # Miscellaneous
  56. rock: all docs
  57. rm -rf ${ROCKS_DIR}
  58. @mkdir ${ROCKS_DIR}
  59. cp -r ${DOCS_DIR} ${ROCKS_DIR}/docs
  60. cp -r bin ${ROCKS_DIR}
  61. cp -r lib ${ROCKS_DIR}/urn-lib
  62. cp -r plugins ${ROCKS_DIR}
  63. cp -r tests ${ROCKS_DIR}
  64. cp urn-scm-1.rockspec ${ROCKS_DIR}
  65. rm -r ${ROCKS_DIR}/tests/data
  66. tasks:
  67. @$(MAKE) -pRrq -f $(lastword $(MAKEFILE_LIST)) : 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | sort | egrep -v -e '^[^[:alnum:]]' -e '^$@$$'