1# 2# Copyright (C) 2006-2012 OpenWrt.org 3# 4# This is free software, licensed under the GNU General Public License v2. 5# See /LICENSE for more information. 6# 7 8OPENWRT_GIT = http://git.openwrt.org 9 10ifdef PKG_SOURCE_VERSION 11PKG_VERSION ?= $(if $(PKG_SOURCE_DATE),$(PKG_SOURCE_DATE)-)$(call version_abbrev,$(PKG_SOURCE_VERSION)) 12PKG_SOURCE_SUBDIR ?= $(PKG_NAME)-$(PKG_VERSION) 13PKG_SOURCE ?= $(PKG_SOURCE_SUBDIR).tar.xz 14endif 15 16DOWNLOAD_RDEP=$(STAMP_PREPARED) $(HOST_STAMP_PREPARED) 17 18# Try to guess the download method from the URL 19define dl_method 20$(strip \ 21 $(if $(2),$(2), \ 22 $(if $(filter @APACHE/% @GITHUB/% @GNOME/% @GNU/% @KERNEL/% @SF/% @SAVANNAH/% ftp://% http://% https://% file://%,$(1)),default, \ 23 $(if $(filter git://%,$(1)),git, \ 24 $(if $(filter svn://%,$(1)),svn, \ 25 $(if $(filter cvs://%,$(1)),cvs, \ 26 $(if $(filter hg://%,$(1)),hg, \ 27 $(if $(filter sftp://%,$(1)),bzr, \ 28 unknown \ 29 ) \ 30 ) \ 31 ) \ 32 ) \ 33 ) \ 34 ) \ 35 ) \ 36) 37endef 38 39# code for creating tarballs from cvs/svn/git/bzr/hg/darcs checkouts - useful for mirror support 40dl_pack/bz2=$(TAR) cjf $(1) $(2) 41dl_pack/gz=$(TAR) czf $(1) $(2) 42dl_pack/xz=$(TAR) c $(2) | xz -zc > $(1) 43dl_pack/unknown=echo "ERROR: Unknown pack format for file $(1)"; false 44define dl_pack 45 $(if $(dl_pack/$(call ext,$(1))),$(dl_pack/$(call ext,$(1))),$(dl_pack/unknown)) 46endef 47 48define DownloadMethod/unknown 49 @echo "ERROR: No download method available"; false 50endef 51 52define DownloadMethod/default 53 $(SCRIPT_DIR)/download.pl "$(DL_DIR)" "$(FILE)" "$(HASH)" "$(URL_FILE)" $(foreach url,$(URL),"$(url)") 54endef 55 56define wrap_mirror 57$(if $(if $(MIRROR),$(filter-out x,$(MIRROR_HASH))),$(SCRIPT_DIR)/download.pl "$(DL_DIR)" "$(FILE)" "$(MIRROR_HASH)" "" || ( $(1) ),$(1)) 58endef 59 60define DownloadMethod/cvs 61 $(call wrap_mirror, \ 62 echo "Checking out files from the cvs repository..."; \ 63 mkdir -p $(TMP_DIR)/dl && \ 64 cd $(TMP_DIR)/dl && \ 65 rm -rf $(SUBDIR) && \ 66 [ \! -d $(SUBDIR) ] && \ 67 cvs -d $(URL) export $(VERSION) $(SUBDIR) && \ 68 echo "Packing checkout..." && \ 69 $(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \ 70 mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \ 71 rm -rf $(SUBDIR); \ 72 ) 73endef 74 75define DownloadMethod/svn 76 $(call wrap_mirror, \ 77 echo "Checking out files from the svn repository..."; \ 78 mkdir -p $(TMP_DIR)/dl && \ 79 cd $(TMP_DIR)/dl && \ 80 rm -rf $(SUBDIR) && \ 81 [ \! -d $(SUBDIR) ] && \ 82 ( svn help export | grep -q trust-server-cert && \ 83 svn export --non-interactive --trust-server-cert -r$(VERSION) $(URL) $(SUBDIR) || \ 84 svn export --non-interactive -r$(VERSION) $(URL) $(SUBDIR) ) && \ 85 echo "Packing checkout..." && \ 86 $(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \ 87 mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \ 88 rm -rf $(SUBDIR); \ 89 ) 90endef 91 92define DownloadMethod/git 93 $(call wrap_mirror, \ 94 echo "Checking out files from the git repository..."; \ 95 mkdir -p $(TMP_DIR)/dl && \ 96 cd $(TMP_DIR)/dl && \ 97 rm -rf $(SUBDIR) && \ 98 [ \! -d $(SUBDIR) ] && \ 99 git clone $(URL) $(SUBDIR) && \ 100 (cd $(SUBDIR) && git checkout $(VERSION) && \ 101 git submodule update --init --recursive) && \ 102 echo "Packing checkout..." && \ 103 rm -rf $(SUBDIR)/.git && \ 104 $(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \ 105 mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \ 106 rm -rf $(SUBDIR); \ 107 ) 108endef 109 110define DownloadMethod/bzr 111 $(call wrap_mirror, \ 112 echo "Checking out files from the bzr repository..."; \ 113 mkdir -p $(TMP_DIR)/dl && \ 114 cd $(TMP_DIR)/dl && \ 115 rm -rf $(SUBDIR) && \ 116 [ \! -d $(SUBDIR) ] && \ 117 bzr export -r$(VERSION) $(SUBDIR) $(URL) && \ 118 echo "Packing checkout..." && \ 119 $(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \ 120 mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \ 121 rm -rf $(SUBDIR); \ 122 ) 123endef 124 125define DownloadMethod/hg 126 $(call wrap_mirror, \ 127 echo "Checking out files from the hg repository..."; \ 128 mkdir -p $(TMP_DIR)/dl && \ 129 cd $(TMP_DIR)/dl && \ 130 rm -rf $(SUBDIR) && \ 131 [ \! -d $(SUBDIR) ] && \ 132 hg clone -r $(VERSION) $(URL) $(SUBDIR) && \ 133 find $(SUBDIR) -name .hg | xargs rm -rf && \ 134 echo "Packing checkout..." && \ 135 $(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \ 136 mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \ 137 rm -rf $(SUBDIR); \ 138 ) 139endef 140 141define DownloadMethod/darcs 142 $(call wrap_mirror, \ 143 echo "Checking out files from the darcs repository..."; \ 144 mkdir -p $(TMP_DIR)/dl && \ 145 cd $(TMP_DIR)/dl && \ 146 rm -rf $(SUBDIR) && \ 147 [ \! -d $(SUBDIR) ] && \ 148 darcs get -t $(VERSION) $(URL) $(SUBDIR) && \ 149 find $(SUBDIR) -name _darcs | xargs rm -rf && \ 150 echo "Packing checkout..." && \ 151 $(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \ 152 mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \ 153 rm -rf $(SUBDIR); \ 154 ) 155endef 156 157Validate/cvs=VERSION SUBDIR 158Validate/svn=VERSION SUBDIR 159Validate/git=VERSION SUBDIR 160Validate/bzr=VERSION SUBDIR 161Validate/hg=VERSION SUBDIR 162Validate/darcs=VERSION SUBDIR 163 164define Download/Defaults 165 URL:= 166 FILE:= 167 URL_FILE:= 168 PROTO:= 169 HASH=$$(MD5SUM) 170 MD5SUM:=x 171 SUBDIR:= 172 MIRROR:=1 173 MIRROR_HASH=$$(MIRROR_MD5SUM) 174 MIRROR_MD5SUM:=x 175 VERSION:= 176endef 177 178define Download/default 179 FILE:=$(PKG_SOURCE) 180 URL:=$(PKG_SOURCE_URL) 181 SUBDIR:=$(PKG_SOURCE_SUBDIR) 182 PROTO:=$(PKG_SOURCE_PROTO) 183 $(if $(PKG_SOURCE_MIRROR),MIRROR:=$(filter 1,$(PKG_MIRROR))) 184 $(if $(PKG_MIRROR_MD5SUM),MIRROR_MD5SUM:=$(PKG_MIRROR_MD5SUM)) 185 $(if $(PKG_MIRROR_HASH),MIRROR_HASH:=$(PKG_MIRROR_HASH)) 186 VERSION:=$(PKG_SOURCE_VERSION) 187 $(if $(PKG_MD5SUM),MD5SUM:=$(PKG_MD5SUM)) 188 $(if $(PKG_HASH),HASH:=$(PKG_HASH)) 189endef 190 191define Download 192 $(eval $(Download/Defaults)) 193 $(eval $(Download/$(1))) 194 $(foreach FIELD,URL FILE $(Validate/$(call dl_method,$(URL),$(PROTO))), 195 ifeq ($($(FIELD)),) 196 $$(error Download/$(1) is missing the $(FIELD) field.) 197 endif 198 ) 199 200 $(foreach dep,$(DOWNLOAD_RDEP), 201 $(dep): $(DL_DIR)/$(FILE) 202 ) 203 download: $(DL_DIR)/$(FILE) 204 205 $(DL_DIR)/$(FILE): 206 mkdir -p $(DL_DIR) 207 $(call locked,$(if $(DownloadMethod/$(call dl_method,$(URL),$(PROTO))),$(DownloadMethod/$(call dl_method,$(URL),$(PROTO))),$(DownloadMethod/unknown)),$(FILE)) 208 209endef 210