-
Notifications
You must be signed in to change notification settings - Fork 1.1k
/
build-host-release
executable file
·91 lines (73 loc) · 2.56 KB
/
build-host-release
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#!/bin/bash
BUILD_TARGET=""
BUILD_FEATURES=()
while getopts "t:f:" opt; do
case $opt in
t)
BUILD_TARGET=$OPTARG
;;
f)
BUILD_FEATURES=($OPTARG)
;;
?)
echo "Usage: $(basename $0) [-t <target-triple>] [-f <feature>]"
;;
esac
done
BUILD_FEATURES+=${BUILD_EXTRA_FEATURES}
ROOT_DIR=$( cd $( dirname $0 ) && pwd )
VERSION=$(grep -E '^version' "${ROOT_DIR}/../Cargo.toml" | awk '{print $3}' | sed 's/"//g')
HOST_TRIPLE=$(rustc -Vv | grep 'host:' | awk '{print $2}')
echo "Started build release ${VERSION} for ${HOST_TRIPLE} with features \"${BUILD_FEATURES}\"..."
if [[ "${BUILD_TARGET}" != "" ]]; then
if [[ "${BUILD_FEATURES}" != "" ]]; then
cargo build --release --features "${BUILD_FEATURES}" --target "${BUILD_TARGET}"
else
cargo build --release --target "${BUILD_TARGET}"
fi
else
if [[ "${BUILD_FEATURES}" != "" ]]; then
cargo build --release --features "${BUILD_FEATURES}"
else
cargo build --release
fi
fi
if [[ "$?" != "0" ]]; then
exit $?;
fi
TARGET_SUFFIX=""
if [[ "${HOST_TRIPLE}" == *"-windows-"* ]]; then
TARGET_SUFFIX=".exe"
fi
TARGETS=("sslocal${TARGET_SUFFIX}" "ssserver${TARGET_SUFFIX}" "ssurl${TARGET_SUFFIX}" "ssmanager${TARGET_SUFFIX}")
RELEASE_FOLDER="${ROOT_DIR}/release"
RELEASE_PACKAGE_NAME="shadowsocks-v${VERSION}.${HOST_TRIPLE}"
mkdir -p "${RELEASE_FOLDER}"
# Into release folder
if [[ "${BUILD_TARGET}" != "" ]]; then
cd "${ROOT_DIR}/../target/${BUILD_TARGET}/release"
else
cd "${ROOT_DIR}/../target/release"
fi
if [[ "${HOST_TRIPLE}" == *"-windows-"* ]]; then
# For Windows, use zip
RELEASE_PACKAGE_FILE_NAME="${RELEASE_PACKAGE_NAME}.zip"
RELEASE_PACKAGE_FILE_PATH="${RELEASE_FOLDER}/${RELEASE_PACKAGE_FILE_NAME}"
zip "${RELEASE_PACKAGE_FILE_PATH}" "${TARGETS[@]}"
# Checksum
cd "${RELEASE_FOLDER}"
shasum -a 256 "${RELEASE_PACKAGE_FILE_NAME}" > "${RELEASE_PACKAGE_FILE_NAME}.sha256"
else
# For others, Linux, OS X, uses tar.xz
# For Darwin, .DS_Store and other related files should be ignored
if [[ "$(uname -s)" == "Darwin" ]]; then
export COPYFILE_DISABLE=1
fi
RELEASE_PACKAGE_FILE_NAME="${RELEASE_PACKAGE_NAME}.tar.xz"
RELEASE_PACKAGE_FILE_PATH="${RELEASE_FOLDER}/${RELEASE_PACKAGE_FILE_NAME}"
tar -cJf "${RELEASE_PACKAGE_FILE_PATH}" "${TARGETS[@]}"
# Checksum
cd "${RELEASE_FOLDER}"
shasum -a 256 "${RELEASE_PACKAGE_FILE_NAME}" > "${RELEASE_PACKAGE_FILE_NAME}.sha256"
fi
echo "Finished build release ${RELEASE_PACKAGE_FILE_PATH}"