relx.mk 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  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. ifeq ($(filter relx,$(BUILD_DEPS) $(DEPS) $(REL_DEPS)),relx)
  4. .PHONY: relx-rel relx-relup distclean-relx-rel run
  5. # Configuration.
  6. #RELX ?= $(ERLANG_MK_TMP)/relx
  7. RELX_CONFIG ?= $(CURDIR)/relx.config
  8. #RELX_URL ?= https://erlang.mk/res/relx-v3.27.0-22
  9. #RELX_OPTS ?=
  10. RELX_OUTPUT_DIR ?= _rel
  11. RELX_REL_EXT ?=
  12. RELX_TAR ?= 1
  13. ifdef SFX
  14. RELX_TAR = 1
  15. endif
  16. #ifeq ($(firstword $(RELX_OPTS)),-o)
  17. # RELX_OUTPUT_DIR = $(word 2,$(RELX_OPTS))
  18. #else
  19. # RELX_OPTS += -o $(RELX_OUTPUT_DIR)
  20. #endif
  21. # Core targets.
  22. ifeq ($(IS_DEP),)
  23. ifneq ($(wildcard $(RELX_CONFIG)),)
  24. rel:: relx-rel
  25. relup:: relx-relup
  26. endif
  27. endif
  28. distclean:: distclean-relx-rel
  29. # Plugin-specific targets.
  30. #$(RELX): | $(ERLANG_MK_TMP)
  31. # $(gen_verbose) $(call core_http_get,$(RELX),$(RELX_URL))
  32. # $(verbose) chmod +x $(RELX)
  33. define relx_release.erl
  34. {ok, Config} = file:consult("$(call core_native_path,$(RELX_CONFIG))"),
  35. {release, {Name, Vsn0}, _} = lists:keyfind(release, 1, Config),
  36. Vsn = case Vsn0 of
  37. {cmd, Cmd} -> os:cmd(Cmd);
  38. semver -> "";
  39. {semver, _} -> "";
  40. VsnStr -> Vsn0
  41. end,
  42. {ok, _} = relx:build_release(#{name => Name, vsn => Vsn}, Config),
  43. halt(0).
  44. endef
  45. define relx_tar.erl
  46. {ok, Config} = file:consult("$(call core_native_path,$(RELX_CONFIG))"),
  47. {release, {Name, Vsn0}, _} = lists:keyfind(release, 1, Config),
  48. Vsn = case Vsn0 of
  49. {cmd, Cmd} -> os:cmd(Cmd);
  50. semver -> "";
  51. {semver, _} -> "";
  52. VsnStr -> Vsn0
  53. end,
  54. {ok, _} = relx:build_tar(#{name => Name, vsn => Vsn}, Config),
  55. halt(0).
  56. endef
  57. define relx_relup.erl
  58. {ok, Config} = file:consult("$(call core_native_path,$(RELX_CONFIG))"),
  59. {release, {Name, Vsn0}, _} = lists:keyfind(release, 1, Config),
  60. Vsn = case Vsn0 of
  61. {cmd, Cmd} -> os:cmd(Cmd);
  62. semver -> "";
  63. {semver, _} -> "";
  64. VsnStr -> Vsn0
  65. end,
  66. io:format("~p~n~n", [Vsn]),
  67. {ok, _} = relx:build_relup(Name, Vsn, undefined, Config ++ [{output_dir, "$(RELX_OUTPUT_DIR)"}]),
  68. halt(0).
  69. endef
  70. relx-rel: rel-deps app
  71. # $(verbose) $(RELX) $(if $(filter 1,$V),-V 3) -c $(RELX_CONFIG) $(RELX_OPTS) release
  72. $(call erlang,$(call relx_release.erl),-pa ebin/)
  73. $(verbose) $(MAKE) relx-post-rel
  74. ifeq ($(RELX_TAR),1)
  75. # $(verbose) touch $(RELX_OUTPUT_DIR)/$(PROJECT)_release/releases/RELEASES
  76. # $(verbose) $(RELX) $(if $(filter 1,$V),-V 3) -c $(RELX_CONFIG) $(RELX_OPTS) tar
  77. $(call erlang,$(call relx_tar.erl),-pa ebin/)
  78. endif
  79. relx-relup: rel-deps app
  80. # $(verbose) $(RELX) $(if $(filter 1,$V),-V 3) -c $(RELX_CONFIG) $(RELX_OPTS) release
  81. $(call erlang,$(call relx_release.erl),-pa ebin/)
  82. $(MAKE) relx-post-rel
  83. # $(verbose) $(RELX) $(if $(filter 1,$V),-V 3) -c $(RELX_CONFIG) $(RELX_OPTS) relup $(if $(filter 1,$(RELX_TAR)),tar)
  84. $(call erlang,$(call relx_relup.erl),-pa ebin/)
  85. ifeq ($(RELX_TAR),1)
  86. $(call erlang,$(call relx_tar.erl),-pa ebin/)
  87. endif
  88. distclean-relx-rel:
  89. $(gen_verbose) rm -rf $(RELX_OUTPUT_DIR)
  90. # Default hooks.
  91. relx-post-rel::
  92. $(verbose) :
  93. # Run target.
  94. ifeq ($(wildcard $(RELX_CONFIG)),)
  95. run::
  96. else
  97. define get_relx_release.erl
  98. {ok, Config} = file:consult("$(call core_native_path,$(RELX_CONFIG))"),
  99. {release, {Name, Vsn0}, _} = lists:keyfind(release, 1, Config),
  100. Vsn = case Vsn0 of
  101. {cmd, Cmd} -> os:cmd(Cmd);
  102. semver -> "";
  103. {semver, _} -> "";
  104. VsnStr -> Vsn0
  105. end,
  106. Extended = case lists:keyfind(extended_start_script, 1, Config) of
  107. {_, true} -> "1";
  108. _ -> ""
  109. end,
  110. io:format("~s ~s ~s", [Name, Vsn, Extended]),
  111. halt(0).
  112. endef
  113. RELX_REL := $(shell $(call erlang,$(get_relx_release.erl)))
  114. RELX_REL_NAME := $(word 1,$(RELX_REL))
  115. RELX_REL_VSN := $(word 2,$(RELX_REL))
  116. RELX_REL_CMD := $(if $(word 3,$(RELX_REL)),console)
  117. ifeq ($(PLATFORM),msys2)
  118. RELX_REL_EXT := .cmd
  119. endif
  120. run:: all
  121. $(verbose) $(RELX_OUTPUT_DIR)/$(RELX_REL_NAME)/bin/$(RELX_REL_NAME)$(RELX_REL_EXT) $(RELX_REL_CMD)
  122. ifdef RELOAD
  123. rel::
  124. $(verbose) $(RELX_OUTPUT_DIR)/$(RELX_REL_NAME)/bin/$(RELX_REL_NAME)$(RELX_REL_EXT) ping
  125. $(verbose) $(RELX_OUTPUT_DIR)/$(RELX_REL_NAME)/bin/$(RELX_REL_NAME)$(RELX_REL_EXT) \
  126. eval "io:format(\"~p~n\", [c:lm()])"
  127. endif
  128. help::
  129. $(verbose) printf "%s\n" "" \
  130. "Relx targets:" \
  131. " run Compile the project, build the release and run it"
  132. endif
  133. endif