Makefile 2.3 KB

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