summaryrefslogtreecommitdiff
path: root/src/lib/buildgraph/inputartifactscanner.cpp
Commit message (Collapse)AuthorAgeFilesLines
* introduce class BuildGraphNodedynablasterJoerg Bornemann2013-11-271-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | To support different types of nodes in the build graph, we introduce the base class BuildGraphNode. Artifact now derives from BuildGraphNode. A - yet unused - RuleNode class is introduced that represents a rule in the build graph. Change-Id: Ie1ad5e7a9e65bfd5f99d3e824737516053de0f94 ***new artifacts hash in ProductBuildData Change-Id: I50521ec64f734bfb3662759076fa5e7912ac084e ***automoc fixup Change-Id: Ie2bb228ae38d63deccc600d67d283bc3beda9fec slightly nicer rule debug output Change-Id: I60ddef73cd7f0a67055f2d56e6dbe7fa45ddd450 create RuleNode objects and add them to roots Change-Id: I51a0f89b98cda524d34888ab758d7bd397d82f00 ***execute rule nodes on build Change-Id: I291c32868cd982e37393d6bc8d696f2b63fbff50 ***ArtifactSet::fromNodeSet Change-Id: I7586bcfbe43406c22b1ee1a1fd826beaa247164f ***update after rebase Change-Id: I5f73afc80b746b11eeb83aeadf29c2358accbab8 ***phonytarget Change-Id: I587b7e072e54b866e8d5ea37c874e6a8baa550e0 update after rebase Change-Id: I6017c0cbe9244fea04d513f53e3a2a85092bf962 skip nodes early We must skip Building and Built nodes. m_leaves can contain duplicates now. Change-Id: If275106a47c403a455103f4deeb20049548007f5 debug message Change-Id: I90e238eef72a8a02fb0a9f2c77715f5f15c1442d disable phony thingy Change-Id: I7bb60b850b96b65ab738c11e96c3a84cbe58d2f7 connect each output of a rule to the rule itself Change-Id: I159d76c4b63094058cc9a07ccc2d0b67c7ce06e6 TagScanner Change-Id: I4741e48cd674c0ca830ee1b4d05b59a8c542694f TagScanner deps Change-Id: If3e43a7ac25616cd151229684a085ac8ee787645 update after rebase Change-Id: I58d49a5ed1049a17733fc2154588f12c1cda53e6 only root tag scanners in product Change-Id: Ia94732a5632156a5ec3c5518c9596cd4cefac105 run TagScanners Change-Id: I869a183f2da23a43957a6df45dc5a1b30b10af92 TagScannerRunner Change-Id: Id3c5fac73e6fb84e56d6ab1d48a959f3677f7a67 crash fix Change-Id: Ie3c26dbed41ab4615915a08913c495868c3a8910 more TagScanRunner Change-Id: I80b79f101c0f4d802fb4f6515c0848e369fed066 handle removal of filetags Change-Id: Icdd8d05c2e26953f7b12d968aa5dfcc23928b9ba Qt4 build fix Change-Id: Ie5fcb64e36ddc5004003183bea7243536bc8ab15 do not waste space with type information Change-Id: I7b9354e6fceead228ba335723b9addeb701bef56 update nodes that must get new transformers Change-Id: I06cd7ffe606ae643393350c5959ef6475343929f update after rebase Change-Id: If080e664972f2950c12fd800a3e4b521e65dca3a only run tag scanners on changed sources And do not call RulesApplicator in bgloader. Change-Id: I5140c91c79a842dab933ad7b328100bdec13cb10 Conflicts: src/lib/buildgraph/buildgraphloader.cpp sketch of moc tagscanners impl Change-Id: I7736c2da1b1742bc3556ef660c163e6c32cbd4c9 Conflicts: share/qbs/modules/Qt/core/core.qbs MocTagScanner Change-Id: I87199e8f355b8b20cf2387f4d4190a20bddae0db fix lib.qbs Change-Id: Ibcb5bc290d3839b04828f8c9b155577634bcc9e4 moctagscanner split Change-Id: Iace5d48483c02b5d33d9ccd54ac07162bfc09d27
* in the scanner, only remove connections the scanner createdJoerg Bornemann2013-10-111-5/+3
| | | | | | | Task-number: QBS-394 Change-Id: I4659746be6004042949038450e2015fbb5f70b77 Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
* don't pass file tags to scanner pluginsJoerg Bornemann2013-08-271-1/+1
| | | | | | | The scanners already know the file tags they're responsible for. Change-Id: If5ed47bfc011357737df08e3fe834ec8fcf4318b Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
* remove Artifact::topLevelProjectJoerg Bornemann2013-08-021-1/+1
| | | | | | | | Every artifact has a product now. That product points to its top level project. Artifact::topLevelProject can go. Change-Id: I7a7ec921043b64eec6c704128ae465fd9ef05031 Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
* move file dependencies to dedicated classJoerg Bornemann2013-08-011-32/+36
| | | | | | | | | File dependencies are a very simple variant of artifact. We save space and structure the code more clearly by introducing the FileDependency class. Change-Id: I36b95794f9d6d3d739ea4836ebc831848a89de98 Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
* Improve handling of changes to restored build graph.Christian Kandeler2013-06-241-2/+2
| | | | | | | | | Instead of painstakingly inserting new product pointers into an existing build graph, do it the other way around and put existing build data into the newly resolved project. This is much more robust. Change-Id: If38e4a5e14c6a5faedb0c590e86aa5efc7844e39 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* Allow projects to be nested.Christian Kandeler2013-06-171-4/+4
| | | | | | | | | This is nice to have for grouping products and a requirement for aggregating existing projects into a bigger one. Change-Id: I3394642e95ea57dbc6bf1603cfed6902a5906e4c Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* fix duplication of file dependency artifactsJoerg Bornemann2013-06-101-31/+25
| | | | | | | | | | | Multiple occurrences of the same header file when scanning a cpp file led to the creation of multiple file dependency artifacts with the same file path. The problem was that we did not update the file path in the ResolvedDependencyCacheItem object. Change-Id: Id941fe501dc92c998b217ca215ddb92c0c1e1b13 Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
* Remove structural redundancy in project and product classes.Christian Kandeler2013-04-121-16/+19
| | | | | | | | | | | | | | | We had two project classes, each holding a list of products that was structurally identical, except that no BuildProduct object existed for a disabled ResolvedProduct. The same kind of duplication also happened for product dependencies. This patch gets rid of these parallel structures. BuildProject and BuildProduct are largely being demoted to data holders and are aggregated by ResolvedProject and ResolvedProduct, respectively. The resulting project structure should be easier to understand and maintain. Change-Id: I68beef60b9e0d62258f6a8337c9015864e18bd80 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* introduce classes FileTag and FileTagsJoerg Bornemann2013-02-201-1/+1
| | | | | | | | | | | Stop inconsistent usage of QSet<QString> and QList<QString> to hold file tags. This is now unified by using a FileTags container class. The FileTag class is an alias for Id. Task-number: QBS-170 Change-Id: I8917942c4327a45d3d3604f4dc39bdee12801fdb Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
* replace Q_ASSERT with QBS_ASSERT / QBS_CHECKJoerg Bornemann2013-02-141-2/+3
| | | | | Change-Id: I9f4d43b9b7be7e4ce814963d1feee81605a9d2eb Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
* do not scan qrc dependencies recursivelyJoerg Bornemann2013-02-061-5/+9
| | | | | | | | | | | | | | | | | | | The files referenced in a qrc file must not be scanned for further dependencies. Assume the following situation: - foo.qrc references bar.cpp, - bar.cpp includes bar.h We do not want to regenerate qrc_foo.cpp when bar.h changed. ScannerPlugin::usesCppIncludePaths has been turned into the flag ScannerUsesCppIncludePaths. We introduce the scanner flag ScannerRecursiveDependencies. If this flag is set, then every scan result is added to the list of file to scan. Typically, this will be set for include-file-like dependencies. Change-Id: I99e04f554fc34db3e0b90610bb3d20f7e6000c57 Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
* Remove global log sink.Christian Kandeler2013-02-061-19/+30
| | | | | | | | | | | | | | | Applications may not want to use the same log sink for all builds. The logging facility is also decoupled from the command-line client in other ways: - The LogWriter modifiers for output channel and text color are gone, since this type of decision should not be made by low-level code. Instead, the "highlight" string can be forwarded to the log sink. - The console logger now lives in app/shared, as it must never be used by library code. Change-Id: I8863a554c9b74577320ef23f6f934a74e0f0cbb0 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* do not scan files that are currently generatedJoerg Bornemann2013-02-041-2/+6
| | | | | | | | | | We must not scan files that are in the state "Building". These files must be removed from the scan result cache. Inputs of dependents of these file must be scanned again in the next build round. Change-Id: Ic77f37ebc11224d16605701660ce09a8aaf6b194 Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
* update copyright yearJoerg Bornemann2013-01-091-1/+1
| | | | | Change-Id: Ic2962e57ede037b910d7e77b01b0163f0a22cb7d Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
* Fix warning for forward-declared QSharedPointer.Christian Kandeler2012-12-051-0/+1
| | | | | Change-Id: Ica50112fe9e7c32dd47b5923ffb869071381cd96 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* Remove the BuildGraph class.Christian Kandeler2012-12-051-2/+2
| | | | | | | | Its only contents were static member functions, which now become free functions. Change-Id: If854e6804626beddcc918d0aea155e07fd945577 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* Split up buildgraph.h and buildgraph.cpp.Christian Kandeler2012-12-041-0/+3
| | | | | | | Move things to the appropriate places. Change-Id: I2f201ccdf9c465a8c3201e229629b756cc258495 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* fix spurious caching error in InputArtifactScannerJoerg Bornemann2012-12-031-17/+27
| | | | | | | | | | | Depending on which scanner was used first, the input artifact got scanned with or without include paths. The result was cached and potentially retrieved in the next round where it might be wrong. Keep a dependency cache per scanner, because different scanners might yield different results. Change-Id: I0eb6ac9675205e26600ad99015a17e911ecb68a7 Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
* Slash more heads off the BuildGraph hydra.Christian Kandeler2012-11-291-3/+2
| | | | | | | | | | | This moves almost all state out of the class into more suitable places. The functionality left is: a) An engine wrapper that can be turned into a new dedicated class pretty much as-is. b) Static helper functions that do not naturally fit elsewhere. Change-Id: Ie3d79ecdcd58c02373fb852e9ff39659c0c4f07a Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* Reduce compile dependencies.Christian Kandeler2012-11-291-0/+2
| | | | | | | | | | | | | | | | | While it seems elegant at first glance to do typedefs in class scope, it has one serious drawback: Forward declarations become impossible unless they use the non-typedef'ed type name, which defeats the purpose. As a result, dozens of headers currently include language.h and buildgraph.h, even though they technically don't have to. Fix this by introducing special forward-declaring headers and doing the typedefs there, outside the class scope. Now changes to header files included in language.h or buildgraph.h don't ripple through half the project anymore. Along the way, also remove unneeded and potentially harmful INCLUDEPATH statements from various pri files. Change-Id: Ib50db850876955216db7f39b6099c32d1239092b Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* use ArtifactList where applicableJoerg Bornemann2012-11-131-1/+1
| | | | | Change-Id: I60c6230dc1d00e2816c5da654c6d8b916c4d2b99 Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
* Introduce namespace Internal.Christian Kandeler2012-11-081-0/+2
| | | | | | | | | This makes it obvious at first glance which facilities are for public use and which are not, which should be useful especially for clients of the library. Change-Id: I7f74f13b5c8a4c63a1de57bf607084a3a3852653 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* Document some classes.Christian Kandeler2012-10-291-3/+3
| | | | | | | | | | | Along the way, rename some things to help understand them: - Configuration -> PropertyMap - Rule::fileScript -> Rule::fileName Change-Id: Ibff62526fe8e0be92b23456c942665ebb7db10dc Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com> Reviewed-by: Tobias Hunger <tobias.hunger@digia.com> Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
* Remove as much stuff as possible from the evil Qbs namespace.Christian Kandeler2012-10-161-1/+1
| | | | | | | | | | The only thing left now are the classes whose names would clash if they were in the same namespace. During the move, it turned out we have quite a number of logging-related facilities, so introduce subdir "logging". Change-Id: I3b673cd4f75e2ca61605a88886cfcdcac6d6bcd6 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* fix misuse of Q_CHECK_PTRJoerg Bornemann2012-10-161-1/+1
| | | | | | | Q_CHECK_PTR is to be used directly after allocations. Change-Id: Iefbfefb6657579e4748742c45bdd0801cbd5b193 Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
* license and copyright updatedJoerg Bornemann2012-10-081-28/+21
| | | | | | Change-Id: I0c0b3035514ee6b735e85c098029fa2f41edb6ff Reviewed-by: Christian Kandeler <christian.kandeler@digia.com> Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* style fixJoerg Bornemann2012-06-071-1/+1
| | | | | Change-Id: I020612794317fbda320121f1932d39c11a16c09b Reviewed-by: Joerg Bornemann <joerg.bornemann@nokia.com>
* scanning: cache invariants per configurationJoerg Bornemann2012-06-071-22/+48
| | | | | | | | | | The include paths are contained in the configuration. Thus per configuration we cache: - the collected include paths - the resolved dependencies per filename and dirpath Change-Id: Ic8310b46cd5d850b63b306d0434adf7a71c04c92 Reviewed-by: Christian Kandeler <christian.kandeler@nokia.com>
* scanning: only collect include paths if the scanner needs themJoerg Bornemann2012-06-071-1/+4
| | | | | Change-Id: Ib3ee7ff93d05b2fa2e1a2d69b5088243454586ff Reviewed-by: Christian Kandeler <christian.kandeler@nokia.com>
* ScanResultCache::Dependency performance fixJoerg Bornemann2012-06-051-15/+9
| | | | | | | Only check the directory part of includes for '.' and "//". Change-Id: I5174f89255496d2841a89eb3f91dc81ad1ca0d60 Reviewed-by: Christian Kandeler <christian.kandeler@nokia.com>
* Try to optimize the critical path.Christian Kandeler2012-06-041-8/+10
| | | | | | | | | | | | Profiling shows that calls to QDir::cleanPath() account to roughly a third of the time spent in qbs during a build, so we try to call that function only if necessary. For a complete build of QtCreator, this patch reduces the number of these calls from ~14 million to ~12 million, speeding up the scanning process (where they almost exclusively appear) by a modest seven per cent. Change-Id: I5aee13e4e54ad4e242d80dc7da557ccb60a232fe Reviewed-by: Joerg Bornemann <joerg.bornemann@nokia.com>
* Move input artifact scanning into a dedicated class.Christian Kandeler2012-06-011-0/+310
No functional changes. Change-Id: I48b1b71dae3c13c1dd167b11a88772474db6f06a Reviewed-by: Joerg Bornemann <joerg.bornemann@nokia.com>