| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In qbs, values of list properties specified in a project file are merged
with those from the profile.
As of fb52fed84a1510a7de0172e643d6fd66a780e2e8, this is also true for
the special multiplexing properties ("qbs.architectures",
"qbs.buildVariants" etc). This means it can now happen that we end up
with duplicate entries in these lists implicitly. Therefore, it no longer
makes sense to throw an error when such duplicates are encountered, as
they were not necessarily specified verbatim. Instead, we simply ignore
the duplicate value and carry on normally.
Change-Id: Ie4fed2081bebd2b0dd62aa873cafed769b308e97
Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
|
|
|
|
|
|
|
| |
It was just an unnecessary indirection in the end.
Change-Id: I956ed4858dcc2b528be1e1fce9ab24862b99ff62
Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
|
|
|
|
|
|
|
| |
... into SetupProjectParameters, where it belongs.
Change-Id: I5cae2842200a053827739b947d1cd06e1bbe5ef9
Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
|
|
|
|
|
| |
Change-Id: Ia4a8c144431c413701707c024185ca54f49b0829
Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
|
|
|
|
|
|
|
|
| |
Project loading functionality is implemented in various source files
these days, so it makes sense to group them together.
Change-Id: Iba42b0246c40610d2a03bf6cc7ed7d3bec9d5536
Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
|
|\
| |
| |
| | |
Change-Id: I521dd5baab4b4374f9221a163ba8e83531edf8bb
|
| |
| |
| |
| |
| |
| | |
Fixes: QBS-1730
Change-Id: I83324b7d859412580213dc4eb9f1f60e0f9063f2
Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
|
| |
| |
| |
| |
| | |
Change-Id: Ibd4dd3bf5e482442079f564fa3b4e8f5adcb74f1
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
|
| |
| |
| |
| |
| | |
Change-Id: Ic97cde8cd54be6dc5455a83952c8ee6df00fdadd
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
We forgot a member, which manifested itself when using module properties
whose value referred to "original" on the group level.
Also fix a check in Evaluator that prevented us from even trying to
evaluate such properties.
Amends fb52fed84a1510a7de0172e643d6fd66a780e2e8.
Change-Id: I73cae5e6d9603f277862a1ccc8ea8f676d6a5ab1
Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
|
| |
| |
| |
| |
| | |
Change-Id: Id54960e308b96194b23515d6cf5a6e0e2e89cfa7
Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
|
|/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
===================
Problem description
===================
The ModuleLoader class as it exists before this patch has a number of
serious problems:
- It instantiates modules over and over again everywhere a
Depends item appears. The different instances are later
merged in a hopelessly obscure and error-prone way.
- It seriously pollutes the module scopes so that sloppily written
project files appear to work even though they shouldn't.
- Dependencies between products are handled twice: Once using the
normal module instantiation code (with the Export item
acting like a Module item), and also with a parallel mechanism
that does strange, seemingly redundant things especially regarding
transitive dependencies, which appear to introduce enormous
run-time overhead. It is also split up between ModuleLoader and
ProjectResolver, adding even more confusion.
- The code is messy, seriously under-documented and hardly
understood even by its original authors. It presents a huge obstacle
to potential contributors.
=================
Patch description
=================
- Each module is instantiated once per product. Property values are
merged on the fly. Special handling for dependencies between
products are kept to the absolutely required minimum.
- There are no more extra passes for establishing inter-product
dependencies. Instead, whenever an unhandled dependency is
encountered, processing the current product is paused and resumed
once the dependency is ready, with the product state getting saved
and restored in between so no work is done twice.
- The ModuleLoader class now really only locates and loads modules.
The new main class is called ProjectTreeBuilder, and we have split
off small, self-contained pieces wherever possible. This process
will be continued in follow-up patches (see next section).
=======
Outlook
=======
The ProjectTreeBuilder ist still too large and should be split up
further into small, easily digestible parts with clear responsibilities,
until the top-level code becomes tidy and self-documenting. In the end,
it can probably be merged with ProjectResolver and Loader.
However, this first requires the tight coupling between
ProjectTreeBuilder/ModuleProviderLoader/ProbesResolver/ProjectResolver
to be broken; otherwise we can't produce clean interfaces. As this would
involve touching a lot of otherwise unrelated code, it is out of scope
for this patch.
=================
Benchmarking data
=================
We first present wall-time clock results gathered by running
"qbs resolve --log-time" for qbs itself and Qt Creator on macOS
and Windows. The numbers are the average of several runs, with
outliers removed.
Then the same for a simple QML project using a static Qt on Linux
(this case is special because our current way of handling plugins
causes a huge amount of modules to be loaded).
Finally, we show the output of the qbs_benchmarker tool for
resolving qbs and Qt Creator on Linux.
The data shows a speed-up that is hardly noticeable for simple
projects, but increases sharply with project complexity.
This suggests that our new way of resolving does not suffer
anymore from the non-linear slowdown when the number
of dependencies gets large.
Resolving qbs on Windows:
Before this patch: ModuleLoader 3.6s, ProjectResolver 870ms
With this patch: ProjectTreeBuilder 3.6s, ProjectResolver 840ms
Resolving Qt Creator on Windows:
Before this patch: ModuleLoader 17s, ProjectResolver 6.8s
With this patch: ProjectTreeBuilder 10.0s, ProjectResolver 6.5s
Resolving qbs on macOS:
Before this patch: ModuleLoader 4.0s, ProjectResolver 2.3s
With this patch: ProjectTreeBuilder 4.0s, ProjectResolver 2.3s
Resolving Qt Creator on macOS:
Before this patch: ModuleLoader 32.0s, ProjectResolver 15.6s
With this patch: ProjectTreeBuilder 23.0s, ProjectResolver 15.3s
Note that the above numbers are for an initial resolve, so they include
the time for running Probes. The speed-up for re-resolving (with cached
Probes) is even higher, in particular on macOS, where Probes take
excessively long.
Resolving with static Qt on Linux (QBS-1521):
Before this patch: ModuleLoader 36s, ProjectResolver 18s
With this patch: ProjectTreeBuilder 1.5s, ProjectResolver 14s
Output of qbs_benchmarker for resolving qbs on Linux:
Old instruction count: 10029744668
New instruction count: 9079802661
Relative change: -10 %
Old peak memory usage: 69881840 Bytes
New peak memory usage: 82434624 Bytes
Relative change: +17 %
Output of qbs_benchmarker for resolving Qt Creator on Linux:
Old instruction count: 87364681688
New instruction count: 53634332869
Relative change: -39 %
Old peak memory usage: 578458840 Bytes
New peak memory usage: 567271960 Bytes
Relative change: -2 %
I don't know where the increased memory footprint for a small project
comes from, but since it goes away for larger projects, it doesn't seem
worth investigating.
Fixes: QBS-1037
Task-number: QBS-1521
Change-Id: Ieeebce8a7ff68cdffc15d645e2342ece2426fa94
Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
|
|
|
|
|
|
|
| |
contains -> includes
Change-Id: I330b1ee3319399d6c59ce5a4efaf14c642ad361e
Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Newer clang versions seem to expose serious bugs in QtScript, whose
complexity makes it difficult to track them down.
We therefore switch to the more light-weight QuickJS, which offers all
the features we need (most notably property access interception), as
well as good performance.
To save some porting effort, we removed the long-deprecated loadFile()
and loadExtension() functions.
During the porting procedure, we noticed and fixed thread safety issues
in artifact access from JS commands.
We consider this change important enough to bump the major version, so
the next release will be 2.0.
Detailed benchmarking data is below. In summary, we see a modest speed-
up at the cost of a similarly modest increase in memory consumption
(with the exception of project resolving on macOS, which has become a
bit slower). Importantly, the increase does not rise with project size,
as the comparison of qbs vs Qt Creator shows.
Output of qbs_benchmarker on Linux with qbs as test project:
========== Performance data for Resolving ==========
Old instruction count: 12870602895
New instruction count: 11923459780
Relative change: -8 %
Old peak memory usage: 61775848 Bytes
New peak memory usage: 67583424 Bytes
Relative change: +9 %
========== Performance data for Rule Execution ==========
Old instruction count: 4074062223
New instruction count: 3887473574
Relative change: -5 %
Old peak memory usage: 35123704 Bytes
New peak memory usage: 38398392 Bytes
Relative change: +9 %
========== Performance data for Null Build ==========
Old instruction count: 1104417596
New instruction count: 1011033948
Relative change: -9 %
Old peak memory usage: 24461824 Bytes
New peak memory usage: 25325920 Bytes
Relative change: +3 %
Output of qbs_benchmarker on Linux with Qt Creator as test project:
========== Performance data for Resolving ==========
Old instruction count: 67166450352
New instruction count: 60772791018
Relative change: -10 %
Old peak memory usage: 327011616 Bytes
New peak memory usage: 343724176 Bytes
Relative change: +5 %
========== Performance data for Rule Execution ==========
Old instruction count: 71684351183
New instruction count: 67051936965
Relative change: -7 %
Old peak memory usage: 374913688 Bytes
New peak memory usage: 387790992 Bytes
Relative change: +3 %
========== Performance data for Null Build ==========
Old instruction count: 8383156078
New instruction count: 7930705668
Relative change: -6 %
Old peak memory usage: 180468360 Bytes
New peak memory usage: 182490384 Bytes
Relative change: +1 %
Real-world data building Qt Creator (using qbs --log-time, several runs,
removing outliers):
macOS:
Resolving: 43s -> 47s
Rule execution: 17s -> 14s
Windows:
Resolving: 18s -> 16s
Rule execution: 22s -> 17s
Fixes: QBS-913
Fixes: QBS-1103
Fixes: QBS-1126
Fixes: QBS-1227
Fixes: QBS-1684
Change-Id: Ie5088155026e85bbd1e303f1c67addb15810a3cb
Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
|
|
|
|
|
|
|
|
|
|
| |
We have been supported CMake build for quite some time
so users should have plenty of time to adapt.
Ubuntu, Brew and macports also use CMake for building QBS.
Change-Id: Ib78177f4a7ca8cdea1a2f3a8eac8bfe804674f32
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
|
|
|
|
|
|
|
|
| |
Replace all the possible use of the qbs module that can be replaced by
the Host and FileInfo services.
Change-Id: I0d6f820bb2577eacd9081ec2df1eb53adf94d50e
Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
|
|
|
|
|
| |
Change-Id: I89f510619196cc01a9e3b0c2273888b12b188928
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
|
|
|
|
|
|
|
|
|
| |
This item has grown over time and now pulls bundle module and xcode module on
macOS which is not desired as it make harder to read verbose logs when
debugging tests.
Change-Id: I7fa4dfaec477b5c6d8d8ec602d10db866c353441
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
... because we don't need in this inclusion at all.
But for some cases it is impossible to remove that inclusions
(and even to move on next lines) because then the some tests
are failed by unknown reason. For those tests were added the
following comments on the inclusion lines:
`// FIXME: Don't remove this import because then the test fails!`
Change-Id: I9153fd0e38b94af08168e499ee46a23889ee4d73
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
| |
Also, make QtScript dependency optional like we do in the Qbs build.
Tested on macOS, Linux and Windows.
CMake 3.15 is now required for the CMP0092 policy which removes default
warning flags from CMAKE_CXX_FLAGS.
Change-Id: I199fb802d5ad72d1ac8d5a89c05372c43581c95d
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
|
|
|
|
|
|
|
|
|
| |
Some of those tests require Qt.script headers which are used in
corelib's headers. Introduce a new QbsUnitTest item type that pulls in
the dependency on Qt.script/scriptengine for those tests.
Change-Id: I5b981b910191ba690eded14bdf64b540f334bd53
Reviewed-by: Denis Shienkov <denis.shienkov@gmail.com>
|
|
|
|
|
| |
Change-Id: I585fe2646339a7d7454570638bef2ad5e9ab502a
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
|
|
|
|
|
| |
Change-Id: I404ac10a14517763daf656dd38dd560534cbf1fa
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
|
|
|
|
|
| |
Change-Id: If2c25fb03a9c6429a4af66efcd703e4fefe65820
Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
... for use in Export items.
It's not obvious that "product" refers to the exporting product, and in
fact setting it up this way pollutes the scope for modules loaded via
Export items.
Therefore, we introduce exportingProduct for symmetry with
importingProduct.
[ChangeLog] Deprecate the product variable inside Export items in favor
of the new exportingProduct variable.
Task-number: QBS-1576
Change-Id: Ie91752d1ae2160cb7701ae0167bccde0cd5c0e5d
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
|
|
|
|
|
| |
Change-Id: I94bd7288a9ef3b7a785a76386ff7d395cdd01f81
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This change allows to build Qbs using CMake build tool
Tested platforms
- Linux (gcc)
- macOS (clang)
- Windows (msvc2017)
Missing features (compared to Qbs build)
- Documentation build
- Bundled QtScript support
- Static build
- .pc file for qbscore
- qbs module for qbscore
Change-Id: I09b5dadd6723d5a47e5ef2a9a38d3300488718f2
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
|
|\
| |
| |
| | |
Change-Id: Ice408bd77aa9f6481960c4fdf7f345a1a39b9f80
|
| |
| |
| |
| |
| |
| | |
Change-Id: Ifd57049c89df83fc5ca9a8cac35af5a16635b312
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
|
|/
|
|
|
| |
Change-Id: I6c86565b8464efd0b7aec61c12879d3b95a5871c
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
|
|
|
|
|
| |
Change-Id: I1d6968de823c43e42ca53eb68972ba5e69dc29ed
Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
tests/auto/language/tst_language.cpp:539: warning: loop variable 'p' has type
'const qbs::Internal::ResolvedProductConstPtr &'
(aka 'const shared_ptr<const qbs::Internal::ResolvedProduct> &') but is
initialized with type 'const std::shared_ptr<qbs::Internal::ResolvedProduct>'
resulting in a copy [-Wrange-loop-construct]
for (const ResolvedProductConstPtr &p : mainProduct->dependencies) {
^
Change-Id: Ie576a245d7aad5d4dcfac32f5394b18f05e862d5
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
|
|
|
|
|
|
|
|
|
|
| |
When a project contains a Profile item, it should be possible to use
this profile for all products without explicitly selecting it in the
product items.
Task-number: QTCREATORBUG-23985
Change-Id: Ifba53d26dc302cedd4be7a906ef2fd6fb3e6eb9d
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch introduces QBS_TEST_SOURCE_ROOT environment variable that can be used
to customize the source location of test data. Previously, the original testdata
location was compiled into the test binaries. Thus it was impossible to run the
test suites on a different host than the build host.
In order to improve test coverage, we want to build the test suites once (for
instance in a Docker environment) and then run them multiple times in different
environments which might have a different file layout. In that case, the
testdata location must be configurable.
Change-Id: I7673826e6ea6f2e3aa893e657351a84c49a1033e
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
If a multiplexed product depends on another multiplexed product, Qbs previously
forced all multiplexed properties to match exactly. Only if Depends.profiles was
specified, the comparison was limited to the qbs.profile property and all other
properties were ignored.
While strict matching is usually the natural choice, there are corner cases
where it limits the applicability of Qbs. For example when multiplexing product
A over buildVariant, but product B over buildVariant and architecture. In such
cases a relaxed matching would be desirable, where only the common properties of
A and B are considered. As long as there is only a single resulting dependency,
the dependency is unambiguous and safe.
Task-number: QBS-1515
Change-Id: I4ae6b413229bf1577311b4198d0596447e650816
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
List properties of all dependent modules were previously merged in
lexicographical order and did not take any module hierarchy into account.
This resulted in errors, for instance when multiple inter-dependent modules
specified cpp.staticLibraries and the libraries had dependencies on each other.
This patch merges list properties according to the top-sorted modules list. This
is equivalent to a breadth-first search in the dependency graph. Modules on the
same hierarchy level are merged in reverse lexicographical order for
implementation simplicitly. For instance, the modules Qt.core, Qt.gui and
Qt.network would be merged in the order Qt.network, Qt.gui, Qt.core.
The resulting order is stable and does not dependent on anything else than the
actual dependency relationships and the module names. I.e. the order of
Depends items is irrelevant.
This change leads to a much simpler implementation of ModuleMerger and has the
positive side-effect that property values are evaluated in the correct scope
more often.
A warning is now generated when multiple modules write to the same scalar
property and the warning is being tested. It was previously there as well, but
did not fire in all cases, for instance when an Export item wrote to a scalar
property as well as an exported module.
Fixes: QBS-1505
Fixes: QBS-1517
Change-Id: I450d2a84cd29afe42c17be7e946e4f755da1c49f
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When Depends.profiles contained a non-existing profile, Qbs just crashed.
When Depends.profiles was set, but the dependency had an aggregator, the
aggregator was always selected. This behavior was wrong. When Depends.profiles
is set, it must take precedence and the aggregator must be ignored.
Fixes: QBS-1513
Fixes: QBS-1514
Change-Id: I214afe0e2921b773ea1c224732c5c5430e7af063
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
|
|
|
|
|
|
| |
Change-Id: If84e3e4c832c2b3dc39e40be13e989996ab764d1
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
|
|
|
|
|
|
| |
Change-Id: I7419cc3fbc1e8776de3943852dcedab4c95d1c32
Reviewed-by: Anton Kudryavtsev <antkudr@mail.ru>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
|
|
|
|
|
|
| |
Change-Id: I592d433e7c473ae9f27ca08e701516efe53650ba
Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
If a dependency is not found, we now search for a matching module
provider that can generate one for us.
We also provide a generic fall-back provider which uses pkg-config to
locate the dependency (but could be extended to incorporate other
methods in the future). This is the most important part of this change
for practical purposes, as it makes hundreds of popular libraries
available for use in qbs projects without users having to write any
boilerplate code.
In a future patch, a module provider could also be used to implement the
functionality of the qtprofilesetup library, relieving users of the need
to create a profile for building Qt applications.
[ChangeLog] The Depends item now falls back to pkg-config to locate
dependencies whose names do not correspond to a qbs module.
Fixes: QBS-1107
Change-Id: Ifd4f05c237cf58cd9fe707c3da648d3dbb33e82b
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
|
|
|
|
|
|
|
| |
It prevented users from overriding variant properties.
Change-Id: I37c3e0a127048d7a6c6d396b20b424003ac25903
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
|
|\
| |
| |
| | |
Change-Id: I44f8e2c5f3fbe8fc67deada65a4136257572239e
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
There is no conflict if the same file is pulled in both as a target
artifact of a module and a normal source file.
Fixes: QBS-1416
Change-Id: Ic7467af5a8728ebb1540381c845ffc0f40e06a9c
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
|
|\ \
| |/
| |
| | |
Change-Id: I5cf41522f027adac0889dc1df96613012216f092
|
| |
| |
| |
| |
| |
| |
| | |
It's unnecessary and potentially harmful.
Change-Id: Iff5a9a52a7aeb518617104c5eaa41cfeededbea5
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
|
|\ \
| |/
| |
| | |
Change-Id: I96c735aeda89e02f1fa9107ecfc10ebf4b554dbc
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
It does not appear to serve a purpose, and it prevented deriving from
the Properties item.
Change-Id: Icf71e3358299ea7a0f697637967e65dd0fb9b743
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
|
|\ \
| |/
| |
| | |
Change-Id: Ieaf617a09ed16cf0c81ea7621d4d0ba23741fbfa
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The crash would happen when creating the export information for a
product whose Export item contained an assignment of the form "x.y:
original", where x is not a module and the assignment was inside a
Properties item.
Task-number: QBS-1362
Change-Id: I900857fcd97852360ec2b75de1b7a791fd948dc4
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
|