BUILD_TARGET=""
while getopts "t:" opt; do
case $opt in
t)
BUILD_TARGET=$OPTARG
;;
?)
echo "Usage: $(basename $0) [-t <target-triple>]"
;;
esac
done
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}')
if [[ "${BUILD_TARGET}" != "" ]]; then
cargo build --release --features "miscreant" --target "${BUILD_TARGET}"
else
cargo build --release --features "miscreant"
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}" "sstunnel${TARGET_SUFFIX}")
if [[ "${HOST_TRIPLE}" == *"-linux-"* ]]; then
TARGETS+=("ssredir${TARGET_SUFFIX}")
fi
RELEASE_FOLDER="${ROOT_DIR}/build/release"
RELEASE_PACKAGE_NAME="shadowsocks-v${VERSION}-stable.${HOST_TRIPLE}"
mkdir -p "${RELEASE_FOLDER}"
if [[ "${BUILD_TARGET}" != "" ]]; then
cd "target/${BUILD_TARGET}/release"
else
cd "target/release"
fi
if [[ "${HOST_TRIPLE}" == *"-windows-"* ]]; then
RELEASE_PACKAGE_FILE_NAME="${RELEASE_PACKAGE_NAME}.zip"
RELEASE_PACKAGE_FILE_PATH="${RELEASE_FOLDER}/${RELEASE_PACKAGE_FILE_NAME}"
zip "${RELEASE_PACKAGE_FILE_PATH}" "${TARGETS[@]}"
cd "${RELEASE_FOLDER}"
shasum -a 256 "${RELEASE_PACKAGE_FILE_NAME}" > "${RELEASE_PACKAGE_FILE_NAME}.sha256"
else
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[@]}"
cd "${RELEASE_FOLDER}"
shasum -a 256 "${RELEASE_PACKAGE_FILE_NAME}" > "${RELEASE_PACKAGE_FILE_NAME}.sha256"
fi