download.mk 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. #
  2. # Copyright (C) 2006-2010 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://% file://%,$(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. $(if $(filter sftp://%,$(1)),bzr, \
  18. unknown \
  19. ) \
  20. ) \
  21. ) \
  22. ) \
  23. ) \
  24. ) \
  25. ) \
  26. )
  27. endef
  28. # code for creating tarballs from cvs/svn/git/bzr/hg checkouts - useful for mirror support
  29. dl_pack/bz2=$(TAR) cfj $(1) $(2)
  30. dl_pack/gz=$(TAR) cfz $(1) $(2)
  31. dl_pack/unknown=echo "ERROR: Unknown pack format for file $(1)"; false
  32. define dl_pack
  33. $(if $(dl_pack/$(call ext,$(1))),$(dl_pack/$(call ext,$(1))),$(dl_pack/unknown))
  34. endef
  35. define DownloadMethod/unknown
  36. @echo "ERROR: No download method available"; false
  37. endef
  38. define DownloadMethod/default
  39. $(SCRIPT_DIR)/download.pl "$(DL_DIR)" "$(FILE)" "$(MD5SUM)" $(URL)
  40. endef
  41. define wrap_mirror
  42. $(if $(MIRROR),@$(SCRIPT_DIR)/download.pl "$(DL_DIR)" "$(FILE)" "x" || ( $(1) ),$(1))
  43. endef
  44. define DownloadMethod/cvs
  45. $(call wrap_mirror, \
  46. echo "Checking out files from the cvs repository..."; \
  47. mkdir -p $(TMP_DIR)/dl && \
  48. cd $(TMP_DIR)/dl && \
  49. rm -rf $(SUBDIR) && \
  50. [ \! -d $(SUBDIR) ] && \
  51. cvs -d $(URL) export $(VERSION) $(SUBDIR) && \
  52. echo "Packing checkout..." && \
  53. $(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \
  54. mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \
  55. rm -rf $(SUBDIR); \
  56. )
  57. endef
  58. define DownloadMethod/svn
  59. $(call wrap_mirror, \
  60. echo "Checking out files from the svn repository..."; \
  61. mkdir -p $(TMP_DIR)/dl && \
  62. cd $(TMP_DIR)/dl && \
  63. rm -rf $(SUBDIR) && \
  64. [ \! -d $(SUBDIR) ] && \
  65. svn export --non-interactive --trust-server-cert -r$(VERSION) $(URL) $(SUBDIR) && \
  66. echo "Packing checkout..." && \
  67. $(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \
  68. mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \
  69. rm -rf $(SUBDIR); \
  70. )
  71. endef
  72. define DownloadMethod/git
  73. $(call wrap_mirror, \
  74. echo "Checking out files from the git repository..."; \
  75. mkdir -p $(TMP_DIR)/dl && \
  76. cd $(TMP_DIR)/dl && \
  77. rm -rf $(SUBDIR) && \
  78. [ \! -d $(SUBDIR) ] && \
  79. git clone $(URL) $(SUBDIR) && \
  80. (cd $(SUBDIR) && git checkout $(VERSION)) && \
  81. echo "Packing checkout..." && \
  82. rm -rf $(SUBDIR)/.git && \
  83. $(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \
  84. mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \
  85. rm -rf $(SUBDIR); \
  86. )
  87. endef
  88. define DownloadMethod/bzr
  89. $(call wrap_mirror, \
  90. echo "Checking out files from the bzr repository..."; \
  91. mkdir -p $(TMP_DIR)/dl && \
  92. cd $(TMP_DIR)/dl && \
  93. rm -rf $(SUBDIR) && \
  94. [ \! -d $(SUBDIR) ] && \
  95. bzr export -r$(VERSION) $(URL) $(SUBDIR) && \
  96. echo "Packing checkout..." && \
  97. $(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \
  98. mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ &&
  99. rm -rf $(SUBDIR); \
  100. )
  101. endef
  102. define DownloadMethod/hg
  103. $(call wrap_mirror, \
  104. echo "Checking out files from the hg repository..."; \
  105. mkdir -p $(TMP_DIR)/dl && \
  106. cd $(TMP_DIR)/dl && \
  107. rm -rf $(SUBDIR) && \
  108. [ \! -d $(SUBDIR) ] && \
  109. hg clone -r $(VERSION) $(URL) $(SUBDIR) && \
  110. find $(SUBDIR) -name .hg | xargs rm -rf && \
  111. echo "Packing checkout..." && \
  112. $(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \
  113. mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \
  114. rm -rf $(SUBDIR); \
  115. )
  116. endef
  117. Validate/cvs=VERSION SUBDIR
  118. Validate/svn=VERSION SUBDIR
  119. Validate/git=VERSION SUBDIR
  120. Validate/bzr=VERSION SUBDIR
  121. Validate/hg=VERSION SUBDIR
  122. define Download/Defaults
  123. URL:=
  124. FILE:=
  125. PROTO:=
  126. MD5SUM:=
  127. SUBDIR:=
  128. MIRROR:=1
  129. VERSION:=
  130. endef
  131. define Download
  132. $(eval $(Download/Defaults))
  133. $(eval $(Download/$(1)))
  134. $(foreach FIELD,URL FILE $(Validate/$(call dl_method,$(URL),$(PROTO))),
  135. ifeq ($($(FIELD)),)
  136. $$(error Download/$(1) is missing the $(FIELD) field.)
  137. endif
  138. )
  139. $(foreach dep,$(DOWNLOAD_RDEP),
  140. $(dep): $(DL_DIR)/$(FILE)
  141. )
  142. download: $(DL_DIR)/$(FILE)
  143. $(DL_DIR)/$(FILE):
  144. mkdir -p $(DL_DIR)
  145. $(if $(DownloadMethod/$(call dl_method,$(URL),$(PROTO))),$(DownloadMethod/$(call dl_method,$(URL),$(PROTO))),$(DownloadMethod/unknown))
  146. endef