You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

153 lines
3.9 KiB

#!/bin/bash
configureCMake() {
cmake -S "${productRepoPath}" -B "${productBuildPath}" \
-D CMAKE_BUILD_TYPE=Release \
-D SYNERGY_ENTERPRISE=ON \
-D SYNERGY_REVISION="${productRevision}" \
|| exit 1
}
buildBinaries() {
cmake --build "${productBuildPath}" --parallel || exit 1
}
buildAppImage() {
pushd "${toolsPath}" || exit 1
wget -O linuxdeploy -c "${linuxdeployURL}" || exit 1
chmod a+x linuxdeploy || exit 1
# Needed by linuxdeploy
export VERSION="${productVersion}-${productStage}"
appImagePath="${productBuildPath}/${productPackageName}.AppDir"
./linuxdeploy \
--appdir "${appImagePath}" \
--executable "${productBuildPath}/bin/synergy" \
--executable "${productBuildPath}/bin/synergyc" \
--executable "${productBuildPath}/bin/synergyd" \
--executable "${productBuildPath}/bin/synergys" \
--executable "${productBuildPath}/bin/syntool" \
--create-desktop-file \
--icon-file "${productRepoPath}/res/synergy.svg" \
--output appimage || exit 1
mv "${toolsPath}/"*.AppImage "${binariesPath}/${productPackageName}.AppImage"
popd
}
buildDeb() {
pushd "${productRepoPath}" || exit 1
if [ ! -f "./debian/changelog" ]; then
# Make a lowercase package name to comply with
# Debian changelog formatting requirements.
packageName=$( echo "${productName}" | tr "[:upper:]" "[:lower:]" )
# Create a changelog file.
dch --create --controlmaint --distribution unstable \
--package "${packageName}" \
--newversion "${productVersion}" \
"Snapshot release." \
|| exit 1
fi
debuild \
--preserve-envvar SYNERGY_* \
--set-envvar CMAKE_BUILD_TYPE=Release \
--set-envvar SYNERGY_ENTERPRISE=ON \
--set-envvar DEB_BUILD_OPTIONS="parallel=8" \
-us -uc \
|| exit 1
git clean -fd
popd
mv "${productRepoPath}/../"*.deb "${binariesPath}/${productPackageName}.deb"
mv "${productRepoPath}/../synergy_${productVersion}"* "${productBuildPath}"
mv "${productRepoPath}/../synergy-dbgsym_${productVersion}"* "${productBuildPath}"
}
buildRPM() {
# rpmbuild is very flaky with paths containing spaces,
# so we set up a temporary build path and make sure no spaces
# are present in any paths.
temporaryPath=$( mktemp -d -t "${productPackageName}-XXXXXXXX" )
if [[ ! "${temporaryPath}" || ! -d "${temporaryPath}" ]]; then
print "error: Failed to create temporary path."
exit 1
fi
trap "{ rm -fR '${temporaryPath}'; }" EXIT
printf "Created temporary path:\n\t${temporaryPath}\n"
# We will symlink RPM build paths to our temporary location
# and we'll do work in there.
rpmToplevelPath="${temporaryPath}/rpm"
ln -s "${productBuildPath}/rpm" "${rpmToplevelPath}"
rpmBuildrootPath="${rpmToplevelPath}/BUILDROOT"
installPath="${rpmBuildrootPath}/usr"
if [[ ${rpmToplevelPath} = *" "* ]]; then
printf "error: RPM top-level path contained spaces:\n\t${rpmToplevelPath}\n"
exit 1
fi
# Reconfigure with new install path
cmake -S "${productRepoPath}" -B "${productBuildPath}" \
-D CMAKE_BUILD_TYPE=Release \
-D SYNERGY_ENTERPRISE=ON \
-D SYNERGY_REVISION="${productRevision}" \
-D CMAKE_INSTALL_PREFIX:PATH="${installPath}" \
|| exit 1
# Rebuild and deploy to install path
pushd "${productBuildPath}" || exit 1
make -j || exit 1
make install/strip || exit 1
popd
pushd "${rpmToplevelPath}" || exit 1
rpmbuild -bb \
--define "_topdir ${rpmToplevelPath}" \
--buildroot "${rpmBuildrootPath}" \
synergy.spec \
|| exit 1
mv "RPMS/x86_64/"*.rpm "${binariesPath}/${productPackageName}.rpm"
popd
}
set -o nounset
configureCMake
buildBinaries
buildAppImage
buildDeb
buildRPM
exit 0