<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
   "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
  <!ENTITY % general-entities SYSTEM "../../general.ent">
  %general-entities;

  <!ENTITY qt-download-http "&trinity-repo-http;/qt3-3.3.8.d.tar.gz">
  <!ENTITY qt-download-ftp  "&trinity-repo-ftp;/qt3-3.3.8.d.tar.gz ">
  <!ENTITY qt-md5sum        "78dc675e84aed595375449818cbb589a">
  <!ENTITY qt-size          "16.8 MB">
  <!ENTITY qt-buildsize     "801 MB">
  <!ENTITY qt-time          "8.6 SBU">
]>

<sect1 id="qt" xreflabel="Qt-&qt-version;">
  <?dbhtml filename="qt.html" ?>

  <sect1info>
    <othername>$LastChangedBy: bdubbs $</othername>
    <date>$Date: 2013-08-23 22:08:53 -0400 (Fri, 23 Aug 2013) $</date>
  </sect1info>

  <title>Qt-&qt-version;</title>

  <indexterm zone="qt">
    <primary sortas="a-qt">Qt</primary>
  </indexterm>

  <sect2 role="package">
    <title>Introduction to Qt</title>

    <para>The <application>Qt</application> package contains a
    <application>C++</application> GUI library. This is useful for creating
    graphical applications or executing graphical applications that are
    dynamically linked to the <application>Qt</application> library. Two of
    the major users of <application>Qt</application> are
    <application>KDE</application> and its follow on project,
    <application>Trinity</application>.</para>

    <bridgehead renderas="sect3">Package Information</bridgehead>
    <itemizedlist spacing="compact">
      <listitem>
        <para>Download (HTTP): <ulink url="&qt-download-http;"/></para>
      </listitem>
      <listitem>
        <para>Download (FTP): <ulink url="&qt-download-ftp;"/></para>
      </listitem>
      <listitem>
        <para>Download MD5 sum: &qt-md5sum;</para>
      </listitem>
      <listitem>
        <para>Download size: &qt-size;</para>
      </listitem>
      <listitem>
        <para>Estimated disk space required: &qt-buildsize;</para>
      </listitem>
      <listitem>
        <para>Estimated build time: &qt-time;</para>
      </listitem>
    </itemizedlist>

    <bridgehead renderas="sect3">Additional Downloads</bridgehead>
    <itemizedlist spacing='compact'>
      <listitem>
        <para>Required Patch: <ulink
          url="&patch-root;/qt-3.3.8.d-libpng15-1.patch"/>
        </para>
      </listitem>
    </itemizedlist>

    <bridgehead renderas="sect3">Qt Dependencies</bridgehead>

    <bridgehead renderas="sect4">Required</bridgehead>
    <para role="required"><xref linkend="x-window-system"/></para>

    <bridgehead renderas="sect4">Recommended</bridgehead>
    <para role="recommended">
      <xref linkend="libjpeg"/> and
      <xref linkend="libmng"/>
    </para>

    <para>Note: if for whatever reason you do not have the recommended
    libraries installed on your system, you must remove the corresponding
    <parameter>-system-<replaceable>&lt;library&gt;</replaceable></parameter> and
    <parameter>-plugin-imgfmt-<replaceable>&lt;library&gt;</replaceable></parameter>
    parameters from the <command>configure</command> commands shown in the
    instructions below.</para>

    <bridgehead renderas="sect4">Optional</bridgehead>
    <para role="optional">
      <xref linkend="cups"/>,
      <xref linkend="mysql"/>,
      <xref linkend="postgresql"/>,
      <xref linkend="unixodbc"/>,
      <xref linkend="sqlite"/>, and
      <ulink url="http://firebird.sourceforge.net/">Firebird</ulink>
    </para>

    <para condition="html" role="usernotes">User Notes:
    <ulink url="&blfs-wiki;/qt"/></para>

  </sect2>

  <sect2 role="installation">
    <title>Installation of Qt</title>

    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
    href="../../xincludes/X11R6_symlink.xml"/>

    <para>There are several ways to install a complicated package such as
    <application>Qt</application>. The files are not completely position
    independent. Installation procedures execute the program
    <command>pkg-config</command> to determine the location of package
    executables, libraries, headers, and other files. For
    <application>Qt</application>, <command>pkg-config</command> will look
    for the file <filename>lib/pkgconfig/qt-mt.pc</filename> which must be
    modified if relocating the package. This file is set up correctly by
    the build process.</para>

    <para>The default installation places the files in
    <filename class='directory'>/usr/local/qt/</filename>. Many commercial
    distributions place the files in the system's
    <filename class='directory'>/usr</filename> hierarchy. The package can
    also be installed in an arbitrary directory.</para>

    <para>This section will demonstrate two different methods.</para>

    <warning>
      <para>Building <application>Qt</application> in a
      <command>chroot</command> environment may fail.</para>
    </warning>

    <note>
      <para>The build time for <application>Qt</application> is quite long. If
      you want to save some time and don't want the tutorials and examples,
      change the first <command>make</command> command to:</para>

<screen><userinput>make sub-tools</userinput></screen>

    </note>

    <sect3>
      <title>Method 1 - Installing in the '/usr' Hierarchy</title>

      <para>The advantage of this method is that no updates to the
      <filename>/etc/ld.so.conf</filename> or
      <filename>/etc/man_db.conf</filename> files are required. The package
      files are distributed within several subdirectories of the
      <filename class='directory'>/usr</filename> hierarchy.
      This is the method that most commercial distributions use.</para>

      <note>
        <para>If <application>Qt</application> is being reinstalled, run the
        following commands from a console or non-Qt based window manager.
        It overwrites <application>Qt</application> libraries that should not
        be in use during the install process.</para>
      </note>

<screen><userinput>sed -i '/QMAKE_RPATH/d' mkspecs/linux*/qmake.conf &amp;&amp;

bash
export PATH=$PWD/bin:$PATH                       &amp;&amp;
export LD_LIBRARY_PATH=$PWD/lib:$LD_LIBRARY_PATH &amp;&amp;

patch -Np1 -i ../qt-3.3.8.d-libpng15-1.patch    &amp;&amp;

./configure -prefix     /usr                \
            -docdir     /usr/share/doc/qt   \
            -headerdir  /usr/include/qt     \
            -plugindir  /usr/lib/qt/plugins \
            -datadir    /usr/share/qt       \
            -sysconfdir /etc/qt             \
            -translationdir /usr/share/qt/translations \
            -qt-gif                         \
            -system-zlib                    \
            -system-libpng                  \
            -system-libjpeg                 \
            -system-libmng                  \
            -plugin-imgfmt-png              \
            -plugin-imgfmt-jpeg             \
            -plugin-imgfmt-mng              \
            -no-exceptions                  \
            -thread                         \
            -tablet &amp;&amp;

make &amp;&amp;
exit</userinput></screen>

      <para>This package does not come with a test suite.</para>

      <para>Now, as the <systemitem class="username">root</systemitem>
      user:</para>

<screen role="root"><userinput>make install &amp;&amp;
ln -v -sf libqt-mt.so /usr/lib/libqt.so &amp;&amp;
ln -v -snf ../../bin /usr/share/qt/bin &amp;&amp;
ln -v -snf ../../include/qt /usr/share/qt/include &amp;&amp;
ln -v -snf ../../lib /usr/share/qt/lib &amp;&amp;
cp -v -r doc/man /usr/share &amp;&amp;
cp -v -r examples /usr/share/doc/qt</userinput></screen>

    </sect3>

    <sect3>
      <title>Method 2 - Installing in '/opt'</title>

      <para>This is the method recommended by the <application>Qt</application>
      developers. It has the advantage of keeping all the package files
      consolidated in a dedicated directory hierarchy. By using this method,
      an update can be made without overwriting a previous installation and
      users can easily revert to a previous version by changing one symbolic
      link.</para>

      <para>The <application>Qt</application> developers use a default location
      of <filename class='directory'>/usr/local/qt/</filename>, however this
      procedure puts the files in <filename
      class='directory'>/opt/qt-&qt-version;/</filename>
      and then creates a symbolic link to <filename>/opt/qt/</filename>.</para>

<screen><userinput>bash
export QTDIR=$PWD                                &amp;&amp;
export LD_LIBRARY_PATH=$PWD/lib:$LD_LIBRARY_PATH &amp;&amp;
export PATH=$PWD/bin:$PATH                       &amp;&amp;

patch -Np1 -i ../qt-3.3.8.d-libpng15-1.patch    &amp;&amp;

./configure -prefix /opt/qt-&qt-version; \
            -sysconfdir /etc/qt   \
            -qt-gif               \
            -system-zlib          \
            -system-libpng        \
            -system-libjpeg       \
            -system-libmng        \
            -plugin-imgfmt-png    \
            -plugin-imgfmt-jpeg   \
            -plugin-imgfmt-mng    \
            -no-exceptions        \
            -thread               \
            -tablet &amp;&amp;

make &amp;&amp;
exit</userinput></screen>

      <para>This package does not come with a test suite.</para>

      <para>Now, as the <systemitem class="username">root</systemitem>
      user:</para>

<screen role="root"><userinput>make install &amp;&amp;
ln -v -sfn qt-&qt-version; /opt/qt &amp;&amp;
ln -v -s libqt-mt.so /opt/qt/lib/libqt.so &amp;&amp;
cp -v -r doc/man examples /opt/qt/doc</userinput></screen>

    </sect3>

  </sect2>

  <sect2 role="commands">
    <title>Command Explanations</title>

    <para><command>sed -i '/QMAKE_RPATH/d' mkspecs/linux*/qmake.conf</command>:
    In Method 1, <application>Qt</application> is being installed into
    the standard system directories. The runtime library search path does not
    need to be set in this case.</para>

    <para><command>bash</command>: This command enters a sub-shell to isolate
    environment changes.</para>

    <para><command>export QTDIR=$PWD</command>: This command defines where
    the root of the <application>Qt</application> directory is located.</para>

    <para><command>export LD_LIBRARY_PATH=$PWD/lib:$LD_LIBRARY_PATH</command>:
    This command allows the not yet installed <application>Qt</application>
    libraries to be used by the not yet installed <application>Qt</application>
    programs.</para>

    <para><command>export PATH=$PWD/bin:$PATH</command>: This command
    allows the build process to find supporting executables.</para>

    <para><parameter>-qt-gif</parameter>: This switch adds support for
    <filename>gif</filename> files to the libraries.</para>

    <para><parameter>-system-zlib -system-libpng -system-libjpeg
    -system-mng</parameter>: These switches force the build instructions to use
    the shared libraries that are on your system instead of creating a custom
    set of support libraries for these functions.</para>

    <para><parameter>-plugin-imgfmt-png -plugin-imgfmt-jpeg
    -plugin-imgfmt-mng</parameter>: These switches enable run-time linking of
    the referenced libraries.</para>

    <para>If you pass the
    <option>-plugin-sql-<replaceable>&lt;driver&gt;</replaceable></option> or
    <option>-qt-sql-<replaceable>&lt;driver&gt;</replaceable></option> switch
    to the <command>configure</command> command, you must also pass
    <option>-I<replaceable>&lt;/path/to/sql/headers&gt;</replaceable></option>
    so <command>make</command> can find the appropriate header files.  For
    instance, building in <application>MySQL</application> support (as opposed
    to building the plugin) will need to use <option>-I/usr/include/mysql
    -qt-sql-mysql</option>.</para>

    <note>
      <para>To check if <application>mysql</application> is autotetected
      properly, examine the output of <command>./configure -I/usr/include/mysql
      -help</command>. Other database support will require similar
      <command>configure</command> parameters.</para>
    </note>

    <para><parameter>-no-exceptions</parameter>: This switch disables
    the exceptions coding generated by the <application>C++</application>
    compiler.</para>

    <para><parameter>-thread</parameter>: This switch adds
    support for multi-threading.</para>

    <para><command>ln -v -sf libqt-mt.so /usr/lib/libqt.so</command>: This
    command allows <command>configure</command> scripts to find a working
    <application>Qt</application> installation.</para>

    <para><command>ln -v -snf ../../bin /usr/share/qt/bin</command>: This
    command and the following two allow the
    <filename class="directory">/usr</filename> style installation to mimic
    the <filename class="directory">/opt</filename> style installation by
    making all binaries, headers and libraries available from a single
    directory, <filename class="directory">/usr/share/qt</filename>.</para>

    <para><command>cp -v -r doc/man examples /usr/share (or
    /opt/qt/doc)</command>:
    This command installs the man pages and examples which are missed by
    <command>make install</command>.</para>

    <para><command>exit</command>: This command returns to the parent shell
    and eliminates the environment variables set earlier.</para>

  </sect2>

  <sect2 role="configuration">
    <title>Configuring Qt</title>

    <sect3 id='qt-config'>
      <title>Configuration Information</title>

      <para>The <envar>QTDIR</envar> environment variable needs to be set when
      building packages that depend on <application>Qt</application>. Add the
      following to the <filename>.bash_profile</filename> initialization script
      for each user that builds packages using the <application>Qt</application>
      libraries. Alternatively, the variable can be set in the system wide
      <filename>/etc/profile</filename> file.</para>

      <para>For Method 1 (This is optional, only set this if an application is
      unable to find the installed libraries or headers):</para>

<screen><literal>export QTDIR=/usr/share/qt</literal></screen>

      <para>or for Method 2:</para>

<screen><literal>export QTDIR=/opt/qt</literal></screen>

      <para>If you installed <application>Qt</application> using Method 2,
      you also need to update the following configuration files so that
      <application>Qt</application> is correctly found by other packages
      and system processes.</para>

      <para>Update the <filename>/etc/ld.so.conf</filename> and
      <filename>/etc/man_db.conf</filename> files:</para>

<screen role="root"><userinput>cat &gt;&gt; /etc/ld.so.conf &lt;&lt; "EOF" &amp;&amp;
<literal># Begin qt addition to /etc/ld.so.conf

/opt/qt/lib

# End qt addition</literal>
EOF
ldconfig &amp;&amp;
cat &gt;&gt; /etc/man_db.conf &lt;&lt; "EOF"
<literal># Begin qt addition to man_db.conf

MANDATORY_MANPATH /opt/qt/doc/man
MANPATH_MAP       /opt/qt/bin         /opt/qt/doc/man
MANDB_MAP         /opt/qt/doc/man     /var/cache/man/qt

# End qt addition to man_db.conf</literal>
EOF</userinput></screen>

      <indexterm zone="qt qt-config">
        <primary sortas="e-etc-ld.so.conf">/etc/ld.so.conf</primary>
      </indexterm>

      <indexterm zone="qt qt-config">
        <primary sortas="e-etc-man_db.conf">/etc/man_db.conf</primary>
      </indexterm>

      <indexterm zone="qt qt-config">
        <primary sortas="e-etc-profile">/etc/profile</primary>
      </indexterm>

      <indexterm zone="qt qt-config">
        <primary sortas="e-AA.bash_profile">~/.bash_profile</primary>
      </indexterm>

      <para>Update the <envar>PKG_CONFIG_PATH</envar> environment variable
      in your <filename>~/.bash_profile</filename> or
      <filename>/etc/profile</filename> with the following:</para>

<screen><literal>PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/qt/lib/pkgconfig</literal></screen>

      <para>If you want the <application>Qt</application> executables in your
      shell search path, update the <envar>PATH</envar> environment variable
      in your <filename>~/.bash_profile</filename> or
      <filename>/etc/profile</filename> to include
      <filename class='directory'>/opt/qt/bin</filename>.</para>

      <tip><para>The PATH, MANPATH, and PKG_CONFIG_PATH can be updated in
      the extrapaths.sh (or other script) in the /etc/profile.d directory
      if you set up the startup files as recommended in
      <xref linkend='postlfs-config-profile'/>.</para></tip>

      <para>As with most libraries, there is no explicit configuration to do.
      After updating <filename>/etc/ld.so.conf</filename> as explained above,
      run <command>/sbin/ldconfig</command> so that <command>ldd</command>
      can find the shared libraries.</para>

    </sect3>

  </sect2>

  <sect2 role="content">
    <title>Contents</title>

    <segmentedlist>
      <segtitle>Installed Programs</segtitle>
      <segtitle>Installed Libraries</segtitle>
      <segtitle>Installed Directories</segtitle>

      <seglistitem>
        <seg>assistant, designer, linguist, lrelease, lupdate, moc,
        qm2ts, qmake, qtconfig, and uic</seg>
        <seg>libqt-mt.so, libqt.so libqui.so, libdesignercore.a,
        libeditor.a, and libqassistantclient.a</seg>
        <seg>/opt/qt-&qt-version; or /usr/lib/qt, /usr/share/qt,
        /usr/share/doc/qt, /usr/include/qt, and /etc/qt</seg>
      </seglistitem>
    </segmentedlist>

    <variablelist>
      <bridgehead renderas="sect3">Short Descriptions</bridgehead>
      <?dbfo list-presentation="list"?>
      <?dbhtml list-presentation="table"?>

      <varlistentry id="assistant">
        <term><command>assistant</command></term>
        <listitem>
          <para>is a tool for presenting on-line documentation.</para>
          <indexterm zone="qt assistant">
            <primary sortas="b-assistant">assistant</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="designer">
        <term><command>designer</command></term>
        <listitem>
          <para>is a full-fledged GUI builder. It includes
          powerful features such as preview mode, automatic widget
          layout, support for custom widgets, and an advanced
          property editor.</para>
          <indexterm zone="qt designer">
            <primary sortas="b-designer">designer</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="linguist">
        <term><command>linguist</command></term>
        <listitem>
          <para>provides support for translating applications into
          local languages. </para>
          <indexterm zone="qt linguist">
            <primary sortas="b-linguist">linguist</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="lrelease">
        <term><command>lrelease</command></term>
        <listitem>
          <para>is a simple command line tool. It reads a Qt project
          file and produces message files used by the application.</para>
          <indexterm zone="qt lrelease">
            <primary sortas="b-lrelease">lrelease</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="lupdate">
        <term><command>lupdate</command></term>
        <listitem>
          <para>reads a Qt project file, finds the translatable
          strings in the specified source, header and Qt Designer
          interface files, and produces or updates the translation
          files listed in the project file.</para>
          <indexterm zone="qt lupdate">
            <primary sortas="b-lupdate">lupdate</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="moc">
        <term><command>moc</command></term>
        <listitem>
          <para>generates Qt meta object support code.</para>
          <indexterm zone="qt moc">
            <primary sortas="b-moc">moc</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="qm2ts">
        <term><command>qm2ts</command></term>
        <listitem>
          <para>is a tool for converting Qt message file formats.</para>
          <indexterm zone="qt qm2ts">
            <primary sortas="b-qm2ts">qm2ts</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="qmake">
        <term><command>qmake</command></term>
        <listitem>
          <para>qmake uses information stored in project files to
          determine what should go in the makefiles it generates.</para>
          <indexterm zone="qt qmake">
            <primary sortas="b-qmake">qmake</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="qtconfig">
        <term><command>qtconfig</command></term>
        <listitem>
          <para>is used to customize the appearance of Qt applications.</para>
          <indexterm zone="qt qtconfig">
            <primary sortas="b-qtconfig">qtconfig</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="uic">
        <term><command>uic</command></term>
        <listitem>
          <para>is a Qt user interface compiler.</para>
          <indexterm zone="qt uic">
            <primary sortas="b-uic">uic</primary>
          </indexterm>
        </listitem>
      </varlistentry>

    </variablelist>

  </sect2>

</sect1>
