summaryrefslogtreecommitdiffstats
path: root/qmake/library/qmakebuiltins.cpp
Commit message (Collapse)AuthorAgeFilesLines
* add enablers for printing project errors in cumulative modeOswald Buddenhagen2015-12-211-2/+6
| | | | | | | | | | this doesn't actually do anything in qmake. Change-Id: Ia14953a5a9dc31af56ad6c338017dd5b85bb4494 Reviewed-by: hjk <hjk121@nokiamail.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com> (cherry picked from qttools/08d0cb6f8e90a818bf6d3bec7a6d00f16419b8c0) Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
* make write_file() capable of making files (not) executableOswald Buddenhagen2015-12-211-8/+19
| | | | | Change-Id: I9ca96bc3408160261781697a3471c1f446c86c3a Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
* fix raw data leak in $$sprintf()Oswald Buddenhagen2015-10-271-1/+1
| | | | | | | | | | it could be only triggered by abusing the function (no expansion actually done), and nobody is using this to start with, but still ... Change-Id: I3d4a23ae4d1eea07955572d8213094e0dc218f6d Reviewed-by: Daniel Teske <daniel.teske@digia.com> (cherry picked from qtcreator/cdc2a0f72334268684e0407e9b04b3188e00d4bf) Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
* micro-optimization: use ProStringList::join(QChar) overloadOswald Buddenhagen2015-10-271-1/+1
| | | | | | | Change-Id: I25c6205df78da7fbee0ad1b04476f528f376b7a6 Reviewed-by: Daniel Teske <daniel.teske@digia.com> (cherry picked from qtcreator/701a82d3a2185702c09dfecb361853fc18947807) Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
* QmakeParser: Do not leak temporaries into cache of filesTobias Hunger2015-10-271-1/+3
| | | | | | | | | | | | | | This prevents an access to free'd memory when opening qtcreator.pro. Looks like qml2puppet.pro gets added to that cache in QMakeVfs::writeFile with part of the including pro-file's filename in it. That part gets cleaned when that containing ProFile goes out of scope, leaving a key in QMakeVfs::m_files free'd but accessible. Change-Id: I80b43d2fbb66c214647497ea97e6e3a587e274d6 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com> (cherry picked from qtcreator/336c3159617cdb3edd35021b5fb312d4d43f9a84) Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
* don't complain about missing include()s during cumulative evaluationOswald Buddenhagen2015-10-271-0/+2
| | | | | | | | | it produces simply too many false positives. Change-Id: I3dfa109866450babe5c16f84665ad22024d99e42 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com> (cherry picked from qttools/08bae158320f6d73bf44fcf43f45f51a01334544) Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
* remove bogus parens from error messagesOswald Buddenhagen2015-05-201-2/+2
| | | | | Change-Id: I2683a4fb19a7251dc537e3265db3ba28079eb4b8 Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
* trim whitespace from windows error messagesOswald Buddenhagen2015-05-201-1/+1
| | | | | | | the messages contain a trailing CRLF, which is not helpful. Change-Id: I4a27115a191dc416a62e28a41f2a9c5893bdc64b Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
* remove trailing dots from some error messagesOswald Buddenhagen2015-05-201-3/+3
| | | | | | | | the i/o functions are not very consistent about having the dot already in the message. the windows api does, and qt passes this on. Change-Id: I2d1a213965e15478985d6eff205689ea44aa2a03 Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
* make defined() error message tell about "var" typeOswald Buddenhagen2015-05-201-1/+1
| | | | | Change-Id: I21d994ebaee2db0d9b114812a8f89bb680ca311e Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
* move some functions into ProStringList for saner OO designOswald Buddenhagen2015-02-121-1/+1
| | | | | Change-Id: I60f00f38f459fc9f8eebee9187158e4198fc9546 Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
* Update copyright headersJani Heikkinen2015-02-111-7/+7
| | | | | | | | | | | | | | | | | | Qt copyrights are now in The Qt Company, so we could update the source code headers accordingly. In the same go we should also fix the links to point to qt.io. Outdated header.LGPL removed (use header.LGPL21 instead) Old header.LGPL3 renamed to header.LGPL3-COMM to match actual licensing combination. New header.LGPL-COMM taken in the use file which were using old header.LGPL3 (src/plugins/platforms/android/extract.cpp) Added new header.LGPL3 containing Commercial + LGPLv3 + GPLv2 license combination Change-Id: I6f49b819a8a20cc4f88b794a8f6726d975e8ffbe Reviewed-by: Matti Paaso <matti.paaso@theqtcompany.com>
* make quoting in the prl writer more robustOswald Buddenhagen2015-02-051-2/+2
| | | | | Change-Id: Idd9f64ac608b7e4ed840d5d9925bf741e03d78ab Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
* remove pointless return value from QMakeParser::read()Oswald Buddenhagen2015-02-041-8/+6
| | | | | | | | | | it always returned true nowadays. an obvious followup effect is that the return value of parsedProBlock() doesn't need to be null-checked any more as well. Change-Id: I782785cab9b721a78a342a010921a73e642ebe7f Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
* Update license headers and add new license filesMatti Paaso2014-09-241-19/+11
| | | | | | | | | - Renamed LICENSE.LGPL to LICENSE.LGPLv21 - Added LICENSE.LGPLv3 - Removed LICENSE.GPL Change-Id: Iec3406e3eb3f133be549092015cefe33d259a3f2 Reviewed-by: Iikka Eklund <iikka.eklund@digia.com>
* add priority sorting to $$resolve_depends()Oswald Buddenhagen2014-07-301-12/+17
| | | | | | | | all else being equal, items with a higher numerical priority will appear first in the result. Change-Id: I4ee37ff404a53c4152a1e4fc2fc3c23ef525234d Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* qmake: Use QDir::toNativeSeparators on paths printed as infoAlessandro Portale2014-05-081-3/+3
| | | | | Change-Id: I8c587164bcff742f7ac8ad3f3f28e0b16645cb2a Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
* fix $$shell_path() for mingw+shOswald Buddenhagen2014-04-301-2/+10
| | | | | | | | the msys shell expects unix-like paths with drives converted from d:\ to /d/. Change-Id: I09e25ed2c868702e5d7d8b9cc8c04cc13410eeff Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* de-duplicate codeOswald Buddenhagen2014-04-041-3/+3
| | | | | Change-Id: Ic056acf739659215241c1cab6a462b1ab591dc78 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* qmake: add replacement function getenvJoerg Bornemann2014-03-201-1/+11
| | | | | | | | | This is useful for querying environment variables which have parentheses in their name. Such jewels exist on Windows. The usual $$(VARNAME) syntax fails for those. Change-Id: I1d2766cabdc7f637caa9ae6408967685e02f5029 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
* support a cache that is really just a cacheOswald Buddenhagen2013-11-141-21/+33
| | | | | | | | | | | | | | | | | | | | | | | | | | | unlike .qmake.cache & co., the presence of this file has no magic effects on where mkspecs, modules and other things are searched. as the obvious name "cache" is of course already taken, we call it "stash". the file is searched up to the super cache (if present), otherwise up to the normal cache/conf (if present), otherwise up to the root. if it's not found, it is created next to the super cache (if present), otherwise next to the cache/conf (if present), otherwise in the current output directory. note that the cache really should be created and populated by the top-level project if there are subprojects: otherwise, if there is an "anchor" (super/cache/conf), subprojects would race for updating the cache and make a mess. without an "anchor", each subproject would just create its own cache, kind of defeating its purpose. this is no different from the existing "cache", but it's worth mentioning that removing the "anchoring" function does not remove the "nesting order" constraint. Task-number: QTBUG-31340 Change-Id: I786d40cef40d14582a0dd4a9407863001bec4c98 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* clean superfile and cachefile paths upon creationOswald Buddenhagen2013-11-141-2/+2
| | | | | | | | | otherwise, if the output dir is the root, the path would be denormalized. the code for finding existing files already does that. Change-Id: I56d70477e9c9ffcd936325068624a84df10ffd87 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* Add JSON parsing support to qmake.Morten Johan Sørvig2013-10-171-1/+90
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add qjson* implementation files from corelib/json to the qmake build. Add a read-only compile mode, enabled by defining QT_JSON_READONLY. Add qmake built-in function parseJson(file, into) which parses a json file into the given variable. qmake uses a flat key -> value-list implementation for storing variables, which means that some hackery is need to represent arbitrarily nested JSON. Use a special "_KEYS_" variable for arrays and objects: Arrays: ["item1", "item2"] $${array._KEYS_} -> 0 1 2 $${array.0} -> "item1" $${array.1} -> "item2" Objects: { "key1" : "value1", "key2" : "value2" } $${object._KEYS_} -> key1 key2 $${object.key1} -> value1 $${object.key2} -> value2 Change-Id: I0aa2e4e4ae14fa25be8242bc16d3cffce32504d2 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* qmake: add $$title() function to convert strings to title caseTor Arne Vestbø2013-09-241-2/+10
| | | | | Change-Id: Ic535a8f7cc2ab7b7f1948b2d0237ebe9a71c7ec7 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* avoid deadlock in cache() during spec/cache loadingOswald Buddenhagen2013-08-271-1/+1
| | | | | | | | | | | | | sync up; this doesn't actually do anything in qmake. if we end up calling cache() from within the initialization of the base context, we cannot wait for for the completion of that initialization before we proceed, obviously. Change-Id: If30c6f3665fe423e767373a8821c406b2f5e0eca Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com> Reviewed-by: Daniel Teske <daniel.teske@digia.com> (cherry picked from qtcreator/b64b4431c20afd9e39c1463e736f998ef450688f)
* lock baseEnv in cache()Oswald Buddenhagen2013-08-271-3/+29
| | | | | | | | | | | | sync up; this doesn't actually do anything in qmake. as we modify the environment, it must be properly locked. this implies that initFrom() also needs to be called with a lock. Task-number: QTCREATORBUG-9835 Change-Id: I48bae9af9adaa0518e5a9db0ba08ff057ae14f9f Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com> (cherry picked from qtcreator/d022a2d19cecb00397c2a215fc4e3bf64b1e627b)
* implement simple VFS to support caching during project parsingOswald Buddenhagen2013-08-071-38/+5
| | | | | | | | | | | | sync up with qt creator - for qmake itself, this is just a minor refactoring. Change-Id: I833253f81c3159056fab2ff888f293b36cc2ef56 Reviewed-by: Daniel Teske <daniel.teske@digia.com> (cherry picked from qtcreator/66802ef8bf7989dc025e34bf91d93576189c483c) (cherry picked from qtcreator/69542826fa643a0fed2fc9e717f072c2852dc017) (cherry picked from qtcreator/196424115338fb9a535810704b7d814d318b0462) Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* don't unnecessarily use QFileInfo::filePath()Oswald Buddenhagen2013-07-191-3/+3
| | | | | | | | | just directly use the filename we constructed it from. Change-Id: Ia428a2cb4b192fea6bde62dfbf35361bcfc4b21e Reviewed-by: Daniel Teske <daniel.teske@digia.com> (cherry picked from qtcreator/571234786a3ff7e8e3a9220f12d22a9f74f7a53c) Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* make stubs for dangerous/useless qmake functions in limited modeOswald Buddenhagen2013-06-121-8/+20
| | | | | | | | | | sync up implementation with lupdate & creator. no actual effect on qmake. Change-Id: I1bdeb759e895e4200f09332dadf8a6cef348182f Reviewed-by: Daniel Teske <daniel.teske@digia.com> Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com> (cherry picked from qttools/94ab2efb2d155d3c1ca7b91c1daf443a149bcf1f)
* Fix warningOrgad Shaneh2013-05-201-1/+1
| | | | | | | | | | | Warnings came up using MinGW 4.4: * qmakebuiltins.cpp: 'QString windowsErrorCode()' defined but not used [...] Change-Id: I80827f7f740ff380f13cef96d6b43baaa7e179cb (cherry picked from qtcreator/0e13cf3faffc7463ae2bf535dfdb008202112cc4) Reviewed-by: Orgad Shaneh <orgads@gmail.com> Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* don't send output of $$join() and $$sprintf() through split_value_list()Oswald Buddenhagen2013-03-161-3/+2
| | | | | | | | | in the case of sprintf it's surprising, in the case of join it's anti-thetical. Change-Id: I4eb7e56d31ac6ed68adf852f1a19b33554d38eb4 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
* Remove braces for single lines of conditionsOrgad Shaneh2013-02-061-7/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | #!/usr/bin/env ruby Dir.glob('**/*.cpp') { |file| # skip ast (excluding paste, astpath, and canv'ast'imer) next if file =~ /ast[^eip]|keywords\.|qualifiers|preprocessor|names.cpp/i s = File.read(file) next if s.include?('qlalr') orig = s.dup s.gsub!(/\n *if [^\n]*{\n[^\n]*\n\s+}(\s+else if [^\n]* {\n[^\n]*\n\s+})*(\s+else {\n[^\n]*\n\s+})?\n/m) { |m| res = $& if res =~ /^\s*(\/\/|[A-Z_]{3,})/ # C++ comment or macro (Q_UNUSED, SDEBUG), do not touch braces res else res.gsub!('} else', 'else') res.gsub!(/\n +} *\n/m, "\n") res.gsub(/ *{$/, '') end } s.gsub!(/ *$/, '') File.open(file, 'wb').write(s) if s != orig } Change-Id: I3b30ee60df0986f66c02132c65fc38a3fbb6bbdc Reviewed-by: hjk <qthjk@ovi.com> (cherry picked from qtcreator/29a93998df8405e8799ad23934a56cd99fb36403) Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
* support alternative and multiple suffixes in $$resolve_depends()Oswald Buddenhagen2013-02-041-5/+10
| | | | | | | this is undeniably a new feature, but it's needed for a bugfix. Change-Id: I951a3128eb580404ee0c7e3cdcb4d6170e899f70 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* Update copyright year in Digia's license headersSergio Ahumada2013-01-181-1/+1
| | | | | Change-Id: Ic804938fc352291d011800d21e549c10acac66fb Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Fix qmake's pro file cache to interact correctly with write_fileSimon Hausmann2012-10-251-0/+1
| | | | | | | | | When writing a file with write_file() we have to inform the pro file parser cache to discard the file if it's existant in the cache, to ensure that calling include() after write_file() always works. Change-Id: I7d09269a57de55ca30b0e11dd40770de9f919f64 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
* Change copyrights from Nokia to DigiaIikka Eklund2012-09-221-24/+24
| | | | | | | | Change copyrights and license headers from Nokia to Digia Change-Id: If1cc974286d29fd01ec6c19dd4719a67f4c3f00e Reviewed-by: Lars Knoll <lars.knoll@digia.com> Reviewed-by: Sergio Ahumada <sergio.ahumada@digia.com>
* make error() abort the qmake run, not just the current fileOswald Buddenhagen2012-09-211-8/+14
| | | | | | Change-Id: I82fc55680f9ffb227e25acb39c797596225ba89e Reviewed-by: Daniel Teske <daniel.teske@digia.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
* fix non-bootstrapped $$system()'s line end conversions on windowsOswald Buddenhagen2012-09-181-3/+7
| | | | | Change-Id: I026da1312bc28619dc7aa5974b7f4c00710517ac Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* don't allow overloading of built-in functionsOswald Buddenhagen2012-09-181-12/+2
| | | | | | | | | | the functions are not versioned or scoped, so user-defined overloads would mess up qmake's own feature files. it seems safer to break user projects than to allow the user to break qmake. Change-Id: I020a2e6416bbb6e2fd2ece339629d848c00c8398 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
* remove support for non-lowercased $$eXpaNd() functionsOswald Buddenhagen2012-09-131-9/+0
| | | | | | | | | | we have been warning about such functions for a while now, now execute. the qmake language is (generally) case-sensitive, so this wasn't all that useful anyway. Change-Id: I1388ac2d5a1104389aeb3347e739a0d5e69e138d Reviewed-by: Qt Doc Bot <qt_docbot@qt-project.org> Reviewed-by: Joerg Bornemann <joerg.bornemann@nokia.com>
* don't pretend that break()/next()/return() are functionsOswald Buddenhagen2012-09-131-29/+1
| | | | | | | | | | | | | | it's a pretty braindead thing to implement control flow statements as (built-in) functions. as a "side effect", this fixes return() value handling for lists. (cherry picked from qtcreator/f53ed6c4b3feca59a94d4f0de8b1a7411122e30e) (cherry picked from qtcreator/f529e22ec38fb9a656d74394e484d2453cf42c69) Change-Id: I59c8efa0e4d65329327115f7f8ed20719e7f7546 Reviewed-by: Qt Doc Bot <qt_docbot@qt-project.org> Reviewed-by: Joerg Bornemann <joerg.bornemann@nokia.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
* port qmake to qt creator's qmake language evaluatorOswald Buddenhagen2012-09-111-0/+1684
this is a monster commit which does the following things: - import the evaluator as-is from qt creator into qmake/library/ - integrate it into qmake's makefiles - overwrite proitems.h with actual special types - remove the parts of Option which are redundant with QMakeGlobals - make QMakeProperty a singleton owned by Option::globals. the dynamic handling so far made no sense. - make QMakeProject a subclass of QMakeEvaluator, with relatively few extensions the changes to existing qmake code outside project.* and option.* are minor. implementing the changes gradually would mean changing a lot of code which will be just replaced in the next commit, so i'm not wasting my time on it. Change-Id: I9746650423b8c5b3fbd8c3979a73228982a46195 Reviewed-by: Qt Doc Bot <qt_docbot@qt-project.org> Reviewed-by: Joerg Bornemann <joerg.bornemann@nokia.com>