fetch.mk 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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. ifneq ($(strip ${DIST_SUBDIR}),)
  4. FULLDISTDIR?= ${DL_DIR}/${DIST_SUBDIR}
  5. else
  6. FULLDISTDIR?= ${DL_DIR}
  7. endif
  8. FULLDISTFILES= $(patsubst %,${FULLDISTDIR}/%,${DISTFILES})
  9. FETCH_STYLE?= auto
  10. do-fetch:
  11. fetch:
  12. ifneq ($(filter auto,${FETCH_STYLE}),)
  13. ${MAKE} ${FULLDISTFILES}
  14. else
  15. ${MAKE} do-fetch
  16. endif
  17. refetch:
  18. -rm -f ${FULLDISTFILES}
  19. ${MAKE} fetch
  20. _CHECKSUM_COOKIE?= ${WRKDIR}/.checksum_done
  21. checksum: ${_CHECKSUM_COOKIE}
  22. ifeq ($(strip ${NO_CHECKSUM}),)
  23. ${_CHECKSUM_COOKIE}: ${FULLDISTFILES}
  24. -rm -rf ${WRKDIR}
  25. ifneq ($(ADK_DISABLE_CHECKSUM),y)
  26. @OK=n; \
  27. allsums="$(strip ${PKG_HASH})"; \
  28. (shasum -a 256 ${FULLDISTFILES}; echo exit) | while read sum name; do \
  29. if [[ $$sum = exit ]]; then \
  30. [[ $$OK = n ]] && echo >&2 "==> No distfile found!" || :; \
  31. [[ $$OK = 1 ]] || exit 1; \
  32. break; \
  33. fi; \
  34. cursum="$${allsums%% *}"; \
  35. allsums="$${allsums#* }"; \
  36. if [[ $$sum = "$$cursum" ]]; then \
  37. [[ $$OK = 0 ]] || OK=1; \
  38. continue; \
  39. fi; \
  40. echo >&2 "==> Checksum mismatch for $${name##*/} (SHA256)"; \
  41. echo >&2 ":---> should be '$$cursum'"; \
  42. echo >&2 ":---> really is '$$sum'"; \
  43. OK=0; \
  44. done
  45. endif
  46. mkdir -p ${WRKDIR}
  47. touch ${_CHECKSUM_COOKIE}
  48. endif
  49. # GNU make's poor excuse for loops
  50. define FETCH_template
  51. $(1):
  52. @fullname='$(1)'; \
  53. filename=$$$${fullname##*/}; \
  54. mkdir -p "$$$${fullname%%/$$$$filename}"; \
  55. cd "$$$${fullname%%/$$$$filename}"; \
  56. if [ -z $${PKG_REPO} ];then \
  57. for site in $${PKG_SITES} $${MASTER_SITE_BACKUP}; do \
  58. : echo "$${FETCH_CMD} $$$$site$$$$filename"; \
  59. rm -f "$$$$filename"; \
  60. if $${FETCH_CMD} $$$$site$$$$filename; then \
  61. : check the size here; \
  62. [[ ! -e $$$$filename ]] || exit 0; \
  63. fi; \
  64. done; \
  65. else \
  66. rm -rf $${PKG_NAME}-$${PKG_VERSION}; \
  67. git clone $${PKG_REPO} $${PKG_NAME}-$${PKG_VERSION}; \
  68. rm -rf $${PKG_NAME}-$${PKG_VERSION}/.git; \
  69. if [ "$${PKG_NAME}" = "musl" ];then \
  70. tar czf $${PKG_NAME}-$${PKG_VERSION}.tar.gz $${PKG_NAME}-$${PKG_VERSION}; \
  71. else \
  72. tar cJf $${PKG_NAME}-$${PKG_VERSION}.tar.xz $${PKG_NAME}-$${PKG_VERSION}; \
  73. fi; \
  74. rm -rf $${PKG_NAME}-$${PKG_VERSION}; \
  75. : check the size here; \
  76. [[ ! -e $$$$filename ]] || exit 0; \
  77. fi; \
  78. exit 1
  79. endef
  80. $(foreach distfile,${FULLDISTFILES},$(eval $(call FETCH_template,$(distfile))))