Hi,
I started to work on a cargo.port.mk module, to help building ports
based on cargo/rust ecosystem.
The following diff adds:
- devel/cargo/cargo.port.mk: the module
- devel/cargo/files/modcargo-make-makesum: a configure helper
(generate metadata required by cargo for all crates)
It also changes devel/cargo itself to use the module. But due to cargo
nature, it isn't a good model for the module use...
A port will use MODCARGO_CRATES entries for declaring crates.
The module will:
- adds DISTFILES and using MASTER_SITES9 for downloading files
- at pre-configure stage:
- creating a cargo configuration file to override standard registry
(which requires network access) to a local directory at
${WRKSRC}/modcargo-crates
- moving all extracted crates inside the directory
- generating metadata for each crate (using a script helper):
basically a json file with sha256 of all files and sha256 of the
tgz.
- calling cargo binary with right parameters for build, install, test
(behaviour overridable).
I also added two custom targets (prefixed with modcargo-) to help
generating MODCARGO_CRATES entries.
Regarding devel/Cargo itself, I am now facing a problem: the make test
doesn't work well anymore (lot of tests are failing due to overriding of
package registry with a local directory). So I added a non-standard
target (test-full) which remove the cargo configuration file installed
by pre-configure, and as result it makes cargo to run and use the
network for building and testing the testsuite... I dunno if it is
acceptable or not. The standard "test" target still use no network, but
isn't able to run the whole testsuite.
Thanks for your feedback regarding the module.
--
Sebastien Marie
Index: Makefile
===================================================================
RCS file: /cvs/ports/devel/cargo/Makefile,v
retrieving revision 1.6
diff -u -p -r1.6 Makefile
--- Makefile 13 Nov 2016 08:59:26 -0000 1.6
+++ Makefile 13 Nov 2016 14:51:04 -0000
@@ -4,20 +4,12 @@ COMMENT = package manager for Rust langu
# cargo version
CARGO_VERSION = 0.14.0
-# rust-install submodule version in cargo/src/rust-installer
-# see https://github.com/rust-lang/cargo/tree/${CARGO_VERSION}/src
-RUSTINSTALL_INDEX = 4f994850808a572e2cc8d43f968893c8e942e9bf
-
-# crates.io commit for CARGO_VERSION
-# see https://github.com/rust-lang/crates.io-index/commits/master/ca/rg/cargo
-CRATESIO_INDEX = 9f8c3a65f70b2a5723e0d9cc0a32d531ea42da67
-
# cargo version used for bootstrapping
BOOTSTRAP_VERSION = 0.14.0-20161112
-# registry index
-# see ${WRKDIR}/cargo-home/registry/index/github.com-${REGISTRY_INDEX}
-REGISTRY_INDEX = 1ecc6299db9ec823
+# rust-install submodule version in cargo/src/rust-installer
+# see https://github.com/rust-lang/cargo/tree/${CARGO_VERSION}/src
+RUSTINSTALL_INDEX = 4f994850808a572e2cc8d43f968893c8e942e9bf
DISTNAME = cargo-${CARGO_VERSION}
@@ -32,96 +24,100 @@ MAINTAINER = Sebastien Marie <semarie@on
# - MIT
# - Unlicense/MIT
# - MIT/Apache-2.0
+# - MPL-2.0
#
PERMIT_PACKAGE_CDROM = Yes
WANTLIB = c crypto curl m pthread ssh2 ssl z
-DIST_SUBDIR = cargo
MASTER_SITES = https://github.com/rust-lang/
DISTFILES +=
cargo-${CARGO_VERSION}.tar.gz{cargo/archive/${CARGO_VERSION}.tar.gz}
DISTFILES +=
rust-installer-${RUSTINSTALL_INDEX}.tar.gz{rust-installer/archive/${RUSTINSTALL_INDEX}.tar.gz}
-DISTFILES +=
crates.io-index-${CRATESIO_INDEX}.tar.gz{crates.io-index/archive/${CRATESIO_INDEX}.tar.gz}
-
-# look at ${WRKDIR}/cargo-home/registry/src/github.com-${REGISTRY_INDEX}
-# for the list
-CRATES += advapi32-sys-0.2.0 # MIT
-CRATES += aho-corasick-0.5.3 # Unlicense/MIT
-CRATES += bitflags-0.1.1 # MIT/Apache-2.0
-CRATES += bitflags-0.7.0 # MIT/Apache-2.0
-CRATES += bufstream-0.1.2 # MIT/Apache-2.0 (test)
-CRATES += cfg-if-0.1.0 # MIT/Apache-2.0
-CRATES += cmake-0.1.17 # MIT/Apache-2.0
-CRATES += crossbeam-0.2.9 # MIT/Apache-2.0
-CRATES += curl-0.3.9 # MIT
-CRATES += curl-sys-0.2.4 # MIT
-CRATES += docopt-0.6.82 # Unlicense/MIT
-CRATES += env_logger-0.3.4 # MIT/Apache-2.0
-CRATES += filetime-0.1.10 # MIT/Apache-2.0
-CRATES += flate2-0.2.14 # MIT/Apache-2.0
-CRATES += fs2-0.2.5 # MIT/Apache-2.0
-CRATES += gcc-0.3.35 # MIT/Apache-2.0
-CRATES += git2-0.4.4 # MIT/Apache-2.0
-CRATES += git2-curl-0.5.0 # MIT/Apache-2.0
-CRATES += glob-0.2.11 # MIT/Apache-2.0
-CRATES += hamcrest-0.1.1 # MIT/Apache-2.0 (test)
-CRATES += idna-0.1.0 # MIT/Apache-2.0
-CRATES += kernel32-sys-0.2.2 # MIT
-CRATES += lazy_static-0.2.1 # MIT
-CRATES += libc-0.2.17 # MIT/Apache-2.0
-CRATES += libgit2-sys-0.4.5 # MIT/Apache-2.0
-CRATES += libssh2-sys-0.1.39 # MIT/Apache-2.0
-CRATES += libz-sys-1.0.6 # MIT/Apache-2.0
-CRATES += log-0.3.6 # MIT/Apache-2.0
-CRATES += matches-0.1.2 # MIT
-CRATES += memchr-0.1.11 # Unlicense/MIT
-CRATES += miniz-sys-0.1.7 # MIT/Apache-2.0
-CRATES += miow-0.1.3 # MIT/Apache-2.0
-CRATES += net2-0.2.26 # MIT/Apache-2.0
-CRATES += num-0.1.36 # MIT/Apache-2.0 (test)
-CRATES += num-bigint-0.1.35 # MIT/Apache-2.0 (test)
-CRATES += num-complex-0.1.35 # MIT/Apache-2.0 (test)
-CRATES += num-integer-0.1.32 # MIT/Apache-2.0 (test)
-CRATES += num-iter-0.1.32 # MIT/Apache-2.0 (test)
-CRATES += num-rational-0.1.35 # MIT/Apache-2.0 (test)
-CRATES += num-traits-0.1.36 # MIT/Apache-2.0 (test)
-CRATES += num_cpus-1.0.0 # MIT
-CRATES += openssl-0.7.14 # Apache-2.0
-CRATES += openssl-sys-0.7.14 # MIT
-CRATES += openssl-sys-extras-0.7.14 # MIT
-CRATES += pkg-config-0.3.8 # MIT/Apache-2.0
-CRATES += psapi-sys-0.1.0 # MIT
-CRATES += rand-0.3.14 # MIT/Apache-2.0
-CRATES += regex-0.1.77 # MIT/Apache-2.0
-CRATES += regex-syntax-0.3.5 # MIT/Apache-2.0
-CRATES += rustc-serialize-0.3.19 # MIT/Apache-2.0
-CRATES += semver-0.5.1 # MIT/Apache-2.0
-CRATES += semver-parser-0.6.1 # MIT/Apache-2.0
-CRATES += strsim-0.3.0 # MIT
-CRATES += tar-0.4.8 # MIT/Apache-2.0
-CRATES += tempdir-0.3.5 # MIT/Apache-2.0
-CRATES += term-0.4.4 # MIT/Apache-2.0
-CRATES += thread-id-2.0.0 # Apache-2.0
-CRATES += thread_local-0.2.6 # Apache-2.0/MIT
-CRATES += toml-0.2.0 # MIT/Apache-2.0
-CRATES += unicode-bidi-0.2.3 # MIT/Apache-2.0
-CRATES += unicode-normalization-0.1.2 # MIT/Apache-2.0
-CRATES += url-1.2.0 # MIT/Apache-2.0
-CRATES += utf8-ranges-0.1.3 # Unlicense/MIT
-CRATES += winapi-0.2.8 # MIT
-CRATES += winapi-build-0.1.1 # MIT
-CRATES += ws2_32-sys-0.2.1 # MIT
-
-MASTER_SITES0 = https://crates.io/api/v1/crates/
-.for _crate in ${CRATES}
-DISTFILES +=
${_crate}.tar.gz{${_crate:C/-[^-]*$//}/${_crate:C/^.*-//}/download}:0
-.endfor
-MASTER_SITES1 = http://kapouay.odns.fr/pub/cargo/
-DISTFILES += cargo-bootstrap-${BOOTSTRAP_VERSION}.tar.gz:1
+MODCARGO_CRATES += advapi32-sys-0.2.0 # MIT
+MODCARGO_CRATES += aho-corasick-0.5.3 # Unlicense/MIT
+MODCARGO_CRATES += bitflags-0.1.1 # MIT/Apache-2.0
+MODCARGO_CRATES += bitflags-0.7.0 # MIT/Apache-2.0
+MODCARGO_CRATES += bufstream-0.1.2 # MIT/Apache-2.0
+MODCARGO_CRATES += cfg-if-0.1.0 # MIT/Apache-2.0
+MODCARGO_CRATES += cmake-0.1.17 # MIT/Apache-2.0
+MODCARGO_CRATES += crossbeam-0.2.9 # Apache-2.0/MIT
+MODCARGO_CRATES += curl-0.3.9 # MIT
+MODCARGO_CRATES += curl-sys-0.2.4 # MIT
+MODCARGO_CRATES += docopt-0.6.82 # Unlicense/MIT
+MODCARGO_CRATES += env_logger-0.3.4 # MIT/Apache-2.0
+MODCARGO_CRATES += filetime-0.1.10 # MIT/Apache-2.0
+MODCARGO_CRATES += flate2-0.2.14 # MIT/Apache-2.0
+MODCARGO_CRATES += fs2-0.2.5 # MIT/Apache-2.0
+MODCARGO_CRATES += gcc-0.3.35 # MIT/Apache-2.0
+MODCARGO_CRATES += gdi32-sys-0.2.0 # MIT
+MODCARGO_CRATES += git2-0.4.4 # MIT/Apache-2.0
+MODCARGO_CRATES += git2-curl-0.5.0 # MIT/Apache-2.0
+MODCARGO_CRATES += glob-0.2.11 # MIT/Apache-2.0
+MODCARGO_CRATES += hamcrest-0.1.1 # MIT/Apache-2.0
+MODCARGO_CRATES += idna-0.1.0 # MIT/Apache-2.0
+MODCARGO_CRATES += kernel32-sys-0.2.2 # MIT
+MODCARGO_CRATES += lazy_static-0.2.1 # MIT
+MODCARGO_CRATES += libc-0.2.17 # MIT/Apache-2.0
+MODCARGO_CRATES += libgit2-sys-0.4.5 # MIT/Apache-2.0
+MODCARGO_CRATES += libressl-pnacl-sys-2.1.6 # MIT
+MODCARGO_CRATES += libssh2-sys-0.1.39 # MIT/Apache-2.0
+MODCARGO_CRATES += libz-sys-1.0.6 # MIT/Apache-2.0
+MODCARGO_CRATES += log-0.3.6 # MIT/Apache-2.0
+MODCARGO_CRATES += matches-0.1.2 # MIT
+MODCARGO_CRATES += memchr-0.1.11 # Unlicense/MIT
+MODCARGO_CRATES += miniz-sys-0.1.7 # MIT/Apache-2.0
+MODCARGO_CRATES += miow-0.1.3 # MIT/Apache-2.0
+MODCARGO_CRATES += net2-0.2.26 # MIT/Apache-2.0
+MODCARGO_CRATES += num-0.1.36 # MIT/Apache-2.0
+MODCARGO_CRATES += num-bigint-0.1.35 # MIT/Apache-2.0
+MODCARGO_CRATES += num-complex-0.1.35 # MIT/Apache-2.0
+MODCARGO_CRATES += num-integer-0.1.32 # MIT/Apache-2.0
+MODCARGO_CRATES += num-iter-0.1.32 # MIT/Apache-2.0
+MODCARGO_CRATES += num-rational-0.1.35 # MIT/Apache-2.0
+MODCARGO_CRATES += num-traits-0.1.36 # MIT/Apache-2.0
+MODCARGO_CRATES += num_cpus-1.0.0 # MIT/Apache-2.0
+MODCARGO_CRATES += openssl-0.7.14 # Apache-2.0
+MODCARGO_CRATES += openssl-sys-0.7.14 # MIT
+MODCARGO_CRATES += openssl-sys-extras-0.7.14 # MIT
+MODCARGO_CRATES += pkg-config-0.3.8 # MIT/Apache-2.0
+MODCARGO_CRATES += pnacl-build-helper-1.4.10 # MPL-2.0
+MODCARGO_CRATES += psapi-sys-0.1.0 # MIT
+MODCARGO_CRATES += rand-0.3.14 # MIT/Apache-2.0
+MODCARGO_CRATES += regex-0.1.77 # MIT/Apache-2.0
+MODCARGO_CRATES += regex-syntax-0.3.5 # MIT/Apache-2.0
+MODCARGO_CRATES += rustc-serialize-0.3.19 # MIT/Apache-2.0
+MODCARGO_CRATES += semver-0.5.1 # MIT/Apache-2.0
+MODCARGO_CRATES += semver-parser-0.6.1 # MIT/Apache-2.0
+MODCARGO_CRATES += strsim-0.3.0 # MIT
+MODCARGO_CRATES += tar-0.4.8 # MIT/Apache-2.0
+MODCARGO_CRATES += tempdir-0.3.5 # MIT/Apache-2.0
+MODCARGO_CRATES += term-0.4.4 # MIT/Apache-2.0
+MODCARGO_CRATES += thread-id-2.0.0 # Apache-2.0
+MODCARGO_CRATES += thread_local-0.2.6 # Apache-2.0/MIT
+MODCARGO_CRATES += toml-0.2.0 # MIT/Apache-2.0
+MODCARGO_CRATES += unicode-bidi-0.2.3 # MIT / Apache-2.0
+MODCARGO_CRATES += unicode-normalization-0.1.2 # MIT/Apache-2.0
+MODCARGO_CRATES += url-1.2.0 # MIT/Apache-2.0
+MODCARGO_CRATES += user32-sys-0.2.0 # MIT
+MODCARGO_CRATES += utf8-ranges-0.1.3 # Unlicense/MIT
+MODCARGO_CRATES += winapi-0.2.8 # MIT
+MODCARGO_CRATES += winapi-build-0.1.1 # MIT
+MODCARGO_CRATES += ws2_32-sys-0.2.1 # MIT
+
+MASTER_SITES0 = http://kapouay.odns.fr/pub/cargo/
+DISTFILES += cargo-bootstrap-${BOOTSTRAP_VERSION}.tar.gz:0
+
+MODULES = devel/cargo \
+ lang/python
+
+# only deal with MODCARGO_CRATES
+MODCARGO_BUILDDEP = No
+MODCARGO_BUILD = No
+MODCARGO_INSTALL = No
+MODCARGO_TEST = No
-MODULES = lang/python
-MODPY_RUNDEP = No
+MODPY_RUNDEP = No
USE_GMAKE = Yes
@@ -134,34 +130,25 @@ LIB_DEPENDS = net/curl \
RUN_DEPENDS = lang/rust
-CONFIGURE_STYLE = simple
+CONFIGURE_STYLE = simple \
+ cargo
CONFIGURE_ARGS += --prefix=${LOCALBASE} \
--mandir=${LOCALBASE}/man \
--local-rust-root=${LOCALBASE} \
--local-cargo=${WRKDIR}/cargo-bootstrap-${BOOTSTRAP_VERSION}/cargo
-MAKE_ENV += CARGO_HOME=${WRKDIR}/cargo-home \
+MAKE_ENV += ${MODCARGO_ENV} \
VERBOSE=1 \
LIBSSH2_SYS_USE_PKG_CONFIG=1
+# make testsuite using the *same* binaries as build
+TEST_ENV += CARGOFLAGS="--release --no-fail-fast"
+
post-extract:
# place rust-installer inside WRKSRC
rmdir ${WRKSRC}/src/rust-installer
mv ${WRKDIR}/rust-installer-${RUSTINSTALL_INDEX} \
${WRKSRC}/src/rust-installer
- # populate cargo registry to avoid downloading crates
- mkdir -p ${WRKDIR}/cargo-home/registry/{cache,index,src}
- mkdir
${WRKDIR}/cargo-home/registry/{cache,src}/github.com-${REGISTRY_INDEX}
- mv ${WRKDIR}/crates.io-index-${CRATESIO_INDEX} \
- ${WRKDIR}/cargo-home/registry/index/github.com-${REGISTRY_INDEX}
- touch
${WRKDIR}/cargo-home/registry/index/github.com-${REGISTRY_INDEX}/.cargo-index-lock
-.for _crate in ${CRATES}
- gzip < /dev/null \
- >
${WRKDIR}/cargo-home/registry/cache/github.com-${REGISTRY_INDEX}/${_crate}.crate
- mv ${WRKDIR}/${_crate} \
- ${WRKDIR}/cargo-home/registry/src/github.com-${REGISTRY_INDEX}
- touch
${WRKDIR}/cargo-home/registry/src/github.com-${REGISTRY_INDEX}/${_crate}/.cargo-ok
-.endfor
SUBST_VARS += WRKBUILD
pre-test:
@@ -188,5 +175,10 @@ bootstrap: fake
| sed -ne 's,.* \(/.*/lib/lib.*\.so[.0-9]*\)$$,\1,p' \
| xargs -r -J % cp % \
${WRKDIR}/cargo-bootstrap-${BOOTSTRAP_NVERSION}
+
+# test-full: will rebuild and directly fetch crates
+test-full: configure pre-test
+ rm -rf ${WRKSRC}/.cargo
+ cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} ${GMAKE} test
.include <bsd.port.mk>
Index: cargo.port.mk
===================================================================
RCS file: cargo.port.mk
diff -N cargo.port.mk
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ cargo.port.mk 13 Nov 2016 14:51:04 -0000
@@ -0,0 +1,118 @@
+# $OpenBSD$
+
+# List of static dependencies. The format is cratename-version.
+MODCARGO_CRATES ?=
+
+# List of features to also build (space separated).
+MODCARGO_FEATURES ?=
+
+DIST_SUBDIR ?= cargo
+
+# Reserve MASTER_SITES9 to grab crates.
+MASTER_SITES9 ?= https://crates.io/api/v1/crates/
+.for _crate in ${MODCARGO_CRATES}
+DISTFILES +=
${_crate}.tar.gz{${_crate:C/-[^-]*$//}/${_crate:C/^.*-//}/download}:9
+.endfor
+
+# Path of the crate make-checksum helper.
+MODCARGO_MAKE_CHECKSUM_BIN ?=
+.for _d in ${PORTSDIR_PATH:S/:/ /g}
+. if exists(${_d}/devel/cargo/files/modcargo-make-checksum)
+MODCARGO_MAKE_CHECKSUM_BIN = ${_d}/devel/cargo/files/modcargo-make-checksum
+. endif
+.endfor
+
+# pre-configure target for preparing crates directory.
+# - place a config file for overriding crates-io index by local source
+MODCARGO_pre-configure = \
+ mkdir ${WRKSRC}/.cargo; \
+ echo "[source.modcargo]" >>${WRKSRC}/.cargo/config; \
+ echo "directory = '${WRKSRC}/modcargo-crates'" \
+ >>${WRKSRC}/.cargo/config; \
+ echo "[source.crates-io]" >>${WRKSRC}/.cargo/config; \
+ echo "replace-with = 'modcargo'" >>${WRKSRC}/.cargo/config; \
+ mkdir ${WRKSRC}/modcargo-crates;
+
+# for each crate
+# - put the crate in the local crates directory
+# - generate metadata of the crate
+.for _crate in ${MODCARGO_CRATES}
+MODCARGO_pre-configure += \
+ mv ${WRKDIR}/${_crate} ${WRKSRC}/modcargo-crates/${_crate}; \
+ sh ${MODCARGO_MAKE_CHECKSUM_BIN} \
+ ${FULLDISTDIR}/${_crate}.tar.gz \
+ ${WRKSRC}/modcargo-crates/${_crate};
+.endfor
+
+# Add build dependencies ?
+MODCARGO_BUILDDEP ?= Yes
+.if ${MODCARGO_BUILDDEP:L} == "yes"
+BUILD_DEPENDS += devel/cargo \
+ lang/rust
+.endif
+
+CATEGORIES += lang/rust
+
+# Location of cargo binary (default to devel/cargo binary)
+MODCARGO_BIN ?= ${LOCALBASE}/bin/cargo
+
+# Environnment for cargo
+# - CARGO_HOME: where to compile crates
+# - RUSTC: path of rustc binary (default to lang/rust binary)
+MODCARGO_ENV ?= CARGO_HOME=${WRKDIR}/cargo-home \
+ RUSTC=${LOCALBASE}/bin/rustc
+
+MODCARGO_RUN = \
+ cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} ${MODCARGO_ENV} ${MODCARGO_BIN}
+
+# Defaults arguments for cargo targets
+MODCARGO_BUILD_ARGS ?= --release --verbose --jobs=${MAKE_JOBS}
+MODCARGO_INSTALL_ARGS ?= --verbose --jobs=${MAKE_JOBS}
+MODCARGO_TEST_ARGS ?= --no-fail-fast
+
+# Manage crate features
+.if !empty(MODCARGO_FEATURES)
+MODCARGO_BUILD_ARGS += --features='${MODCARGO_FEATURES}'
+MODCARGO_TEST_ARGS += --features='${MODCARGO_FEATURES}'
+.endif
+
+# Add a build target ?
+MODCARGO_BUILD ?= Yes
+.if !target(do-build) && ${MODCARGO_BUILD:L} == "yes"
+do-build:
+ ${MODCARGO_RUN} build \
+ ${MODCARGO_BUILD_ARGS}
+.endif
+
+# Add an install target
+MODCARGO_INSTALL ?= Yes
+.if !target(do-install) && ${MODCARGO_INSTALL:L} == "yes"
+do-install:
+ ${MODCARGO_RUN} install \
+ --root="${PREFIX}" \
+ ${MODCARGO_INSTALL_ARGS}
+ rm -- "${PREFIX}/.crates.toml"
+.endif
+
+# Add a test target ?
+MODCARGO_TEST ?= Yes
+.if !target(do-test) && ${MODCARGO_TEST:L} == "yes"
+do-test:
+ ${MODCARGO_RUN} test \
+ ${MODCARGO_BUILD_ARGS} \
+ ${MODCARGO_TEST_ARGS}
+.endif
+
+# Helper targets for port maintener
+modcargo-crates-from-lock: patch
+ @awk '/"checksum / { print "MODCARGO_CRATES += " $$2 "-" $$3 }' \
+ <${WRKSRC}/Cargo.lock
+
+modcargo-crates-with-license: configure
+ @find ${WRKSRC}/modcargo-crates -name 'Cargo.toml' -maxdepth 2 \
+ -exec grep -H '^license' {} \; \
+ | sed \
+ -e 's|^${WRKSRC}/modcargo-crates/|MODCARGO_CRATES += |' \
+ -e 's|/Cargo.toml:license.*= *"| # |' \
+ -e 's|"$$||g'
+
Index: distinfo
===================================================================
RCS file: /cvs/ports/devel/cargo/distinfo,v
retrieving revision 1.4
diff -u -p -r1.4 distinfo
--- distinfo 13 Nov 2016 08:59:26 -0000 1.4
+++ distinfo 13 Nov 2016 14:51:04 -0000
@@ -7,7 +7,6 @@ SHA256 (cargo/cargo-0.14.0.tar.gz) = kOw
SHA256 (cargo/cargo-bootstrap-0.14.0-20161112.tar.gz) =
sb6A3tG3aS54dLrlBIBVEpxtqLUGaohTFHtr6qR7jTY=
SHA256 (cargo/cfg-if-0.1.0.tar.gz) =
3h52DXtlNa9CQfyovYrfaOLn7azGsp9dOZBQxeSM+Iw=
SHA256 (cargo/cmake-0.1.17.tar.gz) =
389bzs5W75U7jqBCUJ6dy9/peCC34g2GvrU98w7ZSXg=
-SHA256 (cargo/crates.io-index-9f8c3a65f70b2a5723e0d9cc0a32d531ea42da67.tar.gz)
= hXVtuRvjIZ0ly4gGKBIAcaKvGGtF09YVlAnGgyjW/0o=
SHA256 (cargo/crossbeam-0.2.9.tar.gz) =
+5dPg16QOQxfnfrADwWwbcEXKZ9epOhfvHu0Q69JEcw=
SHA256 (cargo/curl-0.3.9.tar.gz) = +vVNknx1KwktPpnqIn2cfJtKPohaM2ism/oolY8hUQA=
SHA256 (cargo/curl-sys-0.2.4.tar.gz) =
TxmNEDeKO8HxsOO8Oi3lybueCJOEYN7Fe6ZmfZpl+8M=
@@ -17,6 +16,7 @@ SHA256 (cargo/filetime-0.1.10.tar.gz) =
SHA256 (cargo/flate2-0.2.14.tar.gz) =
PutIHpVzBBeNLngvLaElfxQ03+y66IO6+2Gtoqn+o7s=
SHA256 (cargo/fs2-0.2.5.tar.gz) = vNQU5aGpebkxu5L0G3pUEG0/bS5sJT6c6UO3zUaCUe8=
SHA256 (cargo/gcc-0.3.35.tar.gz) = kezQN3Hv+wyWj9aVCzfolHaleKrxxwKX2OkrZRbsMxI=
+SHA256 (cargo/gdi32-sys-0.2.0.tar.gz) =
CRJRWo/yS6kAQi7NqAC1L0AWpWJRki05fFdr+SxpBRg=
SHA256 (cargo/git2-0.4.4.tar.gz) = M6lu7vInQDAGzbWepuBbqtjN3ea3mr7XU9lszuE2utI=
SHA256 (cargo/git2-curl-0.5.0.tar.gz) =
PV92bYBOPPK5Dhard8Pd7cscpdJFbK23s/kHNF+MNJg=
SHA256 (cargo/glob-0.2.11.tar.gz) =
i+GN4JpWtg7Q7fhLyd8AfjAEBpGves0cQYdPqsWJW/s=
@@ -26,6 +26,7 @@ SHA256 (cargo/kernel32-sys-0.2.2.tar.gz)
SHA256 (cargo/lazy_static-0.2.1.tar.gz) =
SSR+wqKFuz3LI8vZw1GTwCXnJRv853wdXal+Y2Lf/n8=
SHA256 (cargo/libc-0.2.17.tar.gz) =
BE0TYFk6ePXI5ecQvszcJKtx0fAbwZopvKzboi6Eddg=
SHA256 (cargo/libgit2-sys-0.4.5.tar.gz) =
MpPclRaaY1HFoD7KS/VUnzqaBjNqAAMVh2/xFlpfuhA=
+SHA256 (cargo/libressl-pnacl-sys-2.1.6.tar.gz) =
y8BYlRq2o+81yhZGLXZCxIZ+ZANSCBHyhTek4vLbPnE=
SHA256 (cargo/libssh2-sys-0.1.39.tar.gz) =
HevX5W0ZZV63hvgnZ13FX21TDebXuB520T0a/GNdbAc=
SHA256 (cargo/libz-sys-1.0.6.tar.gz) =
QPLfdzC10pQmw+RM5NCI2MXe9kccLJO6mFhbifsgHOY=
SHA256 (cargo/log-0.3.6.tar.gz) = q4NJe/i/TtKnQlnByAI1H81npluqhjlLa6c8NvSDgFQ=
@@ -46,6 +47,7 @@ SHA256 (cargo/openssl-0.7.14.tar.gz) = x
SHA256 (cargo/openssl-sys-0.7.14.tar.gz) =
uKxenZEd1MMgK79BObc7x6EjH30KOUMsb4k3RfDgQSA=
SHA256 (cargo/openssl-sys-extras-0.7.14.tar.gz) =
EcXh26fT0D2A8EW/DWARHcaSE7Z2UefIiVJ6O62rufo=
SHA256 (cargo/pkg-config-0.3.8.tar.gz) =
jO6ATsx+ryAaSiByQUcsyHDoJSBvbAMePuKnL6Ql8vo=
+SHA256 (cargo/pnacl-build-helper-1.4.10.tar.gz) =
YckjHTGuqEUAdEPWL8u1i7aUmrnBgIHuHgmSDgzxEYs=
SHA256 (cargo/psapi-sys-0.1.0.tar.gz) =
q81dGgfTYOKXJ/dXqd7LPOi8bg76iWnPqtZpqDF6JHg=
SHA256 (cargo/rand-0.3.14.tar.gz) =
J5HYjG3vrHmcPyDXTwlMozuTMmEtmu+QeFGcguT+BKU=
SHA256 (cargo/regex-0.1.77.tar.gz) =
ZLA0RsRm01tC8qiyA8jgPti5HA8XtW4fhPchCiV6pmU=
@@ -64,6 +66,7 @@ SHA256 (cargo/toml-0.2.0.tar.gz) = pELfw
SHA256 (cargo/unicode-bidi-0.2.3.tar.gz) =
wffOuWr9/u3uQrreZaDVhaagEG9oG2dJyP9Nqo3zCz8=
SHA256 (cargo/unicode-normalization-0.1.2.tar.gz) =
JmQ6L4O6xV8ZdvtxbBAjRIX5IC3NZc+9+dpJhnsnEXI=
SHA256 (cargo/url-1.2.0.tar.gz) = r+nsVLxNsUvIdEt/7QYNeFrHVnkUUJWbIkhEMxnVsRk=
+SHA256 (cargo/user32-sys-0.2.0.tar.gz) =
TvRxHRB7IbQQo6l0sSBNmszIsQ2tddgyS111XeFhfUc=
SHA256 (cargo/utf8-ranges-0.1.3.tar.gz) =
ocoTwIxBycPgQiTtn/gEYdl+EhWJ/yfHU6FssQgwrg8=
SHA256 (cargo/winapi-0.2.8.tar.gz) =
Fn3J1pSam4V/NFEnXpEcP0QlWELB96dvM8VRA6kJCHo=
SHA256 (cargo/winapi-build-0.1.1.tar.gz) =
LTFe7js0rKR5ey2msT7Ygmbm1hJWKgxGOQr4KZ/Gmbw=
@@ -77,7 +80,6 @@ SIZE (cargo/cargo-0.14.0.tar.gz) = 62530
SIZE (cargo/cargo-bootstrap-0.14.0-20161112.tar.gz) = 7324470
SIZE (cargo/cfg-if-0.1.0.tar.gz) = 2758
SIZE (cargo/cmake-0.1.17.tar.gz) = 10222
-SIZE (cargo/crates.io-index-9f8c3a65f70b2a5723e0d9cc0a32d531ea42da67.tar.gz) =
2533290
SIZE (cargo/crossbeam-0.2.9.tar.gz) = 35449
SIZE (cargo/curl-0.3.9.tar.gz) = 53146
SIZE (cargo/curl-sys-0.2.4.tar.gz) = 3196957
@@ -87,6 +89,7 @@ SIZE (cargo/filetime-0.1.10.tar.gz) = 88
SIZE (cargo/flate2-0.2.14.tar.gz) = 46692
SIZE (cargo/fs2-0.2.5.tar.gz) = 12661
SIZE (cargo/gcc-0.3.35.tar.gz) = 23869
+SIZE (cargo/gdi32-sys-0.2.0.tar.gz) = 7643
SIZE (cargo/git2-0.4.4.tar.gz) = 121616
SIZE (cargo/git2-curl-0.5.0.tar.gz) = 4060
SIZE (cargo/glob-0.2.11.tar.gz) = 18065
@@ -96,6 +99,7 @@ SIZE (cargo/kernel32-sys-0.2.2.tar.gz) =
SIZE (cargo/lazy_static-0.2.1.tar.gz) = 688253
SIZE (cargo/libc-0.2.17.tar.gz) = 108320
SIZE (cargo/libgit2-sys-0.4.5.tar.gz) = 4133755
+SIZE (cargo/libressl-pnacl-sys-2.1.6.tar.gz) = 2697179
SIZE (cargo/libssh2-sys-0.1.39.tar.gz) = 389357
SIZE (cargo/libz-sys-1.0.6.tar.gz) = 601369
SIZE (cargo/log-0.3.6.tar.gz) = 16110
@@ -116,6 +120,7 @@ SIZE (cargo/openssl-0.7.14.tar.gz) = 638
SIZE (cargo/openssl-sys-0.7.14.tar.gz) = 10156
SIZE (cargo/openssl-sys-extras-0.7.14.tar.gz) = 3871
SIZE (cargo/pkg-config-0.3.8.tar.gz) = 10814
+SIZE (cargo/pnacl-build-helper-1.4.10.tar.gz) = 5470
SIZE (cargo/psapi-sys-0.1.0.tar.gz) = 973
SIZE (cargo/rand-0.3.14.tar.gz) = 54768
SIZE (cargo/regex-0.1.77.tar.gz) = 185559
@@ -134,6 +139,7 @@ SIZE (cargo/toml-0.2.0.tar.gz) = 46886
SIZE (cargo/unicode-bidi-0.2.3.tar.gz) = 1744003
SIZE (cargo/unicode-normalization-0.1.2.tar.gz) = 612931
SIZE (cargo/url-1.2.0.tar.gz) = 68332
+SIZE (cargo/user32-sys-0.2.0.tar.gz) = 10624
SIZE (cargo/utf8-ranges-0.1.3.tar.gz) = 8422
SIZE (cargo/winapi-0.2.8.tar.gz) = 455145
SIZE (cargo/winapi-build-0.1.1.tar.gz) = 669
Index: files/modcargo-make-checksum
===================================================================
RCS file: files/modcargo-make-checksum
diff -N files/modcargo-make-checksum
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ files/modcargo-make-checksum 13 Nov 2016 14:51:04 -0000
@@ -0,0 +1,29 @@
+#!/bin/sh
+
+usage() {
+ echo "usage: ${0##*/} package directory" >&2
+ exit 1
+}
+
+[[ $# -ne 2 || ! -r "$1" || ! -d "$2" ]] && usage;
+
+package="$1"
+directory="$2"
+
+package_hash=$(sha256 -q ${package})
+
+cd "$directory"
+[[ -e .cargo-ok ]] && rm .cargo-ok
+
+exec >.cargo-checksum.json
+
+echo '{"files":{'
+find . -type f ! -name '.cargo-checksum.json' -print0 \
+ | xargs -0 sha256 \
+ | sed -e 's|^SHA256 (\./\([^"]*\)) = \([^ ]*\)$|"\1": "\2",|'
+
+touch .cargo-ok
+cat <<EOF
+".cargo-ok":
"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},
+"package": "${package_hash}"}
+EOF