summaryrefslogtreecommitdiff
path: root/src/lib/buildgraph/rulesapplicator.cpp
Commit message (Collapse)AuthorAgeFilesLines
* introduce class BuildGraphNodedynablasterJoerg Bornemann2013-11-271-8/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Prevent sibling artifacts from getting different transformers.Christian Kandeler2013-10-151-0/+2
| | | | | | | | | | | It is a strict requirement that all output artifacts in a rule point to the same Transformer object. This invariant can currently break under very specific circumstances related to build graph change tracking, which is likely the cause of QBS-379. Task-number: QBS-379 Change-Id: I85dc28e69794df5f50c5155171b393ab14ca6dbc Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* fix calling of prepare script functionJoerg Bornemann2013-09-241-11/+23
| | | | | | | | | The scope that contains inputs, outputs and friends was bound to the function object, which is wrong when applying the function later on. Instead, we're passing those variables as function arguments now. Change-Id: I7ad7b6a742091fae889ed57b7c9cbceea4a2ead2 Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
* Fix change tracking for properties requested from prepare scripts.Christian Kandeler2013-08-231-1/+1
| | | | | | | | | | | | | | When evaluating prepare scripts, we currently gather values requested from products as well as artifacts, but we do not differentiate between the two cases and upon restoring, we always compare the old property values to the product properties. This results in an insane amount of recompiling if any build system file changes due to false positives. With this patch, we record whether a property was requested from a product or an artifact, and use the right set of properties when tracking changes. Change-Id: Ib1fa4fad41019cfa7d3a10e0a91e7709c2f56414 Reviewed-by: Joerg Bornemann <joerg.bornemann@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>
* assign the product's build config to rule outputsJoerg Bornemann2013-07-311-5/+1
| | | | | | | | | | | | | | Before: Every output artifact of a rule output inherits the build config of an arbitrary input artifact if the rule is not a multiplex rule. Now: Every output artifact of a rule gets the product's build config. The former behavior falls apart if a rule has multiple inputs and creates inconsistency between multiplex and non-multiplex rules. It also has the effect that object files get installed if source files are marked with "install: true". Change-Id: I59de3d037b20e9d3c21c244da0d3547410e9e4da Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
* introduce FileTags::matchesJoerg Bornemann2013-07-231-5/+2
| | | | | | | | This is faster and easier to use than the !FileTags::intersect(...).isEmpty() pattern. Change-Id: I40e27704704df92544748a5d531be3542f91ce87 Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
* Improve handling of changes to restored build graph.Christian Kandeler2013-06-241-1/+1
| | | | | | | | | 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>
* Some minor improvements to the Error class.Christian Kandeler2013-06-181-4/+4
| | | | | | | | | | | | | - Rename "Error" to "ErrorInfo", to make clear that this class conveys information about errors, including that there might not actually be one. - Rename "ErrorData" to "ErrorItem", to make clear that these are parts of an aggregate structure. - Introduce ErrorInfo::hasError() for quick checking of whether an error occurred. Change-Id: Icea6ed5240d6d14bd30e9cea189c6babd7004792 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* Allow projects to be nested.Christian Kandeler2013-06-171-5/+6
| | | | | | | | | 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 checkForPropertyChanges for product valuesJoerg Bornemann2013-06-071-1/+2
| | | | | | | | | | checkForPropertyChanges always returned true, because we stored tracked product properties with the module name "product". Introduce the enum Property::Kind instead of abusing the module name. Task-number: QBS-305 Change-Id: I51a1eb28f0bb3245d7e926685f3a0fe01f981959 Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
* Use private implementation in API classes.Christian Kandeler2013-05-231-6/+6
| | | | | | | | | While we do not promise a stable ABI at the moment, this is conceptually correct and has to be done sooner or later, with increasing effort the longer we delay it. Change-Id: Icc98443974e54d377167480ace601db4981ed43c Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* Help compiler with branch prediction.Christian Kandeler2013-04-121-4/+4
| | | | | | | | | Mark error checks in potentially performance-sensitive contexts with Q_UNLIKELY. Actual benefits unknown, but it cannot hurt. Change-Id: If3d2375965e6342b5d7a0b46ad2c8a41fd3567d0 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* Remove structural redundancy in project and product classes.Christian Kandeler2013-04-121-22/+23
| | | | | | | | | | | | | | | 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>
* remember product properties used in prepare scriptsJoerg Bornemann2013-03-251-1/+11
| | | | | | | | Preparation for tracking property changes. Task-number: QBS-6 Change-Id: I2d3852a4aaca116d70d9dbcbe0a202e104765737 Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
* re-enable artifact config in Rule.Artifact.fileNameJoerg Bornemann2013-03-041-5/+2
| | | | | | | | | Remove the empty modules property. Task-number: QBS-218 Change-Id: Ic8bdb6b032ca587346062aa1c887b6cc19672a77 Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
* Move property look-up into the C++ backend.Christian Kandeler2013-02-201-1/+2
| | | | | | | | | | | Instead of exporting the complete property VariantMap of products and artifacts to JavaScript and finding the property values there, we introduce functions that do this in C++ and just export their functionality. This functionality will also be made available in the API. Change-Id: I6b8631e78b74db563403caa47ae10021ca152fa0 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* introduce classes FileTag and FileTagsJoerg Bornemann2013-02-201-12/+13
| | | | | | | | | | | 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-1/+2
| | | | | Change-Id: I9f4d43b9b7be7e4ce814963d1feee81605a9d2eb Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
* Remove global log sink.Christian Kandeler2013-02-061-10/+14
| | | | | | | | | | | | | | | 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>
* introduce property Group.fileTagsFilterJoerg Bornemann2013-01-181-0/+10
| | | | | | | | | | | | | | | | | | | With fileTagsFilter one can set properties on a certain set of generated artifacts. This property is a list of file tags. All artifacts that have file tags that are in that list will get the properties that are bound in the rest of the item. Example: Group { fileTagsFilter: ["dynamiclibrary"] qbs.installDir: "mylibs" } Group.files and Group.fileTagsFilter are exclusive. Change-Id: I764e0a823f2cda4efe4ac3c985ecde5e178bab7b 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>
* Remove the BuildGraph class.Christian Kandeler2012-12-051-6/+6
| | | | | | | | Its only contents were static member functions, which now become free functions. Change-Id: If854e6804626beddcc918d0aea155e07fd945577 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* Some engine-related optimizations.Christian Kandeler2012-12-051-3/+3
| | | | | | | | | | - Re-enable script program cache; it is safe to use now. - Create a new evaluation context only for the first build of a project. - To help with all of this, use a shared pointer for RulesEvaluationContext, as it does not have a clear owner. Change-Id: I90a7fcaf855573b756f29daff37038e98aa7c1fe Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* Split up buildgraph.h and buildgraph.cpp.Christian Kandeler2012-12-041-0/+310
Move things to the appropriate places. Change-Id: I2f201ccdf9c465a8c3201e229629b756cc258495 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>