rust.mk 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  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. -e 's#@LIBQBLIBS@#$(LIBQB_LIBS)#g' \
  21. > $@-t
  22. chmod a-w $@-t
  23. mv $@-t $@
  24. rm -f $@-t
  25. cargo-tree-prep:
  26. if [ "${abs_builddir}" != "${abs_srcdir}" ]; then \
  27. echo "Generating builddir out-of-tree rust symlinks"; \
  28. src_realpath=$(shell realpath ${abs_srcdir}); \
  29. for i in `find "$$src_realpath/" -type d | \
  30. grep -v "${abs_builddir}" | \
  31. sed -e 's#^'$$src_realpath'/##g'`; do \
  32. $(MKDIR_P) ${abs_builddir}/$${i}; \
  33. done; \
  34. find "$$src_realpath/" -type f | { while read src; do \
  35. process=no; \
  36. copy=no; \
  37. case $$src in \
  38. ${abs_builddir}*) \
  39. ;; \
  40. *Makefile.*|*.in) \
  41. ;; \
  42. *) \
  43. process=yes; \
  44. ;; \
  45. esac ; \
  46. dst=`echo $$src | sed -e 's#^'$$src_realpath'/##g'`; \
  47. if [ $${process} == yes ]; then \
  48. rm -f ${abs_builddir}/$$dst; \
  49. $(LN_S) $$src ${abs_builddir}/$$dst; \
  50. fi; \
  51. if [ $${copy} == yes ]; then \
  52. rm -f ${abs_builddir}/$$dst; \
  53. cp $$src ${abs_builddir}/$$dst; \
  54. chmod u+w ${abs_builddir}/$$dst; \
  55. fi; \
  56. done; }; \
  57. fi
  58. cargo-clean:
  59. -$(CARGO) clean
  60. rm -rf Cargo.lock $(RUST_BUILT_SRCS) build.rs target/
  61. if [ "${abs_builddir}" != "${abs_srcdir}" ]; then \
  62. echo "Cleaning out-of-tree rust symlinks" ; \
  63. find "${abs_builddir}/" -type l -delete; \
  64. find "${abs_builddir}/" -type d -empty -delete; \
  65. fi
  66. clippy-check:
  67. $(CARGO) clippy --verbose --all-features -- -D warnings
  68. format-check:
  69. if [ "${abs_builddir}" = "${abs_srcdir}" ]; then \
  70. $(CARGO) fmt --all --check; \
  71. else \
  72. echo "!!!!! WARNING: skipping format check !!!!!"; \
  73. fi
  74. doc-check:
  75. $(CARGO) doc --verbose --all-features
  76. publish-check:
  77. if [ -f "${abs_srcdir}/README.md" ]; then \
  78. $(CARGO) publish --dry-run; \
  79. fi
  80. crates-publish:
  81. if [ -f "${abs_srcdir}/README.md" ]; then \
  82. bindingname=`cat Cargo.toml | grep ^name | sed -e 's#.*= ##g' -e 's#"##g'` && \
  83. cratesver=`cargo search $$bindingname | grep "^$$bindingname " | sed -e 's#.*= ##g' -e 's#"##g' -e 's/\+.*//g'` && \
  84. testver=`echo $(localver) | sed -e 's/\+.*//g'` && \
  85. if [ "$$cratesver" != "$$testver" ]; then \
  86. $(CARGO) publish; \
  87. fi; \
  88. fi
  89. crates-check:
  90. if [ -f "${abs_srcdir}/README.md" ]; then \
  91. bindingname=`cat Cargo.toml | grep ^name | sed -e 's#.*= ##g' -e 's#"##g'` && \
  92. cratesver=`cargo search $$bindingname | grep "^$$bindingname " | sed -e 's#.*= ##g' -e 's#"##g' -e 's/\+.*//g'` && \
  93. testver=`echo $(localver) | sed -e 's/\+.*//g'` && \
  94. if [ "$$cratesver" != "$$testver" ]; then \
  95. echo "!!!!! WARNING !!!!!"; \
  96. echo "!!!!! WARNING: $$bindingname local version ($$testver) is higher than the current published one on crates.io ($$cratesver)"; \
  97. echo "!!!!! WARNING !!!!!"; \
  98. fi; \
  99. fi
  100. check-local: clippy-check format-check doc-check crates-check publish-check