Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-ports
Path: blob/main/Tools/scripts/update-rust-port.sh
18157 views
1
#!/bin/sh
2
#
3
# MAINTAINER: [email protected]
4
5
# CAVEAT: ports with Makefile.crates are not yet supported
6
7
## args
8
9
VERSION="$1"
10
11
## set strict mode
12
13
STRICT="set -euo pipefail"
14
$STRICT
15
16
## checks
17
18
for dep in portedit rustc; do
19
if ! which -s $dep; then
20
echo "error: $dep dependency is missing, $0 requires lang/rust and ports-mgmt/portfmt to be installed" >&2
21
exit 1
22
fi
23
done
24
if [ -z "$VERSION" ]; then
25
echo "Usage: $0 <new-version>"
26
exit 1
27
fi
28
if ! [ -f Makefile ] || ! [ -f pkg-descr ] || ! grep -q "CARGO_CRATES=" Makefile; then
29
echo "$0 should be run in a Rust-based port directory"
30
exit 1
31
fi
32
33
## MAIN
34
35
# copy Makefile
36
cp Makefile Makefile.new
37
38
# substitute version tag PORTVERSION or DISTVERSION
39
sed -i '' -E "s/^(PORT|DIST)(VERSION=[\t ]*)[0-9.-]+/\1\2${VERSION}/" Makefile.new
40
41
# reset PORTREVISION if present
42
if grep -q "PORTREVISION=" Makefile; then
43
echo PORTREVISION=0 | portedit merge -i Makefile.new
44
fi
45
46
# replace CARGO_CRATES with a placeholder
47
/usr/bin/awk '
48
BEGIN {
49
in_cargo_crates = 0
50
}
51
/^CARGO_CRATES=.*/ {
52
in_cargo_crates = 1
53
print "#@@@PLACEHOLDER@@@"
54
}
55
/^\t.*/ {
56
if (in_cargo_crates) {
57
// skip line
58
} else {
59
print $0
60
}
61
}
62
!/^CARGO_CRATES=.*|^\t.*/ {
63
if (in_cargo_crates) {
64
in_cargo_crates = 0
65
}
66
print $0
67
}' < Makefile.new > Makefile
68
69
# update distinfo
70
make makesum
71
72
# replace the placeholder
73
while IFS= read -r line; do
74
if [ "$line" = "#@@@PLACEHOLDER@@@" ]; then
75
make cargo-crates | grep -v '^='
76
else
77
echo "$line"
78
fi
79
done < Makefile > Makefile.new &&
80
mv Makefile.new Makefile
81
82
# clean
83
make clean
84
85
# update distinfo
86
make makesum
87
88