Makefile 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. # See LICENSE for licensing information.
  2. PROJECT = cowboy
  3. RANCH_VSN = 0.6.0
  4. ERLC_OPTS = -Werror +debug_info +warn_export_all # +bin_opt_info +warn_missing_spec
  5. DEPS_DIR ?= $(CURDIR)/deps
  6. export DEPS_DIR
  7. .PHONY: all clean-all app clean docs clean-docs tests autobahn build-plt dialyze
  8. # Application.
  9. all: app
  10. clean-all: clean clean-docs
  11. rm -f .$(PROJECT).plt
  12. rm -rf $(DEPS_DIR) logs
  13. deps/ranch:
  14. @mkdir -p $(DEPS_DIR)
  15. git clone -n -- https://github.com/extend/ranch.git $(DEPS_DIR)/ranch
  16. cd $(DEPS_DIR)/ranch ; git checkout -q $(RANCH_VSN)
  17. MODULES = $(shell ls src/*.erl | sed 's/src\///;s/\.erl/,/' | sed '$$s/.$$//')
  18. app: deps/ranch ebin/$(PROJECT).app
  19. @cat src/$(PROJECT).app.src \
  20. | sed 's/{modules, \[\]}/{modules, \[$(MODULES)\]}/' \
  21. > ebin/$(PROJECT).app
  22. @$(MAKE) -C $(DEPS_DIR)/ranch
  23. ebin/$(PROJECT).app: src/*.erl
  24. @mkdir -p ebin/
  25. erlc -v $(ERLC_OPTS) -o ebin/ -pa ebin/ \
  26. src/$(PROJECT)_middleware.erl $?
  27. clean:
  28. -@$(MAKE) -C $(DEPS_DIR)/ranch clean
  29. rm -rf ebin/
  30. rm -f test/*.beam
  31. rm -f erl_crash.dump
  32. # Documentation.
  33. docs: clean-docs
  34. erl -noshell -eval 'edoc:application($(PROJECT), ".", []), init:stop().'
  35. clean-docs:
  36. rm -f doc/*.css
  37. rm -f doc/*.html
  38. rm -f doc/*.png
  39. rm -f doc/edoc-info
  40. # Tests.
  41. CT_RUN = ct_run \
  42. -pa ebin $(DEPS_DIR)/*/ebin \
  43. -dir test \
  44. -logdir logs \
  45. -cover test/cover.spec
  46. tests: ERLC_OPTS += -DTEST=1
  47. tests: clean app
  48. @mkdir -p logs/
  49. @$(CT_RUN) -suite eunit_SUITE http_SUITE ws_SUITE
  50. autobahn: clean app
  51. @mkdir -p logs/
  52. @$(CT_RUN) -suite autobahn_SUITE
  53. # Dialyzer.
  54. build-plt: app
  55. @dialyzer --build_plt --output_plt .$(PROJECT).plt \
  56. --apps erts kernel stdlib crypto public_key ssl $(DEPS_DIR)/ranch
  57. dialyze:
  58. @dialyzer --src src --plt .$(PROJECT).plt --no_native \
  59. -Werror_handling -Wrace_conditions -Wunmatched_returns # -Wunderspecs