core.mk 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. # Copyright (c) 2013-2014, Loïc Hoguin <essen@ninenines.eu>
  2. #
  3. # Permission to use, copy, modify, and/or distribute this software for any
  4. # purpose with or without fee is hereby granted, provided that the above
  5. # copyright notice and this permission notice appear in all copies.
  6. #
  7. # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  8. # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  9. # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  10. # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  11. # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  12. # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  13. # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  14. .PHONY: all deps app rel docs tests clean distclean help erlang-mk
  15. ERLANG_MK_VERSION = 1
  16. # Core configuration.
  17. PROJECT ?= $(notdir $(CURDIR))
  18. PROJECT := $(strip $(PROJECT))
  19. # Verbosity.
  20. V ?= 0
  21. gen_verbose_0 = @echo " GEN " $@;
  22. gen_verbose = $(gen_verbose_$(V))
  23. # "erl" command.
  24. ERL = erl +A0 -noinput -boot start_clean
  25. # Core targets.
  26. ifneq ($(words $(MAKECMDGOALS)),1)
  27. .NOTPARALLEL:
  28. endif
  29. all::
  30. @$(MAKE) --no-print-directory deps
  31. @$(MAKE) --no-print-directory app
  32. @$(MAKE) --no-print-directory rel
  33. clean::
  34. $(gen_verbose) rm -f erl_crash.dump
  35. distclean:: clean
  36. help::
  37. @printf "%s\n" \
  38. "erlang.mk (version $(ERLANG_MK_VERSION)) is distributed under the terms of the ISC License." \
  39. "Copyright (c) 2013-2014 Loïc Hoguin <essen@ninenines.eu>" \
  40. "" \
  41. "Usage: [V=1] make [-jNUM] [target]" \
  42. "" \
  43. "Core targets:" \
  44. " all Run deps, app and rel targets in that order" \
  45. " deps Fetch dependencies (if needed) and compile them" \
  46. " app Compile the project" \
  47. " rel Build a release for this project, if applicable" \
  48. " docs Build the documentation for this project" \
  49. " tests Run the tests for this project" \
  50. " clean Delete temporary and output files from most targets" \
  51. " distclean Delete all temporary and output files" \
  52. " help Display this help and exit" \
  53. "" \
  54. "The target clean only removes files that are commonly removed." \
  55. "Dependencies and releases are left untouched." \
  56. "" \
  57. "Setting V=1 when calling make enables verbose mode." \
  58. "Parallel execution is supported through the -j Make flag."
  59. # Core functions.
  60. ifeq ($(shell which wget 2>/dev/null | wc -l), 1)
  61. define core_http_get
  62. wget --no-check-certificate -O $(1) $(2)|| rm $(1)
  63. endef
  64. else
  65. define core_http_get
  66. $(ERL) -eval 'ssl:start(), inets:start(), case httpc:request(get, {"$(2)", []}, [{autoredirect, true}], []) of {ok, {{_, 200, _}, _, Body}} -> case file:write_file("$(1)", Body) of ok -> ok; {error, R1} -> halt(R1) end; {error, R2} -> halt(R2) end, halt(0).'
  67. endef
  68. endif
  69. # Automated update.
  70. ERLANG_MK_BUILD_CONFIG ?= build.config
  71. ERLANG_MK_BUILD_DIR ?= .erlang.mk.build
  72. erlang-mk:
  73. git clone https://github.com/ninenines/erlang.mk $(ERLANG_MK_BUILD_DIR)
  74. if [ -f $(ERLANG_MK_BUILD_CONFIG) ]; then cp $(ERLANG_MK_BUILD_CONFIG) $(ERLANG_MK_BUILD_DIR); fi
  75. cd $(ERLANG_MK_BUILD_DIR) && make
  76. cp $(ERLANG_MK_BUILD_DIR)/erlang.mk ./erlang.mk
  77. rm -rf $(ERLANG_MK_BUILD_DIR)