How to Build Extra Applications

From Trinity Desktop Project Wiki
Jump to: navigation, search

This HowTo provides detailed notes and explanations for building the optional applications included in the Trinity Desktop Environment code repository.


Introduction and Requirements

The optional applications are QT3 and KDE3 applications, some of them originally third-party, which have been ported forward to TQT/TDE and are now maintained by the Trinity Project. All of them require TQT to be installed, and many also require tdelibs, so they share the dependency list for the core packages.

Other than that, well, if this page looks awfully similar to How to Build TDE Core Modules, that's because they were both split from a single difficult-to-read mega-page on the old wiki, and some material had to be common to both.


Preparing the Source

To use the release tarballs, just untar them somewhere.

To live dangerously and use the GIT sources, read Notes on GIT Sources first.


Building

Building Packages with cmake

List of Packages Building with cmake

cmake is the newer, easier, and more maintainable build system the Trinity Project is in the process of porting TDE source to. The following core and dependency packages have already been converted, and their autotools build scripts are no longer maintained:

  • abakus
  • amarok
  • dolphin
  • gtk-qt-engine
  • kde-style-lipstik
  • kde-style-qtcurve
  • kdesvn
  • kgtk-qt3
  • kio-locate
  • knetworkmanager8
  • knetworkmanager9
  • kpilot
  • kpowersave
  • rosegarden
  • tde-systemsettings
  • wlassistant

Some other packages are in the process of conversion, but do not have complete cmake build scripts yet. Build everything not in the list above with autotools.

Read the notes for individual package requirements before trying to build anything.


Performing a cmake Build

The command listing below is only an example. You will wish to edit the exports if your distribution puts things in unusual locations or if you wish to install to somewhere other than /opt/trinity . Not all exports will be needed on all systems.

export PREFIX=/opt/trinity
export SYSCONFDIR=/etc/trinity
export LIBDIR=/opt/trinity/lib
export MANDIR=/opt/trinity/man
export QTDIR=/opt/trinity/lib/qt3-3.3.8.d
export PATH=/opt/trinity/qt3-3.3.8.d/bin:/opt/trinity/bin:$PATH
export LD_LIBRARY_PATH=/opt/trinity/lib:/opt/trinity/lib/trinity:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=:/opt/trinity/lib/pkgconfig:/opt/trinity/qt3-3.3.8.d/lib/pkgconfig:$PKG_CONFIG_PATH
# Enable only one of the following:
# export DEBUG_AUTOTOOL_OPT="--disable-debug"
export DEBUG_CMAKE_OPT=""

 cmake path/to/trinity/module \
   -DCMAKE_C_FLAGS:STRING="$CPUOPTIONS" \
   -DCMAKE_CXX_FLAGS:STRING="$CPUOPTIONS $DEBUG_CMAKE_OPT" \
   -DCMAKE_INSTALL_PREFIX=${PREFIX} \
   -DSYSCONF_INSTALL_DIR=${SYSCONFDIR} \
   -DLIB_SUFFIX=${LIBDIRSUFFIX} \
   -DMAN_INSTALL_DIR=${MANDIR} \
   -DBUILD_ALL=ON
 make VERBOSE=1


Notes

  • When building on 64-bit, the following (T)Qt3 configuration option might need to be explicitly declared in some distro build scripts:
-platform linux-g++-64 (rather than linux-g++ (notice the dash!))
  • If class constructor issues surface during the build, please post the error to the trinity-users list.

Building Packages with Autoconf

Introduction

If the package you're trying to build is on the list of those that will build with cmake, try that first, because its autotools files will be unmaintained, bit-rotted, and possibly outright broken.

Please read the notes for individual package requirements before trying to build anything.

For those packages that still need to be built with autotools, the following steps must be run for each affected Trinity module, including tarball snapshots.


Regenerate Autoconf/Automake files

cd to the desired module to build, then run:

cp -Rp <path to your system's libtool.m4 file> admin/libtool.m4.in
cp -Rp <path to your system's ltmain.sh file> admin/ltmain.sh
make -f admin/Makefile.common


Configure and Build

export PREFIX=/opt/trinity
export SYSCONFDIR=/etc/trinity
export LIBDIR=/opt/trinity/lib
export MANDIR=/opt/trinity/man
export QTDIR=/opt/trinity/lib/qt3-3.3.8.d
export PATH=/opt/trinity/qt3-3.3.8.d/bin:/opt/trinity/bin:$PATH
export LD_LIBRARY_PATH=/opt/trinity/lib:/opt/trinity/lib/trinity:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=:/opt/trinity/lib/pkgconfig:/opt/trinity/qt3-3.3.8.d/lib/pkgconfig:$PKG_CONFIG_PATH
# Enable only one of the following:
# export DEBUG_AUTOTOOL_OPT="--enable-debug=full"
export DEBUG_AUTOTOOL_OPT="--disable-debug"
 CFLAGS=$CPUOPT \
 CXXFLAGS=$CPUOPT \
 ./configure \
   --prefix=${PREFIX} \
   --sysconfdir=${SYSCONFDIR} \
   --libdir=${LIBDIR} \
   --mandir=${MANDIR} \
   --with-qt-dir=${QTDIR} \
   --with-qt-includes=${QTDIR}/include \
   --with-qt-libraries=${QTDIR}/lib \
   $DEBUG_AUTOTOOL_OPT

View the Distribution Specific Builds page for additional configure options.


Notes

  • Not well documented anywhere, but when building with automake several packages need the --enable-closure configure option:
    • kaffeine
    • kdiff3
  • When building on 64-bit, the following (T)Qt3 configuration option might need to be explicitly declared in some distro build scripts:
-platform linux-g++-64 (rather than linux-g++ (notice the dash!))

Build Times

Building Trinity requires time and patience. Build times vary. Here are some guidelines from building Trinity 3.5.12 on a dual core 2.3 GHz AM2 with 4GB of RAM, using tmpfs, 7200 rpm SATA II hard drives; with Amarok, Firefox, Konsole, Konqueror, Kate, and other various apps often running concurrently. Compile times will be faster without such overhead, but likely will be longer when building with support package hooks. Packages using cmake will build faster than those still stuck on autotools.

  • k3b: 8 minutes
  • amarok: 10 minutes
  • knemo: 2 minutes
  • ktorrent: 7 minutes
  • koffice: 109 minutes


Installing

The command is the same regardless of whether your package was built with cmake or autotools:

make install || exit 1


Additional Functionality

Some applications gain additional functionality when compiled with optional dependencies available. What follows is an (incomplete) list.


List of Optional Dependencies by Application

k3b

  • libsndfile C library for reading and writing sampled sound files
  • libdvdcss library for transparent DVD device access with on-the-fly CSS decryption
  • libdvdnav library support for DVD navigation features
  • ffmpeg software to record, convert and stream audio and video
  • lame MP3 encoding support
  • libdv- quasar DV codec
  • libdvdread read DVD video disks
  • a52dec video decoder
  • faac Advanced Audio Coder (MPEG2-AAC, MPEG4-AAC)
  • faad2 AAC decoder
  • xvidcore MPEG-4 compliant video codec
  • schroedinger C implementation of BBC's dirac codec
  • openjpeg open-source JPEG 2000 codec
  • x264 H264/AVC video stream encoder
  • speex an audio compression format designed for speech
  • transcode video stream processor
  • libquicktime library for reading and writing QuickTime? files
  • mjpegtools video recording/playback tools
  • libmpeg2 mpeg-video decoding library
  • vcdimager video CD and Super Video CD tools
  • emovix video CD distribution tools
  • musepack-tools Musepack decoder/encoder
  • libmusicbrainz MusicBrainz? client library

amarok

  • Ruby
  • libmp4v2 MP4V2 tagging

koffice

  • wv2 Microsoft Word conversion
  • GraphicsMagick various image filters (chalk)
  • PostgreSQL database server (kexi)

kaffeine

  • cdparanoia digital audio extraction tool
  • gst-plugins-base GStreamer plugins
  • gstreamer streaming multimedia framework
  • xine-lib xine multimedia playback engine libraries

k9copy

  • ffmpeg software to record, convert and stream audio and video
  • dvdauthor DVD authoring tools
  • vamps DVD backup tool
  • MPlayer movie player
  • k3b CD and DVD creation and ripping

digikam

  • lcms color management engine
  • dcraw decode raw digital photos
  • libgphoto2 digital camera library
  • jasper JPEG-2000 codec
  • exiv2 Exif and IPTC metadata library and tools
  • libkdcraw dcraw C++ library wrapper
  • libkexiv2 exiv2 library wrapper
  • libkipi image plugin interface structure
  • kipi-plugins plugins for libKipi
  • sqlite self contained SQL database engine

gwenview

  • exiv2 Exif and IPTC metadata library and tools
  • libkexiv2 exiv2 library wrapper
  • libkipi image plugin interface structure
  • kipi-plugins plugins for libKipi


Quirks and Known Bugs

Krita Rename

Koffice Krita has been renamed to Chalk.

Third-party/LibreOffice

This folder contains patches that add TDE support to the upstream LibreOffice sources. The patches allow LibreOffice to use Trinity dialog boxes. The patches have not been merged into the upstream LibreOffice GIT tree, but they work just fine as-is when applied to the stock LO sources. Obtaining the advantages of these patches requires rebuilding LibreOffice from sources.

OpenGL and nVidia

Building many Trinity and related packages depend upon OpenGL, such as tdegraphics, k3b, koffice, tdenetwork, gwenview, digikam, etc.;

as well as dependency packages such as libkipi, libkdcraw, libkexiv2, avahi, etc.

If any of those packages are built when the proprietary nvidia drivers are installed, the dependent package will fail to build with an error about /usr/lib/libGL.la.

That file is installed by the proprietary nvidia package. When building for personal use only, then building those packages with nvidia installed will pose no harm.

When building packages for other users then build the entire suite of packages in a "clean" generic OpenGL environment.

Other users might not use the proprietary nvidia package. This is true of any package that has OpenGL dependencies.

MSWord Support in KOffice

The koffice package expects the wv2 package to provide MS Word import support. The older wv2-0.2.3 package is somewhat broken. Users are encouraged to update wv2-0.2.3 to wv2-0.4.2. The newer version of wv2 is compiled with cmake and ignores compiling with automake. The libwv2.la file provided upstream is broken with respect to automake and will cause automake to fail. Basically, /usr/lib/libwv2.la is missing a proper header statement. This should be patched when creating the wv2-0.4.2 package.