fetch.mk 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. # This file is part of the OpenADK project. OpenADK is copyrighted
  2. # material, please see the LICENCE file in the top-level directory.
  3. FULLDISTDIR?= ${DL_DIR}/${PKG_NAME}
  4. FULLDISTFILES= $(patsubst %,${FULLDISTDIR}/%,${DISTFILES})
  5. FETCH_STYLE?= auto
  6. do-fetch:
  7. fetch:
  8. ifneq ($(filter auto,${FETCH_STYLE}),)
  9. ${MAKE} ${FULLDISTFILES}
  10. else
  11. ${MAKE} do-fetch
  12. endif
  13. refetch:
  14. -rm -f ${FULLDISTFILES}
  15. ${MAKE} fetch
  16. _CHECKSUM_COOKIE?= ${WRKDIR}/.checksum_done
  17. checksum: ${_CHECKSUM_COOKIE}
  18. ifeq ($(strip ${PKG_NOCHECKSUM}),)
  19. ${_CHECKSUM_COOKIE}: ${FULLDISTFILES}
  20. -rm -rf ${WRKDIR}
  21. ifneq ($(ADK_DISABLE_CHECKSUM),y)
  22. @if [ ! -e $(firstword ${FULLDISTFILES}).nohash ]; then \
  23. OK=n; \
  24. allsums="$(strip ${PKG_HASH})"; \
  25. ($${SHA256} ${FULLDISTFILES}; echo exit) | while read sum name; do \
  26. if [[ $$sum = exit ]]; then \
  27. [[ $$OK = n ]] && echo >&2 "==> No distfile found!" || :; \
  28. [[ $$OK = 1 ]] || exit 1; \
  29. break; \
  30. fi; \
  31. cursum="$${allsums%% *}"; \
  32. allsums="$${allsums#* }"; \
  33. if [[ $$sum = "$$cursum" ]]; then \
  34. [[ $$OK = 0 ]] || OK=1; \
  35. continue; \
  36. fi; \
  37. echo >&2 "==> Checksum mismatch for $${name##*/} (SHA256)"; \
  38. echo >&2 ":---> should be '$$cursum'"; \
  39. echo >&2 ":---> really is '$$sum'"; \
  40. OK=0; \
  41. done; \
  42. fi
  43. endif
  44. mkdir -p ${WRKDIR}
  45. touch ${_CHECKSUM_COOKIE}
  46. endif
  47. # GNU make's poor excuse for loops
  48. define FETCH_template
  49. $(1):
  50. @fullname='$(1)'; \
  51. filename=$$$${fullname##*/}; \
  52. mkdir -p "$$$${fullname%%/$$$$filename}"; \
  53. cd "$$$${fullname%%/$$$$filename}"; \
  54. for url in "${PKG_SITES}"; do case $$$$url in \
  55. file://*|git://*|*.git) \
  56. if [ ! -z "$${PKG_GIT}" ]; then \
  57. echo "Trying to downloading from backup site first"; \
  58. if $${FETCHCMD} $$$$filename $${MASTER_SITE_BACKUP}/$$$$filename $(DL_TRACE); then \
  59. touch $$$$filename.nohash; \
  60. : check the size here; \
  61. [[ ! -e $$$$filename ]] || exit 0; \
  62. fi; \
  63. rm -rf $${PKG_NAME}-$${PKG_VERSION}; \
  64. echo "Using git ${PKG_GIT}: $${PKG_VERSION}" $(DL_TRACE); \
  65. case "$${PKG_GIT}" in \
  66. tag|branch) \
  67. git clone --progress --depth 1 --branch $${PKG_VERSION} $${PKG_SITES} $${PKG_NAME}-$${PKG_VERSION} $(DL_TRACE); \
  68. if [ $$$$? -ne 0 ]; then echo "git clone error"; exit 1; fi; \
  69. ;; \
  70. hash) \
  71. git clone --progress $${PKG_SITES} $${PKG_NAME}-$${PKG_VERSION} $(DL_TRACE); \
  72. if [ $$$$? -ne 0 ]; then echo "git clone error"; exit 1; fi; \
  73. (cd $${PKG_NAME}-$${PKG_VERSION}; git checkout $${PKG_VERSION}) $(DL_TRACE); \
  74. if [ $$$$? -ne 0 ]; then echo "git checkout error"; exit 1; fi; \
  75. ;; \
  76. esac ;\
  77. else \
  78. git clone --progress --depth 1 $${PKG_SITES} $${PKG_NAME}-$${PKG_VERSION} $(DL_TRACE); \
  79. if [ $$$$? -ne 0 ]; then echo "git clone error"; exit 1; fi; \
  80. fi; \
  81. if [ ! -z "$${PKG_GIT_SUBMODULE}" ]; then \
  82. (cd $${PKG_NAME}-$${PKG_VERSION}; git submodule update --init --recursive) $(DL_TRACE); \
  83. fi; \
  84. rm -rf $${PKG_NAME}-$${PKG_VERSION}/.git; \
  85. PATH='$(HOST_PATH)' tar czf $${PKG_NAME}-$${PKG_VERSION}.tar.gz $${PKG_NAME}-$${PKG_VERSION}; \
  86. touch $$$${filename}.nohash; \
  87. rm -rf $${PKG_NAME}-$${PKG_VERSION}; \
  88. : check the size here; \
  89. [[ ! -e $$$$filename ]] || exit 0; \
  90. ;; \
  91. http://*|https://*|ftp://*) \
  92. for site in $${PKG_SITES} $${MASTER_SITE_BACKUP}; do \
  93. echo "$${FETCHCMD} $$$$site$$$$filename" $(DL_TRACE); \
  94. rm -f "$$$$filename"; \
  95. if $${FETCHCMD} $$$$filename $$$$site$$$$filename $(DL_TRACE); then \
  96. : check the size here; \
  97. [[ ! -e $$$$filename ]] || exit 0; \
  98. fi; \
  99. done; \
  100. ;; \
  101. *) \
  102. echo url schema not known; \
  103. false ;; \
  104. esac; \
  105. done
  106. endef
  107. $(foreach distfile,${FULLDISTFILES},$(eval $(call FETCH_template,$(distfile))))