download.mk 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. #
  2. # Copyright (C) 2007 OpenWrt.org
  3. #
  4. # This is free software, licensed under the GNU General Public License v2.
  5. # See /LICENSE for more information.
  6. #
  7. DOWNLOAD_RDEP=$(STAMP_PREPARED) $(HOST_STAMP_PREPARED)
  8. # Try to guess the download method from the URL
  9. define dl_method
  10. $(strip \
  11. $(if $(2),$(2), \
  12. $(if $(filter @GNOME/% @GNU/% @KERNEL/% @SF/% ftp://% http://%,$(1)),default, \
  13. $(if $(filter git://%,$(1)),git, \
  14. $(if $(filter svn://%,$(1)),svn, \
  15. $(if $(filter cvs://%,$(1)),cvs, \
  16. $(if $(filter hg://%,$(1)),hg, \
  17. unknown \
  18. ) \
  19. ) \
  20. ) \
  21. ) \
  22. ) \
  23. ) \
  24. )
  25. endef
  26. # code for creating tarballs from cvs/svn/git/hg checkouts - useful for mirror support
  27. dl_pack/bz2=$(TAR) cfj $(1) $(2)
  28. dl_pack/gz=$(TAR) cfz $(1) $(2)
  29. dl_pack/unknown=echo "ERROR: Unknown pack format for file $(1)"; false
  30. define dl_pack
  31. $(if $(dl_pack/$(call ext,$(1))),$(dl_pack/$(call ext,$(1))),$(dl_pack/unknown))
  32. endef
  33. define DownloadMethod/unknown
  34. @echo "ERROR: No download method available"; false
  35. endef
  36. define DownloadMethod/default
  37. $(SCRIPT_DIR)/download.pl "$(DL_DIR)" "$(FILE)" "$(MD5SUM)" $(URL)
  38. endef
  39. define wrap_mirror
  40. $(if $(MIRROR),@$(SCRIPT_DIR)/download.pl "$(DL_DIR)" "$(FILE)" "x" || ( $(1) ),$(1))
  41. endef
  42. define DownloadMethod/cvs
  43. $(call wrap_mirror, \
  44. echo "Checking out files from the cvs repository..."; \
  45. mkdir -p $(TMP_DIR)/dl && \
  46. cd $(TMP_DIR)/dl && \
  47. rm -rf $(SUBDIR) && \
  48. [ \! -d $(SUBDIR) ] && \
  49. cvs -d $(URL) co $(VERSION) $(SUBDIR) && \
  50. find $(SUBDIR) -name CVS | xargs rm -rf && \
  51. echo "Packing checkout..." && \
  52. $(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \
  53. mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/; \
  54. )
  55. endef
  56. define DownloadMethod/svn
  57. $(call wrap_mirror, \
  58. echo "Checking out files from the svn repository..."; \
  59. mkdir -p $(TMP_DIR)/dl && \
  60. cd $(TMP_DIR)/dl && \
  61. rm -rf $(SUBDIR) && \
  62. [ \! -d $(SUBDIR) ] && \
  63. svn co --non-interactive -r$(VERSION) $(URL) $(SUBDIR) && \
  64. find $(SUBDIR) -name .svn | xargs rm -rf && \
  65. echo "Packing checkout..." && \
  66. $(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \
  67. mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/; \
  68. )
  69. endef
  70. define DownloadMethod/git
  71. $(call wrap_mirror, \
  72. echo "Checking out files from the git repository..."; \
  73. mkdir -p $(TMP_DIR)/dl && \
  74. cd $(TMP_DIR)/dl && \
  75. rm -rf $(SUBDIR) && \
  76. [ \! -d $(SUBDIR) ] && \
  77. git clone $(URL) $(SUBDIR) && \
  78. (cd $(SUBDIR) && git checkout $(VERSION)) && \
  79. echo "Packing checkout..." && \
  80. rm -rf $(SUBDIR)/.git && \
  81. $(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \
  82. mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/; \
  83. )
  84. endef
  85. define DownloadMethod/hg
  86. $(call wrap_mirror, \
  87. echo "Checking out files from the hg repository..."; \
  88. mkdir -p $(TMP_DIR)/dl && \
  89. cd $(TMP_DIR)/dl && \
  90. rm -rf $(SUBDIR) && \
  91. [ \! -d $(SUBDIR) ] && \
  92. hg clone -r $(VERSION) $(URL) $(SUBDIR) && \
  93. find $(SUBDIR) -name .hg | xargs rm -rf && \
  94. echo "Packing checkout..." && \
  95. $(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \
  96. mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/; \
  97. )
  98. endef
  99. Validate/cvs=VERSION SUBDIR
  100. Validate/svn=VERSION SUBDIR
  101. Validate/git=VERSION SUBDIR
  102. Validate/hg=VERSION SUBDIR
  103. define Download/Defaults
  104. URL:=
  105. FILE:=
  106. PROTO:=
  107. MD5SUM:=
  108. SUBDIR:=
  109. MIRROR:=1
  110. VERSION:=
  111. endef
  112. define Download
  113. $(eval $(Download/Defaults))
  114. $(eval $(Download/$(1)))
  115. $(foreach FIELD,URL FILE $(Validate/$(call dl_method,$(URL),$(PROTO))),
  116. ifeq ($($(FIELD)),)
  117. $$(error Download/$(1) is missing the $(FIELD) field.)
  118. endif
  119. )
  120. $(foreach dep,$(DOWNLOAD_RDEP),
  121. $(dep): $(DL_DIR)/$(FILE)
  122. )
  123. download: $(DL_DIR)/$(FILE)
  124. $(DL_DIR)/$(FILE):
  125. mkdir -p $(DL_DIR)
  126. $(if $(DownloadMethod/$(call dl_method,$(URL),$(PROTO))),$(DownloadMethod/$(call dl_method,$(URL),$(PROTO))),$(DownloadMethod/unknown))
  127. endef