download.mk 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. #
  2. # Copyright (C) 2006-2012 OpenWrt.org
  3. # Copyright (C) 2016 LEDE project
  4. #
  5. # This is free software, licensed under the GNU General Public License v2.
  6. # See /LICENSE for more information.
  7. #
  8. OPENWRT_GIT = http://git.openwrt.org
  9. LEDE_GIT = https://git.lede-project.org
  10. DOWNLOAD_RDEP=$(STAMP_PREPARED) $(HOST_STAMP_PREPARED)
  11. # Try to guess the download method from the URL
  12. define dl_method
  13. $(strip \
  14. $(if $(2),$(2), \
  15. $(if $(filter @APACHE/% @GITHUB/% @GNOME/% @GNU/% @KERNEL_LIBRE/% @KERNEL/% @SF/% @SAVANNAH/% ftp://% http://% https://% file://%,$(1)),default, \
  16. $(if $(filter git://%,$(1)),git, \
  17. $(if $(filter svn://%,$(1)),svn, \
  18. $(if $(filter cvs://%,$(1)),cvs, \
  19. $(if $(filter hg://%,$(1)),hg, \
  20. $(if $(filter sftp://%,$(1)),bzr, \
  21. unknown \
  22. ) \
  23. ) \
  24. ) \
  25. ) \
  26. ) \
  27. ) \
  28. ) \
  29. )
  30. endef
  31. # code for creating tarballs from cvs/svn/git/bzr/hg/darcs checkouts - useful for mirror support
  32. dl_pack/bz2=$(TAR) --owner=0 --group=0 --sort=name $$$${TAR_TIMESTAMP:+--mtime="$$$$TAR_TIMESTAMP"} -cjf $(1) $(2)
  33. dl_pack/gz=$(TAR) --owner=0 --group=0 --sort=name $$$${TAR_TIMESTAMP:+--mtime="$$$$TAR_TIMESTAMP"} -c $(2) | gzip -nc > $(1)
  34. dl_pack/xz=$(TAR) --owner=0 --group=0 --sort=name $$$${TAR_TIMESTAMP:+--mtime="$$$$TAR_TIMESTAMP"} -c $(2) | xz -zc -7e > $(1)
  35. dl_pack/unknown=echo "ERROR: Unknown pack format for file $(1)"; false
  36. define dl_pack
  37. $(if $(dl_pack/$(call ext,$(1))),$(dl_pack/$(call ext,$(1))),$(dl_pack/unknown))
  38. endef
  39. define DownloadMethod/unknown
  40. @echo "ERROR: No download method available"; false
  41. endef
  42. define DownloadMethod/default
  43. $(SCRIPT_DIR)/download.pl "$(DL_DIR)" "$(FILE)" "$(MD5SUM)" "$(URL_FILE)" $(foreach url,$(URL),"$(url)")
  44. endef
  45. define wrap_mirror
  46. $(if $(if $(MIRROR),$(filter-out x,$(MIRROR_MD5SUM))),$(SCRIPT_DIR)/download.pl "$(DL_DIR)" "$(FILE)" "$(MIRROR_MD5SUM)" "" || ( $(1) ),$(1))
  47. endef
  48. define DownloadMethod/cvs
  49. $(call wrap_mirror, \
  50. echo "Checking out files from the cvs repository..."; \
  51. mkdir -p $(TMP_DIR)/dl && \
  52. cd $(TMP_DIR)/dl && \
  53. rm -rf $(SUBDIR) && \
  54. [ \! -d $(SUBDIR) ] && \
  55. cvs -d $(URL) export $(VERSION) $(SUBDIR) && \
  56. echo "Packing checkout..." && \
  57. $(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \
  58. mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \
  59. rm -rf $(SUBDIR); \
  60. )
  61. endef
  62. define DownloadMethod/svn
  63. $(call wrap_mirror, \
  64. echo "Checking out files from the svn repository..."; \
  65. mkdir -p $(TMP_DIR)/dl && \
  66. cd $(TMP_DIR)/dl && \
  67. rm -rf $(SUBDIR) && \
  68. [ \! -d $(SUBDIR) ] && \
  69. ( svn help export | grep -q trust-server-cert && \
  70. svn export --non-interactive --trust-server-cert -r$(VERSION) $(URL) $(SUBDIR) || \
  71. svn export --non-interactive -r$(VERSION) $(URL) $(SUBDIR) ) && \
  72. echo "Packing checkout..." && \
  73. export TAR_TIMESTAMP="" && \
  74. $(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \
  75. mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \
  76. rm -rf $(SUBDIR); \
  77. )
  78. endef
  79. define DownloadMethod/git
  80. $(call wrap_mirror, \
  81. echo "Checking out files from the git repository..."; \
  82. mkdir -p $(TMP_DIR)/dl && \
  83. cd $(TMP_DIR)/dl && \
  84. rm -rf $(SUBDIR) && \
  85. [ \! -d $(SUBDIR) ] && \
  86. git clone $(OPTS) $(URL) $(SUBDIR) && \
  87. (cd $(SUBDIR) && git checkout $(VERSION) && \
  88. git submodule update --init --recursive) && \
  89. echo "Packing checkout..." && \
  90. export TAR_TIMESTAMP=`cd $(SUBDIR) && git log -1 --format='@%ct'` && \
  91. rm -rf $(SUBDIR)/.git && \
  92. $(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \
  93. mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \
  94. rm -rf $(SUBDIR); \
  95. )
  96. endef
  97. define DownloadMethod/bzr
  98. $(call wrap_mirror, \
  99. echo "Checking out files from the bzr repository..."; \
  100. mkdir -p $(TMP_DIR)/dl && \
  101. cd $(TMP_DIR)/dl && \
  102. rm -rf $(SUBDIR) && \
  103. [ \! -d $(SUBDIR) ] && \
  104. bzr export --per-file-timestamps -r$(VERSION) $(SUBDIR) $(URL) && \
  105. echo "Packing checkout..." && \
  106. export TAR_TIMESTAMP="" && \
  107. $(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \
  108. mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \
  109. rm -rf $(SUBDIR); \
  110. )
  111. endef
  112. define DownloadMethod/hg
  113. $(call wrap_mirror, \
  114. echo "Checking out files from the hg repository..."; \
  115. mkdir -p $(TMP_DIR)/dl && \
  116. cd $(TMP_DIR)/dl && \
  117. rm -rf $(SUBDIR) && \
  118. [ \! -d $(SUBDIR) ] && \
  119. hg clone -r $(VERSION) $(URL) $(SUBDIR) && \
  120. export TAR_TIMESTAMP=`cd $(SUBDIR) && hg log --template '@{date}' -l 1` && \
  121. find $(SUBDIR) -name .hg | xargs rm -rf && \
  122. echo "Packing checkout..." && \
  123. $(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \
  124. mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \
  125. rm -rf $(SUBDIR); \
  126. )
  127. endef
  128. define DownloadMethod/darcs
  129. $(call wrap_mirror, \
  130. echo "Checking out files from the darcs repository..."; \
  131. mkdir -p $(TMP_DIR)/dl && \
  132. cd $(TMP_DIR)/dl && \
  133. rm -rf $(SUBDIR) && \
  134. [ \! -d $(SUBDIR) ] && \
  135. darcs get -t $(VERSION) $(URL) $(SUBDIR) && \
  136. export TAR_TIMESTAMP=`cd $(SUBDIR) && LC_ALL=C darcs log --last 1 | sed -ne 's!^Date: \+!!p'` && \
  137. find $(SUBDIR) -name _darcs | xargs rm -rf && \
  138. echo "Packing checkout..." && \
  139. $(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \
  140. mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \
  141. rm -rf $(SUBDIR); \
  142. )
  143. endef
  144. Validate/cvs=VERSION SUBDIR
  145. Validate/svn=VERSION SUBDIR
  146. Validate/git=VERSION SUBDIR
  147. Validate/bzr=VERSION SUBDIR
  148. Validate/hg=VERSION SUBDIR
  149. Validate/darcs=VERSION SUBDIR
  150. define Download/Defaults
  151. URL:=
  152. FILE:=
  153. URL_FILE:=
  154. PROTO:=
  155. MD5SUM:=
  156. SUBDIR:=
  157. MIRROR:=1
  158. MIRROR_MD5SUM:=x
  159. VERSION:=
  160. OPTS:=
  161. endef
  162. define Download
  163. $(eval $(Download/Defaults))
  164. $(eval $(Download/$(1)))
  165. $(foreach FIELD,URL FILE $(Validate/$(call dl_method,$(URL),$(PROTO))),
  166. ifeq ($($(FIELD)),)
  167. $$(error Download/$(1) is missing the $(FIELD) field.)
  168. endif
  169. )
  170. $(foreach dep,$(DOWNLOAD_RDEP),
  171. $(dep): $(DL_DIR)/$(FILE)
  172. )
  173. download: $(DL_DIR)/$(FILE)
  174. $(DL_DIR)/$(FILE):
  175. mkdir -p $(DL_DIR)
  176. $(call locked,$(if $(DownloadMethod/$(call dl_method,$(URL),$(PROTO))),$(DownloadMethod/$(call dl_method,$(URL),$(PROTO))),$(DownloadMethod/unknown)),$(FILE))
  177. endef