tdesktop/Telegram/Build.sh

303 lines
10 KiB
Bash
Executable File

set -e
while IFS='' read -r line || [[ -n "$line" ]]; do
set $line
eval $1="$2"
done < Version
VersionForPacker="$AppVersion"
if [ "$BetaVersion" != "0" ]; then
AppVersion="$BetaVersion"
AppVersionStrFull="${AppVersionStr}_${BetaVersion}"
DevParam="-beta $BetaVersion"
BetaKeyFile="tbeta_${AppVersion}_key"
elif [ "$DevChannel" == "0" ]; then
AppVersionStrFull="$AppVersionStr"
DevParam=''
else
AppVersionStrFull="$AppVersionStr.dev"
DevParam='-dev'
fi
if [ ! -f "Target" ]; then
echo "Build target not found!"
exit 1
fi
while IFS='' read -r line || [[ -n "$line" ]]; do
BuildTarget="$line"
done < Target
echo ""
HomePath="./../../Telegram"
if [ "$BuildTarget" == "linux" ]; then
echo "Building version $AppVersionStrFull for Linux 64bit.."
UpdateFile="tlinuxupd$AppVersion"
SetupFile="tsetup.$AppVersionStrFull.tar.xz"
WorkPath="./../Linux"
FixScript="$HomePath/FixMake.sh"
ReleasePath="./../Linux/Release"
elif [ "$BuildTarget" == "linux32" ]; then
echo "Building version $AppVersionStrFull for Linux 32bit.."
UpdateFile="tlinux32upd$AppVersion"
SetupFile="tsetup32.$AppVersionStrFull.tar.xz"
WorkPath="./../Linux"
FixScript="$HomePath/FixMake32.sh"
ReleasePath="./../Linux/Release"
elif [ "$BuildTarget" == "mac" ]; then
echo "Building version $AppVersionStrFull for OS X 10.8+.."
UpdateFile="tmacupd$AppVersion"
SetupFile="tsetup.$AppVersionStrFull.dmg"
ReleasePath="./../Mac/Release"
BinaryName="Telegram"
elif [ "$BuildTarget" == "mac32" ]; then
echo "Building version $AppVersionStrFull for OS X 10.6 and 10.7.."
UpdateFile="tmac32upd$AppVersion"
SetupFile="tsetup32.$AppVersionStrFull.dmg"
ReleasePath="./../Mac/Release"
BinaryName="Telegram"
elif [ "$BuildTarget" == "macstore" ]; then
if [ "$BetaVersion" != "0" ]; then
echo "Can't build macstore beta version!"
exit 1
fi
echo "Building version $AppVersionStrFull for Mac App Store.."
ReleasePath="./../Mac/Release"
BinaryName="Telegram Desktop"
DropboxPath="./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor"
DropboxDeployPath="$DropboxPath/$AppVersionStrFull"
else
echo "Invalid target!"
exit 1
fi
#if [ "$BuildTarget" == "linux" ] || [ "$BuildTarget" == "linux32" ] || [ "$BuildTarget" == "mac" ] || [ "$BuildTarget" == "mac32" ] || [ "$BuildTarget" == "macstore" ]; then
if [ "$BetaVersion" != "0" ]; then
if [ -f "$ReleasePath/$BetaKeyFile" ]; then
echo "Beta version key file for version $AppVersion already exists!"
exit 1
fi
if [ -d "$ReleasePath/deploy/$AppVersionStrMajor/$AppVersionStrFull" ]; then
echo "Deploy folder for version $AppVersionStrFull already exists!"
exit 1
fi
else
if [ -d "$ReleasePath/deploy/$AppVersionStrMajor/$AppVersionStr.dev" ]; then
echo "Deploy folder for version $AppVersionStr.dev already exists!"
exit 1
fi
if [ -f "$ReleasePath/$UpdateFile" ]; then
echo "Update file for version $AppVersion already exists!"
exit 1
fi
if [ -d "$ReleasePath/deploy/$AppVersionStrMajor/$AppVersionStr" ]; then
echo "Deploy folder for version $AppVersionStr already exists!"
exit 1
fi
fi
DeployPath="$ReleasePath/deploy/$AppVersionStrMajor/$AppVersionStrFull"
#fi
if [ "$BuildTarget" == "linux" ] || [ "$BuildTarget" == "linux32" ]; then
mkdir -p "$WorkPath/ReleaseIntermediateUpdater"
cd "$WorkPath/ReleaseIntermediateUpdater"
/usr/local/Qt-5.5.1/bin/qmake "$HomePath/Updater.pro"
make
echo "Updater build complete!"
cd "$HomePath"
mkdir -p "$WorkPath/ReleaseIntermediate"
cd "$WorkPath/ReleaseIntermediate"
/usr/local/Qt-5.5.1/bin/qmake "$HomePath/Telegram.pro"
eval "$FixScript"
make
echo "Telegram build complete!"
cd "$HomePath"
if [ ! -f "$ReleasePath/Telegram" ]; then
echo "Telegram not found!"
exit 1
fi
if [ ! -f "$ReleasePath/Updater" ]; then
echo "Updater not found!"
exit 1
fi
echo "Preparing version $AppVersionStrFull, executing Packer.."
cd "$ReleasePath" && "./Packer" -path Telegram -path Updater -version $VersionForPacker $DevParam && cd "$HomePath"
echo "Packer done!"
if [ "$BetaVersion" != "0" ]; then
if [ ! -f "$ReleasePath/$BetaKeyFile" ]; then
echo "Beta version key file not found!"
exit 1
fi
while IFS='' read -r line || [[ -n "$line" ]]; do
BetaSignature="$line"
done < "$ReleasePath/$BetaKeyFile"
UpdateFile="${UpdateFile}_${BetaSignature}"
SetupFile="tbeta${BetaVersion}_${BetaSignature}.tar.xz"
fi
if [ ! -d "$ReleasePath/deploy" ]; then
mkdir "$ReleasePath/deploy"
fi
if [ ! -d "$ReleasePath/deploy/$AppVersionStrMajor" ]; then
mkdir "$ReleasePath/deploy/$AppVersionStrMajor"
fi
echo "Copying Telegram, Updater and $UpdateFile to deploy/$AppVersionStrMajor/$AppVersionStrFull..";
mkdir "$DeployPath"
mkdir "$DeployPath/Telegram"
mv "$ReleasePath/Telegram" "$DeployPath/Telegram/"
mv "$ReleasePath/Updater" "$DeployPath/Telegram/"
mv "$ReleasePath/$UpdateFile" "$DeployPath/"
if [ "$BetaVersion" != "0" ]; then
mv "$ReleasePath/$BetaKeyFile" "$DeployPath/"
fi
cd "$DeployPath" && tar -cJvf "$SetupFile" "Telegram/" && cd "./../../../$HomePath"
fi
if [ "$BuildTarget" == "mac" ] || [ "$BuildTarget" == "mac32" ] || [ "$BuildTarget" == "macstore" ]; then
touch "./SourceFiles/telegram.qrc"
xcodebuild -project Telegram.xcodeproj -alltargets -configuration Release build
if [ ! -d "$ReleasePath/$BinaryName.app" ]; then
echo "$BinaryName.app not found!"
exit 1
fi
if [ ! -d "$ReleasePath/$BinaryName.app.dSYM" ]; then
echo "$BinaryName.app.dSYM not found!"
exit 1
fi
AppUUID=`dwarfdump -u "$ReleasePath/$BinaryName.app/Contents/MacOS/$BinaryName" | awk -F " " '{print $2}'`
DsymUUID=`dwarfdump -u "$ReleasePath/$BinaryName.app.dSYM" | awk -F " " '{print $2}'`
if [ "$AppUUID" != "$DsymUUID" ]; then
echo "UUID of binary '$AppUUID' and dSYM '$DsymUUID' differ!"
exit 1
fi
if [ ! -f "$ReleasePath/$BinaryName.app/Contents/Resources/Icon.icns" ]; then
echo "Icon.icns not found in Resources!"
exit 1
fi
if [ ! -f "$ReleasePath/$BinaryName.app/Contents/MacOS/$BinaryName" ]; then
echo "$BinaryName not found in MacOS!"
exit 1
fi
if [ ! -d "$ReleasePath/$BinaryName.app/Contents/_CodeSignature" ]; then
echo "$BinaryName signature not found!"
exit 1
fi
if [ "$BuildTarget" == "mac" ] || [ "$BuildTarget" == "mac32" ]; then
if [ ! -f "$ReleasePath/$BinaryName.app/Contents/Frameworks/Updater" ]; then
echo "Updater not found in Frameworks!"
exit 1
fi
elif [ "$BuildTarget" == "macstore" ]; then
if [ ! -f "$ReleasePath/$BinaryName.pkg" ]; then
echo "$BinaryName.pkg not found!"
exit 1
fi
fi
if [ "$BuildTarget" == "mac" ] || [ "$BuildTarget" == "mac32" ]; then
if [ "$BetaVersion" == "0" ]; then
cd "$ReleasePath"
temppath=`hdiutil attach -readwrite tsetup.dmg | awk -F "\t" 'END {print $3}'`
cp -R "./$BinaryName.app" "$temppath/"
bless --folder "$temppath/" --openfolder "$temppath/"
hdiutil detach "$temppath"
hdiutil convert tsetup.dmg -format UDZO -imagekey zlib-level=9 -ov -o "$SetupFile"
cd "./../../Telegram"
fi
cd "$ReleasePath" && "./Packer.app/Contents/MacOS/Packer" -path "$BinaryName.app" -version $VersionForPacker $DevParam && cd "$HomePath"
echo "Packer done!"
if [ "$BetaVersion" != "0" ]; then
if [ ! -f "$ReleasePath/$BetaKeyFile" ]; then
echo "Beta version key file not found!"
exit 1
fi
while IFS='' read -r line || [[ -n "$line" ]]; do
BetaSignature="$line"
done < "$ReleasePath/$BetaKeyFile"
UpdateFile="${UpdateFile}_${BetaSignature}"
SetupFile="tbeta${BetaVersion}_${BetaSignature}.zip"
fi
fi
if [ ! -d "$ReleasePath/deploy" ]; then
mkdir "$ReleasePath/deploy"
fi
if [ ! -d "$ReleasePath/deploy/$AppVersionStrMajor" ]; then
mkdir "$ReleasePath/deploy/$AppVersionStrMajor"
fi
if [ "$BuildTarget" == "mac" ] || [ "$BuildTarget" == "mac32" ]; then
echo "Copying $BinaryName.app and $UpdateFile to deploy/$AppVersionStrMajor/$AppVersionStr..";
mkdir "$DeployPath"
mkdir "$DeployPath/Telegram"
cp -r "$ReleasePath/$BinaryName.app" "$DeployPath/Telegram/"
if [ "$BetaVersion" != "0" ]; then
cd "$DeployPath" && zip -r "$SetupFile" "Telegram" && mv "$SetupFile" "./../../../" && cd "./../../../$HomePath"
mv "$ReleasePath/$BetaKeyFile" "$DeployPath/"
fi
mv "$ReleasePath/$BinaryName.app.dSYM" "$DeployPath/"
rm "$ReleasePath/$BinaryName.app/Contents/MacOS/$BinaryName"
rm "$ReleasePath/$BinaryName.app/Contents/Frameworks/Updater"
rm -rf "$ReleasePath/$BinaryName.app/Contents/_CodeSignature"
mv "$ReleasePath/$UpdateFile" "$DeployPath/"
mv "$ReleasePath/$SetupFile" "$DeployPath/"
if [ "$BuildTarget" == "mac32" ]; then
ReleaseToPath="./../../../TBuild/tother/tmac32"
DeployToPath="$ReleaseToPath/$AppVersionStrMajor/$AppVersionStrFull"
if [ ! -d "$ReleaseToPath/$AppVersionStrMajor" ]; then
mkdir "$ReleaseToPath/$AppVersionStrMajor"
fi
if [ ! -d "$DeployToPath" ]; then
mkdir "$DeployToPath"
fi
cp -v "$DeployPath/$UpdateFile" "$DeployToPath/"
cp -v "$DeployPath/$SetupFile" "$DeployToPath/"
cp -rv "$DeployPath/$BinaryName.app.dSYM" "$DeployToPath/"
if [ "$BetaVersion" != "0" ]; then
cp -v "$DeployPath/$BetaKeyFile" "$DeployToPath/"
fi
fi
elif [ "$BuildTarget" == "macstore" ]; then
echo "Copying $BinaryName.app to deploy/$AppVersionStrMajor/$AppVersionStr..";
mkdir "$DeployPath"
cp -r "$ReleasePath/$BinaryName.app" "$DeployPath/"
mv "$ReleasePath/$BinaryName.pkg" "$DeployPath/"
mv "$ReleasePath/$BinaryName.app.dSYM" "$DeployPath/"
rm "$ReleasePath/$BinaryName.app/Contents/MacOS/$BinaryName"
rm -rf "$ReleasePath/$BinaryName.app/Contents/_CodeSignature"
cp -v "$DeployPath/$BinaryName.app" "$DropboxDeployPath/"
cp -rv "$DeployPath/$BinaryName.app.dSYM" "$DropboxDeployPath/"
fi
fi
echo "Version $AppVersionStrFull is ready!";