I'm helping with setting up a wheezy-based toolchain for industrial automation.
The basic requirements are: live-build, C++11, Qt 5.3, and a frozen internal wheezy mirror.
debmirror
A good part of a day's work was lost because of #749734 and possibly #628779. Mirror rebuild is still ongoing, and fingers crossed.
This is Italy, and you can't simply download 21Gb of debs just to see how it goes.
C++11
Stable toolchains for C++11 now exist and have gained fast adoption. It makes sense, since given what is in C++11 it is unthinkable to start a new C++ project with the old standard nowadays.
C++11 is supported by g++ 4.8+ or clang 3.3+. None of them is available on wheezy or wheezy-backports.
Backports exist of g++ 4.8 only for Ubuntu 12.04, but they are uninstallable on wheezy due at least to a different libc6. I tried rebuilding g++4.8 on wheezy but quickly gave up.
clang 3.3 has a build dependency on g++ 4.8. LOL.
However, LLVM provides an APT repository with their most recent compiler, and it works, too. C++11 problem solved!
Qt 5.3
Qt 5.3 is needed because of the range of platforms it can target. There is no wheezy backport that I can find.
I cannot simply get it from Qt's Download page and install it, since we need it packaged, to build live ISOs with it.
I'm attempting to backport the packages from experimental to wheezy.
Here are its build dependencies:
libxcb-1.10 (needed by qt5)
Building this is reasonably straightforward.
libxkbcommon 0.4.0 (needed by qt5)
The version from jessie builds fine on wheezy, provided you remove
--fail-missing
from the dh_install
invocation.
libicu 52.1 (needed by harfbuzz)
The jessie packages build on wheezy, provided that mentions of clang are deleted from source/configure.ac, since it fails to build with clang 3.5 (the one currently available for wheezy on llvm.org).
libharfbuzz-dev
Backporting this is a bloodbath: the Debian packages from jessie depend on a forest of gobject hipsterisms of doom, all unavailable on wheezy. I gave up.
qt 5.3
qtbase-opensource-src-5.3.0+dfsg can be made to build with an embedded version of harfbuzz, with just this change:
diff -Naur a/debian/control a/debian/control
--- a/debian/control 2014-05-20 18:48:27.000000000 +0200
+++ b/debian/control 2014-05-29 17:45:31.037215786 +0200
@@ -28,7 +28,6 @@
libgstreamer-plugins-base0.10-dev,
libgstreamer0.10-dev,
libgtk2.0-dev,
- libharfbuzz-dev,
libicu-dev,
libjpeg-dev,
libmysqlclient-dev,
diff -Naur a/debian/rules b/debian/rules
--- a/debian/rules 2014-05-18 01:56:37.000000000 +0200
+++ b/debian/rules 2014-05-29 17:45:25.738634371 +0200
@@ -108,7 +108,6 @@
-plugin-sql-tds \
-system-sqlite \
-platform $(platform_arg) \
- -system-harfbuzz \
-system-zlib \
-system-libpng \
-system-libjpeg \
(thanks Lisandro Damián Nicanor Pérez Meyer for helping me there!)
There are probably going to be further steps in the Qt5 toolchain.
Actually, let's try prebuilt binaries
The next day with a fresh mind we realised that it is preferable to reduce our
tampering with the original wheezy to a minimum. Our current plan is to use
wheezy's original Qt and Qt-using packages, and use Qt's prebuilt
binaries in /opt
for all our custom
software.
We run Qt's installer, tarred the result, and wrapped it in a Debian package like this:
$ cat debian/rules
#!/usr/bin/make -f
QT_VERSION = 5.3
%:
dh $@
override_dh_auto_build:
dh_auto_build
sed -re 's/@QT_VERSION@/$(QT_VERSION)/g' debian-rules.inc.in > debian-rules.inc
override_dh_auto_install:
dh_auto_install
# Download and untar the prebuild Qt5 binaries
install -d -o root -g root -m 0755 debian/our-qt5-sdk/opt/Qt
curl http://localserver/Qt$(QT_VERSION).tar.xz | xz -d | tar -C debian/our-qt5-sdk/opt -xf -
# Move the runtime part to our-qt5
install -d -o root -g root -m 0755 debian/our-qt5/opt/Qt
mv debian/our-qt5-sdk/opt/Qt/$(QT_VERSION) debian/our-qt5/opt/Qt/
# Makes dpkg-shlibdeps work on packages built with Qt from /opt
# Hack. Don't try this at home. Don't ever do this unless you
# know what you are doing. This voids your warranty. If you
# know what you are doing, you won't do this.
find debian/our-qt5/opt/Qt/$(QT_VERSION)/gcc_64/lib -maxdepth 1 -type f -name "lib*.so*" \
| sed -re 's,^.+/(lib[^.]+)\.so.+$$,\1 5 our-qt5 (>= $(QT_VERSION)),' > debian/our-qt5.shlibs
$ cat debian-rules.inc.in
export PATH := /opt/Qt/@QT_VERSION@/gcc_64/bin:$(PATH)
export QMAKESPEC=/opt/Qt/@QT_VERSION@/gcc_64/mkspecs/linux-clang/
To build one of our packages using Qt5.3 and clang, we just add this to its debian/rules:
include /usr/share/our-qt5/debian-rules.inc
Wrap up
We got the dependencies sorted. Hopefully the mirror will rebuild itself tonight and tomorrow we can resume working on our custom live system.