Build qmake with QT_USE_STRINGBUILDER
Should improve performance and is going to be required in the future anyway. Change-Id: I89d7c50441d2491da1ab0a4d564dcc91f52ade85 Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
This commit is contained in:
parent
ae7e701074
commit
52f3a7d9d4
@ -72,6 +72,7 @@ qt_add_tool(qmake # special case
|
|||||||
../src/corelib/text/qregexp.cpp ../src/corelib/text/qregexp.h
|
../src/corelib/text/qregexp.cpp ../src/corelib/text/qregexp.h
|
||||||
../src/corelib/tools/qringbuffer.cpp # special case
|
../src/corelib/tools/qringbuffer.cpp # special case
|
||||||
../src/corelib/text/qstring.cpp ../src/corelib/text/qstring.h
|
../src/corelib/text/qstring.cpp ../src/corelib/text/qstring.h
|
||||||
|
../src/corelib/text/qstringbuilder.cpp ../src/corelib/text/qstringbuilder.h
|
||||||
../src/corelib/text/qstringlist.cpp ../src/corelib/text/qstringlist.h
|
../src/corelib/text/qstringlist.cpp ../src/corelib/text/qstringlist.h
|
||||||
../src/corelib/text/qstringmatcher.h
|
../src/corelib/text/qstringmatcher.h
|
||||||
../src/corelib/tools/qvector.h
|
../src/corelib/tools/qvector.h
|
||||||
@ -110,6 +111,7 @@ qt_add_tool(qmake # special case
|
|||||||
PROEVALUATOR_FULL
|
PROEVALUATOR_FULL
|
||||||
QT_BOOTSTRAPPED
|
QT_BOOTSTRAPPED
|
||||||
QT_BUILD_QMAKE
|
QT_BUILD_QMAKE
|
||||||
|
QT_USE_QSTRINGBUILDER
|
||||||
QT_NO_FOREACH
|
QT_NO_FOREACH
|
||||||
QT_VERSION_STR="${PROJECT_VERSION}" # special case
|
QT_VERSION_STR="${PROJECT_VERSION}" # special case
|
||||||
QT_VERSION_MAJOR=${PROJECT_VERSION_MAJOR} # special case
|
QT_VERSION_MAJOR=${PROJECT_VERSION_MAJOR} # special case
|
||||||
|
@ -143,7 +143,7 @@ CPPFLAGS = -g $(EXTRA_CPPFLAGS) \
|
|||||||
-I$(QMAKESPEC) \
|
-I$(QMAKESPEC) \
|
||||||
-DQT_VERSION_STR=\"$(QT_VERSION)\" -DQT_VERSION_MAJOR=$(QT_MAJOR_VERSION) -DQT_VERSION_MINOR=$(QT_MINOR_VERSION) -DQT_VERSION_PATCH=$(QT_PATCH_VERSION) \
|
-DQT_VERSION_STR=\"$(QT_VERSION)\" -DQT_VERSION_MAJOR=$(QT_MAJOR_VERSION) -DQT_VERSION_MINOR=$(QT_MINOR_VERSION) -DQT_VERSION_PATCH=$(QT_PATCH_VERSION) \
|
||||||
-DQT_BUILD_QMAKE -DQT_BOOTSTRAPPED -DPROEVALUATOR_FULL \
|
-DQT_BUILD_QMAKE -DQT_BOOTSTRAPPED -DPROEVALUATOR_FULL \
|
||||||
-DQT_NO_FOREACH
|
-DQT_NO_FOREACH -DQT_USE_QSTRINGBUILDER
|
||||||
|
|
||||||
CXXFLAGS = $(EXTRA_CXXFLAGS) $(CONFIG_CXXFLAGS) $(CPPFLAGS)
|
CXXFLAGS = $(EXTRA_CXXFLAGS) $(CONFIG_CXXFLAGS) $(CPPFLAGS)
|
||||||
LFLAGS = $(EXTRA_LFLAGS) $(CONFIG_LFLAGS)
|
LFLAGS = $(EXTRA_LFLAGS) $(CONFIG_LFLAGS)
|
||||||
|
@ -38,7 +38,7 @@ CFLAGS_BARE = -c -Fo./ -Fdqmake.pdb \
|
|||||||
-D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS \
|
-D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS \
|
||||||
-DQT_VERSION_STR=\"$(QT_VERSION)\" -DQT_VERSION_MAJOR=$(QT_MAJOR_VERSION) -DQT_VERSION_MINOR=$(QT_MINOR_VERSION) -DQT_VERSION_PATCH=$(QT_PATCH_VERSION) \
|
-DQT_VERSION_STR=\"$(QT_VERSION)\" -DQT_VERSION_MAJOR=$(QT_MAJOR_VERSION) -DQT_VERSION_MINOR=$(QT_MINOR_VERSION) -DQT_VERSION_PATCH=$(QT_PATCH_VERSION) \
|
||||||
-DQT_BUILD_QMAKE -DQT_BOOTSTRAPPED -DPROEVALUATOR_FULL \
|
-DQT_BUILD_QMAKE -DQT_BOOTSTRAPPED -DPROEVALUATOR_FULL \
|
||||||
-DQT_NO_FOREACH -DUNICODE -D_ENABLE_EXTENDED_ALIGNED_STORAGE
|
-DQT_NO_FOREACH -DQT_USE_QSTRINGBUILDER -DUNICODE -D_ENABLE_EXTENDED_ALIGNED_STORAGE
|
||||||
CFLAGS = $(CFLAGS_PCH) $(CFLAGS_BARE) $(CFLAGS)
|
CFLAGS = $(CFLAGS_PCH) $(CFLAGS_BARE) $(CFLAGS)
|
||||||
|
|
||||||
CXXFLAGS_BARE = $(CFLAGS_BARE)
|
CXXFLAGS_BARE = $(CFLAGS_BARE)
|
||||||
|
@ -644,7 +644,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
|
|||||||
bool isObj = project->values(ProKey(*it + ".CONFIG")).indexOf("no_link") == -1;
|
bool isObj = project->values(ProKey(*it + ".CONFIG")).indexOf("no_link") == -1;
|
||||||
if (!isObj) {
|
if (!isObj) {
|
||||||
for (int i = 0; i < sources.size(); ++i) {
|
for (int i = 0; i < sources.size(); ++i) {
|
||||||
if (sources.at(i).keyName() == inputs.at(input)) {
|
if (sources.at(i).keyName() == inputs.at(input).toQStringView()) {
|
||||||
duplicate = true;
|
duplicate = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -56,8 +56,6 @@ class ProjectBuilderMakefileGenerator : public UnixMakefileGenerator
|
|||||||
enum { SettingsAsList=0x01, SettingsNoQuote=0x02 };
|
enum { SettingsAsList=0x01, SettingsNoQuote=0x02 };
|
||||||
inline QString writeSettings(const QString &var, const char *val, int flags=0, int indent_level=0)
|
inline QString writeSettings(const QString &var, const char *val, int flags=0, int indent_level=0)
|
||||||
{ return writeSettings(var, ProString(val), flags, indent_level); }
|
{ return writeSettings(var, ProString(val), flags, indent_level); }
|
||||||
inline QString writeSettings(const QString &var, const QString &val, int flags=0, int indent_level=0)
|
|
||||||
{ return writeSettings(var, ProString(val), flags, indent_level); }
|
|
||||||
inline QString writeSettings(const QString &var, const ProString &val, int flags=0, int indent_level=0)
|
inline QString writeSettings(const QString &var, const ProString &val, int flags=0, int indent_level=0)
|
||||||
{ return writeSettings(var, ProStringList(val), flags, indent_level); }
|
{ return writeSettings(var, ProStringList(val), flags, indent_level); }
|
||||||
QString writeSettings(const QString &var, const ProStringList &vals, int flags=0, int indent_level=0);
|
QString writeSettings(const QString &var, const ProStringList &vals, int flags=0, int indent_level=0);
|
||||||
|
@ -2273,7 +2273,7 @@ QString MakefileGenerator::fullBuildArgs()
|
|||||||
|
|
||||||
//output
|
//output
|
||||||
QString ofile = fileFixify(Option::output.fileName());
|
QString ofile = fileFixify(Option::output.fileName());
|
||||||
if(!ofile.isEmpty() && ofile != project->first("QMAKE_MAKEFILE"))
|
if (!ofile.isEmpty() && ofile != project->first("QMAKE_MAKEFILE").toQStringView())
|
||||||
ret += " -o " + escapeFilePath(ofile);
|
ret += " -o " + escapeFilePath(ofile);
|
||||||
|
|
||||||
//inputs
|
//inputs
|
||||||
@ -2515,7 +2515,7 @@ MakefileGenerator::writeSubTargets(QTextStream &t, QList<MakefileGenerator::SubT
|
|||||||
if(!abs_source_path.isEmpty() && out_directory.startsWith(abs_source_path))
|
if(!abs_source_path.isEmpty() && out_directory.startsWith(abs_source_path))
|
||||||
out_directory = Option::output_dir + out_directory.mid(abs_source_path.length());
|
out_directory = Option::output_dir + out_directory.mid(abs_source_path.length());
|
||||||
|
|
||||||
QString out_directory_cdin = out_directory.isEmpty() ? "\n\t"
|
QString out_directory_cdin = out_directory.isEmpty() ? QString("\n\t")
|
||||||
: "\n\tcd " + escapeFilePath(out_directory) + " && ";
|
: "\n\tcd " + escapeFilePath(out_directory) + " && ";
|
||||||
QString makefilein = " -f " + escapeFilePath(subtarget->makefile);
|
QString makefilein = " -f " + escapeFilePath(subtarget->makefile);
|
||||||
|
|
||||||
@ -2696,7 +2696,7 @@ MakefileGenerator::writeSubTargets(QTextStream &t, QList<MakefileGenerator::SubT
|
|||||||
if(!recurse.contains(subtarget->name))
|
if(!recurse.contains(subtarget->name))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
QString out_directory_cdin = out_directory.isEmpty() ? "\n\t"
|
QString out_directory_cdin = out_directory.isEmpty() ? QString("\n\t")
|
||||||
: "\n\tcd " + escapeFilePath(out_directory) + " && ";
|
: "\n\tcd " + escapeFilePath(out_directory) + " && ";
|
||||||
QString makefilein = " -f " + escapeFilePath(subtarget->makefile);
|
QString makefilein = " -f " + escapeFilePath(subtarget->makefile);
|
||||||
|
|
||||||
|
@ -140,10 +140,16 @@ protected:
|
|||||||
//escape
|
//escape
|
||||||
virtual QString escapeFilePath(const QString &path) const = 0;
|
virtual QString escapeFilePath(const QString &path) const = 0;
|
||||||
ProString escapeFilePath(const ProString &path) const;
|
ProString escapeFilePath(const ProString &path) const;
|
||||||
|
template<typename A, typename B>
|
||||||
|
QString escapeFilePath(const QStringBuilder<A, B> &path) const
|
||||||
|
{ return escapeFilePath(QString(path)); }
|
||||||
QStringList escapeFilePaths(const QStringList &paths) const;
|
QStringList escapeFilePaths(const QStringList &paths) const;
|
||||||
ProStringList escapeFilePaths(const ProStringList &paths) const;
|
ProStringList escapeFilePaths(const ProStringList &paths) const;
|
||||||
virtual QString escapeDependencyPath(const QString &path) const;
|
virtual QString escapeDependencyPath(const QString &path) const;
|
||||||
ProString escapeDependencyPath(const ProString &path) const;
|
ProString escapeDependencyPath(const ProString &path) const;
|
||||||
|
template<typename A, typename B>
|
||||||
|
QString escapeDependencyPath(const QStringBuilder<A, B> &path) const
|
||||||
|
{ return escapeDependencyPath(QString(path)); }
|
||||||
QStringList escapeDependencyPaths(const QStringList &paths) const;
|
QStringList escapeDependencyPaths(const QStringList &paths) const;
|
||||||
ProStringList escapeDependencyPaths(const ProStringList &paths) const;
|
ProStringList escapeDependencyPaths(const ProStringList &paths) const;
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@ protected:
|
|||||||
|
|
||||||
bool findLibraries(bool linkPrl, bool mergeLflags) override;
|
bool findLibraries(bool linkPrl, bool mergeLflags) override;
|
||||||
QString escapeFilePath(const QString &path) const override;
|
QString escapeFilePath(const QString &path) const override;
|
||||||
ProString escapeFilePath(const ProString &path) const { return MakefileGenerator::escapeFilePath(path); }
|
using MakefileGenerator::escapeFilePath;
|
||||||
QStringList &findDependencies(const QString &) override;
|
QStringList &findDependencies(const QString &) override;
|
||||||
void init() override;
|
void init() override;
|
||||||
|
|
||||||
|
@ -134,7 +134,7 @@ UnixMakefileGenerator::writeSubTargets(QTextStream &t, QList<MakefileGenerator::
|
|||||||
if (!dist_directory.startsWith(Option::dir_sep))
|
if (!dist_directory.startsWith(Option::dir_sep))
|
||||||
dist_directory.prepend(Option::dir_sep);
|
dist_directory.prepend(Option::dir_sep);
|
||||||
|
|
||||||
QString out_directory_cdin = out_directory.isEmpty() ? "\n\t"
|
QString out_directory_cdin = out_directory.isEmpty() ? QString("\n\t")
|
||||||
: "\n\tcd " + escapeFilePath(out_directory) + " && ";
|
: "\n\tcd " + escapeFilePath(out_directory) + " && ";
|
||||||
QString makefilein = " -e -f " + escapeFilePath(subtarget->makefile)
|
QString makefilein = " -e -f " + escapeFilePath(subtarget->makefile)
|
||||||
+ " distdir DISTDIR=$(DISTDIR)" + escapeFilePath(dist_directory);
|
+ " distdir DISTDIR=$(DISTDIR)" + escapeFilePath(dist_directory);
|
||||||
@ -749,7 +749,7 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
|
|||||||
(!isShallowBundle
|
(!isShallowBundle
|
||||||
? (isFramework
|
? (isFramework
|
||||||
? ("Versions/" + project->first("QMAKE_FRAMEWORK_VERSION") + "/Resources/")
|
? ("Versions/" + project->first("QMAKE_FRAMEWORK_VERSION") + "/Resources/")
|
||||||
: "Contents/")
|
: QString("Contents/"))
|
||||||
: QString())
|
: QString())
|
||||||
+ "Info.plist";
|
+ "Info.plist";
|
||||||
bundledFiles << info_plist_out;
|
bundledFiles << info_plist_out;
|
||||||
|
@ -86,8 +86,8 @@ QString NmakeMakefileGenerator::defaultInstall(const QString &t)
|
|||||||
|
|
||||||
if (project->isActiveConfig("debug_info")) {
|
if (project->isActiveConfig("debug_info")) {
|
||||||
if (t == "dlltarget" || project->values(ProKey(t + ".CONFIG")).indexOf("no_dll") == -1) {
|
if (t == "dlltarget" || project->values(ProKey(t + ".CONFIG")).indexOf("no_dll") == -1) {
|
||||||
const QFileInfo targetFileInfo = project->first("DESTDIR") + project->first("TARGET")
|
const QFileInfo targetFileInfo(project->first("DESTDIR") + project->first("TARGET")
|
||||||
+ project->first("TARGET_EXT");
|
+ project->first("TARGET_EXT"));
|
||||||
const QString pdb_target = targetFileInfo.completeBaseName() + ".pdb";
|
const QString pdb_target = targetFileInfo.completeBaseName() + ".pdb";
|
||||||
QString src_targ = (project->isEmpty("DESTDIR") ? QString("$(DESTDIR)") : project->first("DESTDIR")) + pdb_target;
|
QString src_targ = (project->isEmpty("DESTDIR") ? QString("$(DESTDIR)") : project->first("DESTDIR")) + pdb_target;
|
||||||
QString dst_targ = filePrefixRoot(root, fileFixify(targetdir + pdb_target, FileFixifyAbsolute));
|
QString dst_targ = filePrefixRoot(root, fileFixify(targetdir + pdb_target, FileFixifyAbsolute));
|
||||||
@ -245,8 +245,8 @@ void NmakeMakefileGenerator::init()
|
|||||||
project->values("PRECOMPILED_PCH_C") = ProStringList(precompPchC);
|
project->values("PRECOMPILED_PCH_C") = ProStringList(precompPchC);
|
||||||
}
|
}
|
||||||
|
|
||||||
const QFileInfo targetFileInfo = project->first("DESTDIR") + project->first("TARGET")
|
const QFileInfo targetFileInfo(project->first("DESTDIR") + project->first("TARGET")
|
||||||
+ project->first("TARGET_EXT");
|
+ project->first("TARGET_EXT"));
|
||||||
const ProString targetBase = targetFileInfo.path() + '/' + targetFileInfo.completeBaseName();
|
const ProString targetBase = targetFileInfo.path() + '/' + targetFileInfo.completeBaseName();
|
||||||
if (project->first("TEMPLATE") == "lib" && project->isActiveConfig("shared")) {
|
if (project->first("TEMPLATE") == "lib" && project->isActiveConfig("shared")) {
|
||||||
project->values("QMAKE_CLEAN").append(targetBase + ".exp");
|
project->values("QMAKE_CLEAN").append(targetBase + ".exp");
|
||||||
|
@ -70,9 +70,16 @@ public:
|
|||||||
ProString();
|
ProString();
|
||||||
ProString(const ProString &other);
|
ProString(const ProString &other);
|
||||||
ProString &operator=(const ProString &) = default;
|
ProString &operator=(const ProString &) = default;
|
||||||
PROITEM_EXPLICIT ProString(const QString &str);
|
template<typename A, typename B>
|
||||||
|
ProString &operator=(const QStringBuilder<A, B> &str)
|
||||||
|
{ return *this = QString(str); }
|
||||||
|
ProString(const QString &str);
|
||||||
PROITEM_EXPLICIT ProString(const QStringRef &str);
|
PROITEM_EXPLICIT ProString(const QStringRef &str);
|
||||||
PROITEM_EXPLICIT ProString(const char *str);
|
PROITEM_EXPLICIT ProString(const char *str);
|
||||||
|
template<typename A, typename B>
|
||||||
|
ProString(const QStringBuilder<A, B> &str)
|
||||||
|
: ProString(QString(str))
|
||||||
|
{}
|
||||||
ProString(const QString &str, int offset, int length);
|
ProString(const QString &str, int offset, int length);
|
||||||
void setValue(const QString &str);
|
void setValue(const QString &str);
|
||||||
void clear() { m_string.clear(); m_length = 0; }
|
void clear() { m_string.clear(); m_length = 0; }
|
||||||
@ -83,12 +90,16 @@ public:
|
|||||||
ProString &prepend(const ProString &other);
|
ProString &prepend(const ProString &other);
|
||||||
ProString &append(const ProString &other, bool *pending = nullptr);
|
ProString &append(const ProString &other, bool *pending = nullptr);
|
||||||
ProString &append(const QString &other) { return append(ProString(other)); }
|
ProString &append(const QString &other) { return append(ProString(other)); }
|
||||||
|
template<typename A, typename B>
|
||||||
|
ProString &append(const QStringBuilder<A, B> &other) { return append(QString(other)); }
|
||||||
ProString &append(const QLatin1String other);
|
ProString &append(const QLatin1String other);
|
||||||
ProString &append(const char *other) { return append(QLatin1String(other)); }
|
ProString &append(const char *other) { return append(QLatin1String(other)); }
|
||||||
ProString &append(QChar other);
|
ProString &append(QChar other);
|
||||||
ProString &append(const ProStringList &other, bool *pending = nullptr, bool skipEmpty1st = false);
|
ProString &append(const ProStringList &other, bool *pending = nullptr, bool skipEmpty1st = false);
|
||||||
ProString &operator+=(const ProString &other) { return append(other); }
|
ProString &operator+=(const ProString &other) { return append(other); }
|
||||||
ProString &operator+=(const QString &other) { return append(other); }
|
ProString &operator+=(const QString &other) { return append(other); }
|
||||||
|
template<typename A, typename B>
|
||||||
|
ProString &operator+=(const QStringBuilder<A, B> &other) { return append(QString(other)); }
|
||||||
ProString &operator+=(const QLatin1String other) { return append(other); }
|
ProString &operator+=(const QLatin1String other) { return append(other); }
|
||||||
ProString &operator+=(const char *other) { return append(other); }
|
ProString &operator+=(const char *other) { return append(other); }
|
||||||
ProString &operator+=(QChar other) { return append(other); }
|
ProString &operator+=(QChar other) { return append(other); }
|
||||||
@ -123,9 +134,13 @@ public:
|
|||||||
bool startsWith(const QString &sub, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return toQStringRef().startsWith(sub, cs); }
|
bool startsWith(const QString &sub, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return toQStringRef().startsWith(sub, cs); }
|
||||||
bool startsWith(const char *sub, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return toQStringRef().startsWith(QLatin1String(sub), cs); }
|
bool startsWith(const char *sub, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return toQStringRef().startsWith(QLatin1String(sub), cs); }
|
||||||
bool startsWith(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return toQStringRef().startsWith(c, cs); }
|
bool startsWith(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return toQStringRef().startsWith(c, cs); }
|
||||||
|
template<typename A, typename B>
|
||||||
|
bool startsWith(const QStringBuilder<A, B> &str) { return startsWith(QString(str)); }
|
||||||
bool endsWith(const ProString &sub, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return toQStringRef().endsWith(sub.toQStringRef(), cs); }
|
bool endsWith(const ProString &sub, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return toQStringRef().endsWith(sub.toQStringRef(), cs); }
|
||||||
bool endsWith(const QString &sub, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return toQStringRef().endsWith(sub, cs); }
|
bool endsWith(const QString &sub, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return toQStringRef().endsWith(sub, cs); }
|
||||||
bool endsWith(const char *sub, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return toQStringRef().endsWith(QLatin1String(sub), cs); }
|
bool endsWith(const char *sub, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return toQStringRef().endsWith(QLatin1String(sub), cs); }
|
||||||
|
template<typename A, typename B>
|
||||||
|
bool endsWith(const QStringBuilder<A, B> &str) { return endsWith(QString(str)); }
|
||||||
bool endsWith(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return toQStringRef().endsWith(c, cs); }
|
bool endsWith(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return toQStringRef().endsWith(c, cs); }
|
||||||
int indexOf(const QString &s, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return toQStringRef().indexOf(s, from, cs); }
|
int indexOf(const QString &s, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return toQStringRef().indexOf(s, from, cs); }
|
||||||
int indexOf(const char *s, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return toQStringRef().indexOf(QLatin1String(s), from, cs); }
|
int indexOf(const char *s, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return toQStringRef().indexOf(QLatin1String(s), from, cs); }
|
||||||
@ -179,10 +194,15 @@ private:
|
|||||||
};
|
};
|
||||||
Q_DECLARE_TYPEINFO(ProString, Q_MOVABLE_TYPE);
|
Q_DECLARE_TYPEINFO(ProString, Q_MOVABLE_TYPE);
|
||||||
|
|
||||||
|
|
||||||
class ProKey : public ProString {
|
class ProKey : public ProString {
|
||||||
public:
|
public:
|
||||||
ALWAYS_INLINE ProKey() : ProString() {}
|
ALWAYS_INLINE ProKey() : ProString() {}
|
||||||
explicit ProKey(const QString &str);
|
explicit ProKey(const QString &str);
|
||||||
|
template<typename A, typename B>
|
||||||
|
ProKey(const QStringBuilder<A, B> &str)
|
||||||
|
: ProString(str)
|
||||||
|
{}
|
||||||
PROITEM_EXPLICIT ProKey(const char *str);
|
PROITEM_EXPLICIT ProKey(const char *str);
|
||||||
ProKey(const QString &str, int off, int len);
|
ProKey(const QString &str, int off, int len);
|
||||||
ProKey(const QString &str, int off, int len, uint hash);
|
ProKey(const QString &str, int off, int len, uint hash);
|
||||||
@ -206,31 +226,43 @@ private:
|
|||||||
};
|
};
|
||||||
Q_DECLARE_TYPEINFO(ProKey, Q_MOVABLE_TYPE);
|
Q_DECLARE_TYPEINFO(ProKey, Q_MOVABLE_TYPE);
|
||||||
|
|
||||||
size_t qHash(const ProString &str);
|
template <> struct QConcatenable<ProString> : private QAbstractConcatenable
|
||||||
QString operator+(const ProString &one, const ProString &two);
|
{
|
||||||
inline QString operator+(const ProString &one, const QString &two)
|
typedef ProString type;
|
||||||
{ return one.toQStringRef() + two; }
|
typedef QString ConvertTo;
|
||||||
inline QString operator+(const QString &one, const ProString &two)
|
enum { ExactSize = true };
|
||||||
{ return one + two.toQStringRef(); }
|
static int size(const ProString &a) { return a.length(); }
|
||||||
|
static inline void appendTo(const ProString &a, QChar *&out)
|
||||||
|
{
|
||||||
|
const auto n = a.size();
|
||||||
|
memcpy(out, a.toQStringView().data(), sizeof(QChar) * n);
|
||||||
|
out += n;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
inline QString operator+(const ProString &one, const char *two)
|
template <> struct QConcatenable<ProKey> : private QAbstractConcatenable
|
||||||
{ return one.toQStringRef() + QLatin1String(two); }
|
{
|
||||||
inline QString operator+(const char *one, const ProString &two)
|
typedef ProKey type;
|
||||||
{ return QLatin1String(one) + two.toQStringRef(); }
|
typedef QString ConvertTo;
|
||||||
inline QString operator+(const ProString &one, QChar two)
|
enum { ExactSize = true };
|
||||||
{ return one.toQStringRef() + two; }
|
static int size(const ProKey &a) { return a.length(); }
|
||||||
inline QString operator+(QChar one, const ProString &two)
|
static inline void appendTo(const ProKey &a, QChar *&out)
|
||||||
{ return one + two.toQStringRef(); }
|
{
|
||||||
|
const auto n = a.size();
|
||||||
|
memcpy(out, a.toQStringView().data(), sizeof(QChar) * n);
|
||||||
|
out += n;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
size_t qHash(const ProString &str);
|
||||||
|
|
||||||
inline QString &operator+=(QString &that, const ProString &other)
|
inline QString &operator+=(QString &that, const ProString &other)
|
||||||
{ return that += other.toQStringRef(); }
|
{ return that += other.toQStringRef(); }
|
||||||
|
|
||||||
inline bool operator==(const QString &that, const ProString &other)
|
|
||||||
{ return other == that; }
|
|
||||||
inline bool operator!=(const QString &that, const ProString &other)
|
|
||||||
{ return !(other == that); }
|
|
||||||
|
|
||||||
QTextStream &operator<<(QTextStream &t, const ProString &str);
|
QTextStream &operator<<(QTextStream &t, const ProString &str);
|
||||||
|
template<typename A, typename B>
|
||||||
|
QTextStream &operator<<(QTextStream &t, const QStringBuilder<A, B> &str) { return t << QString(str); }
|
||||||
|
|
||||||
// This class manages read-only access to a ProString via a raw data QString
|
// This class manages read-only access to a ProString via a raw data QString
|
||||||
// temporary, ensuring that the latter is accessed exclusively.
|
// temporary, ensuring that the latter is accessed exclusively.
|
||||||
@ -296,6 +328,8 @@ public:
|
|||||||
QString join(const ProString &sep) const;
|
QString join(const ProString &sep) const;
|
||||||
QString join(const QString &sep) const;
|
QString join(const QString &sep) const;
|
||||||
QString join(QChar sep) const;
|
QString join(QChar sep) const;
|
||||||
|
template<typename A, typename B>
|
||||||
|
QString join(const QStringBuilder<A, B> &str) { return join(QString(str)); }
|
||||||
|
|
||||||
void insertUnique(const ProStringList &value);
|
void insertUnique(const ProStringList &value);
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@ DEFINES += \
|
|||||||
PROEVALUATOR_FULL \
|
PROEVALUATOR_FULL \
|
||||||
QT_BOOTSTRAPPED \
|
QT_BOOTSTRAPPED \
|
||||||
QT_BUILD_QMAKE \
|
QT_BUILD_QMAKE \
|
||||||
|
QT_USE_QSTRINGBUILDER \
|
||||||
QT_NO_FOREACH \
|
QT_NO_FOREACH \
|
||||||
$$shell_quote(QT_VERSION_STR=\"$$QT_VERSION\") \
|
$$shell_quote(QT_VERSION_STR=\"$$QT_VERSION\") \
|
||||||
QT_VERSION_MAJOR=$$QT_MAJOR_VERSION \
|
QT_VERSION_MAJOR=$$QT_MAJOR_VERSION \
|
||||||
@ -153,6 +154,7 @@ SOURCES += \
|
|||||||
qromancalendar.cpp \
|
qromancalendar.cpp \
|
||||||
qsettings.cpp \
|
qsettings.cpp \
|
||||||
qstring.cpp \
|
qstring.cpp \
|
||||||
|
qstringbuilder.cpp \
|
||||||
qstringlist.cpp \
|
qstringlist.cpp \
|
||||||
qsystemerror.cpp \
|
qsystemerror.cpp \
|
||||||
qtemporaryfile.cpp \
|
qtemporaryfile.cpp \
|
||||||
@ -209,6 +211,7 @@ HEADERS += \
|
|||||||
qregexp.h \
|
qregexp.h \
|
||||||
qromancalendar_p.h \
|
qromancalendar_p.h \
|
||||||
qstring.h \
|
qstring.h \
|
||||||
|
qstringbuilder.h \
|
||||||
qstringlist.h \
|
qstringlist.h \
|
||||||
qstringmatcher.h \
|
qstringmatcher.h \
|
||||||
qsystemerror_p.h \
|
qsystemerror_p.h \
|
||||||
|
@ -21,6 +21,7 @@ add_qt_test(tst_qmakelib
|
|||||||
PROEVALUATOR_FULL
|
PROEVALUATOR_FULL
|
||||||
PROEVALUATOR_SETENV
|
PROEVALUATOR_SETENV
|
||||||
PROPARSER_DEBUG
|
PROPARSER_DEBUG
|
||||||
|
QT_USE_QSTRINGBUILDER
|
||||||
INCLUDE_DIRECTORIES
|
INCLUDE_DIRECTORIES
|
||||||
../../../../qmake/library
|
../../../../qmake/library
|
||||||
)
|
)
|
||||||
|
@ -22,4 +22,4 @@ SOURCES += \
|
|||||||
qmakebuiltins.cpp \
|
qmakebuiltins.cpp \
|
||||||
qmakeevaluator.cpp
|
qmakeevaluator.cpp
|
||||||
|
|
||||||
DEFINES += PROPARSER_DEBUG PROEVALUATOR_FULL PROEVALUATOR_SETENV
|
DEFINES += PROPARSER_DEBUG PROEVALUATOR_FULL PROEVALUATOR_SETENV QT_USE_QSTRINGBUILDER
|
||||||
|
Loading…
x
Reference in New Issue
Block a user