/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage
** This file contains pre-release code and may not be distributed.
** You may use this file in accordance with the terms and conditions
** contained in the Technology Preview License Agreement accompanying
** this package.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file.  Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights.  These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** If you have questions regarding the use of this file, please contact
** Nokia at qt-info@nokia.com.
**
**
**
**
**
**
**
**
** $QT_END_LICENSE$
**
****************************************************************************/

/*!
    \page fine-tuning-features.html
    \title Fine-Tuning Features in Qt
    \ingroup qtce
    \ingroup qt-embedded-linux
    \brief Describes how to reduce the size of Qt libraries by selecting only
    the features that are needed.

    In many cases, only a fixed set of applications are deployed on an
    embedded device, making it possible to save resources by minimizing
    the size of the associated libraries. The Qt installation can easily
    be optimized by avoiding to compile in the features that are not
    required.

    \tableofcontents

    A wide range of features are defined, covering classes and technologies
    provided by several of Qt's modules.
    You can look up the different feature definitions in the
    \c{src/corelib/global/qfeatures.txt} file within the Qt source
    distribution.

    \section1 Simple Customization

    \section2 Embedded Linux

    To disable a particular feature, just run the \c configure script 
    for Qt for Embedded Linux with the \c -no-feature-<feature> option.
    For example:

    \snippet doc/src/snippets/code/doc_src_emb-features.qdoc 1

    The feature can easily be enabled again by running \c configure
    with the \c -feature-<feature> option.

    See also \l{Qt Performance Tuning}.

    \section2 Windows CE

    To disable a particular feature, just run the \c configure script 
    with the set of required \c -D<feature> options. For example,
    you can use the \c -D option to define \c{QT_NO_THREAD}:

    \snippet doc/src/snippets/code/doc_src_emb-features.qdoc 0

    The \c -D option only creates a Qt internal define. If you get linker
    errors you have to define \c QT_NO_THREAD also for your project.
    You can do this by adding \c DEFINES += \c QT_NO_THREAD to your
    \c .pro file.

    See also \l{Qt Performance Tuning}.

    \section1 Managing Large Numbers of Features

    If you want to disable a lot of features, it is more comfortable
    to use the \c qconfig tool.
    You can disable a \e set of features by creating a custom
    configuration file that defines the preferred subset of Qt's
    functionality. Such a file uses macros to disable the unwanted
    features, and can be created manually or by using the \c qconfig
    tool located in the \c{tools/qconfig} directory of the Qt source
    distribution.

    \note The \c qconfig tool is intended to be built against Qt on
    desktop platforms.

    \bold{Windows CE:} The Qt for Windows CE package contains a \c qconfig
    executable that you can run on a Windows desktop to configure the build.

    \image qt-embedded-qconfigtool.png

    The \c qconfig tool's interface displays all of Qt's
    functionality, and allows the user to both disable and enable
    features. The user can open and edit any custom configuration file
    located in the \c{src/corelib/global} directory. When creating a
    custom configuration file manually, a description of the currently
    available Qt features can be found in the
    \c{src/corelib/global/qfeatures.txt} file.

    Note that some features depend on others; disabling any feature
    will automatically disable all features depending on it. The
    feature dependencies can be explored using the \c qconfig tool,
    but they are also described in the \c{src/corelib/global/qfeatures.h}
    file.

    To be able to apply the custom configuration, it must be saved in
    a file called \c qconfig-myfile.h in the \c{src/corelib/global}
    directory. Then use the \c configure tool's \c -qconfig option
    and pass the configuration's file name without the \c qconfig-
    prefix and \c .h extension, as argument.
    The following examples show how this is invoked on each of the
    embedded platforms for a file called \c{qconfig-myfile.h}:

    \bold{Embedded Linux:}

    \snippet doc/src/snippets/code/doc_src_emb-features.qdoc 3

    \bold{Windows CE:}

    \snippet doc/src/snippets/code/doc_src_emb-features.qdoc 2

    Qt provides several ready-made custom configuration files,
    defining minimal, small, medium and large installations,
    respectively. These files are located in the
    \c{/src/corelib/global} directory in the Qt source distribution.
*/
