mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-11-03 22:44:27 -05:00 
			
		
		
		
	GNU TAR v1.26 will fail with "no such file or directory" errors when the output file does not immediately follow the -f switch. SVN-Revision: 34460
		
			
				
	
	
		
			184 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
			
		
		
	
	
			184 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
#
 | 
						|
# Copyright (C) 2006-2012 OpenWrt.org
 | 
						|
#
 | 
						|
# This is free software, licensed under the GNU General Public License v2.
 | 
						|
# See /LICENSE for more information.
 | 
						|
#
 | 
						|
 | 
						|
DOWNLOAD_RDEP=$(STAMP_PREPARED) $(HOST_STAMP_PREPARED)
 | 
						|
 | 
						|
# Try to guess the download method from the URL
 | 
						|
define dl_method
 | 
						|
$(strip \
 | 
						|
  $(if $(2),$(2), \
 | 
						|
    $(if $(filter @GNOME/% @GNU/% @KERNEL/% @SF/% ftp://% http://% https://% file://%,$(1)),default, \
 | 
						|
      $(if $(filter git://%,$(1)),git, \
 | 
						|
        $(if $(filter svn://%,$(1)),svn, \
 | 
						|
          $(if $(filter cvs://%,$(1)),cvs, \
 | 
						|
            $(if $(filter hg://%,$(1)),hg, \
 | 
						|
              $(if $(filter sftp://%,$(1)),bzr, \
 | 
						|
                unknown \
 | 
						|
              ) \
 | 
						|
            ) \
 | 
						|
          ) \
 | 
						|
        ) \
 | 
						|
      ) \
 | 
						|
    ) \
 | 
						|
  ) \
 | 
						|
)
 | 
						|
endef
 | 
						|
 | 
						|
# code for creating tarballs from cvs/svn/git/bzr/hg/darcs checkouts - useful for mirror support
 | 
						|
dl_pack/bz2=$(TAR) cjf $(1) $(2)
 | 
						|
dl_pack/gz=$(TAR) czf $(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)" $(foreach url,$(URL),"$(url)")
 | 
						|
endef
 | 
						|
 | 
						|
define wrap_mirror
 | 
						|
	$(if $(if $(MIRROR),$(filter-out x,$(MIRROR_MD5SUM))),@$(SCRIPT_DIR)/download.pl "$(DL_DIR)" "$(FILE)" "$(MIRROR_MD5SUM)" || ( $(1) ),$(1))
 | 
						|
endef
 | 
						|
 | 
						|
define DownloadMethod/cvs
 | 
						|
	$(call wrap_mirror, \
 | 
						|
		echo "Checking out files from the cvs repository..."; \
 | 
						|
		mkdir -p $(TMP_DIR)/dl && \
 | 
						|
		cd $(TMP_DIR)/dl && \
 | 
						|
		rm -rf $(SUBDIR) && \
 | 
						|
		[ \! -d $(SUBDIR) ] && \
 | 
						|
		cvs -d $(URL) export $(VERSION) $(SUBDIR) && \
 | 
						|
		echo "Packing checkout..." && \
 | 
						|
		$(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \
 | 
						|
		mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \
 | 
						|
		rm -rf $(SUBDIR); \
 | 
						|
	)
 | 
						|
endef
 | 
						|
 | 
						|
define DownloadMethod/svn
 | 
						|
	$(call wrap_mirror, \
 | 
						|
		echo "Checking out files from the svn repository..."; \
 | 
						|
		mkdir -p $(TMP_DIR)/dl && \
 | 
						|
		cd $(TMP_DIR)/dl && \
 | 
						|
		rm -rf $(SUBDIR) && \
 | 
						|
		[ \! -d $(SUBDIR) ] && \
 | 
						|
		( svn help export | grep -q trust-server-cert && \
 | 
						|
		svn export --non-interactive --trust-server-cert -r$(VERSION) $(URL) $(SUBDIR) || \
 | 
						|
		svn export --non-interactive -r$(VERSION) $(URL) $(SUBDIR) ) && \
 | 
						|
		echo "Packing checkout..." && \
 | 
						|
		$(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \
 | 
						|
		mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \
 | 
						|
		rm -rf $(SUBDIR); \
 | 
						|
	)
 | 
						|
endef
 | 
						|
 | 
						|
define DownloadMethod/git
 | 
						|
	$(call wrap_mirror, \
 | 
						|
		echo "Checking out files from the git repository..."; \
 | 
						|
		mkdir -p $(TMP_DIR)/dl && \
 | 
						|
		cd $(TMP_DIR)/dl && \
 | 
						|
		rm -rf $(SUBDIR) && \
 | 
						|
		[ \! -d $(SUBDIR) ] && \
 | 
						|
		git clone $(URL) $(SUBDIR) --recursive && \
 | 
						|
		(cd $(SUBDIR) && git checkout $(VERSION)) && \
 | 
						|
		echo "Packing checkout..." && \
 | 
						|
		rm -rf $(SUBDIR)/.git && \
 | 
						|
		$(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \
 | 
						|
		mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \
 | 
						|
		rm -rf $(SUBDIR); \
 | 
						|
	)
 | 
						|
endef
 | 
						|
 | 
						|
define DownloadMethod/bzr
 | 
						|
	$(call wrap_mirror, \
 | 
						|
		echo "Checking out files from the bzr repository..."; \
 | 
						|
		mkdir -p $(TMP_DIR)/dl && \
 | 
						|
		cd $(TMP_DIR)/dl && \
 | 
						|
		rm -rf $(SUBDIR) && \
 | 
						|
		[ \! -d $(SUBDIR) ] && \
 | 
						|
		bzr export -r$(VERSION) $(SUBDIR) $(URL) && \
 | 
						|
		echo "Packing checkout..." && \
 | 
						|
		$(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \
 | 
						|
		mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \
 | 
						|
		rm -rf $(SUBDIR); \
 | 
						|
	)
 | 
						|
endef
 | 
						|
 | 
						|
define DownloadMethod/hg
 | 
						|
	$(call wrap_mirror, \
 | 
						|
		echo "Checking out files from the hg repository..."; \
 | 
						|
		mkdir -p $(TMP_DIR)/dl && \
 | 
						|
		cd $(TMP_DIR)/dl && \
 | 
						|
		rm -rf $(SUBDIR) && \
 | 
						|
		[ \! -d $(SUBDIR) ] && \
 | 
						|
		hg clone -r $(VERSION) $(URL) $(SUBDIR) && \
 | 
						|
		find $(SUBDIR) -name .hg | xargs rm -rf && \
 | 
						|
		echo "Packing checkout..." && \
 | 
						|
		$(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \
 | 
						|
		mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \
 | 
						|
		rm -rf $(SUBDIR); \
 | 
						|
	)
 | 
						|
endef
 | 
						|
 | 
						|
define DownloadMethod/darcs
 | 
						|
	$(call wrap_mirror, \
 | 
						|
		echo "Checking out files from the darcs repository..."; \
 | 
						|
		mkdir -p $(TMP_DIR)/dl && \
 | 
						|
		cd $(TMP_DIR)/dl && \
 | 
						|
		rm -rf $(SUBDIR) && \
 | 
						|
		[ \! -d $(SUBDIR) ] && \
 | 
						|
		darcs get -t $(VERSION) $(URL) $(SUBDIR) && \
 | 
						|
		find $(SUBDIR) -name _darcs | xargs rm -rf && \
 | 
						|
		echo "Packing checkout..." && \
 | 
						|
		$(call dl_pack,$(TMP_DIR)/dl/$(FILE),$(SUBDIR)) && \
 | 
						|
		mv $(TMP_DIR)/dl/$(FILE) $(DL_DIR)/ && \
 | 
						|
		rm -rf $(SUBDIR); \
 | 
						|
	)
 | 
						|
endef
 | 
						|
 | 
						|
Validate/cvs=VERSION SUBDIR
 | 
						|
Validate/svn=VERSION SUBDIR
 | 
						|
Validate/git=VERSION SUBDIR
 | 
						|
Validate/bzr=VERSION SUBDIR
 | 
						|
Validate/hg=VERSION SUBDIR
 | 
						|
Validate/darcs=VERSION SUBDIR
 | 
						|
 | 
						|
define Download/Defaults
 | 
						|
  URL:=
 | 
						|
  FILE:=
 | 
						|
  PROTO:=
 | 
						|
  MD5SUM:=
 | 
						|
  SUBDIR:=
 | 
						|
  MIRROR:=1
 | 
						|
  MIRROR_MD5SUM:=x
 | 
						|
  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
 | 
						|
  )
 | 
						|
 | 
						|
  $(foreach dep,$(DOWNLOAD_RDEP),
 | 
						|
    $(dep): $(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
 |