From 5bd1428b291b09196ae1e9c582e7925d9c140d6b Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Tue, 20 Jan 2015 14:22:18 +0100 Subject: Add a dependencies example Change-Id: I77c404294a5210f892c88480fa5b56075d44cc30 Reviewed-by: Jarek Kobus Reviewed-by: Leena Miettinen Reviewed-by: Kai Koehne --- examples/dependencies/README | 5 + examples/dependencies/config/config.xml | 10 ++ examples/dependencies/dependencies.pro | 13 +++ .../packages/componentA/data/installcontent.txt | 2 + .../packages/componentA/meta/package.xml | 8 ++ .../packages/componentB/meta/package.xml | 8 ++ .../packages/componentC/meta/package.xml | 9 ++ .../packages/componentD/meta/package.xml | 9 ++ .../packages/componentE/meta/package.xml | 9 ++ .../meta/package.xml | 8 ++ .../meta/package.xml | 8 ++ .../componentF.subcomponent1/meta/package.xml | 8 ++ .../meta/package.xml | 8 ++ .../meta/package.xml | 8 ++ .../componentF.subcomponent2/meta/package.xml | 8 ++ .../packages/componentF/meta/package.xml | 8 ++ .../packages/componentG/meta/package.xml | 10 ++ examples/doc/dependencies.qdoc | 118 +++++++++++++++++++++ .../doc/images/qtifw-examples-dependencies.png | Bin 0 -> 29846 bytes examples/examples.pro | 1 + 20 files changed, 258 insertions(+) create mode 100644 examples/dependencies/README create mode 100644 examples/dependencies/config/config.xml create mode 100644 examples/dependencies/dependencies.pro create mode 100644 examples/dependencies/packages/componentA/data/installcontent.txt create mode 100644 examples/dependencies/packages/componentA/meta/package.xml create mode 100644 examples/dependencies/packages/componentB/meta/package.xml create mode 100644 examples/dependencies/packages/componentC/meta/package.xml create mode 100644 examples/dependencies/packages/componentD/meta/package.xml create mode 100644 examples/dependencies/packages/componentE/meta/package.xml create mode 100644 examples/dependencies/packages/componentF.subcomponent1.subsubcomponent1/meta/package.xml create mode 100644 examples/dependencies/packages/componentF.subcomponent1.subsubcomponent2/meta/package.xml create mode 100644 examples/dependencies/packages/componentF.subcomponent1/meta/package.xml create mode 100644 examples/dependencies/packages/componentF.subcomponent2.subsubcomponent1/meta/package.xml create mode 100644 examples/dependencies/packages/componentF.subcomponent2.subsubcomponent2/meta/package.xml create mode 100644 examples/dependencies/packages/componentF.subcomponent2/meta/package.xml create mode 100644 examples/dependencies/packages/componentF/meta/package.xml create mode 100644 examples/dependencies/packages/componentG/meta/package.xml create mode 100644 examples/doc/dependencies.qdoc create mode 100644 examples/doc/images/qtifw-examples-dependencies.png (limited to 'examples') diff --git a/examples/dependencies/README b/examples/dependencies/README new file mode 100644 index 000000000..e7b510d7e --- /dev/null +++ b/examples/dependencies/README @@ -0,0 +1,5 @@ +Create an installer that shows how the dependency solving works + +Generate installer with: + +binarycreator -c config/config.xml -p packages installer diff --git a/examples/dependencies/config/config.xml b/examples/dependencies/config/config.xml new file mode 100644 index 000000000..4a1b42501 --- /dev/null +++ b/examples/dependencies/config/config.xml @@ -0,0 +1,10 @@ + + + Dependency Solving Example + 1.0.0 + Dependency Solving Example + Qt-Project + Qt IFW Examples + @HomeDir@/IfwDependencySolvingExample + true + diff --git a/examples/dependencies/dependencies.pro b/examples/dependencies/dependencies.pro new file mode 100644 index 000000000..415df49d5 --- /dev/null +++ b/examples/dependencies/dependencies.pro @@ -0,0 +1,13 @@ +TEMPLATE = aux + +INSTALLER = installer + +INPUT = $$PWD/config/config.xml $$PWD/packages +example.input = INPUT +example.output = $$INSTALLER +example.commands = ../../bin/binarycreator -c $$PWD/config/config.xml -p $$PWD/packages ${QMAKE_FILE_OUT} +example.CONFIG += target_predeps no_link combine + +QMAKE_EXTRA_COMPILERS += example + +OTHER_FILES = README diff --git a/examples/dependencies/packages/componentA/data/installcontent.txt b/examples/dependencies/packages/componentA/data/installcontent.txt new file mode 100644 index 000000000..f40001983 --- /dev/null +++ b/examples/dependencies/packages/componentA/data/installcontent.txt @@ -0,0 +1,2 @@ +This file will be installed into the target directory.... + diff --git a/examples/dependencies/packages/componentA/meta/package.xml b/examples/dependencies/packages/componentA/meta/package.xml new file mode 100644 index 000000000..095735eb1 --- /dev/null +++ b/examples/dependencies/packages/componentA/meta/package.xml @@ -0,0 +1,8 @@ + + + Component A + This component does not depend on any other component. + 1.0.0 + 2014-08-25 + 100 + diff --git a/examples/dependencies/packages/componentB/meta/package.xml b/examples/dependencies/packages/componentB/meta/package.xml new file mode 100644 index 000000000..2d51fee6e --- /dev/null +++ b/examples/dependencies/packages/componentB/meta/package.xml @@ -0,0 +1,8 @@ + + + Component B + This component does not depend on any other component. + 1.0.0 + 2014-08-25 + 90 + diff --git a/examples/dependencies/packages/componentC/meta/package.xml b/examples/dependencies/packages/componentC/meta/package.xml new file mode 100644 index 000000000..c829970e7 --- /dev/null +++ b/examples/dependencies/packages/componentC/meta/package.xml @@ -0,0 +1,9 @@ + + + Component C (depends on A and B) + This component depends on Component A and Component B. Selecting this component for installation also marks Component A and Component B for installation, which in turn marks Component D, because it has an automatic dependency on Component A and Component B. + componentA, componentB + 1.0.0 + 2014-08-25 + 80 + diff --git a/examples/dependencies/packages/componentD/meta/package.xml b/examples/dependencies/packages/componentD/meta/package.xml new file mode 100644 index 000000000..d2af2e64c --- /dev/null +++ b/examples/dependencies/packages/componentD/meta/package.xml @@ -0,0 +1,9 @@ + + + Component D (auto depends on A and B) + This component has an automatic dependency on Component A and Component B. If both A and B are marked for installation, this component is also installed. + componentA, componentB + 1.0.0 + 2014-08-25 + 70 + diff --git a/examples/dependencies/packages/componentE/meta/package.xml b/examples/dependencies/packages/componentE/meta/package.xml new file mode 100644 index 000000000..3f41c095c --- /dev/null +++ b/examples/dependencies/packages/componentE/meta/package.xml @@ -0,0 +1,9 @@ + + + Component E (forced) + This is a forced component that is always installed. + true + 1.0.0 + 2014-08-25 + 60 + diff --git a/examples/dependencies/packages/componentF.subcomponent1.subsubcomponent1/meta/package.xml b/examples/dependencies/packages/componentF.subcomponent1.subsubcomponent1/meta/package.xml new file mode 100644 index 000000000..4bb53fca2 --- /dev/null +++ b/examples/dependencies/packages/componentF.subcomponent1.subsubcomponent1/meta/package.xml @@ -0,0 +1,8 @@ + + + Subsubcomponent 1 + This component does not depend on any other component. + 1.0.0 + 2014-08-25 + 100 + diff --git a/examples/dependencies/packages/componentF.subcomponent1.subsubcomponent2/meta/package.xml b/examples/dependencies/packages/componentF.subcomponent1.subsubcomponent2/meta/package.xml new file mode 100644 index 000000000..ade4cf15a --- /dev/null +++ b/examples/dependencies/packages/componentF.subcomponent1.subsubcomponent2/meta/package.xml @@ -0,0 +1,8 @@ + + + Subsubcomponent 2 + This component does not depend on any other component. + 1.0.0 + 2014-08-25 + 50 + diff --git a/examples/dependencies/packages/componentF.subcomponent1/meta/package.xml b/examples/dependencies/packages/componentF.subcomponent1/meta/package.xml new file mode 100644 index 000000000..5eb6fd46a --- /dev/null +++ b/examples/dependencies/packages/componentF.subcomponent1/meta/package.xml @@ -0,0 +1,8 @@ + + + Subcomponent 1 + This component contains 2 leaf components. + 1.0.0 + 2014-08-25 + 100 + diff --git a/examples/dependencies/packages/componentF.subcomponent2.subsubcomponent1/meta/package.xml b/examples/dependencies/packages/componentF.subcomponent2.subsubcomponent1/meta/package.xml new file mode 100644 index 000000000..4bb53fca2 --- /dev/null +++ b/examples/dependencies/packages/componentF.subcomponent2.subsubcomponent1/meta/package.xml @@ -0,0 +1,8 @@ + + + Subsubcomponent 1 + This component does not depend on any other component. + 1.0.0 + 2014-08-25 + 100 + diff --git a/examples/dependencies/packages/componentF.subcomponent2.subsubcomponent2/meta/package.xml b/examples/dependencies/packages/componentF.subcomponent2.subsubcomponent2/meta/package.xml new file mode 100644 index 000000000..ade4cf15a --- /dev/null +++ b/examples/dependencies/packages/componentF.subcomponent2.subsubcomponent2/meta/package.xml @@ -0,0 +1,8 @@ + + + Subsubcomponent 2 + This component does not depend on any other component. + 1.0.0 + 2014-08-25 + 50 + diff --git a/examples/dependencies/packages/componentF.subcomponent2/meta/package.xml b/examples/dependencies/packages/componentF.subcomponent2/meta/package.xml new file mode 100644 index 000000000..8f2cfdc64 --- /dev/null +++ b/examples/dependencies/packages/componentF.subcomponent2/meta/package.xml @@ -0,0 +1,8 @@ + + + Subcomponent 2 + This component contains 2 leaf components. + 1.0.0 + 2014-08-25 + 50 + diff --git a/examples/dependencies/packages/componentF/meta/package.xml b/examples/dependencies/packages/componentF/meta/package.xml new file mode 100644 index 000000000..74756bae6 --- /dev/null +++ b/examples/dependencies/packages/componentF/meta/package.xml @@ -0,0 +1,8 @@ + + + Component F + This component contains 2 subcomponents. + 1.0.0 + 2014-08-25 + 40 + diff --git a/examples/dependencies/packages/componentG/meta/package.xml b/examples/dependencies/packages/componentG/meta/package.xml new file mode 100644 index 000000000..3e14256b4 --- /dev/null +++ b/examples/dependencies/packages/componentG/meta/package.xml @@ -0,0 +1,10 @@ + + + Component G (default, depends on A) + By default, this component is selected for installation. It depends on component A. + true + 1.0.0 + 2014-08-25 + componentA + 30 + diff --git a/examples/doc/dependencies.qdoc b/examples/doc/dependencies.qdoc new file mode 100644 index 000000000..96be950c2 --- /dev/null +++ b/examples/doc/dependencies.qdoc @@ -0,0 +1,118 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Installer Framework. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: http://www.gnu.org/copyleft/fdl.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \example dependecies + \ingroup qtifwexamples + \title Dependency Solving Example + + \brief Using components' package.xml files to define dependencies and + automatic dependencies between components. + + \image qtifw-examples-dependencies.png + + \e{Dependency Solving} illustrates how to specify dependencies and automatic + dependencies between components in the package information files and how + that influences the installation and maintenance processes. + + \include installerfw-examples-configuring.qdocinc + + \list + \li The \c element is set to \c true to create + a local repository. This enables end users to run the maintenance + tool after the initial installation to install additional components + or to uninstall components. The changes in the installation will + respect the dependencies defined in the example. + \endlist + + \quotefile dependencies/config/config.xml + + \include installerfw-examples-packaging.qdocinc + + \list + \li The \c element specifies the location of the + component in the component tree. The tree is sorted from highest to + lowest priority, with the highest priority on the top. + \endlist + + In this example, the package.xml files for the components contain additional + elements that specify the dependencies. The following sections illustrate + how the elements are used. + + \section1 Specifying Dependencies on Other Components + + We define a dependency for \e{Component C} on \e{Component A} and + \e{Component B}. Thus, if we select Component C for installation, both + Component A and Component B are installed as well. We define the + dependencies in the \c element in Component C's package.xml + file as a comma-separated list of the identifiers of the components that + this component depends on: + + \quotefile dependencies/packages/componentC/meta/package.xml + + \section1 Specifying Automatic Dependencies on Other Components + + We define an automatic dependency for \e{Component D} on Component A and + Component B. Thus, if Component A and Component B are both marked for + installation, Component D is automatically installed as well. + We define the automatic dependency in the \c element in + Component D's package.xml file: + + \quotefile dependencies/packages/componentD/meta/package.xml + + \section1 Forcing the Installation of a Component + + We define that \e{Component E} is always automatically installed and the end + user cannot deselect it. To define this, we set the \c + element to \c true in Component E's package.xml file: + + \quotefile dependencies/packages/componentE/meta/package.xml + + \section1 Installing Components by Default + + We define a dependency for \e{Component G} on Component A, and we mark G as + a default component. Thus, Component G is marked for installation by + default, and so is Component A, because it is required by G. To define this, + we set the value of the \c element to \c true in Component G's + package.xml file: + + \quotefile dependencies/packages/componentG/meta/package.xml + + \section1 Solving the Dependencies + + Selecting component C for installation also selects the following + components: + + \list + \li Component A and Component B, because Component C requires them. + \li Component D, because both Component A and Component B are marked for + installation and thus the conditions for installing Component D are + met. + \endlist + + \include installerfw-examples-generating.qdocinc +*/ diff --git a/examples/doc/images/qtifw-examples-dependencies.png b/examples/doc/images/qtifw-examples-dependencies.png new file mode 100644 index 000000000..2af737d66 Binary files /dev/null and b/examples/doc/images/qtifw-examples-dependencies.png differ diff --git a/examples/examples.pro b/examples/examples.pro index 1e5a816cd..d88e5611f 100644 --- a/examples/examples.pro +++ b/examples/examples.pro @@ -3,6 +3,7 @@ TEMPLATE = subdirs SUBDIRS += \ changeuserinterface \ componenterror \ + dependencies \ dynamicpage \ licenseagreement \ modifyextract \ -- cgit v1.2.3