download.mk 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  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)
  8. # Try to guess the download method from the URL
  9. define dl_method
  10. $(strip \
  11. $(if $(2),$(2), \
  12. $(if $(filter @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. unknown \
  17. ) \
  18. ) \
  19. ) \
  20. ) \
  21. ) \
  22. )
  23. endef
  24. # code for creating tarballs from cvs/svn/git checkouts - useful for mirror support
  25. dl_pack/bz2=$(TAR) cfj $(1) $(2)
  26. dl_pack/gz=$(TAR) cfz $(1) $(2)
  27. dl_pack/unknown=echo "ERROR: Unknown pack format for file $(1)"; false
  28. define dl_pack
  29. $(if $(dl_pack/$(call ext,$(1))),$(dl_pack/$(call ext,$(1))),$(dl_pack/unknown))
  30. endef
  31. define DownloadMethod/unknown
  32. @echo "ERROR: No download method available"; false
  33. endef
  34. define DownloadMethod/default
  35. $(SCRIPT_DIR)/download.pl "$(DL_DIR)" "$(FILE)" "$(MD5SUM)" $(URL)
  36. endef
  37. define wrap_mirror
  38. @$(SCRIPT_DIR)/download.pl "$(DL_DIR)" "$(FILE)" "x" || ( $(1) )
  39. endef
  40. define DownloadMethod/cvs
  41. $(call wrap_mirror, \
  42. echo "Checking out files from the cvs repository..."; \
  43. mkdir -p $(TMP_DIR)/dl && \
  44. cd $(TMP_DIR)/dl && \
  45. rm -rf $(SUBDIR) && \
  46. [ \! -d $(SUBDIR) ] && \
  47. cvs co -r$(VERSION) $(URL) $(SUBDIR) && \
  48. find $(SUBDIR) -name CVS | xargs rm -rf && \
  49. echo "Packing checkout..." && \
  50. $(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \
  51. mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/; \
  52. )
  53. endef
  54. define DownloadMethod/svn
  55. $(call wrap_mirror, \
  56. echo "Checking out files from the svn repository..."; \
  57. mkdir -p $(TMP_DIR)/dl && \
  58. cd $(TMP_DIR)/dl && \
  59. rm -rf $(SUBDIR) && \
  60. [ \! -d $(SUBDIR) ] && \
  61. svn co -r$(VERSION) $(URL) $(SUBDIR) && \
  62. find $(SUBDIR) -name .svn | xargs rm -rf && \
  63. echo "Packing checkout..." && \
  64. $(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \
  65. mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/; \
  66. )
  67. endef
  68. define DownloadMethod/git
  69. $(call wrap_mirror, \
  70. echo "Checking out files from the git repository..."; \
  71. mkdir -p $(TMP_DIR)/dl && \
  72. cd $(TMP_DIR)/dl && \
  73. rm -rf $(SUBDIR) && \
  74. [ \! -d $(SUBDIR) ] && \
  75. git-clone $(URL) $(SUBDIR) && \
  76. (cd $(SUBDIR) && git-checkout $(VERSION)) && \
  77. echo "Packing checkout..." && \
  78. rm -rf $(SUBDIR)/.git && \
  79. $(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \
  80. mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/; \
  81. )
  82. endef
  83. Validate/cvs=VERSION SUBDIR
  84. Validate/svn=VERSION SUBDIR
  85. Validate/git=VERSION SUBDIR
  86. define Download/Defaults
  87. URL:=
  88. FILE:=
  89. PROTO:=
  90. MD5SUM:=
  91. SUBDIR:=
  92. VERSION:=
  93. endef
  94. define Download
  95. $(eval $(Download/Defaults))
  96. $(eval $(Download/$(1)))
  97. $(foreach FIELD,URL FILE $(Validate/$(call dl_method,$(URL),$(PROTO))),
  98. ifeq ($($(FIELD)),)
  99. $$(error Download/$(1) is missing the $(FIELD) field.)
  100. endif
  101. )
  102. $(if $(DOWNLOAD_RDEP),$(DOWNLOAD_RDEP): $(DL_DIR)/$(FILE))
  103. download: $(DL_DIR)/$(FILE)
  104. $(DL_DIR)/$(FILE):
  105. mkdir -p $(DL_DIR)
  106. $(if $(DownloadMethod/$(call dl_method,$(URL),$(PROTO))),$(DownloadMethod/$(call dl_method,$(URL),$(PROTO))),$(DownloadMethod/unknown))
  107. endef