repo/extra/cbindgen/build

59 lines
1.6 KiB
Plaintext
Raw Normal View History

2019-08-02 18:40:30 -06:00
#!/bin/sh -e
2020-03-12 08:57:09 -06:00
#
# Seeing as this is the only rust package in the
# repositories (other than rust itself), this will
# also serve as a reference to writing network-free
# rust-based packages.
2019-08-02 18:40:30 -06:00
2020-03-12 08:57:09 -06:00
# Set the CARGO_HOME variable to the current directory
# to prevent cargo from touching '$HOME/.cargo'. This
# keeps the build contained to the package manager's
# domain.
export CARGO_HOME=$PWD
2019-10-08 02:22:32 -06:00
2020-03-12 08:57:09 -06:00
# Extract each crate and generate a checksum file.
# This effectively mimics 'cargo vendor' without the
# network requirement.
#
# This allows the package manager to cache each crate
# and handle them as regular sources.
(
cd vendor
for crate in *.crate; do
tar xf "$crate"
# Strip the filename from the sha256sum output.
sha256=$(sha256sum "$crate")
sha256=${sha256%% *}
printf '{"package":"%s","files":{}}\n' "$sha256" \
> "${crate%.crate}/.cargo-checksum.json"
done
)
# Cargo reads a "global" configuration file from $CARGO_HOME,
# as we've set it to $PWD this is where we'll be storing the
# vendor config.
mkdir -p .cargo
# Create the configuration file to tell cargo to look in the
# 'vendor' directory for the already downloaded sources
# rather than crates.io (over network).
cat <<EOF > .cargo/config
[source.crates-io]
replace-with = "vendored-sources"
[source.vendored-sources]
directory = "vendor"
EOF
# Use the '--frozen' flag to tell cargo to skip the network
# and use whatever dependencies are in the Cargo.[toml|lock]
# files.
2019-10-08 02:22:32 -06:00
cargo build \
--release \
--frozen
2019-08-02 18:40:30 -06:00
install -Dm755 target/release/cbindgen "$1/usr/bin/cbindgen"