summaryrefslogtreecommitdiff
path: root/lang
diff options
context:
space:
mode:
authortnn <tnn@pkgsrc.org>2017-11-08 13:40:10 +0000
committertnn <tnn@pkgsrc.org>2017-11-08 13:40:10 +0000
commit00c8089293d56de40047453ce5fdac57e59238cc (patch)
tree177c05b8717dfa383affb6b277efb2d3a5d56a0d /lang
parent5cb0954841b9553faffcbb0efb2f8bb60dbcdc49 (diff)
downloadpkgsrc-00c8089293d56de40047453ce5fdac57e59238cc.tar.gz
rust: cargo.mk: crates.io helper Makefile snippet
Common logic that can be used by packages that depend on cargo crates from crates.io. This lets existing pkgsrc infrastructure fetch and verify cargo crates instead of using the rust package manager in the build phase. Inspired by cargo.mk from FreeBSD ports.
Diffstat (limited to 'lang')
-rw-r--r--lang/rust/cargo.mk38
1 files changed, 38 insertions, 0 deletions
diff --git a/lang/rust/cargo.mk b/lang/rust/cargo.mk
new file mode 100644
index 00000000000..5cc7d4f7084
--- /dev/null
+++ b/lang/rust/cargo.mk
@@ -0,0 +1,38 @@
+# $NetBSD: cargo.mk,v 1.1 2017/11/08 13:40:10 tnn Exp $
+#
+# Common logic that can be used by packages that depend on cargo crates
+# from crates.io. This lets existing pkgsrc infrastructure fetch and verify
+# cargo crates instead of using the rust package manager in the build phase.
+# Inspired by cargo.mk from FreeBSD ports.
+#
+# Usage example:
+#
+# CARGO_CRATE_DEPENDS+= sha1-0.20
+# .include "../../lang/rust/cargo.mk"
+# do-build:
+# cargo build --locked --frozen
+#
+# See also www/geckodriver for a full example.
+
+USE_TOOLS+= bsdtar digest
+CARGO_VENDOR_DIR= ${WRKDIR}/vendor
+
+DISTFILES?= ${DEFAULT_DISTFILES}
+.for _crate in ${CARGO_CRATE_DEPENDS}
+DISTFILES+= ${_crate}.crate
+SITES.${_crate}.crate+= -${MASTER_SITE_CRATESIO}${_crate:C/-[0-9.]+$//}/${_crate:C/^.*-([0-9.]+)$/\1/}/download
+.endfor
+
+post-extract: cargo-vendor-crates
+.PHONY: cargo-vendor-crates
+cargo-vendor-crates:
+ @${STEP_MSG} "Extracting local cargo crates"
+ ${RUN}${MKDIR} ${WRKSRC}/.cargo
+ ${RUN}${PRINTF} "[source.crates-io]\nreplace-with = \"vendored-sources\"\n[source.vendored-sources]\ndirectory = \"${CARGO_VENDOR_DIR}\"\n" >> ${WRKSRC}/.cargo/config
+ ${RUN}${MKDIR} ${CARGO_VENDOR_DIR}
+.for _crate in ${CARGO_CRATE_DEPENDS}
+ ${RUN}${TOOLS_PATH.bsdtar} -C ${CARGO_VENDOR_DIR} -xzf ${WRKDIR}/${_crate}.crate
+ ${RUN}${PRINTF} '{"package":"%s","files":{}}' \
+ $$(${DIGEST} sha256 < ${WRKDIR}/${_crate}.crate) \
+ > ${CARGO_VENDOR_DIR}/${_crate}/.cargo-checksum.json
+.endfor