Fix semantics of the src dir in the include search paths with MinGW

This issue originates from https://bugs.webkit.org/show_bug.cgi?id=95736

Suppose we have
    main.cpp
    somedirectory/someheader.h -- which has #include "anotherheader.h"
    anotherheader.h

With unix generator, the directory where main.cpp is located is included,
unless no_include_pwd is set. Hence the look-up of anotherheader.h from
within someheader.h will work.

With MSVC this works because MSVC looks "in the directories of any
previously opened include files in the reverse order in which they were
opened." (from http://msdn.microsoft.com/en-us/library/36k2cdd4.aspx)

Unfortunately the build breaks with MinGW, because it lacks support for
including the source directory in the include search path just like the
unix generator does.

This patch adds the same functionality to the MinGW generator as well as
an auto-test.

Change-Id: Iea8bb06e34862c51b8fd4eca2ee26668e24a319a
Reviewed-by: Qt Doc Bot <qt_docbot@qt-project.org>
Reviewed-by: Sergio Ahumada <sergio.ahumada@nokia.com>
Reviewed-by: Jonathan Liu <net147@gmail.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
bb10
Simon Hausmann 2012-09-06 13:51:37 +02:00 committed by Qt by Nokia
parent e78e7d325b
commit 0c0c04b405
6 changed files with 29 additions and 0 deletions

View File

@ -320,6 +320,13 @@ void MingwMakefileGenerator::writeIncPart(QTextStream &t)
{
t << "INCPATH = ";
if (!project->isActiveConfig("no_include_pwd")) {
QString pwd = escapeFilePath(fileFixify(qmake_getpwd()));
if (pwd.isEmpty())
pwd = ".";
t << "-I" << pwd << " ";
}
const ProStringList &incs = project->values("INCLUDEPATH");
for (ProStringList::ConstIterator incit = incs.begin(); incit != incs.end(); ++incit) {
QString inc = (*incit).toQString();

View File

@ -0,0 +1,2 @@
/* This file should be included indirectly through main.cpp */

View File

@ -0,0 +1,4 @@
TEMPLATE = app
SOURCES = main.cpp
CONFIG -= debug_and_release_target
INCLUDEPATH += somedirectory

View File

@ -0,0 +1,6 @@
#include "someheader.h"
int main()
{
return 0;
}

View File

@ -0,0 +1 @@
#include "anotherheader.h"

View File

@ -76,6 +76,7 @@ private slots:
void duplicateLibraryEntries();
void export_across_file_boundaries();
void include_dir();
void include_pwd();
void install_files();
void install_depends();
void quotedfilenames();
@ -320,6 +321,14 @@ void tst_qmake::include_dir()
QVERIFY( test_compiler.makeDistClean( buildDir ));
}
void tst_qmake::include_pwd()
{
QString workDir = base_path + "/testdata/include_pwd";
QVERIFY( test_compiler.qmake( workDir, "include_pwd" ));
QVERIFY( test_compiler.make( workDir ));
QVERIFY( test_compiler.makeDistClean( workDir ));
}
void tst_qmake::install_files()
{
QString workDir = base_path + "/testdata/shadow_files";