relx.mk 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. # Copyright (c) 2013-2016, Loïc Hoguin <essen@ninenines.eu>
  2. # This file is part of erlang.mk and subject to the terms of the ISC License.
  3. .PHONY: relx-rel relx-relup distclean-relx-rel run
  4. # Configuration.
  5. RELX ?= $(ERLANG_MK_TMP)/relx
  6. RELX_CONFIG ?= $(CURDIR)/relx.config
  7. RELX_URL ?= https://erlang.mk/res/relx-v3.27.0-22
  8. RELX_OPTS ?=
  9. RELX_OUTPUT_DIR ?= _rel
  10. RELX_REL_EXT ?=
  11. RELX_TAR ?= 1
  12. ifdef SFX
  13. RELX_TAR = 1
  14. endif
  15. ifeq ($(firstword $(RELX_OPTS)),-o)
  16. RELX_OUTPUT_DIR = $(word 2,$(RELX_OPTS))
  17. else
  18. RELX_OPTS += -o $(RELX_OUTPUT_DIR)
  19. endif
  20. # Core targets.
  21. ifeq ($(IS_DEP),)
  22. ifneq ($(wildcard $(RELX_CONFIG)),)
  23. rel:: relx-rel
  24. relup:: relx-relup
  25. endif
  26. endif
  27. distclean:: distclean-relx-rel
  28. # Plugin-specific targets.
  29. $(RELX): | $(ERLANG_MK_TMP)
  30. $(gen_verbose) $(call core_http_get,$(RELX),$(RELX_URL))
  31. $(verbose) chmod +x $(RELX)
  32. relx-rel: $(RELX) rel-deps app
  33. $(verbose) $(RELX) $(if $(filter 1,$V),-V 3) -c $(RELX_CONFIG) $(RELX_OPTS) release
  34. $(verbose) $(MAKE) relx-post-rel
  35. ifeq ($(RELX_TAR),1)
  36. $(verbose) touch $(RELX_OUTPUT_DIR)/$(PROJECT)_release/releases/RELEASES
  37. $(verbose) $(RELX) $(if $(filter 1,$V),-V 3) -c $(RELX_CONFIG) $(RELX_OPTS) tar
  38. endif
  39. relx-relup: $(RELX) rel-deps app
  40. $(verbose) $(RELX) $(if $(filter 1,$V),-V 3) -c $(RELX_CONFIG) $(RELX_OPTS) release
  41. $(MAKE) relx-post-rel
  42. $(verbose) $(RELX) $(if $(filter 1,$V),-V 3) -c $(RELX_CONFIG) $(RELX_OPTS) relup $(if $(filter 1,$(RELX_TAR)),tar)
  43. distclean-relx-rel:
  44. $(gen_verbose) rm -rf $(RELX_OUTPUT_DIR)
  45. # Default hooks.
  46. relx-post-rel::
  47. $(verbose) :
  48. # Run target.
  49. ifeq ($(wildcard $(RELX_CONFIG)),)
  50. run::
  51. else
  52. define get_relx_release.erl
  53. {ok, Config} = file:consult("$(call core_native_path,$(RELX_CONFIG))"),
  54. {release, {Name, Vsn0}, _} = lists:keyfind(release, 1, Config),
  55. Vsn = case Vsn0 of
  56. {cmd, Cmd} -> os:cmd(Cmd);
  57. semver -> "";
  58. {semver, _} -> "";
  59. VsnStr -> Vsn0
  60. end,
  61. Extended = case lists:keyfind(extended_start_script, 1, Config) of
  62. {_, true} -> "1";
  63. _ -> ""
  64. end,
  65. io:format("~s ~s ~s", [Name, Vsn, Extended]),
  66. halt(0).
  67. endef
  68. RELX_REL := $(shell $(call erlang,$(get_relx_release.erl)))
  69. RELX_REL_NAME := $(word 1,$(RELX_REL))
  70. RELX_REL_VSN := $(word 2,$(RELX_REL))
  71. RELX_REL_CMD := $(if $(word 3,$(RELX_REL)),console)
  72. ifeq ($(PLATFORM),msys2)
  73. RELX_REL_EXT := .cmd
  74. endif
  75. run:: all
  76. $(verbose) $(RELX_OUTPUT_DIR)/$(RELX_REL_NAME)/bin/$(RELX_REL_NAME)$(RELX_REL_EXT) $(RELX_REL_CMD)
  77. ifdef RELOAD
  78. rel::
  79. $(verbose) $(RELX_OUTPUT_DIR)/$(RELX_REL_NAME)/bin/$(RELX_REL_NAME)$(RELX_REL_EXT) ping
  80. $(verbose) $(RELX_OUTPUT_DIR)/$(RELX_REL_NAME)/bin/$(RELX_REL_NAME)$(RELX_REL_EXT) \
  81. eval "io:format(\"~p~n\", [c:lm()])"
  82. endif
  83. help::
  84. $(verbose) printf "%s\n" "" \
  85. "Relx targets:" \
  86. " run Compile the project, build the release and run it"
  87. endif