deps-tools.mk 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. # Copyright (c) 2013-2015, Loïc Hoguin <essen@ninenines.eu>
  2. # Copyright (c) 2015-2016, Jean-Sébastien Pédron <jean-sebastien@rabbitmq.com>
  3. # This file is part of erlang.mk and subject to the terms of the ISC License.
  4. # Fetch dependencies recursively (without building them).
  5. .PHONY: fetch-deps fetch-doc-deps fetch-rel-deps fetch-test-deps \
  6. fetch-shell-deps
  7. .PHONY: $(ERLANG_MK_RECURSIVE_DEPS_LIST) \
  8. $(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST) \
  9. $(ERLANG_MK_RECURSIVE_REL_DEPS_LIST) \
  10. $(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) \
  11. $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST)
  12. fetch-deps: $(ERLANG_MK_RECURSIVE_DEPS_LIST)
  13. fetch-doc-deps: $(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST)
  14. fetch-rel-deps: $(ERLANG_MK_RECURSIVE_REL_DEPS_LIST)
  15. fetch-test-deps: $(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST)
  16. fetch-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST)
  17. ifneq ($(SKIP_DEPS),)
  18. $(ERLANG_MK_RECURSIVE_DEPS_LIST) \
  19. $(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST) \
  20. $(ERLANG_MK_RECURSIVE_REL_DEPS_LIST) \
  21. $(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) \
  22. $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST):
  23. $(verbose) :> $@
  24. else
  25. # By default, we fetch "normal" dependencies. They are also included no
  26. # matter the type of requested dependencies.
  27. #
  28. # $(ALL_DEPS_DIRS) includes $(BUILD_DEPS).
  29. $(ERLANG_MK_RECURSIVE_DEPS_LIST): $(LOCAL_DEPS_DIRS) $(ALL_DEPS_DIRS)
  30. $(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST): $(LOCAL_DEPS_DIRS) $(ALL_DEPS_DIRS) $(ALL_DOC_DEPS_DIRS)
  31. $(ERLANG_MK_RECURSIVE_REL_DEPS_LIST): $(LOCAL_DEPS_DIRS) $(ALL_DEPS_DIRS) $(ALL_REL_DEPS_DIRS)
  32. $(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST): $(LOCAL_DEPS_DIRS) $(ALL_DEPS_DIRS) $(ALL_TEST_DEPS_DIRS)
  33. $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST): $(LOCAL_DEPS_DIRS) $(ALL_DEPS_DIRS) $(ALL_SHELL_DEPS_DIRS)
  34. # Allow to use fetch-deps and $(DEP_TYPES) to fetch multiple types of
  35. # dependencies with a single target.
  36. ifneq ($(filter doc,$(DEP_TYPES)),)
  37. $(ERLANG_MK_RECURSIVE_DEPS_LIST): $(ALL_DOC_DEPS_DIRS)
  38. endif
  39. ifneq ($(filter rel,$(DEP_TYPES)),)
  40. $(ERLANG_MK_RECURSIVE_DEPS_LIST): $(ALL_REL_DEPS_DIRS)
  41. endif
  42. ifneq ($(filter test,$(DEP_TYPES)),)
  43. $(ERLANG_MK_RECURSIVE_DEPS_LIST): $(ALL_TEST_DEPS_DIRS)
  44. endif
  45. ifneq ($(filter shell,$(DEP_TYPES)),)
  46. $(ERLANG_MK_RECURSIVE_DEPS_LIST): $(ALL_SHELL_DEPS_DIRS)
  47. endif
  48. ERLANG_MK_RECURSIVE_TMP_LIST := $(abspath $(ERLANG_MK_TMP)/recursive-tmp-deps-$(shell echo $$PPID).log)
  49. $(ERLANG_MK_RECURSIVE_DEPS_LIST) \
  50. $(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST) \
  51. $(ERLANG_MK_RECURSIVE_REL_DEPS_LIST) \
  52. $(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) \
  53. $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST): | $(ERLANG_MK_TMP)
  54. ifeq ($(IS_APP)$(IS_DEP),)
  55. $(verbose) rm -f $(ERLANG_MK_RECURSIVE_TMP_LIST)
  56. endif
  57. $(verbose) touch $(ERLANG_MK_RECURSIVE_TMP_LIST)
  58. $(verbose) set -e; for dep in $^ ; do \
  59. if ! grep -qs ^$$dep$$ $(ERLANG_MK_RECURSIVE_TMP_LIST); then \
  60. echo $$dep >> $(ERLANG_MK_RECURSIVE_TMP_LIST); \
  61. if grep -qs -E "^[[:blank:]]*include[[:blank:]]+(erlang\.mk|.*/erlang\.mk|.*ERLANG_MK_FILENAME.*)$$" \
  62. $$dep/GNUmakefile $$dep/makefile $$dep/Makefile; then \
  63. $(MAKE) -C $$dep fetch-deps \
  64. IS_DEP=1 \
  65. ERLANG_MK_RECURSIVE_TMP_LIST=$(ERLANG_MK_RECURSIVE_TMP_LIST); \
  66. fi \
  67. fi \
  68. done
  69. ifeq ($(IS_APP)$(IS_DEP),)
  70. $(verbose) sort < $(ERLANG_MK_RECURSIVE_TMP_LIST) | \
  71. uniq > $(ERLANG_MK_RECURSIVE_TMP_LIST).sorted
  72. $(verbose) cmp -s $(ERLANG_MK_RECURSIVE_TMP_LIST).sorted $@ \
  73. || mv $(ERLANG_MK_RECURSIVE_TMP_LIST).sorted $@
  74. $(verbose) rm -f $(ERLANG_MK_RECURSIVE_TMP_LIST).sorted
  75. $(verbose) rm $(ERLANG_MK_RECURSIVE_TMP_LIST)
  76. endif
  77. endif # ifneq ($(SKIP_DEPS),)
  78. # List dependencies recursively.
  79. .PHONY: list-deps list-doc-deps list-rel-deps list-test-deps \
  80. list-shell-deps
  81. list-deps: $(ERLANG_MK_RECURSIVE_DEPS_LIST)
  82. list-doc-deps: $(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST)
  83. list-rel-deps: $(ERLANG_MK_RECURSIVE_REL_DEPS_LIST)
  84. list-test-deps: $(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST)
  85. list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST)
  86. list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps:
  87. $(verbose) cat $^
  88. # Query dependencies recursively.
  89. .PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \
  90. query-shell-deps
  91. QUERY ?= name fetch_method repo version
  92. define query_target
  93. $(1): $(2) clean-tmp-query.log
  94. ifeq ($(IS_APP)$(IS_DEP),)
  95. $(verbose) rm -f $(4)
  96. endif
  97. $(verbose) $(foreach dep,$(3),\
  98. echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;)
  99. $(if $(filter-out query-deps,$(1)),,\
  100. $(verbose) set -e; for dep in $(3) ; do \
  101. if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \
  102. :; \
  103. else \
  104. echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \
  105. $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \
  106. fi \
  107. done)
  108. ifeq ($(IS_APP)$(IS_DEP),)
  109. $(verbose) touch $(4)
  110. $(verbose) cat $(4)
  111. endif
  112. endef
  113. clean-tmp-query.log:
  114. ifeq ($(IS_DEP),)
  115. $(verbose) rm -f $(ERLANG_MK_TMP)/query.log
  116. endif
  117. $(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE)))
  118. $(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE)))
  119. $(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE)))
  120. $(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE)))
  121. $(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE)))