Created
September 29, 2017 14:34
-
-
Save roma-guru/cd044d9eae76540f5ce3c1d4176fac47 to your computer and use it in GitHub Desktop.
Working Vagrant environment for building Telegram desktop client. Based on Ubuntu 12.04. Should be placed under TBuild directory. Then just vagrant up && ./build_debug.sh.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
vagrant ssh -c "\ | |
cd /vagrant/tdesktop/Telegram && gyp/refresh.sh && cd ../out/Debug && make -j4" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
vagrant ssh -c "\ | |
cd /vagrant/tdesktop/Telegram && gyp/refresh.sh && cd ../out/Debug && make -j4" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Usage: ./provision.sh [build-step..] | |
# Build-steps: | |
# build_libs, gcc6, cmake, zlib, opus, va, vdpau, ffmpeg, portaudio, openal, openssl, | |
# xcbcommon, qt5, breakpad, gyp. | |
# If build-steps are not specified everything is made from scratch by default. | |
# Utility function. | |
# Check if element is in array. | |
# Usage: contains $element $array | |
function contains { | |
local e | |
for e in ${@:2}; do | |
[[ "$e" == "$1" ]] && return 0; | |
done | |
return 1 | |
} | |
# Preparation | |
if contains "build_libs" $@ || [ -z "$1" ]; then | |
# Prevent opening stdin errors | |
export DEBIAN_FRONTEND=noninteractive | |
# Some tools | |
sudo apt-get update -q &&\ | |
sudo apt-get install -qy git wget software-properties-common python-software-properties | |
# Dev Libraries | |
sudo apt-get install -qy libexif-dev liblzma-dev libz-dev libssl-dev libappindicator-dev libunity-dev libicu-dev libdee-dev &&\ | |
sudo apt-get -qy --force-yes install gettext libtool autoconf automake build-essential libass-dev libfreetype6-dev libgpac-dev libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texi2html zlib1g-dev &&\ | |
sudo apt-get install -qy yasm &&\ | |
sudo apt-get install -qy xutils-dev bison python-xcbgen &&\ | |
sudo apt-get install -qy libxcb1-dev libxcb-image0-dev libxcb-keysyms1-dev libxcb-icccm4-dev libxcb-render-util0-dev libxcb-util0-dev libxrender-dev libasound-dev libpulse-dev libxcb-sync0-dev libxcb-xfixes0-dev libxcb-randr0-dev libx11-xcb-dev libffi-dev | |
fi | |
if contains "gcc6" $@ || [ -z "$1" ]; then | |
# Quite fresh gcc on old ubuntu | |
sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test &&\ | |
sudo apt-get update -q &&\ | |
sudo apt-get install -qy gcc-6 g++-6 &&\ | |
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 60 &&\ | |
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-6 60 | |
fi | |
if contains "cmake" $@ || [ -z "$1" ]; then | |
# Quite fresh cmake on old ubuntu | |
#TODO: maybe better use ppa:george-edison55/cmake-3.x? | |
cd /vagrant/Libraries | |
wget -nv https://cmake.org/files/v3.6/cmake-3.6.2.tar.gz &&\ | |
tar -xf cmake-3.6.2.tar.gz && cd cmake-3.6.2 &&\ | |
./configure && make -j4 && sudo make install | |
fi | |
# Zlib | |
if contains "zlib" $@ || [ -z "$1" ]; then | |
cd /vagrant/Libraries | |
wget -nv http://zlib.net/fossils/zlib-1.2.8.tar.gz &&\ | |
tar xf zlib-1.2.8.tar.gz &&\ | |
cd zlib-1.2.8 && ./configure && make -j4 && sudo make install | |
fi | |
# Opus codec | |
if contains "opus" $@ || [ -z "$1" ]; then | |
cd /vagrant/Libraries | |
[ -d opus ] || git clone https://github.com/xiph/opus &&\ | |
cd opus && git checkout -q v1.2-alpha2 &&\ | |
./autogen.sh && ./configure && make -j4 && sudo make install | |
fi | |
# LibVA | |
if contains "va" $@ || [ -z "$1" ] || [ -z "$1" ]; then | |
cd /vagrant/Libraries | |
[ -d libva ] || git clone https://github.com/01org/libva.git &&\ | |
cd libva && ./autogen.sh --enable-static &&\ | |
make -j4 && sudo make install | |
fi | |
# LibVdpau | |
if contains "vdpau" $@ || [ -z "$1" ]; then | |
cd /vagrant/Libraries | |
[ -d libvdpau ] || git clone git://anongit.freedesktop.org/vdpau/libvdpau &&\ | |
cd libvdpau && git checkout -q libvdpau-1.1.1 &&\ | |
./autogen.sh --enable-static &&\ | |
make -j4 && sudo make install | |
fi | |
# FFmpeg | |
if contains "ffmpeg" $@ || [ -z "$1" ]; then | |
cd /vagrant/Libraries | |
[ -d ffmpeg ] || git clone https://github.com/FFmpeg/FFmpeg.git ffmpeg &&\ | |
cd ffmpeg && git checkout -q release/3.2 &&\ | |
./configure --prefix=/usr/local --disable-programs --disable-doc --disable-everything --enable-protocol=file --enable-libopus --enable-decoder=aac --enable-decoder=aac_latm --enable-decoder=aasc --enable-decoder=flac --enable-decoder=gif --enable-decoder=h264 --enable-decoder=h264_vdpau --enable-decoder=mp1 --enable-decoder=mp1float --enable-decoder=mp2 --enable-decoder=mp2float --enable-decoder=mp3 --enable-decoder=mp3adu --enable-decoder=mp3adufloat --enable-decoder=mp3float --enable-decoder=mp3on4 --enable-decoder=mp3on4float --enable-decoder=mpeg4 --enable-decoder=mpeg4_vdpau --enable-decoder=msmpeg4v2 --enable-decoder=msmpeg4v3 --enable-decoder=opus --enable-decoder=pcm_alaw --enable-decoder=pcm_alaw_at --enable-decoder=pcm_f32be --enable-decoder=pcm_f32le --enable-decoder=pcm_f64be --enable-decoder=pcm_f64le --enable-decoder=pcm_lxf --enable-decoder=pcm_mulaw --enable-decoder=pcm_mulaw_at --enable-decoder=pcm_s16be --enable-decoder=pcm_s16be_planar --enable-decoder=pcm_s16le --enable-decoder=pcm_s16le_planar --enable-decoder=pcm_s24be --enable-decoder=pcm_s24daud --enable-decoder=pcm_s24le --enable-decoder=pcm_s24le_planar --enable-decoder=pcm_s32be --enable-decoder=pcm_s32le --enable-decoder=pcm_s32le_planar --enable-decoder=pcm_s64be --enable-decoder=pcm_s64le --enable-decoder=pcm_s8 --enable-decoder=pcm_s8_planar --enable-decoder=pcm_u16be --enable-decoder=pcm_u16le --enable-decoder=pcm_u24be --enable-decoder=pcm_u24le --enable-decoder=pcm_u32be --enable-decoder=pcm_u32le --enable-decoder=pcm_u8 --enable-decoder=pcm_zork --enable-decoder=vorbis --enable-decoder=wavpack --enable-decoder=wmalossless --enable-decoder=wmapro --enable-decoder=wmav1 --enable-decoder=wmav2 --enable-decoder=wmavoice --enable-encoder=libopus --enable-hwaccel=h264_vaapi --enable-hwaccel=h264_vdpau --enable-hwaccel=mpeg4_vaapi --enable-hwaccel=mpeg4_vdpau --enable-parser=aac --enable-parser=aac_latm --enable-parser=flac --enable-parser=h264 --enable-parser=mpeg4video --enable-parser=mpegaudio --enable-parser=opus --enable-parser=vorbis --enable-demuxer=aac --enable-demuxer=flac --enable-demuxer=gif --enable-demuxer=h264 --enable-demuxer=mov --enable-demuxer=mp3 --enable-demuxer=ogg --enable-demuxer=wav --enable-muxer=ogg --enable-muxer=opus &&\ | |
make -j4 && sudo make install | |
fi | |
# PortAudio | |
if contains "portaudio" $@ || [ -z "$1" ]; then | |
cd /vagrant/Libraries | |
wget -nv http://www.portaudio.com/archives/pa_stable_v19_20140130.tgz &&\ | |
tar xf pa_stable_v19_20140130.tgz && cd portaudio &&\ | |
./configure && make -j4 && sudo make install | |
fi | |
# OpenAL | |
if contains "openal" $@ || [ -z "$1" ]; then | |
cd /vagrant/Libraries | |
[ -d openal-soft ] || git clone git://repo.or.cz/openal-soft.git &&\ | |
cd openal-soft &&\ | |
git checkout -q openal-soft-1.18.2 &&\ | |
cd build && cmake -D LIBTYPE:STRING=STATIC .. &&\ | |
make -j4 && sudo make install | |
fi | |
# OpenSSL | |
if contains "openssl" $@ || [ -z "$1" ]; then | |
cd /vagrant/Libraries | |
[ -d openssl ] || git clone https://github.com/openssl/openssl &&\ | |
cd openssl && git checkout -q OpenSSL_1_0_1-stable &&\ | |
./config && make -j4 && sudo make install | |
fi | |
# Libxcbcommon | |
if contains "xcbcommon" $@ || [ -z "$1" ]; then | |
cd /vagrant/Libraries | |
[ -d libxkbcommon ] || git clone https://github.com/xkbcommon/libxkbcommon.git &&\ | |
cd libxkbcommon && git checkout -q xkbcommon-0.7.2 &&\ | |
./autogen.sh --disable-x11 &&\ | |
make -j4 && sudo make install | |
fi | |
# Qt5 with patch | |
if contains "qt5" $@ || [ -z "$1" ]; then | |
cd /vagrant/Libraries | |
[ -d qt5_6_2 ] || git clone git://code.qt.io/qt/qt5.git qt5_6_2 &&\ | |
cd qt5_6_2 &&\ | |
perl init-repository --module-subset=qtbase,qtimageformats &&\ | |
git checkout -q v5.6.2 &&\ | |
cd qtimageformats && git checkout -q v5.6.2 && cd .. &&\ | |
cd qtbase && git checkout -q v5.6.2 &&\ | |
git apply ../../../tdesktop/Telegram/Patches/qtbase_5_6_2.diff &&\ | |
cd src/plugins/platforminputcontexts &&\ | |
git clone https://github.com/telegramdesktop/fcitx.git &&\ | |
git clone https://github.com/telegramdesktop/hime.git &&\ | |
cd ../../../.. &&\ | |
./configure -prefix "/usr/local/tdesktop/Qt-5.6.2" -release -force-debug-info -opensource -confirm-license -qt-zlib -qt-libpng -qt-libjpeg -qt-freetype -qt-harfbuzz -qt-pcre -qt-xcb -qt-xkbcommon-x11 -no-opengl -no-gtkstyle -static -openssl-linked -nomake examples -nomake tests &&\ | |
make -j4 && sudo make install | |
fi | |
# Google Breakpad | |
if contains "breakpad" $@ || [ -z "$1" ]; then | |
cd /vagrant/Libraries | |
[ -d breakpad ] || git clone https://chromium.googlesource.com/breakpad/breakpad &&\ | |
git clone https://chromium.googlesource.com/linux-syscall-support breakpad/src/third_party/lss &&\ | |
cd breakpad && ./configure --prefix=$PWD &&\ | |
make -j4 && sudo make install | |
fi | |
# Gyp | |
if contains "gyp" $@ || [ -z "$1" ]; then | |
cd /vagrant/Libraries | |
[ -d gyp ] || git clone https://chromium.googlesource.com/external/gyp &&\ | |
cd gyp && git checkout -q 702ac58e47 &&\ | |
git apply ../../tdesktop/Telegram/Patches/gyp.diff | |
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- mode: ruby -*- | |
# vi: set ft=ruby : | |
Vagrant.configure(2) do |config| | |
config.vm.box = "ubuntu/precise64" | |
config.vm.box_check_update = false | |
config.vm.provider "virtualbox" do |vb| | |
vb.memory = 8068 | |
vb.cpus = 4 | |
end | |
config.vm.provision "shell", path:"provision.sh" | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment