Make CONFIG+=GNUmake respect shadow builds

Previously we were generating include lines based on the relative path of
the source file, which resulted in the .d files being placed in the source
dir as well. We now expect the .d files to live in the output dir, but keep
the dependency from the .d file to the original source file.

Before:

   .deps/%.d: %.cpp
   -include .deps/../../src/foo.d

After:

   .deps/%.d: ../../src/%.cpp
   -include .deps/foo.d

Change-Id: I749adeb671cf8424f0849521c5bb1489eb3e76d5
Reviewed-on: http://codereview.qt-project.org/6455
Sanity-Review: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Marius Storm-Olsen <marius.storm-olsen@nokia.com>
This commit is contained in:
Tor Arne Vestbø 2011-10-11 20:27:22 +02:00 committed by Qt by Nokia
parent 82d897febf
commit eba17baaed

View File

@ -282,14 +282,17 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
QString odir;
if(!project->values("OBJECTS_DIR").isEmpty())
odir = project->first("OBJECTS_DIR");
QString pwd = escapeFilePath(fileFixify(qmake_getpwd()));
t << "###### Dependencies" << endl << endl;
t << odir << ".deps/%.d: %.cpp\n\t";
t << odir << ".deps/%.d: " << pwd << "/%.cpp\n\t";
if(project->isActiveConfig("echo_depend_creation"))
t << "@echo Creating depend for $<" << "\n\t";
t << mkdir_p_asstring("$(@D)") << "\n\t"
<< "@$(CXX) " << cmd << " $< | sed \"s,^\\($(*F).o\\):," << odir << "\\1:,g\" >$@" << endl << endl;
t << odir << ".deps/%.d: %.c\n\t";
t << odir << ".deps/%.d: " << pwd << "/%.c\n\t";
if(project->isActiveConfig("echo_depend_creation"))
t << "@echo Creating depend for $<" << "\n\t";
t << mkdir_p_asstring("$(@D)") << "\n\t"
@ -317,8 +320,9 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
}
}
}
if(!d_file.isEmpty()) {
d_file = odir + ".deps/" + d_file + ".d";
d_file = odir + ".deps/" + fileFixify(d_file, pwd, Option::output_dir) + ".d";
QStringList deps = findDependencies((*it)).filter(QRegExp(Option::cpp_moc_ext + "$"));
if(!deps.isEmpty())
t << d_file << ": " << deps.join(" ") << endl;