From dbeb0fad24ac37bc07e21e1cac4d372493f4fb28 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Sat, 29 Sep 2007 00:05:48 +0000 Subject: Refactor downloading code into download.mk Support multiple file downloads Support svn downloads SVN-Revision: 9057 --- include/download.mk | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 include/download.mk (limited to 'include/download.mk') diff --git a/include/download.mk b/include/download.mk new file mode 100644 index 0000000000..1f227e221c --- /dev/null +++ b/include/download.mk @@ -0,0 +1,90 @@ +# +# Copyright (C) 2007 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +DOWNLOAD_RDEP:=$(STAMP_PREPARED) + +# Try to guess the download method from the URL +define dl_method +$(strip \ + $(if $(2),$(2), \ + $(if $(filter @GNU/% @KERNEL/% @SF/% ftp://% http://%,$(1)),default, \ + $(if $(filter git://%,$(1)),git, \ + $(if $(filter svn://%,$(1)),svn, \ + unknown \ + ) \ + ) \ + ) \ + ) \ +) +endef + +# code for creating tarballs from svn/git checkouts - useful for mirror support +dl_pack/bz2=tar cfj $(1) $(2) +dl_pack/gz=tar cfz $(1) $(2) +dl_pack/unknown=echo "ERROR: Unknown pack format for file $(1)"; false +define dl_pack + $(if $(dl_pack/$(call ext,$(1))),$(dl_pack/$(call ext,$(1))),$(dl_pack/unknown)) +endef + +define DownloadMethod/unknown + @echo "ERROR: No download method available"; false +endef + +define DownloadMethod/default + $(SCRIPT_DIR)/download.pl "$(DL_DIR)" "$(FILE)" "$(MD5SUM)" $(URL) +endef + +define wrap_mirror + @$(if $(CONFIG_LOCALMIRROR),$(SCRIPT_DIR)/download.pl "$(DL_DIR)" "$(FILE)" "x" || ) \ + ( $(1) ) \ + $(if $(CONFIG_LOCALMIRROR),, || $(SCRIPT_DIR)/download.pl "$(DL_DIR)" "$(FILE)" "x") +endef + +define DownloadMethod/svn + $(call wrap_mirror, \ + echo "Checking out files from svn repository..."; \ + mkdir -p $(TMP_DIR)/dl && \ + cd $(TMP_DIR)/dl && \ + rm -rf $(SUBDIR) && \ + [ \! -d $(SUBDIR) ] && \ + svn co -r$(VERSION) $(URL) $(SUBDIR) && \ + find $(SUBDIR) -name .svn | xargs rm -rf && \ + echo "Packing checkout..." && \ + $(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \ + mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/; \ + ) +endef + +Validate/svn=VERSION SUBDIR +#Validate/git=VERSION SUBDIR + +define Download/Defaults + URL:= + FILE:= + PROTO:= + MD5SUM:= + SUBDIR:= + VERSION:= +endef + +define Download + $(eval $(Download/Defaults)) + $(eval $(Download/$(1))) + $(foreach FIELD,URL FILE $(Validate/$(call dl_method,$(URL),$(PROTO))), + ifeq ($($(FIELD)),) + $$(error Download/$(1) is missing the $(FIELD) field.) + endif + ) + + $(if $(DOWNLOAD_RDEP),$(DOWNLOAD_RDEP): $(DL_DIR)/$(FILE)) + download: $(DL_DIR)/$(FILE) + + $(DL_DIR)/$(FILE): + mkdir -p $(DL_DIR) + $(if $(DownloadMethod/$(call dl_method,$(URL),$(PROTO))),$(DownloadMethod/$(call dl_method,$(URL),$(PROTO))),$(DownloadMethod/unknown)) + +endef -- cgit v1.2.3