tdesktop/docs/building-qmake.md
John Preston b2f1177661 Remove 'git checkout 5.*' before 'init-repository'.
Something has changed in Qt libraries remote layout so now the perl
init-repository script from the old Qt version doesn't work anymore.

We init the submodules using script from the latest Qt version and
after that we checkout the desired version by tag in all submodules.
2017-04-06 11:19:00 +03:00

4.7 KiB

Building via qmake

NB These are outdated, please refer to Building using GYP/CMake instructions.

The following commands assume the following environment variables are set:

  • $srcdir: The directory into which the source has been downloaded and unpacked.
  • _qtver: The Qt version being used (eg: 5.6.2).
  • $pkgdir: The directory into which installable files are places. This is / for local installations, or can be different directory when preparing a redistributable package.

Either set them accordingly, or replace them in the below commands as desired.

The following sources should be downloaded and unpacked into $srcdir:

  • This repository (either master or a specific tag).
  • git clone git://code.qt.io/qt/qt5.git
  • git clone git+https://chromium.googlesource.com/breakpad/breakpad breakpad
  • git clone git+https://chromium.googlesource.com/linux-syscall-support breakpad-lss
  • telegramdesktop.desktop (The intention is to include this file inside the source package at some point): https://aur.archlinux.org/cgit/aur.git/plain/telegramdesktop.desktop?h=telegram-desktop
  • tg.protocol: https://aur.archlinux.org/cgit/aur.git/plain/tg.protocol?h=telegram-desktop

Preparation

cd "$srcdir/tdesktop"

mkdir -p "$srcdir/Libraries"

local qt_patch_file="$srcdir/tdesktop/Telegram/Patches/qtbase_${_qtver//./_}.diff"
local qt_dir="$srcdir/Libraries/qt${_qtver//./_}"
if [ "$qt_patch_file" -nt "$qt_dir" ]; then
  rm -rf "$qt_dir"
  git clone git://code.qt.io/qt/qt5.git
  cd "$qt_dir"
  perl init-repository --module-subset=qtbase,qtimageformats
  git checkout v$_qtver
  cd qtimageformats
  git checkout v$_qtver
  cd ../qtbase
  git checkout v$_qtver
  git apply "$qt_patch_file"
fi

if [ ! -h "$srcdir/Libraries/breakpad" ]; then
  ln -s "$srcdir/breakpad" "$srcdir/Libraries/breakpad"
  ln -s "$srcdir/breakpad-lss" "$srcdir/Libraries/breakpad/src/third_party/lss"
fi

sed -i 's/CUSTOM_API_ID//g' "$srcdir/tdesktop/Telegram/Telegram.pro"

(
  echo "DEFINES += TDESKTOP_DISABLE_AUTOUPDATE"
  echo "DEFINES += TDESKTOP_DISABLE_REGISTER_CUSTOM_SCHEME"
) >> "$srcdir/tdesktop/Telegram/Telegram.pro"

Building

# Build patched Qt
cd "$qtdir"
./configure -prefix "$srcdir/qt" -release -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 -nomake examples -nomake tests
make module-qtbase module-qtimageformats
make module-qtbase-install_subtargets module-qtimageformats-install_subtargets

export PATH="$srcdir/qt/bin:$PATH"

# Build breakpad
cd "$srcdir/Libraries/breakpad"
./configure
make

# Build codegen_style
mkdir -p "$srcdir/tdesktop/Linux/obj/codegen_style/Debug"
cd "$srcdir/tdesktop/Linux/obj/codegen_style/Debug"
qmake CONFIG+=debug ../../../../Telegram/build/qmake/codegen_style/codegen_style.pro
make

# Build codegen_numbers
mkdir -p "$srcdir/tdesktop/Linux/obj/codegen_numbers/Debug"
cd "$srcdir/tdesktop/Linux/obj/codegen_numbers/Debug"
qmake CONFIG+=debug ../../../../Telegram/build/qmake/codegen_numbers/codegen_numbers.pro
make

# Build MetaLang
mkdir -p "$srcdir/tdesktop/Linux/DebugIntermediateLang"
cd "$srcdir/tdesktop/Linux/DebugIntermediateLang"
qmake CONFIG+=debug "../../Telegram/MetaLang.pro"
make

# Build Telegram Desktop
mkdir -p "$srcdir/tdesktop/Linux/ReleaseIntermediate"
cd "$srcdir/tdesktop/Linux/ReleaseIntermediate"

qmake CONFIG+=release "../../Telegram/Telegram.pro"
make

Installation

install -dm755 "$pkgdir/usr/bin"
install -m755 "$srcdir/tdesktop/Linux/Release/Telegram" "$pkgdir/usr/bin/telegram-desktop"

install -d "$pkgdir/usr/share/applications"
install -m644 "$srcdir/telegramdesktop.desktop" "$pkgdir/usr/share/applications/telegramdesktop.desktop"

install -d "$pkgdir/usr/share/kde4/services"
install -m644 "$srcdir/tg.protocol" "$pkgdir/usr/share/kde4/services/tg.protocol"

local icon_size icon_dir
for icon_size in 16 32 48 64 128 256 512; do
  icon_dir="$pkgdir/usr/share/icons/hicolor/${icon_size}x${icon_size}/apps"

  install -d "$icon_dir"
  install -m644 "$srcdir/tdesktop/Telegram/SourceFiles/art/icon${icon_size}.png" "$icon_dir/telegram-desktop.png"
done

Notes

These instructions are based on the ArchLinux package for telegram-desktop.

In case these instructions are at some point out of date, the above may serve as an update reference.