summaryrefslogtreecommitdiffstats
path: root/qmake/generators
Commit message (Collapse)AuthorAgeFilesLines
* QMake: Fix generation of Visual Studio filter filesJoerg Bornemann2024-04-191-1/+1
| | | | | | | | | | This amends commit a0a990863fa54b52db5e97716b130f69de47fa52. We bailed out of writing the filter file if opening the file for writing was successful. The condition must be flipped. Change-Id: I24331c5374a25c5a1126c6f7f71d41d840e0e532 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* QMake: make it error out if it cannot open output filesGiuseppe D'Angelo2024-03-272-3/+12
| | | | | Change-Id: I02c979e31f4208cbf9d590e043cf7f03eb4a39d6 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Port to QDirListingAhmad Samir2024-03-032-16/+13
| | | | | | | | | | | Use QDirListing in the Bootstrap build instead of QDirIterator. Drive-by changes: - more const variables - use emplace_back() instead of append() where appropriate Change-Id: Ie1f0d03856e557c4bfabfff38a87edc7da86d091 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* qmake: use [[fallthrough]]Tim Blechmann2024-02-121-1/+1
| | | | | | | | | | | Since qt is on C++17, it's possible too use the [[fallthrough]] attribute instead of a // Fallthrough comment, that may be stripped by compiler launchers (ccache/icecc), causing -Wimplicit-fallthrough warnings. Pick-to: 6.7 Change-Id: Ic809cf4e95b2160fac591b3802fa123e705337cc Reviewed-by: Marc Mutz <marc.mutz@qt.io>
* Remove extra semi-colonsTasuku Suzuki2024-02-061-1/+1
| | | | | Change-Id: I92fddb36cd136fd1bd627955f15d0559b9942d7e Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* Remove build machine path that was baked into the qmake binaryJoerg Bornemann2023-12-131-4/+4
| | | | | | | | | | | | | Remove the __FILE__ preprocessor macro that contains the full path to the current source file. This is needed for reproducible builds. The macro was only used for two debug messages. It's enough to mention the file name - if at all. Fixes: QTBUG-96281 Pick-to: 6.5 6.6 6.7 Change-Id: I7940ec090b570ec0105196a881e4c73c279bd248 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* qmake: Don't add dummy empty.lproj localization to macOS bundlesTor Arne Vestbø2023-04-201-1/+0
| | | | | | | | | | | | | | | | The original change from 2008 mentions that this was needed for preventing a crash when searching the native file dialog, but this has since been fixed. Nor is the file needed to get localized native file dialogs, as this is controlled by the combination of the app's supported localization or CFBundleAllowMixedLocalizations. And we don't do this for CMake projects. Pick-to: 6.5 Change-Id: I3c9e5aee4707c019f733920eb088f8d84f8e4ee1 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* qmake: Fix infinite make loop if RESOURCES contains nonexistent .qrcJoerg Bornemann2023-04-172-8/+18
| | | | | | | | | | | | | | | | | If RESOURCES contained a non-existent .qrc file, qmake produced Makefiles that resulted in an infinite loop when running GNU Make. Introduce a new extra compiler CONFIG value "remove_no_exist" that removes non-existent extra compiler input. This value is now used in the extra compiler that handles the RESOURCES variable. The difference to the existing CONFIG value "ignore_no_exist" is that qmake still prints a warning about the non-existent file. Pick-to: 6.5 Fixes: QTBUG-112743 Change-Id: I3293af75b75f217e1a1738b49da0af1117cfdecb Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* qmake: Fix incorrect Info.plist replacement of EXECUTABLE_NAMEAlexandru Croitor2023-04-061-1/+1
| | | | | | | | | | | | | The app_bundle_name should be used if it's not empty. Previously it was only used if it was empty. Amends 0749ba2c5eacc4822cf9c7a31edf8d70c4ef6064 Pick-to: 6.5 Fixes: QTBUG-112668 Change-Id: I4a0e8286eabb5156ad62b448afdf7f54cc78a915 Reviewed-by: Alexey Edelev <alexey.edelev@qt.io> Reviewed-by: Amir Masoud Abdol <amir.abdol@qt.io>
* Make qmake and qtpaths report Qt version baked into the binariesJoerg Bornemann2023-01-182-2/+2
| | | | | | | | | | | | | | | QMake and qtpaths used qVersion() to report Qt's version number. This is problematic if those tools are run in an environment where a different Qt version is loaded (e.g. by setting LD_LIBRARY_PATH). This reverts commit a783c3d574a1400c4dfdd32975fc511f095df8b2, which changed the use of the QT_VERSION define to a qVersion() call in qmake. Additionally, we use QT_VERSION in qtpaths too for consistency. Pick-to: 6.5 Change-Id: I6c8a1aa6ee6169becd7c685a98ce23c22c3864c7 Reviewed-by: hjk <hjk@qt.io> Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Set GenerateDebugInformation to true in vcproj if at least /DEBUG is setAlexey Edelev2023-01-132-1/+3
| | | | | | | | | | | | | | | | | If the command line option contains /DEBUG without the following argument, GenerateDebugInformation remained 'false' because the DebugInfoOption contained the initial value. Set GenerateDebugInformation to 'true' if the /DEBUG option is found and reset to 'false' only if option is set to 'none'. Amends commit 6a6b27940d497b29672ff65ff242fe0211603f22. Pick-to: 6.2 6.4 6.5 5.15 Fixes: QTBUG-110068 Change-Id: I792d7335d8b9536d4beed54cabfd70dcf54f09ac Reviewed-by: Alexey Edelev <alexey.edelev@qt.io> Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
* Use qtversion.h instead of qlibraryinfo.hMarc Mutz2022-12-092-2/+2
| | | | | | | | | | | | ... where 50b05e3e2ad969abf4b939d5db2253380e47d775 originally added them. While qtversion.h is included in qglobal.h, using qtversion.h directly is a tiny step towards removing qglobal.h includes from our code-base, so don't let this opportunity go to waste. Change-Id: I28eaca1f4e250fc9e12e2ce6a6f94670a1d08dbe Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
* Port from container::count() and length() to size() - V5Marc Mutz2022-11-0310-72/+72
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a semantic patch using ClangTidyTransformator as in qtbase/df9d882d41b741fef7c5beeddb0abe9d904443d8, but extended to handle typedefs and accesses through pointers, too: const std::string o = "object"; auto hasTypeIgnoringPointer = [](auto type) { return anyOf(hasType(type), hasType(pointsTo(type))); }; auto derivedFromAnyOfClasses = [&](ArrayRef<StringRef> classes) { auto exprOfDeclaredType = [&](auto decl) { return expr(hasTypeIgnoringPointer(hasUnqualifiedDesugaredType(recordType(hasDeclaration(decl))))).bind(o); }; return exprOfDeclaredType(cxxRecordDecl(isSameOrDerivedFrom(hasAnyName(classes)))); }; auto renameMethod = [&] (ArrayRef<StringRef> classes, StringRef from, StringRef to) { return makeRule(cxxMemberCallExpr(on(derivedFromAnyOfClasses(classes)), callee(cxxMethodDecl(hasName(from), parameterCountIs(0)))), changeTo(cat(access(o, cat(to)), "()")), cat("use '", to, "' instead of '", from, "'")); }; renameMethod(<classes>, "count", "size"); renameMethod(<classes>, "length", "size"); except that the on() matcher has been replaced by one that doesn't ignoreParens(). a.k.a qt-port-to-std-compatible-api V5 with config Scope: 'Container'. Added two NOLINTNEXTLINEs in tst_qbitarray and tst_qcontiguouscache, to avoid porting calls that explicitly test count(). Change-Id: Icfb8808c2ff4a30187e9935a51cad26987451c22 Reviewed-by: Ivan Solovev <ivan.solovev@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
* Ensure proper format of Info.plistMaximilian Blochberger2022-10-191-4/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | The Information Property List (Info.plist) is a property list that contains information about macOS and iOS application and framework bundles. There are multiple supported formats, those property lists can be stored in, most notably XML and binary. Problem If the Info.plist file is edited with an external editor, such as Xcode, it is possible that it is stored in binary format. A Makefile generated by the qmake tool contains a call to sed, which works on text but not binary files. Consequently, this call would fail. Solution Since Mac OS X 10.2, the plutil tool is available. It can be used to convert the property lists into a specific format. The plutil tool is now used to convert the plist to XML, so that the sed invocation succeeds. [ChangeLog][qmake] Fixed handling binary Info.plist files in generated Makefiles by always converting them to XML before substituting placeholders. Fixes: QTBUG-45357 Change-Id: I066039301c391a5034710458500a096f09e5ca24 Pick-to: 6.2 6.4 Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* Port from qAsConst() to std::as_const()Marc Mutz2022-10-119-31/+31
| | | | | | | | | | | | | | | | We've been requiring C++17 since Qt 6.0, and our qAsConst use finally starts to bother us (QTBUG-99313), so time to port away from it now. Since qAsConst has exactly the same semantics as std::as_const (down to rvalue treatment, constexpr'ness and noexcept'ness), there's really nothing more to it than a global search-and-replace, with manual unstaging of the actual definition and documentation in dist/, src/corelib/doc/ and src/corelib/global/. Task-number: QTBUG-99313 Change-Id: I4c7114444a325ad4e62d0fcbfd347d2bbfb21541 Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
* Port from container.count()/length() to size()Marc Mutz2022-10-0413-99/+99
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is semantic patch using ClangTidyTransformator: auto QtContainerClass = expr(hasType(namedDecl(hasAnyName(<classes>)))).bind(o) makeRule(cxxMemberCallExpr(on(QtContainerClass), callee(cxxMethodDecl(hasAnyName({"count", "length"), parameterCountIs(0))))), changeTo(cat(access(o, cat("size"), "()"))), cat("use 'size()' instead of 'count()/length()'")) a.k.a qt-port-to-std-compatible-api with config Scope: 'Container'. <classes> are: // sequential: "QByteArray", "QList", "QQueue", "QStack", "QString", "QVarLengthArray", "QVector", // associative: "QHash", "QMultiHash", "QMap", "QMultiMap", "QSet", // Qt has no QMultiSet Change-Id: Ibe8837be96e8d30d1846881ecd65180c1bc459af Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Move qVersion() from qglobal.h to qlibraryinfo.hSona Kurazyan2022-09-012-0/+2
| | | | | | | | | | | | | | | Since qVersion() might be called also from C code, disable the parts of qlibraryinfo.h that are relevant only for C++ code if __cplusplus is not defined. [ChangeLog][Potentially Source-Incompatible Changes] qVersion() is moved from qglobal.h to qlibraryinfo.h, '#include <QtCore/QLibraryInfo>' needs to be added where it's used. Task-number: QTBUG-99313 Change-Id: I3363ef3fa4073114e5151cb3a2a1e8282ad42a4d Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
* Rename QT_DISABLE_DEPRECATED_BEFORE -> QT_DISABLE_DEPRECATED_UP_TOIvan Solovev2022-08-191-1/+1
| | | | | | | | | | | | | | The new name describes the behavior in a better way. [ChangeLog][Build System] The QT_DISABLE_DEPRECATED_BEFORE macro is renamed to QT_DISABLE_DEPRECATED_UP_TO. The old name is deprecated, but is still recognized if it is defined during configuration and the new name is not defined. Task-number: QTBUG-104944 Change-Id: Ifc34323e0bbd9e3dc2f86c3e80d4d0940ebccbb8 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
* qmake/msbuild: Turn off "use full paths in diagnostics" by defaultJoerg Bornemann2022-06-221-1/+1
| | | | | | | | | | | | | | | | | | | | | | | The default setting for "Full Path of Source Code File in Diagnostics" changed with VS 2017: it's now turned on by default. It can also be enabled with the compiler flag /FC, but there is no flag for turning it off. Users might want to disable /FC to obtain reproducable binaries. Change qmake's default from "use Visual Studio's default" to "off" for this feature. Users can enable it manually by putting the following into their project files: QMAKE_CXXFLAGS += /FC CMake faced the same problem. See CMake upstream issue #18261 for comparison. Pick-to: 5.15 6.2 6.3 6.4 Task-number: QTBUG-104450 Change-Id: Ibe636a0ac5d18aefb44f2b7179b59fcec2ad8353 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* qmake/msbuild: Support all /DEBUG:xxx linker optionsJoerg Bornemann2022-06-223-5/+20
| | | | | | | | | | | /DEBUG:OFF now turns debug info generation off. /DEBUG:FULL maps to DebugFull. Unknown /DEBUG:xxx options are added to AdditionalOptions. Pick-to: 5.15 6.2 6.3 6.4 Task-number: QTBUG-104450 Change-Id: Ibd072145e51551b29370e809b880c0d7f1a00c03 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* qmake/msbuild: Support all /LTCG:xxx optionsJoerg Bornemann2022-06-223-17/+24
| | | | | | | | | | | /LTCG:OFF now turns off LTCG. /LTCG:INCREMENTAL maps to UseFastLinkTimeCodeGeneration. Unknown /LTCG:xxx values are passed to AdditionalOptions. Pick-to: 5.15 6.2 6.3 6.4 Task-number: QTBUG-104450 Change-Id: If85942dbeec204dc2571a861a43201cb3d5993ae Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Teach qmake about digit-grouping apostrophes in numeric literalsEdward Welbourne2022-06-171-2/+23
| | | | | | | | | | | | | It was previously understanding them as character literal delimiters, with unfortunate consequences if a numeric literal contained an odd number of them. Recognize that an apostrophe with a digit on each side of it isn't the opening quote of a character literal (unless the digit before it is preceded by a u). Extend the findMocs test to trigger the bug, prior to the fix; verified it passes with the fix. Fixes: QTBUG-98845 Change-Id: I5db3ac59aaeade7c2d6c1fb680ba97261ec0e8a9 Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
* Use SPDX license identifiersLucie Gérard2022-05-1629-785/+60
| | | | | | | | | | | | | Replace the current license disclaimer in files by a SPDX-License-Identifier. Files that have to be modified by hand are modified. License files are organized under LICENSES directory. Task-number: QTBUG-67283 Change-Id: Id880c92784c40f3bbde861c0d93f58151c18b9f1 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
* qmake: Use qVersion for version reporting instead of QT_VERSION_STRAlexandru Croitor2022-05-062-2/+2
| | | | | | | | | | | | | Apart from being consistent with qtpaths (which uses qVersion()), this also ensures that Qt Creator loads correct debug helpers for types like QString when debugging qmake. As a drive by, remove all QT_VERSION_MAJOR, QT_VERSION_MINOR, QT_VERSION_PATCH defines which are not used anywhere. Change-Id: Ibc8f2a6af833e1ec6e6cd6e1937ac3c1ab328555 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
* Replace uses of _qs with _s in sources and examplesSona Kurazyan2022-04-191-1/+2
| | | | | | Task-number: QTBUG-101408 Change-Id: I48360ba3b23965cd3d90ac243c100a0656a4cde8 Reviewed-by: Marc Mutz <marc.mutz@qt.io>
* Remove unused parameter in NmakeMakefileGenerator::suppressBuiltinRules()Tor Arne Vestbø2022-04-051-1/+1
| | | | | | Change-Id: I05100656d89ca464c9ef57a442dac7f75da235aa Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io> Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
* qmake: Suppress built-in suffixes for makeOrgad Shaneh2022-03-314-0/+15
| | | | | | | | | They cause make to run much slower, and qmake writes everything explicitly, so they're not really needed. Change-Id: Ia47674eec8309e120c8264b7b6687677a520d5b9 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
* Apply Q_CONSTINIT across the codebaseMarc Mutz2022-03-293-6/+4
| | | | | | | | | Still not complete. Just grepping for static and thread_local. Task-number: QTBUG-100486 Change-Id: I90ca14e8db3a95590ecde5f89924cf6fcc9755a3 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Misc: Do not depend on transitive includesFabian Kosmale2022-03-171-0/+1
| | | | | | | | As a drive-by, remove superfluous includes from qnetworkmanagerservice.h and obey the coding conventions for includes in a few more places. Change-Id: I65b68c0cef7598d06a125e97637040392d4be9ff Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Deprecate {QString, QByteArray}::count()Sona Kurazyan2022-03-121-8/+8
| | | | | | | | | | | | And remove their uses. [ChangeLog][QtCore][Deprecation Notice] Deprecated QString::count() and QByteArray::count() that take no parameters, to avoid confusion with the algorithm overloads of the same name. They can be replaced by size() or length() methods. Change-Id: I6541e3235ab58cf750d89568d66d3b1d9bbd4a04 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* qmake: Fix overlong command lines for static Qt builds on WindowsJoerg Bornemann2022-02-216-28/+81
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Linker response files for the MinGW and Unix makefile generators are controlled by the variable QMAKE_LINK_OBJECT_MAX. This variable holds a number. If the number of object files passed to the linker exceeds this number, a linker response file containing object file paths is created. This heuristic is extremely imprecise. It doesn't take into account the length of object file names nor the length of $$OBJECTS_DIR. Also, when using a static Qt, a big part of the linker command line are libraries. A relatively small example can fail to link with "The command line is too long" on Windows, even with the object files being in a response file. The MinGW makefile generator already reads the variable QMAKE_RESPONSEFILE_THRESHOLD for compiler response files. Re-use this variable for the linker response file of the Unix and MinGW makefile generators. If QMAKE_RESPONSEFILE_THRESHOLD is set, use it to determine whether to create a response file. QMAKE_LINK_OBJECT_MAX is then ignored. The response file contains objects and libraries. If QMAKE_RESPONSEFILE_THRESHOLD is not set, use QMAKE_LINK_OBJECT_MAX to determine whether to create a response file. The response file contains only object files. QMAKE_LINK_OBJECT_SCRIPT is used in both cases to specify a common base name of all linker response files. Pick-to: 6.2 6.3 Task-number: QTBUG-100559 Change-Id: I3c78354fa5ebb1a86438ec804679e0ee776c3f49 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Kai Koehne <kai.koehne@qt.io>
* qmake: Scan source files with QFileJoerg Bornemann2022-02-021-41/+11
| | | | | | | | | | | The C API we've used so far underlies stronger restrictions regarding path length than QFile. Since qmake is not bootstrapped anymore, we can use QFile. Task-number: QTBUG-99791 Change-Id: Ic7765b0c09a8aa07c208c1b1d02efe0c54bb44f2 Reviewed-by: Dominik Holland <dominik.holland@qt.io> Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
* qmake: Print error and exit if a response file cannot be createdJoerg Bornemann2022-01-081-2/+8
| | | | | | | | | | | | This is always an error, and we should not silently return an empty string and pretend that everything is in order. Drive-by change: Add a comment stating what createResponseFile() returns. Pick-to: 6.3 Change-Id: I4ee940cfac826c7ae5d15e977b692f1368ab29ea Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
* qmake/MinGW: Fix linking target name with whitespaceJoerg Bornemann2022-01-081-1/+1
| | | | | | | | | | | | | | | | | | When having a TARGET value that contains whitespace, linking would fail with MinGW. This was, because the function createResponseFile stitched together a file name like this: objectScript."Target Name".Release The inner double quotes make the file name invalid. Fix this by retrieving QMAKE_ORIG_TARGET with the var() method instead of fileVar(). The latter quotes the return value if it contains spaces. Pick-to: 5.15 6.2 6.3 Fixes: QTBUG-99522 Change-Id: Ieb7dcf3fbbd8a75de5a9b9a6beadb2170dddf35d Reviewed-by: Kai Koehne <kai.koehne@qt.io>
* qmake/Xcode: Mark "Qt Preprocess" build phase as always out of dateJoerg Bornemann2021-12-091-0/+1
| | | | | | | | | | | | | | | | This build phase executes the qt_preprocess.mak makefile from Xcode and should be triggered whenever any input of any rule in this makefile is out of date. It was not triggered when a file that's referenced in a .qrc file was changed. The Xcode project lacks those files as rule input, but the makefile itself has its inputs correctly set up, and can be triggered always. Pick-to: 6.2 5.15 Fixes: QTBUG-94995 Change-Id: Ida1349039bd6f23a300a610ecbde96f7cd35edb6 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Fix size_t / int conversion warnings in qmakeKai Köhne2021-12-021-2/+2
| | | | | | | | | | | Fixes qtbase\qmake\generators\makefiledeps.cpp(985): warning C4267: '+=': conversion from 'size_t' to 'int', possible loss of data qtbase\qmake\generators\makefiledeps.cpp(986): warning C4267: '+=': conversion from 'size_t' to 'int', possible loss of data Pick-to: 6.2 Change-Id: I7c6b4f36dc383db420c10d674666d58dbf29d2dd Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Long live Q_GADGET_EXPORT!Marc Mutz2021-11-271-0/+3
| | | | | | | | | | | | | | | | | | | | | | Like Q_NAMESPACE_EXPORT for Q_NAMESPACE, this variant of Q_GADGET allows passing an export macro. This is useful to avoid exporting the whole class just to get the staticMetaObject hidden therein exported. Before anyone asks: No, we don't need Q_OBJECT_EXPORT, because QObject subclasses, being polymorphic, always need to have a class-level export macro (to export their vtable), but while that technique also works for value classes (the Q_GADGET audience), it is not desirable for them, because it makes inline functions exported in Windows debug builds, which is not what we want, because it needlessly restricts what you can to with the inline functions (e.g. remove). [ChangeLog][QtCore] Added the Q_GADGET_EXPORT macro, which is like Q_GADGET, but allows passing an export macro (like Q_NAMESPACE_EXPORT for Q_NAMESPACE). Fixes: QTBUG-55458 Change-Id: I546297de1e8aa45d83381991bcd3fbca61e1eef0 Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
* qmake: use even fewer magic numbersMarc Mutz2021-11-261-28/+29
| | | | | | | | | | | | | De-unroll the loop over the "interesting" keyword ignore comments by using the existing array of their names. Replace magic numbers by strlen() calls. Use local starts_with() instead of strncmp() when comparing with fixed-size constant string literals, to avoid repeating the fixed string's lengths for the third argument of strncmp(). Task-number: QTBUG-55458 Change-Id: If458aced382948fb719d984702857fb2171c87ee Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* qmake: don't use magic numbersMarc Mutz2021-11-241-7/+15
| | | | | | | | Use a local enum to enumerate the different "interesting" keywords. Task-number: QTBUG-55458 Change-Id: I30a6336072d3184b720d8c016f199572dba87a81 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* qmake: Introduce the variable MSVC_TOOLSET_VERJoerg Bornemann2021-11-101-17/+1
| | | | | | | | | | | | | ...which represents the version of the MSVC platform toolset. This variable is used to set the platform toolset version in .vcxproj files. Before, the platform toolset version was determined in qmake's C++ code. Now, it's set next to where MSVC_VER is set in common mkspecs .conf files. This will simplify supporting new Visual Studio versions in the future. Change-Id: If78c921f93c6378829746d617c7e7d312174257e Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* qmake: Support Visual Studio 2022Joerg Bornemann2021-11-103-1/+14
| | | | | | | | | | | | Extend the detection of the MSCV_VER variable and make VS 2022 known to the vcxproj generator. [ChangeLog][qmake] Added support for Visual Studio 2022. Pick-to: 6.2 5.15 Fixes: QTBUG-97975 Change-Id: Id2c0a0b7800f721e9e34189f0a40ba4830283578 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* qmake/vcxproj: Fix "CONFIG += combine" extra compilersJoerg Bornemann2021-10-251-26/+58
| | | | | | | | | | | | | | | | | | | | | Extra compilers with "CONFIG += combine" were broken for qmake's vcxproj generator since forever. Usually, extra compilers are handled by attaching the Custom Build Tool to the input file. This is not possible for combine extra compilers, because they map multiple inputs to one output. We cannot attach the Custom Build Tool to the output either, because this would result in circular dependency errors (output trying to create output itself). To fix this, we create a custom build tool fake file (.cbt) for the output and attach the Custom Build Tool there. This is the same trick we do for regular extra compilers that have C++ sources as input (e.g. the one that generates moc_predefs.h). Pick-to: 6.2 5.15 Fixes: QTBUG-94806 Change-Id: Ib808a43fead737df91b89a1ac5e180aeae37efae Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* qmake: Make some debug code actually compilableJoerg Bornemann2021-10-251-1/+1
| | | | | Change-Id: Ia57b0d83ba3bf005d7d19e7958bb7131c7dc50b3 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* qmake/vcxproj: Fix malformed <Message> tagsJoerg Bornemann2021-10-251-0/+1
| | | | | | | | | | | | | | Extra compilers and the command set to "\n" would result in malformed <Message> tags in vcxproj files. Those tags are used to display the name of the extra compiler when building. Setting the extra compiler's command to "\n" is a common trick to force the creation of the rule. Make sure to trim the command name that is created from the extra compiler's command to avoid such new-line-only bogus message tags. Pick-to: 6.2 5.15 Change-Id: I1bae28ed14c438d777f96280c6b2cf5ca315b51c Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* qmake/xcode: Do not create OBJECTS_DIRJoerg Bornemann2021-09-104-0/+23
| | | | | | | | | | | | | If we create OBJECTS_DIR at qmake time, Xcode will not consider this directory as created by the build system, and "xcodebuild --clean" will fail. Prevent qmake from creating that directory in the Xcode generator. Pick-to: 5.15 6.2 Fixes: QTBUG-96305 Change-Id: I874bf34a4289ce5f2d3e2ce070ffbe56d5368861 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* qmake/vcxproj: Read C language standard from QMAKE_CFLAGSJoerg Bornemann2021-08-261-0/+16
| | | | | | | | | | | | | | | The vcxproj generator completely ignored QMAKE_CFLAGS and did only read QMAKE_CXXFLAGS. The msbuild-internal "cl compiler tool" contains the flags for both, C and C++. It is to risky to take all QMAKE_CFLAGS into account for the "cl compiler tool", because this might collide with what is specified in QMAKE_CXXFLAGS. Therefore, we only read the /std:... compiler option from QMAKE_CFLAGS and set the LanguageStandard_C flag in the msbuild file. Pick-to: 6.2 5.15 Task-number: QTBUG-89296 Change-Id: I885061802c1350b293a7868d4c9a9367d30e2380 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* qmake/vcxproj generator: Handle C standard compiler flagsJoerg Bornemann2021-08-263-6/+37
| | | | | | | | | | | | | Handle the compiler flags /std:c11 and /std:c17 and turn them into the values stdc11 and stc17 for the LanguageStandard_C tag. Drive-by change: Add /std:c++20 to the list of known C++ standard options. Pick-to: 6.2 5.15 Task-number: QTBUG-89296 Change-Id: Ia575fff611bdf795406db84bd34057d008c8a383 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* qmake: Recognize MSVC 16.x as VS 2019 in the VS project generatorJoerg Bornemann2021-08-261-27/+31
| | | | | | | | | | | | | | In a subsequent comment we will set the qmake variable MSVC_VER to 16.8 to check for the availability of certain compiler flags that were introduced in that compiler version. The old code compared exact version strings. With this patch we're checking version ranges instead and handle MSVC_VER 16.x as VS 2019. Pick-to: 6.2 5.15 Task-number: QTBUG-89296 Change-Id: I9ea24a66f68a342a72f5c2a285bafacb8786661b Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Fix framework dependencies in .la filesJoerg Bornemann2021-08-171-0/+28
| | | | | | | | | | "-framework Foo" arguments must be placed in the inherited_linker_flags variables instead of dependency_libs. Pick-to: 5.15 Fixes: QTBUG-2390 Change-Id: Idec4115533ed1f86f44db64931fa64cadeeb4572 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* QDirIterator: add nextFileInfo()Marc Mutz2021-07-281-2/+1
| | | | | | | | | | | | | | | | | | | | | | | Before this change, next() was the only way to advance the iterator, whether the caller was ultimately interested in just the filePath() (good) or not (bad luck, had to call .fileInfo()). Add a new function, nextFileInfo(), with returns fileInfo() instead. Incidentally, the returned object has already been constructed as part of advance()ing the iterator, so the new function is faster than next() even if the result is ignored, because we're not calculating a QString result the caller may not be interested in. Use the new function around the code. Fix a couple of cases of next(); fileInfo().filePath() (just use next()'s return value) as a drive-by. [ChangeLog][QtCore][QDirIterator] Added nextFileInfo(), which is like next(), but returns fileInfo() instead of filePath(). Change-Id: I601220575961169b44139fc55b9eae6c3197afb4 Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>