Skip to content

Commit

Permalink
Add example for component aliases
Browse files Browse the repository at this point in the history
Add example project and related documentation for component aliases
concept.

Change-Id: I6937116a32c3a2abde8dc86a503ce8410d43f9e0
Reviewed-by: Katja Marttila <[email protected]>
Reviewed-by: Leena Miettinen <[email protected]>
  • Loading branch information
artarkia committed Oct 10, 2023
1 parent 1229a97 commit c1c943f
Show file tree
Hide file tree
Showing 16 changed files with 267 additions and 0 deletions.
5 changes: 5 additions & 0 deletions examples/componentalias/README
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Create an installer that shows how component aliases work

Generate installer with:

binarycreator -c config/config.xml -p packages installer
13 changes: 13 additions & 0 deletions examples/componentalias/componentalias.pro
Original file line number Diff line number Diff line change
@@ -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
28 changes: 28 additions & 0 deletions examples/componentalias/config/aliases.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?xml version="1.0"?>
<Aliases>
<Alias>
<Name>set1</Name>
<DisplayName>Component Set 1</DisplayName>
<Description>Alias for components A, B, and C</Description>
<Version>1.0.0</Version>
<Virtual>false</Virtual>
<RequiredComponents>componentA,componentB,componentC</RequiredComponents>
</Alias>
<Alias>
<Name>set2</Name>
<DisplayName>Component Set 2</DisplayName>
<Description>Alias for components D, and E</Description>
<Version>1.0.0</Version>
<Virtual>false</Virtual>
<RequiredComponents>componentD,componentE</RequiredComponents>
</Alias>
<Alias>
<Name>set-full</Name>
<DisplayName>Full Component Set</DisplayName>
<Description>Alias for full installation</Description>
<Version>1.0.0</Version>
<Virtual>false</Virtual>
<RequiredAliases>set1,set2</RequiredAliases>
</Alias>
</Aliases>

10 changes: 10 additions & 0 deletions examples/componentalias/config/config.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<Installer>
<Name>Component Alias Example</Name>
<Version>1.0.0</Version>
<Title>Component Alias Example</Title>
<Publisher>Qt-Project</Publisher>
<StartMenuDir>Qt IFW Examples</StartMenuDir>
<TargetDir>@HomeDir@/IfwExamples/componentalias</TargetDir>
<AliasDefinitionsFile>aliases.xml</AliasDefinitionsFile>
</Installer>
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
This file will be installed into the target directory....

8 changes: 8 additions & 0 deletions examples/componentalias/packages/componentA/meta/package.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0"?>
<Package>
<DisplayName>Component A</DisplayName>
<Description>This component is a part of a component alias.</Description>
<Version>1.0.0</Version>
<ReleaseDate>2014-08-25</ReleaseDate>
<SortingPriority>100</SortingPriority>
</Package>
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
This file will be installed into the target directory....

8 changes: 8 additions & 0 deletions examples/componentalias/packages/componentB/meta/package.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0"?>
<Package>
<DisplayName>Component B</DisplayName>
<Description>This component is a part of a component alias.</Description>
<Version>1.0.0</Version>
<ReleaseDate>2014-08-25</ReleaseDate>
<SortingPriority>90</SortingPriority>
</Package>
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
This file will be installed into the target directory....

8 changes: 8 additions & 0 deletions examples/componentalias/packages/componentC/meta/package.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0"?>
<Package>
<DisplayName>Component C</DisplayName>
<Description>This component is a part of a component alias.</Description>
<Version>1.0.0</Version>
<ReleaseDate>2014-08-25</ReleaseDate>
<SortingPriority>80</SortingPriority>
</Package>
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
This file will be installed into the target directory....

8 changes: 8 additions & 0 deletions examples/componentalias/packages/componentD/meta/package.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0"?>
<Package>
<DisplayName>Component D</DisplayName>
<Description>This component is a part of a component alias.</Description>
<Version>1.0.0</Version>
<ReleaseDate>2014-08-25</ReleaseDate>
<SortingPriority>70</SortingPriority>
</Package>
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
This file will be installed into the target directory....

8 changes: 8 additions & 0 deletions examples/componentalias/packages/componentE/meta/package.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0"?>
<Package>
<DisplayName>Component E</DisplayName>
<Description>This component is a part of a component alias.</Description>
<Version>1.0.0</Version>
<ReleaseDate>2014-08-25</ReleaseDate>
<SortingPriority>60</SortingPriority>
</Package>
160 changes: 160 additions & 0 deletions examples/doc/componentalias.qdoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
/****************************************************************************
**
** Copyright (C) 2023 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** 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 The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/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: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/

/*!
\example componentalias
\ingroup qtifwexamples
\title Component Alias Example

\brief Using installer's aliases.xml file to define component aliases and their
relations to other aliases and components.

\e{Component Alias} illustrates how to specify component aliases and how they influence
the installation and maintenance processes for command line usage.

\include installerfw-examples-configuring.qdocinc

\list
\li The \c <AliasDefinitionsFile> element is set to \c aliases.xml to
tell the installer the source for the alias definitions.
\endlist

\quotefile componentalias/config/config.xml

In this example, the aliases.xml file declares three component aliases. Two aliases,
\c set1 and \c set2 require a subset of available components, while \c set-full
requires the former two aliases, thus all available components.

\quotefile componentalias/config/aliases.xml

For full reference of the alias definitions file syntax, see \l{Alias Definition File}.

\include installerfw-examples-packaging.qdocinc

\section1 Referring to Component Aliases from Command Line

The declared component aliases can be used from the installer's command line interface
with the \c search and \c install commands.

\section2 Searching Available Component Aliases

The \c search command will by default search available aliases first, and then normal
components:

\code
$ installer search
\endcode

The command will print a table of aliases that were declared in the alias definition file:

\code
Name: set-full
Display name: Full Component Set
Description: Alias for full installation
Version: 1.0.0
Components:
Required aliases: set1,set2
========================================
Name: set1
Display name: Component Set 1
Description: Alias for components A, B, and C
Version: 1.0.0
Components: componentA,componentB,componentC
Required aliases:
========================================
Name: set2
Display name: Component Set 2
Description: Alias for components D, and E
Version: 1.0.0
Components: componentD,componentE
Required aliases:
\endcode

\section2 Installing Available Component Aliases

The \c install command can be used to install the components referred by a component alias:

\code
$ installer install set1
\endcode

This command is practically equivalent to selecting the components explicitly by their names:

\code
$ installer install componentA componentB componentC
\endcode

When selecting aliases for installation, the component changes summary will show
separate sections for components selected by a aliases, to differentiate from manual
selection:

\code
$ installer install set1 componentD
\endcode

This will output the following component changes summary:

\code
Components selected by alias "set1":
componentA
componentB
componentC
Selected components without dependencies:
componentD
\endcode

The \c <RequiredComponents> property does not declare a hard dependency for components,
and those can be later on updated or uninstalled individually from the alias:

\code
$ maintenancetool remove componentA
\endcode

After this, selecting the \c set1 alias for installation again would also select
\c componentA for reinstallation.

\section1 Virtual Component Aliases

Component aliases may be declared \c <Virtual>. This works similarly with virtual components,
so that they cannot be manually selected by the user and do not show in component search results.
Such aliases must be included by other aliases with the \c <RequiredAliases> property.

\section1 Optional Dependencies for Component Aliases

In addition to dependencies declared with \c <RequiredComponents> and \c <RequiredAliases> as
shown in this example, aliases may have optional dependencies declared with \c <OptionalComponents>
and \c <OptionalAliases> properties. The latter properties differ from the requirements in that
they do not cause the alias declaring the requirement to become unselectable, in case the referenced
components or aliases are not known to the installer.

This provides the packager some flexibility for declaring the dependencies. For example, an
installer may be expected to use an optional repository, which contains components that a
component alias optionally depends on, but the alias should be also available for installation
when the repository is disabled.

\include installerfw-examples-generating.qdocinc
*/
1 change: 1 addition & 0 deletions examples/examples.pro
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ TEMPLATE = subdirs

SUBDIRS += \
changeuserinterface \
componentalias \
componenterror \
dependencies \
dynamicpage \
Expand Down

0 comments on commit c1c943f

Please sign in to comment.