From e2ac68f3437ab6e9e865c7c9ad1c52b293f61910 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Wed, 23 Mar 2011 20:05:49 +0100 Subject: fix detection of relative location information an empty line number does not indicate relative loc info - it may be the result of -no-ui-lines. instead, an empty file name does indicate it - no file name at all makes no sense, so this means a previous messages has set it already. and we need this additional detection, as the entire ts file may have no line number info to base the decision on at all. --- tools/linguist/shared/ts.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/tools/linguist/shared/ts.cpp b/tools/linguist/shared/ts.cpp index 85be5c6..4523bc5 100644 --- a/tools/linguist/shared/ts.cpp +++ b/tools/linguist/shared/ts.cpp @@ -264,6 +264,7 @@ bool TSReader::read(Translator &translator) //qDebug() << "TS " << attributes(); QHash currentLine; QString currentFile; + bool maybeRelative = false, maybeAbsolute = false; QXmlStreamAttributes atts = attributes(); //QString version = atts.value(strversion).toString(); @@ -342,10 +343,12 @@ bool TSReader::read(Translator &translator) msg.setTranslatorComment(readContents()); } else if (elementStarts(strlocation)) { // + maybeAbsolute = true; QXmlStreamAttributes atts = attributes(); QString fileName = atts.value(strfilename).toString(); if (fileName.isEmpty()) { fileName = currentMsgFile; + maybeRelative = true; } else { if (refs.isEmpty()) currentFile = fileName; @@ -353,7 +356,6 @@ bool TSReader::read(Translator &translator) } const QString lin = atts.value(strline).toString(); if (lin.isEmpty()) { - translator.setLocationsType(Translator::RelativeLocations); refs.append(TranslatorMessage::Reference(fileName, -1)); } else { bool bOK; @@ -361,9 +363,7 @@ bool TSReader::read(Translator &translator) if (bOK) { if (lin.startsWith(QLatin1Char('+')) || lin.startsWith(QLatin1Char('-'))) { lineNo = (currentLine[fileName] += lineNo); - translator.setLocationsType(Translator::RelativeLocations); - } else { - translator.setLocationsType(Translator::AbsoluteLocations); + maybeRelative = true; } refs.append(TranslatorMessage::Reference(fileName, lineNo)); } @@ -422,6 +422,9 @@ bool TSReader::read(Translator &translator) } else { handleError(); } + translator.setLocationsType(maybeRelative ? Translator::RelativeLocations : + maybeAbsolute ? Translator::AbsoluteLocations : + Translator::NoLocations); } // } else { handleError(); @@ -727,7 +730,6 @@ bool saveTS(const Translator &translator, QIODevice &dev, ConversionData &cd, in bool loadTS(Translator &translator, QIODevice &dev, ConversionData &cd) { - translator.setLocationsType(Translator::NoLocations); TSReader reader(dev, cd); return reader.read(translator); } -- cgit v0.12 From 7f8773a209567fb9c962602b8b1f4ec70e38ea51 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Tue, 22 Mar 2011 20:08:22 +0100 Subject: prefix TEMPLATE_PREFIX to TEMPLATE even if it is "default-constructed" that way prf files don't have to check both the prefix and the actual template to identify visual studio mode. Reviewed-by: mariusSO --- qmake/project.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/qmake/project.cpp b/qmake/project.cpp index e985401..16200f1 100644 --- a/qmake/project.cpp +++ b/qmake/project.cpp @@ -3028,17 +3028,17 @@ QStringList &QMakeProject::values(const QString &_var, QMap Date: Tue, 22 Mar 2011 20:20:18 +0100 Subject: clean up visual studio identification code TEMPLATE is (now) reliably prefixed with "vc" when a vs generator is used. Reviewed-by: mariusSO --- mkspecs/features/incredibuild_xge.prf | 2 +- mkspecs/features/moc.prf | 8 ++++---- mkspecs/features/win32/embed_manifest_dll.prf | 2 +- mkspecs/features/win32/embed_manifest_exe.prf | 2 +- mkspecs/features/win32/qaxserver.prf | 10 ++-------- mkspecs/wince50standard-armv4i-msvc2005/default_post.prf | 2 +- mkspecs/wince50standard-mipsii-msvc2005/default_post.prf | 2 +- mkspecs/wince50standard-x86-msvc2005/default_post.prf | 2 +- mkspecs/wincewm50pocket-msvc2005/default_post.prf | 2 +- mkspecs/wincewm50smart-msvc2005/default_post.prf | 2 +- mkspecs/wincewm60professional-msvc2005/default_post.prf | 2 +- mkspecs/wincewm60standard-msvc2005/default_post.prf | 2 +- 12 files changed, 16 insertions(+), 22 deletions(-) diff --git a/mkspecs/features/incredibuild_xge.prf b/mkspecs/features/incredibuild_xge.prf index a81a0cc..97ccc44 100644 --- a/mkspecs/features/incredibuild_xge.prf +++ b/mkspecs/features/incredibuild_xge.prf @@ -1,4 +1,4 @@ -contains(TEMPLATE, "vc.*")|contains(TEMPLATE_PREFIX, "vc") { +contains(TEMPLATE, "vc.*") { EOC = $$escape_expand(\\n\\t) # The VCPROJ generator will replace the \r\h with the coded \r\n: diff --git a/mkspecs/features/moc.prf b/mkspecs/features/moc.prf index 89e9b40..d0b36e4 100644 --- a/mkspecs/features/moc.prf +++ b/mkspecs/features/moc.prf @@ -16,7 +16,7 @@ win32:count($$list($$INCLUDEPATH), 40, >) { EOC = $$escape_expand(\\n\\t) - if(contains(TEMPLATE, "vc.*")|contains(TEMPLATE_PREFIX, "vc")) { + contains(TEMPLATE, "vc.*") { # the VCPROJ generator will replace the \r\h with the coded \r\n: # No other generator understands the \h if(win32-msvc2*|wince*msvc*): EOC = $$escape_expand(\\r\\h) @@ -42,7 +42,7 @@ win32:count($$list($$INCLUDEPATH), 40, >) { defineReplace(mocCmdBase) { !isEmpty(WIN_INCLUDETEMP) { RET = - if(contains(TEMPLATE, "vc.*")|contains(TEMPLATE_PREFIX, "vc")) { + contains(TEMPLATE, "vc.*") { RET += $$mocinclude.commands } RET += $$QMAKE_MOC $(DEFINES) @$$WIN_INCLUDETEMP $$join(QMAKE_COMPILER_DEFINES, " -D", -D) @@ -59,7 +59,7 @@ moc_header.output = $$MOC_DIR/$${QMAKE_H_MOD_MOC}${QMAKE_FILE_BASE}$${first(QMAK moc_header.input = HEADERS moc_header.variable_out = SOURCES moc_header.name = MOC ${QMAKE_FILE_IN} -if(!contains(TEMPLATE, "vc.*"):!contains(TEMPLATE_PREFIX, "vc")) { +!contains(TEMPLATE, "vc.*") { !isEmpty(INCLUDETEMP):moc_header.depends += $$INCLUDETEMP } silent:moc_header.commands = @echo moc ${QMAKE_FILE_IN} && $$moc_header.commands @@ -73,7 +73,7 @@ moc_source.commands = ${QMAKE_FUNC_mocCmdBase} ${QMAKE_FILE_IN} -o ${QMAKE_FILE_ moc_source.output = $$MOC_DIR/$${QMAKE_CPP_MOD_MOC}${QMAKE_FILE_BASE}$${QMAKE_EXT_CPP_MOC} moc_source.input = SOURCES OBJECTIVE_SOURCES moc_source.name = MOC ${QMAKE_FILE_IN} -if(!contains(TEMPLATE, "vc.*"):!contains(TEMPLATE_PREFIX, "vc")) { +!contains(TEMPLATE, "vc.*") { !isEmpty(INCLUDETEMP):moc_source.depends += $$INCLUDETEMP } silent:moc_source.commands = @echo moc ${QMAKE_FILE_IN} && $$moc_source.commands diff --git a/mkspecs/features/win32/embed_manifest_dll.prf b/mkspecs/features/win32/embed_manifest_dll.prf index 69c9d1d..5545a62 100644 --- a/mkspecs/features/win32/embed_manifest_dll.prf +++ b/mkspecs/features/win32/embed_manifest_dll.prf @@ -1,4 +1,4 @@ -!if(plugin:no_plugin_manifest):if(win32-msvc2005*|win32-msvc2008*|win32-msvc2010*):!static:!equals(TEMPLATE_PREFIX, "vc"):equals(TEMPLATE, "lib") { +!if(plugin:no_plugin_manifest):if(win32-msvc2005*|win32-msvc2008*|win32-msvc2010*):!static:equals(TEMPLATE, "lib") { MANIFEST_DIR = $$OBJECTS_DIR isEmpty(MANIFEST_DIR):MANIFEST_DIR = . NOPATH_TARGET = $$TARGET diff --git a/mkspecs/features/win32/embed_manifest_exe.prf b/mkspecs/features/win32/embed_manifest_exe.prf index 44aadfa..c6d012e 100644 --- a/mkspecs/features/win32/embed_manifest_exe.prf +++ b/mkspecs/features/win32/embed_manifest_exe.prf @@ -1,4 +1,4 @@ -if(win32-msvc2005*|win32-msvc2008*|win32-msvc2010*):!equals(TEMPLATE_PREFIX, "vc"):equals(TEMPLATE, "app") { +if(win32-msvc2005*|win32-msvc2008*|win32-msvc2010*):equals(TEMPLATE, "app") { MANIFEST_DIR = $$OBJECTS_DIR isEmpty(MANIFEST_DIR):MANIFEST_DIR = . NOPATH_TARGET = $$TARGET diff --git a/mkspecs/features/win32/qaxserver.prf b/mkspecs/features/win32/qaxserver.prf index 2899976..a6c0869 100644 --- a/mkspecs/features/win32/qaxserver.prf +++ b/mkspecs/features/win32/qaxserver.prf @@ -8,12 +8,7 @@ isEmpty(ACTIVEQT_VERSION):ACTIVEQT_VERSION = 1.0 DEFINES += QAXSERVER -ACTIVEQT_IDE = makefile -equals(TEMPLATE_PREFIX, "vc"):ACTIVEQT_IDE = VisualStudio -equals(TEMPLATE, "vcapp"):ACTIVEQT_IDE = VisualStudio -equals(TEMPLATE, "vclib"):ACTIVEQT_IDE = VisualStudio - -equals(ACTIVEQT_IDE, "VisualStudio") { +contains(TEMPLATE, "vc.*") { ACTIVEQT_IDC = $${QMAKE_IDC} ### Qt5: remove me qtPrepareTool(ACTIVEQT_IDC, idc) ACTIVEQT_IDL = $${QMAKE_IDL} @@ -27,8 +22,7 @@ equals(ACTIVEQT_IDE, "VisualStudio") { } ACTIVEQT_TLBOUT = "$(TargetDir)/$${TARGET}.tlb" GENERATED += $${OBJECTS_DIR}/$${TARGET}.idl $${ACTIVEQT_TLBOUT} -} -equals(ACTIVEQT_IDE, "makefile") { +} else { ACTIVEQT_IDC = -$(IDC) ACTIVEQT_IDL = -$(IDL) ACTIVEQT_NEWLINE = $$escape_expand(\\n\\t) diff --git a/mkspecs/wince50standard-armv4i-msvc2005/default_post.prf b/mkspecs/wince50standard-armv4i-msvc2005/default_post.prf index 3dab72a..900d758 100644 --- a/mkspecs/wince50standard-armv4i-msvc2005/default_post.prf +++ b/mkspecs/wince50standard-armv4i-msvc2005/default_post.prf @@ -1,6 +1,6 @@ # Visual Studio has some definitions set internally. # Thus we do not need to redefine these. -if(equals(TEMPLATE_PREFIX, "vc") | equals(TEMPLATE, "vc*")) { +equals(TEMPLATE, "vc.*") { DEFINES -= _M_ARM QMAKE_CXXFLAGS += -fp:precise } diff --git a/mkspecs/wince50standard-mipsii-msvc2005/default_post.prf b/mkspecs/wince50standard-mipsii-msvc2005/default_post.prf index d3e49ab..4dbcf35 100644 --- a/mkspecs/wince50standard-mipsii-msvc2005/default_post.prf +++ b/mkspecs/wince50standard-mipsii-msvc2005/default_post.prf @@ -1,6 +1,6 @@ # Visual Studio has some definitions set internally. # Thus we do not need to redefine these. -if(equals(TEMPLATE_PREFIX, "vc") | equals(TEMPLATE, "vc*")) { +contains(TEMPLATE, "vc.*") { DEFINES -= _M_MRX000=3000 QMAKE_CXXFLAGS += -fp:precise } diff --git a/mkspecs/wince50standard-x86-msvc2005/default_post.prf b/mkspecs/wince50standard-x86-msvc2005/default_post.prf index 6790c60..2436efb 100644 --- a/mkspecs/wince50standard-x86-msvc2005/default_post.prf +++ b/mkspecs/wince50standard-x86-msvc2005/default_post.prf @@ -1,6 +1,6 @@ # Visual Studio has some definitions set internally. # Thus we do not need to redefine these. -if(equals(TEMPLATE_PREFIX, "vc") | equals(TEMPLATE, "vc*")) { +equals(TEMPLATE, "vc.*") { QMAKE_CXXFLAGS += -fp:precise } diff --git a/mkspecs/wincewm50pocket-msvc2005/default_post.prf b/mkspecs/wincewm50pocket-msvc2005/default_post.prf index 3dab72a..84ea15e 100644 --- a/mkspecs/wincewm50pocket-msvc2005/default_post.prf +++ b/mkspecs/wincewm50pocket-msvc2005/default_post.prf @@ -1,6 +1,6 @@ # Visual Studio has some definitions set internally. # Thus we do not need to redefine these. -if(equals(TEMPLATE_PREFIX, "vc") | equals(TEMPLATE, "vc*")) { +contains(TEMPLATE, "vc.*") { DEFINES -= _M_ARM QMAKE_CXXFLAGS += -fp:precise } diff --git a/mkspecs/wincewm50smart-msvc2005/default_post.prf b/mkspecs/wincewm50smart-msvc2005/default_post.prf index 3dab72a..84ea15e 100644 --- a/mkspecs/wincewm50smart-msvc2005/default_post.prf +++ b/mkspecs/wincewm50smart-msvc2005/default_post.prf @@ -1,6 +1,6 @@ # Visual Studio has some definitions set internally. # Thus we do not need to redefine these. -if(equals(TEMPLATE_PREFIX, "vc") | equals(TEMPLATE, "vc*")) { +contains(TEMPLATE, "vc.*") { DEFINES -= _M_ARM QMAKE_CXXFLAGS += -fp:precise } diff --git a/mkspecs/wincewm60professional-msvc2005/default_post.prf b/mkspecs/wincewm60professional-msvc2005/default_post.prf index 3dab72a..84ea15e 100644 --- a/mkspecs/wincewm60professional-msvc2005/default_post.prf +++ b/mkspecs/wincewm60professional-msvc2005/default_post.prf @@ -1,6 +1,6 @@ # Visual Studio has some definitions set internally. # Thus we do not need to redefine these. -if(equals(TEMPLATE_PREFIX, "vc") | equals(TEMPLATE, "vc*")) { +contains(TEMPLATE, "vc.*") { DEFINES -= _M_ARM QMAKE_CXXFLAGS += -fp:precise } diff --git a/mkspecs/wincewm60standard-msvc2005/default_post.prf b/mkspecs/wincewm60standard-msvc2005/default_post.prf index 3dab72a..84ea15e 100644 --- a/mkspecs/wincewm60standard-msvc2005/default_post.prf +++ b/mkspecs/wincewm60standard-msvc2005/default_post.prf @@ -1,6 +1,6 @@ # Visual Studio has some definitions set internally. # Thus we do not need to redefine these. -if(equals(TEMPLATE_PREFIX, "vc") | equals(TEMPLATE, "vc*")) { +contains(TEMPLATE, "vc.*") { DEFINES -= _M_ARM QMAKE_CXXFLAGS += -fp:precise } -- cgit v0.12 From 3838388e8143ac5f5e1f3688f9ba31190fd9bbd3 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Wed, 23 Mar 2011 12:31:48 +0100 Subject: useful location reporting for errors from QMAKE_SUBSTITUTES Reviewed-by: mariusSO --- qmake/generators/makefile.cpp | 2 +- qmake/project.cpp | 14 ++++++++++++++ qmake/project.h | 1 + 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp index c13f38e..f9eba22 100644 --- a/qmake/generators/makefile.cpp +++ b/qmake/generators/makefile.cpp @@ -545,7 +545,7 @@ MakefileGenerator::init() else state.pop(); } else if(state.isEmpty() || state.top() == IN_CONDITION) { - contents += project->expand(line).join(QString(Option::field_sep)); + contents += project->expand(line, in.fileName(), count); } } if(out.exists() && out.open(QFile::ReadOnly)) { diff --git a/qmake/project.cpp b/qmake/project.cpp index 16200f1..d4f21be 100644 --- a/qmake/project.cpp +++ b/qmake/project.cpp @@ -2773,6 +2773,20 @@ QMakeProject::expand(const QString &str) return QStringList(); } +QString +QMakeProject::expand(const QString &str, const QString &file, int line) +{ + bool ok; + parser_info pi = parser; + parser.file = file; + parser.line_no = line; + parser.from_file = false; + QMap tmp = vars; + const QStringList ret = doVariableReplaceExpand(str, tmp, &ok); + parser = pi; + return ok ? ret.join(QString(Option::field_sep)) : QString(); +} + QStringList QMakeProject::expand(const QString &func, const QList &args) { diff --git a/qmake/project.h b/qmake/project.h index 09aa45e..0e6131d 100644 --- a/qmake/project.h +++ b/qmake/project.h @@ -144,6 +144,7 @@ public: QMap &place); QStringList expand(const QString &v); + QString expand(const QString &v, const QString &file, int line); QStringList expand(const QString &func, const QList &args); bool test(const QString &v); bool test(const QString &func, const QList &args); -- cgit v0.12 From ec834adf0ce004cb2919766dc12b31963d320f56 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Wed, 23 Mar 2011 12:57:49 +0100 Subject: make uic3-generated moc files depend on mocinclude.tmp Task-number: QTBUG-16951 Reviewed-by: mariusSO --- mkspecs/features/uic.prf | 1 + 1 file changed, 1 insertion(+) diff --git a/mkspecs/features/uic.prf b/mkspecs/features/uic.prf index 0a18b47..74a2683 100644 --- a/mkspecs/features/uic.prf +++ b/mkspecs/features/uic.prf @@ -77,6 +77,7 @@ uic3 { uic3_moc.input = UIC3_HEADERS uic3_moc.variable_out = GENERATED_SOURCES uic3_moc.name = $$moc_header.name + !contains(TEMPLATE, "vc.*"):!isEmpty(INCLUDETEMP):uic3_moc.depends += $$INCLUDETEMP QMAKE_EXTRA_COMPILERS += uic3_moc } -- cgit v0.12 From 3aa39b0164ce4bb9e551feb0417990e5679c5209 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Wed, 23 Mar 2011 17:07:36 +0100 Subject: create a pwd string with a trailing slash only on demand Reviewed-by: mariusSO --- qmake/generators/makefile.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp index f9eba22..f5b7295 100644 --- a/qmake/generators/makefile.cpp +++ b/qmake/generators/makefile.cpp @@ -2825,9 +2825,6 @@ MakefileGenerator::fileFixify(const QString& file, const QString &out_d, const Q return cacheVal; //do the fixin' - QString pwd = qmake_getpwd(); - if (!pwd.endsWith('/')) - pwd += '/'; QString orig_file = ret; if(ret.startsWith(QLatin1Char('~'))) { if(ret.startsWith(QLatin1String("~/"))) @@ -2836,12 +2833,16 @@ MakefileGenerator::fileFixify(const QString& file, const QString &out_d, const Q warn_msg(WarnLogic, "Unable to expand ~ in %s", ret.toLatin1().constData()); } if(fix == FileFixifyAbsolute || (fix == FileFixifyDefault && project->isActiveConfig("no_fixpath"))) { - if(fix == FileFixifyAbsolute && QDir::isRelativePath(ret)) //already absolute + if(fix == FileFixifyAbsolute && QDir::isRelativePath(ret)) { //already absolute + QString pwd = qmake_getpwd(); + if (!pwd.endsWith(QLatin1Char('/'))) + pwd += QLatin1Char('/'); ret.prepend(pwd); + } ret = Option::fixPathToTargetOS(ret, false, canon); } else { //fix it.. QString out_dir = QDir(Option::output_dir).absoluteFilePath(out_d); - QString in_dir = QDir(pwd).absoluteFilePath(in_d); + QString in_dir = QDir(qmake_getpwd()).absoluteFilePath(in_d); { QFileInfo in_fi(fileInfo(in_dir)); if(in_fi.exists()) @@ -2907,7 +2908,7 @@ MakefileGenerator::fileFixify(const QString& file, const QString &out_d, const Q ret = "."; debug_msg(3, "Fixed[%d,%d] %s :: to :: %s [%s::%s] [%s::%s]", fix, canon, orig_file.toLatin1().constData(), ret.toLatin1().constData(), in_d.toLatin1().constData(), out_d.toLatin1().constData(), - pwd.toLatin1().constData(), Option::output_dir.toLatin1().constData()); + qmake_getpwd().toLatin1().constData(), Option::output_dir.toLatin1().constData()); cache->insert(cacheKey, ret); return ret; } -- cgit v0.12 From 11604357fccb59f7aba8165ea7ca8846eb820858 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Thu, 24 Mar 2011 12:58:15 +0100 Subject: stop fixifying after first success somewhat unlikely that this had much real-world effects ... except eating yet more cpu. Reviewed-by: mariusSO --- qmake/generators/makefile.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp index f5b7295..9c22ca4 100644 --- a/qmake/generators/makefile.cpp +++ b/qmake/generators/makefile.cpp @@ -2896,6 +2896,7 @@ MakefileGenerator::fileFixify(const QString& file, const QString &out_d, const Q //prepend for(int o = 0; o < i; o++) dot_prefix += ".." + Option::dir_sep; + break; } } ret.prepend(dot_prefix); -- cgit v0.12 From af93be4d81d1e50b0c9f015f8432033cc737b22d Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Tue, 29 Mar 2011 10:22:10 +0200 Subject: simplify: the input and output dirs are already normalized Reviewed-by: mariusSO --- qmake/generators/makefile.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp index 9c22ca4..7033a04 100644 --- a/qmake/generators/makefile.cpp +++ b/qmake/generators/makefile.cpp @@ -782,7 +782,7 @@ MakefileGenerator::init() } { //get the output_dir into the pwd - if(fileFixify(Option::output_dir) != fileFixify(qmake_getpwd())) + if(Option::output_dir != qmake_getpwd()) project->values("INCLUDEPATH").append(fileFixify(Option::output_dir, Option::output_dir, Option::output_dir)); -- cgit v0.12 From 2fe0805d4eb821d2aa11ea868ebb3ff32a108475 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Tue, 29 Mar 2011 10:24:15 +0200 Subject: simplify: fileFixify for all same paths is always "." this must have been the most arcane way to generate a single dot ever Reviewed-by: mariusSO --- qmake/generators/makefile.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp index 7033a04..1bfbdba 100644 --- a/qmake/generators/makefile.cpp +++ b/qmake/generators/makefile.cpp @@ -783,9 +783,7 @@ MakefileGenerator::init() { //get the output_dir into the pwd if(Option::output_dir != qmake_getpwd()) - project->values("INCLUDEPATH").append(fileFixify(Option::output_dir, - Option::output_dir, - Option::output_dir)); + project->values("INCLUDEPATH").append("."); } //fix up the target deps -- cgit v0.12 From c74f29f28f2bfee8335820a67598d16e850e9444 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Tue, 29 Mar 2011 10:28:27 +0200 Subject: simplify: absolute fixification ignores the base dir arguments Reviewed-by: mariusSO --- qmake/generators/makefile.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp index 1bfbdba..8159804 100644 --- a/qmake/generators/makefile.cpp +++ b/qmake/generators/makefile.cpp @@ -2460,7 +2460,7 @@ MakefileGenerator::writeSubTargets(QTextStream &t, QListprofile.isEmpty()) { QString out = subtarget->makefile; - QString in = fileFixify(in_directory + subtarget->profile, out_directory, QString(), FileFixifyAbsolute); + QString in = fileFixify(in_directory + subtarget->profile, FileFixifyAbsolute); if(out.startsWith(in_directory)) out = out.mid(in_directory.length()); t << mkfile << ": " << "\n\t"; -- cgit v0.12 From 9df9d83085ff6164d83c35d51df539858ae398e4 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Tue, 29 Mar 2011 10:28:51 +0200 Subject: fix paths of vpath-resolved files Task-number: QTBUG-8169 Reviewed-by: mariusSO --- qmake/generators/makefile.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp index 8159804..7eccc2e 100644 --- a/qmake/generators/makefile.cpp +++ b/qmake/generators/makefile.cpp @@ -364,7 +364,7 @@ MakefileGenerator::findFilesInVPATH(QStringList l, uchar flags, const QString &v dir = regex.left(regex.lastIndexOf(Option::dir_sep) + 1); real_dir = dir; if(!(flags & VPATH_NoFixify)) - real_dir = fileFixify(real_dir, qmake_getpwd(), Option::output_dir); + real_dir = fileFixify(real_dir, qmake_getpwd(), Option::output_dir) + '/'; regex.remove(0, dir.length()); } if(real_dir.isEmpty() || exists(real_dir)) { @@ -383,16 +383,15 @@ MakefileGenerator::findFilesInVPATH(QStringList l, uchar flags, const QString &v for(int i = (int)files.count()-1; i >= 0; i--) { if(files[i] == "." || files[i] == "..") continue; - a = dir + files[i]; + a = real_dir + files[i]; if(!(flags & VPATH_NoFixify)) a = fileFixify(a); l.insert(val_it, a); } } } else { - debug_msg(1, "%s:%d Cannot match %s%c%s, as %s does not exist.", + debug_msg(1, "%s:%d Cannot match %s%s, as %s does not exist.", __FILE__, __LINE__, real_dir.toLatin1().constData(), - QDir::separator().toLatin1(), regex.toLatin1().constData(), real_dir.toLatin1().constData()); if(flags & VPATH_RemoveMissingFiles) remove_file = true; -- cgit v0.12 From 430b743946178c3f05208434331b8017159612b1 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Tue, 29 Mar 2011 10:33:45 +0200 Subject: dist target: fixify OBJECTS_DIR against output dir the thing is terminally broken anyway, but whatever Reviewed-by: mariusSO --- qmake/generators/unix/unixmake2.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/qmake/generators/unix/unixmake2.cpp b/qmake/generators/unix/unixmake2.cpp index c660855..c0c0aaa 100644 --- a/qmake/generators/unix/unixmake2.cpp +++ b/qmake/generators/unix/unixmake2.cpp @@ -787,7 +787,8 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t) ddir = project->first("QMAKE_DISTDIR"); QString ddir_c = escapeFilePath(fileFixify((project->isEmpty("OBJECTS_DIR") ? QString(".tmp/") : - project->first("OBJECTS_DIR")) + ddir)); + project->first("OBJECTS_DIR")) + ddir, + Option::output_dir, Option::output_dir)); t << "dist: " << "\n\t" << mkdir_p_asstring(ddir_c) << "\n\t" << "$(COPY_FILE) --parents $(SOURCES) $(DIST) " << ddir_c << Option::dir_sep << " && "; -- cgit v0.12 From 26dd9a45c3b1e92c356ee7f80f728e2ddca0c1d8 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Tue, 29 Mar 2011 13:56:23 +0200 Subject: fix fixifying of QMAKE_SUBSTITUTES use the correct bases. notably, don't expect the input file in the output dir. Reviewed-by: mariusSO --- qmake/generators/makefile.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp index 7eccc2e..d096eb4 100644 --- a/qmake/generators/makefile.cpp +++ b/qmake/generators/makefile.cpp @@ -483,19 +483,22 @@ MakefileGenerator::init() subs.at(i).toLatin1().constData()); continue; } - inn = tinn.first(); - outn = toutn.first(); + inn = fileFixify(tinn.first(), qmake_getpwd()); + outn = fileFixify(toutn.first(), qmake_getpwd(), Option::output_dir); } else { - inn = subs.at(i); + inn = fileFixify(subs.at(i), qmake_getpwd()); + if (!QFile::exists(inn)) { + // random insanity for backwards compat: .in file specified with absolute out dir + inn = fileFixify(subs.at(i)); + } if(!inn.endsWith(".in")) { warn_msg(WarnLogic, "Substitute '%s' does not end with '.in'", inn.toLatin1().constData()); continue; } - outn = inn.left(inn.length()-3); + outn = fileFixify(inn.left(inn.length()-3), qmake_getpwd(), Option::output_dir); } - QFile in(fileFixify(inn)); - QFile out(fileFixify(outn, qmake_getpwd(), Option::output_dir)); + QFile in(inn); if(in.open(QFile::ReadOnly)) { QString contents; QStack state; @@ -547,6 +550,7 @@ MakefileGenerator::init() contents += project->expand(line, in.fileName(), count); } } + QFile out(outn); if(out.exists() && out.open(QFile::ReadOnly)) { QString old = QString::fromUtf8(out.readAll()); if(contents == old) { -- cgit v0.12 From 8b11ebf392d832725185de08c2438d6b8771890b Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Tue, 29 Mar 2011 14:42:35 +0200 Subject: fixify target source against build tree that's where one would expect a target, after all. affects only extra targets explicitly requesting fixification, i.e., nothing. Reviewed-by: mariusSO --- qmake/generators/makefile.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp index d096eb4..3c5948f 100644 --- a/qmake/generators/makefile.cpp +++ b/qmake/generators/makefile.cpp @@ -1747,7 +1747,7 @@ MakefileGenerator::writeExtraTargets(QTextStream &t) deps += " " + escapeDependencyPath(dep); } if(project->values((*it) + ".CONFIG").indexOf("fix_target") != -1) - targ = fileFixify(targ); + targ = fileFixify(targ, Option::output_dir, Option::output_dir); if(project->isEmpty("QMAKE_NOFORCE") && project->values((*it) + ".CONFIG").indexOf("phony") != -1) deps += QString(" ") + "FORCE"; -- cgit v0.12 From a5be47714e5a0075fe9d0ea4a7925136a48e3974 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Tue, 29 Mar 2011 11:54:38 +0200 Subject: run depend_command in build dir in VS generators as well followup to b139e7e96e5c47b412c4f0bbc4ae11d5cca99e61 Reviewed-by: mariusSO --- qmake/generators/win32/msbuild_objectmodel.cpp | 5 ++++- qmake/generators/win32/msvc_objectmodel.cpp | 5 ++++- qmake/generators/win32/msvc_vcproj.cpp | 6 +++++- qmake/generators/win32/msvc_vcxproj.cpp | 6 +++++- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/qmake/generators/win32/msbuild_objectmodel.cpp b/qmake/generators/win32/msbuild_objectmodel.cpp index bd94178..01f730a 100644 --- a/qmake/generators/win32/msbuild_objectmodel.cpp +++ b/qmake/generators/win32/msbuild_objectmodel.cpp @@ -2438,6 +2438,9 @@ bool VCXFilter::addExtraCompiler(const VCXFilterFile &info) char buff[256]; QString dep_cmd = Project->replaceExtraCompilerVariables(tmp_dep_cmd, Option::fixPathToLocalOS(inFile, true, false), out); if(Project->canExecute(dep_cmd)) { + dep_cmd.prepend(QLatin1String("cd ") + + Project->escapeFilePath(Option::fixPathToLocalOS(Option::output_dir, false)) + + QLatin1String(" && ")); if(FILE *proc = QT_POPEN(dep_cmd.toLatin1().constData(), "r")) { QString indeps; while(!feof(proc)) { @@ -2452,7 +2455,7 @@ bool VCXFilter::addExtraCompiler(const VCXFilterFile &info) for (int i = 0; i < extradeps.count(); ++i) { QString dd = extradeps.at(i).simplified(); if (!dd.isEmpty()) - deps += Project->fileFixify(dd); + deps += Project->fileFixify(dd, QString(), Option::output_dir); } } } diff --git a/qmake/generators/win32/msvc_objectmodel.cpp b/qmake/generators/win32/msvc_objectmodel.cpp index 87c8943..0a24a01 100644 --- a/qmake/generators/win32/msvc_objectmodel.cpp +++ b/qmake/generators/win32/msvc_objectmodel.cpp @@ -2218,6 +2218,9 @@ bool VCFilter::addExtraCompiler(const VCFilterFile &info) Option::fixPathToLocalOS(inFile, true, false), out); if(Project->canExecute(dep_cmd)) { + dep_cmd.prepend(QLatin1String("cd ") + + Project->escapeFilePath(Option::fixPathToLocalOS(Option::output_dir, false)) + + QLatin1String(" && ")); if(FILE *proc = QT_POPEN(dep_cmd.toLatin1().constData(), "r")) { QString indeps; while(!feof(proc)) { @@ -2232,7 +2235,7 @@ bool VCFilter::addExtraCompiler(const VCFilterFile &info) for (int i = 0; i < extradeps.count(); ++i) { QString dd = extradeps.at(i).simplified(); if (!dd.isEmpty()) - deps += Project->fileFixify(dd); + deps += Project->fileFixify(dd, QString(), Option::output_dir); } } } diff --git a/qmake/generators/win32/msvc_vcproj.cpp b/qmake/generators/win32/msvc_vcproj.cpp index 364eca0..10934a5 100644 --- a/qmake/generators/win32/msvc_vcproj.cpp +++ b/qmake/generators/win32/msvc_vcproj.cpp @@ -1302,6 +1302,9 @@ void VcprojGenerator::initResourceFiles() dep_cmd = Option::fixPathToLocalOS(dep_cmd, true, false); if(canExecute(dep_cmd)) { + dep_cmd.prepend(QLatin1String("cd ") + + escapeFilePath(Option::fixPathToLocalOS(Option::output_dir, false)) + + QLatin1String(" && ")); if(FILE *proc = QT_POPEN(dep_cmd.toLatin1().constData(), "r")) { QString indeps; while(!feof(proc)) { @@ -1312,7 +1315,8 @@ void VcprojGenerator::initResourceFiles() } QT_PCLOSE(proc); if(!indeps.isEmpty()) - deps += fileFixify(indeps.replace('\n', ' ').simplified().split(' ')); + deps += fileFixify(indeps.replace('\n', ' ').simplified().split(' '), + QString(), Option::output_dir); } } } diff --git a/qmake/generators/win32/msvc_vcxproj.cpp b/qmake/generators/win32/msvc_vcxproj.cpp index 2b628a5..e2464ec 100644 --- a/qmake/generators/win32/msvc_vcxproj.cpp +++ b/qmake/generators/win32/msvc_vcxproj.cpp @@ -654,6 +654,9 @@ void VcxprojGenerator::initResourceFiles() dep_cmd = Option::fixPathToLocalOS(dep_cmd, true, false); if(canExecute(dep_cmd)) { + dep_cmd.prepend(QLatin1String("cd ") + + escapeFilePath(Option::fixPathToLocalOS(Option::output_dir, false)) + + QLatin1String(" && ")); if(FILE *proc = QT_POPEN(dep_cmd.toLatin1().constData(), "r")) { QString indeps; while(!feof(proc)) { @@ -664,7 +667,8 @@ void VcxprojGenerator::initResourceFiles() } QT_PCLOSE(proc); if(!indeps.isEmpty()) - deps += fileFixify(indeps.replace('\n', ' ').simplified().split(' ')); + deps += fileFixify(indeps.replace('\n', ' ').simplified().split(' '), + QString(), Option::output_dir); } } } -- cgit v0.12 From 8caba032245dfa310a77c22c1e55137c54e59f4f Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Tue, 29 Mar 2011 17:10:35 +0200 Subject: make collection of SUBDIRS in solution generator less bizarre de-duplicate code, and on the way don't try to re-resolve project variables of subprojects against the contents of the top level project. Reviewed-by: mariusSO --- qmake/generators/win32/msvc_vcproj.cpp | 42 +++++++++++++++++----------------- qmake/generators/win32/msvc_vcproj.h | 1 + 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/qmake/generators/win32/msvc_vcproj.cpp b/qmake/generators/win32/msvc_vcproj.cpp index 10934a5..5005190 100644 --- a/qmake/generators/win32/msvc_vcproj.cpp +++ b/qmake/generators/win32/msvc_vcproj.cpp @@ -352,6 +352,25 @@ QUuid VcprojGenerator::increaseUUID(const QUuid &id) return result; } +QStringList VcprojGenerator::collectSubDirs(QMakeProject *proj) +{ + QStringList subdirs; + QStringList tmp_proj_subdirs = proj->variables()["SUBDIRS"]; + for(int x = 0; x < tmp_proj_subdirs.size(); ++x) { + QString tmpdir = tmp_proj_subdirs.at(x); + if(!proj->isEmpty(tmpdir + ".file")) { + if(!proj->isEmpty(tmpdir + ".subdir")) + warn_msg(WarnLogic, "Cannot assign both file and subdir for subdir %s", + tmpdir.toLatin1().constData()); + tmpdir = proj->first(tmpdir + ".file"); + } else if(!proj->isEmpty(tmpdir + ".subdir")) { + tmpdir = proj->first(tmpdir + ".subdir"); + } + subdirs += tmpdir; + } + return subdirs; +} + void VcprojGenerator::writeSubDirs(QTextStream &t) { // Check if all requirements are fulfilled @@ -386,7 +405,6 @@ void VcprojGenerator::writeSubDirs(QTextStream &t) QHash solution_depends; QList solution_cleanup; - QStringList subdirs = project->values("SUBDIRS"); QString oldpwd = qmake_getpwd(); // Make sure that all temp projects are configured @@ -395,16 +413,9 @@ void VcprojGenerator::writeSubDirs(QTextStream &t) QStringList old_after_vars = Option::after_user_vars; Option::after_user_vars.append("CONFIG+=release"); + QStringList subdirs = collectSubDirs(project); for(int i = 0; i < subdirs.size(); ++i) { QString tmp = subdirs.at(i); - if(!project->isEmpty(tmp + ".file")) { - if(!project->isEmpty(tmp + ".subdir")) - warn_msg(WarnLogic, "Cannot assign both file and subdir for subdir %s", - tmp.toLatin1().constData()); - tmp = project->first(tmp + ".file"); - } else if(!project->isEmpty(tmp + ".subdir")) { - tmp = project->first(tmp + ".subdir"); - } QFileInfo fi(fileInfo(Option::fixPathToLocalOS(tmp, true))); if(fi.exists()) { if(fi.isDir()) { @@ -428,19 +439,8 @@ void VcprojGenerator::writeSubDirs(QTextStream &t) continue; } if(tmp_proj.first("TEMPLATE") == "vcsubdirs") { - QStringList tmp_proj_subdirs = tmp_proj.variables()["SUBDIRS"]; - for(int x = 0; x < tmp_proj_subdirs.size(); ++x) { - QString tmpdir = tmp_proj_subdirs.at(x); - if(!tmp_proj.isEmpty(tmpdir + ".file")) { - if(!tmp_proj.isEmpty(tmpdir + ".subdir")) - warn_msg(WarnLogic, "Cannot assign both file and subdir for subdir %s", - tmpdir.toLatin1().constData()); - tmpdir = tmp_proj.first(tmpdir + ".file"); - } else if(!tmp_proj.isEmpty(tmpdir + ".subdir")) { - tmpdir = tmp_proj.first(tmpdir + ".subdir"); - } + foreach(const QString &tmpdir, collectSubDirs(&tmp_proj)) subdirs += fileFixify(tmpdir); - } } else if(tmp_proj.first("TEMPLATE") == "vcapp" || tmp_proj.first("TEMPLATE") == "vclib") { // Initialize a 'fake' project to get the correct variables // and to be able to extract all the dependencies diff --git a/qmake/generators/win32/msvc_vcproj.h b/qmake/generators/win32/msvc_vcproj.h index 8e55211..d66c029 100644 --- a/qmake/generators/win32/msvc_vcproj.h +++ b/qmake/generators/win32/msvc_vcproj.h @@ -130,6 +130,7 @@ protected: QList mergedProjects; private: + QStringList collectSubDirs(QMakeProject *proj); QUuid increaseUUID(const QUuid &id); friend class VCFilter; }; -- cgit v0.12 From e22e36bc61b4af7c0a9113617df5a35ed315dede Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Tue, 29 Mar 2011 20:17:18 +0200 Subject: look for makespec in the build dir first it's more natural to look into the build dir before the source dir, and it's what the qmake-generated makefiles mean when re-invoking qmake. specifically, this works around the problem that relative paths with excess ".."s pointing below the root are happily ignored and thus truly bizarre makespec paths may be constructed by the qmake re-invocations if the source dir is less nested than the build dir. Task-number: QTBUG-9817 Reviewed-by: mariusSO --- qmake/project.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/qmake/project.cpp b/qmake/project.cpp index d4f21be..177ab2f 100644 --- a/qmake/project.cpp +++ b/qmake/project.cpp @@ -1345,10 +1345,10 @@ QMakeProject::read(uchar cmd) } if(QDir::isRelativePath(qmakespec)) { - if (QFile::exists(qmakespec+"/qmake.conf")) { - Option::mkfile::qmakespec = QFileInfo(Option::mkfile::qmakespec).absoluteFilePath(); - } else if (QFile::exists(Option::output_dir+"/"+qmakespec+"/qmake.conf")) { + if (QFile::exists(Option::output_dir+"/"+qmakespec+"/qmake.conf")) { qmakespec = Option::mkfile::qmakespec = QFileInfo(Option::output_dir+"/"+qmakespec).absoluteFilePath(); + } else if (QFile::exists(qmakespec+"/qmake.conf")) { + Option::mkfile::qmakespec = QFileInfo(Option::mkfile::qmakespec).absoluteFilePath(); } else { bool found_mkspec = false; for(QStringList::ConstIterator it = mkspec_roots.begin(); it != mkspec_roots.end(); ++it) { -- cgit v0.12