aboutsummaryrefslogtreecommitdiffstats
path: root/doc/reference/items/probe/conanfile-probe.qdoc
blob: 191d7c8945275f4bd6bc09bc27a70986658719dd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
/****************************************************************************
**
** Copyright (C) 2020 Richard Weickelt
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qbs.
**
** $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$
**
****************************************************************************/

/*!
    \contentspage list-of-probes.html
    \qmltype ConanfileProbe
    \ingroup list-of-probes
    \ingroup list-of-items
    \inqmlmodule QbsLanguageItems
    \keyword QML.ConanfileProbe

    \brief Extracts information about dependencies from a Conan recipe file.

    The \c ConanfileProbe interfaces \QBS to the \l{https://conan.io/}{Conan
    package manager}. It runs
    \l{https://docs.conan.io/en/latest/reference/commands/consumer/install.html}{conan
    install} on a Conan recipe file such as \c conanfile.py or \c conanfile.txt
    and extracts all available meta information about package dependencies using
    the \l{https://docs.conan.io/en/latest/reference/generators/json.html}{json
    generator}. The output may be used to set up \l{Profile} items or module
    properties in products. \c ConanfileProbe can also be used to run other
    Conan generators and to retrieve their output.

    \section1 Examples

    In the following examples we assume that our project contains a \c conanfile.py.
    This file describes all dependencies of our project. The dependency packages are
    expected to export meta information to be consumed by our project.

    \section2 Including Files Generated by Conan

    Conan has a built-in
    \l{https://docs.conan.io/en/latest/reference/generators/qbs.html}{qbs
    generator} that creates a project file containing dummy products. This is
    the easiest way to access dependencies, but also the least flexible one. It
    requires each Conan package to export correct meta information and works only
    if the dependency is a library.

    \qml
    import qbs.Probes

    Project {
        Probes.ConanfileProbe {
            id: conan
            conanfilePath: project.sourceDirectory + "/conanfile.py"
            generators: "qbs"
        }

        references: conan.generatedFilesPath + "/conanbuildinfo.qbs"

        CppApplication {
            type: "application"
            files: "main.cpp"
            Depends { name: "mylib" }
        }
    }
    \endqml

    \section2 Setting Module Properties in Products

    When a product depends on a Conan package that does not have a
    dedicated \l{List of Modules}{module}, package meta information may be
    directly fed into the \l{cpp} module.

    This approach is very flexible.

    \qml
    import qbs.Probes

    CppApplication {
        Probes.ConanfileProbe {
            id: conan
            conanfilePath: product.sourceDirectory + "/conanfile.py"
            options: ({opt1: "True"; opt2: "TheValue"})
        }
        cpp.includePaths: conan.dependencies["myLib"].include_paths
        cpp.libraryPaths: conan.dependencies["myLib"].lib_paths
        cpp.dynamicLibraries: conan.dependencies["mylib"].libs
    }
    \endqml

    \section2 Setting Up a Profile

    When multiple products depend on one or more Conan packages, the dependency
    information may be combined in a \l{Profile}. This is especially useful when
    \QBS modules are available for some of the packages, but some of their
    properties need to be initialized. Otherwise, it would have to be done
    manually in global profiles.

    \qml
    import qbs.Probes

    Project {
        Probes.ConanfileProbe {
            id: conan
            conanfilePath: project.sourceDirectory + "/conanfile.py"
        }
        Profile {
            name: "arm-gcc"
            cpp.toolchainInstallPath: conan.dependencies["arm-none-eabi-gcc"].rootpath + "/bin"
            cpp.toolchainPrefix: "arm-linux-gnueabi-"
            qbs.toolchainType: "gcc"
        }
    }
    \endqml

    This allows fully automated dependency management, including compiler
    toolchains and is very useful when teams work in heterougeneous
    environments.

*/

/*!
    \qmlproperty stringList ConanfileProbe::additionalArguments

    Additional command line arguments that are appended to the \c{conan install}
    command.

    \defaultvalue []
*/

/*!
    \qmlproperty path ConanfileProbe::conanfilePath

    Path to a \c conanfile.py or \c conanfile.txt that is used by this probe.

    This property cannot be set at the same time as \l{ConanfileProbe::}{packageReference}.

    \nodefaultvalue
*/

/*!
    \qmlproperty var ConanfileProbe::dependencies

    This property contains the same information as
    \l{ConanfileProbe::}{json}.dependencies, but instead of an array, \c
    dependencies is a map with package names as keys for convenient access.

    \readonly
    \nodefaultvalue
*/

/*!
    \qmlproperty path ConanfileProbe::executable

    The name of or the path to the Conan executable.

    \defaultvalue "conan.exe" on Windows, "conan" otherwise
*/

/*!
    \qmlproperty path ConanfileProbe::generatedFilesPath

    The path of the folder where Conan generators store their files. Each
    instance of this probe creates a unique folder under
    \l{Project::buildDirectory}{Project.buildDirectory}. The folder name is a
    hash of the arguments supplied to \c{conan install}.

    \readonly
    \nodefaultvalue
*/

/*!
    \qmlproperty stringList ConanfileProbe::generators

    Conan generators to be executed by this probe. The
    \l{https://docs.conan.io/en/latest/reference/generators/json.html}{JSON
    generator} is always enabled. Generated files are written to the
    \l{ConanfileProbe::generatedFilesPath}{generatedFilesPath} folder.

    \sa {https://docs.conan.io/en/latest/reference/generators.html}{Available
    generators}

    \defaultvalue ["json"]
*/

/*!
    \qmlproperty var ConanfileProbe::json

    The parsed output of Conan's
    \l{https://docs.conan.io/en/latest/reference/generators/json.html}{JSON
    generator} as a JavaScript object.

    \readonly
    \nodefaultvalue
*/

/*!
    \qmlproperty var ConanfileProbe::options

    Options applied to \c{conan install} via the \c{-o} flag.
    This property is an object in the form \c{key:value}.

    Example:
    \qml
    options: ({someOpt: "True", someOtherOpt: "TheValue"})
    \endqml

    \nodefaultvalue
*/

/*!
    \qmlproperty string ConanfileProbe::packageReference

    Reference of a Conan package in the form \c{name/version@user/channel}.
    Use this property if you want to probe an existing package in the local
    cache or on a remote.

    This property cannot be set at the same time as \l{ConanfileProbe::}{conanfilePath}.

    \nodefaultvalue
*/

/*!
    \qmlproperty var ConanfileProbe::settings

    Settings applied to \c{conan install} via the \c{-s} flag.
    This property is an object in the form \c{key:value}.

    Example:
    \qml
    settings: ({os: "Linux", compiler: "gcc"})
    \endqml

    \nodefaultvalue
*/