rust.mk 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #
  2. # Copyright (C) 2021-2022 Red Hat, Inc. All rights reserved.
  3. #
  4. # Author: Fabio M. Di Nitto <fabbione@kronosnet.org>
  5. #
  6. # This software licensed under GPL-2.0+
  7. #
  8. RUST_COMMON = \
  9. build.rs.in
  10. RUST_SRCS = $(RUST_SHIP_SRCS) $(RUST_BUILT_SRCS)
  11. %.rlib: $(RUST_SRCS) Cargo.toml build.rs
  12. PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) $(CARGO) build $(RUST_FLAGS)
  13. %-test: $(RUST_SRCS) Cargo.toml build.rs
  14. PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) $(CARGO) build $(RUST_FLAGS)
  15. build.rs: build.rs.in
  16. rm -f $@ $@-t
  17. cat $^ | sed \
  18. -e 's#@ABSTOPLEVELSRC@#$(abs_top_srcdir)#g' \
  19. -e 's#@ABSTOPLEVELBUILD@#$(abs_top_builddir)#g' \
  20. > $@-t
  21. chmod a-w $@-t
  22. mv $@-t $@
  23. rm -f $@-t
  24. cargo-tree-prep:
  25. if [ "${abs_builddir}" != "${abs_srcdir}" ]; then \
  26. echo "Generating builddir out-of-tree rust symlinks"; \
  27. src_realpath=$(shell realpath ${abs_srcdir}); \
  28. for i in `find "$$src_realpath/" -type d | \
  29. grep -v "${abs_builddir}" | \
  30. sed -e 's#^'$$src_realpath'/##g'`; do \
  31. $(MKDIR_P) ${abs_builddir}/$${i}; \
  32. done; \
  33. find "$$src_realpath/" -type f | { while read src; do \
  34. process=no; \
  35. copy=no; \
  36. case $$src in \
  37. ${abs_builddir}*) \
  38. ;; \
  39. *Makefile.*|*.in) \
  40. ;; \
  41. *) \
  42. process=yes; \
  43. ;; \
  44. esac ; \
  45. dst=`echo $$src | sed -e 's#^'$$src_realpath'/##g'`; \
  46. if [ $${process} == yes ]; then \
  47. rm -f ${abs_builddir}/$$dst; \
  48. $(LN_S) $$src ${abs_builddir}/$$dst; \
  49. fi; \
  50. if [ $${copy} == yes ]; then \
  51. rm -f ${abs_builddir}/$$dst; \
  52. cp $$src ${abs_builddir}/$$dst; \
  53. chmod u+w ${abs_builddir}/$$dst; \
  54. fi; \
  55. done; }; \
  56. fi
  57. cargo-clean:
  58. -$(CARGO) clean
  59. rm -rf Cargo.lock $(RUST_BUILT_SRCS) build.rs target/
  60. if [ "${abs_builddir}" != "${abs_srcdir}" ]; then \
  61. echo "Cleaning out-of-tree rust symlinks" ; \
  62. find "${abs_builddir}/" -type l -delete; \
  63. find "${abs_builddir}/" -type d -empty -delete; \
  64. fi
  65. clippy-check:
  66. $(CARGO) clippy --verbose --all-features -- -D warnings
  67. format-check:
  68. if [ "${abs_builddir}" = "${abs_srcdir}" ]; then \
  69. $(CARGO) fmt --all --check; \
  70. else \
  71. echo "!!!!! WARNING: skipping format check !!!!!"; \
  72. fi
  73. doc-check:
  74. $(CARGO) doc --verbose --all-features
  75. publish-check:
  76. if [ -f "${abs_srcdir}/README.md" ]; then \
  77. $(CARGO) publish --dry-run; \
  78. fi
  79. crates-publish:
  80. if [ -f "${abs_srcdir}/README.md" ]; then \
  81. bindingname=`cat Cargo.toml | grep ^name | sed -e 's#.*= ##g' -e 's#"##g'` && \
  82. cratesver=`cargo search $$bindingname | grep "^$$bindingname " | sed -e 's#.*= ##g' -e 's#"##g' -e 's/\+.*//g'` && \
  83. testver=`echo $(localver) | sed -e 's/\+.*//g'` && \
  84. if [ "$$cratesver" != "$$testver" ]; then \
  85. $(CARGO) publish; \
  86. fi; \
  87. fi
  88. crates-check:
  89. if [ -f "${abs_srcdir}/README.md" ]; then \
  90. bindingname=`cat Cargo.toml | grep ^name | sed -e 's#.*= ##g' -e 's#"##g'` && \
  91. cratesver=`cargo search $$bindingname | grep "^$$bindingname " | sed -e 's#.*= ##g' -e 's#"##g' -e 's/\+.*//g'` && \
  92. testver=`echo $(localver) | sed -e 's/\+.*//g'` && \
  93. if [ "$$cratesver" != "$$testver" ]; then \
  94. echo "!!!!! WARNING !!!!!"; \
  95. echo "!!!!! WARNING: $$bindingname local version ($$testver) is higher than the current published one on crates.io ($$cratesver)"; \
  96. echo "!!!!! WARNING !!!!!"; \
  97. fi; \
  98. fi
  99. check-local: clippy-check format-check doc-check crates-check publish-check