diff options
Diffstat (limited to 'qmake/generators/makefile.cpp')
-rw-r--r-- | qmake/generators/makefile.cpp | 78 |
1 files changed, 70 insertions, 8 deletions
diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp index 67e5bfb..82703c5 100644 --- a/qmake/generators/makefile.cpp +++ b/qmake/generators/makefile.cpp @@ -275,10 +275,12 @@ MakefileGenerator::initOutPaths() int slash = path.lastIndexOf(Option::dir_sep); if(slash != -1) { path = path.left(slash); - if(path != "." && - !mkdir(fileFixify(path, qmake_getpwd(), Option::output_dir))) - warn_msg(WarnLogic, "%s: Cannot access directory '%s'", - (*it).toLatin1().constData(), path.toLatin1().constData()); + // Make out path only if it does not contains makefile variables + if(!path.contains("${")) + if(path != "." && + !mkdir(fileFixify(path, qmake_getpwd(), Option::output_dir))) + warn_msg(WarnLogic, "%s: Cannot access directory '%s'", + (*it).toLatin1().constData(), path.toLatin1().constData()); } } } @@ -1580,8 +1582,11 @@ MakefileGenerator::verifyExtraCompiler(const QString &comp, const QString &file_ if(project->values(comp + ".CONFIG").indexOf("moc_verify") != -1) { if(!file.isNull()) { QMakeSourceFileInfo::addSourceFile(file, QMakeSourceFileInfo::SEEK_MOCS); - if(!mocable(file)) + if(!mocable(file)) { return false; + } else { + project->values("MOCABLES").append(file); + } } } else if(project->values(comp + ".CONFIG").indexOf("function_verify") != -1) { QString tmp_out = project->values(comp + ".output").first(); @@ -1698,6 +1703,10 @@ MakefileGenerator::writeExtraTargets(QTextStream &t) if(!cmd.isEmpty()) t << "\n\t" << cmd; t << endl << endl; + + project->values(QLatin1String("QMAKE_ET_PARSED_TARGETS.") + (*it)) << escapeDependencyPath(targ); + project->values(QLatin1String("QMAKE_ET_PARSED_DEPS.") + (*it) + escapeDependencyPath(targ)) << deps.split(" ", QString::SkipEmptyParts); + project->values(QLatin1String("QMAKE_ET_PARSED_CMD.") + (*it) + escapeDependencyPath(targ)) << cmd; } } @@ -1785,6 +1794,8 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) tmp_clean = tmp_out; if(tmp_clean.indexOf("${QMAKE_") == -1) { t << "\n\t" << "-$(DEL_FILE) " << tmp_clean; + if (isForSymbian()) + t << " 2> NUL"; // Eliminate unnecessary warnings wrote_clean = true; } if(!wrote_clean_cmds || !wrote_clean) { @@ -1813,7 +1824,10 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) } } if(!cleans.isEmpty()) - t << valGlue(cleans, "\n\t" + del_statement, "\n\t" + del_statement, ""); + if (isForSymbian()) + t << valGlue(cleans, "\n\t" + del_statement, " 2> NUL\n\t" + del_statement, " 2> NUL"); + else + t << valGlue(cleans, "\n\t" + del_statement, "\n\t" + del_statement, ""); if(!wrote_clean_cmds) { for(QStringList::ConstIterator input = tmp_inputs.begin(); input != tmp_inputs.end(); ++input) { t << "\n\t" << replaceExtraCompilerVariables(tmp_clean_cmds, (*input), @@ -1840,6 +1854,17 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) QString dep_cmd = replaceExtraCompilerVariables(tmp_dep_cmd, (*input), tmp_out); dep_cmd = fixEnvVariables(dep_cmd); +#if defined(Q_CC_MWERKS) && defined(Q_OS_WIN32) + QPopen procPipe; + if (procPipe.init(dep_cmd.toLatin1().constData(), "r")) { + QString indeps; + while(true) { + int read_in = procPipe.fread(buff, 255); + if(!read_in) + break; + indeps += QByteArray(buff, read_in); + } +#else if(FILE *proc = QT_POPEN(dep_cmd.toLatin1().constData(), "r")) { QString indeps; while(!feof(proc)) { @@ -1849,6 +1874,7 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) indeps += QByteArray(buff, read_in); } QT_PCLOSE(proc); +#endif if(!indeps.isEmpty()) { QStringList dep_cmd_deps = indeps.replace('\n', ' ').simplified().split(' '); for(int i = 0; i < dep_cmd_deps.count(); ++i) { @@ -1888,15 +1914,28 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) if (inputs.isEmpty()) continue; - QString cmd = replaceExtraCompilerVariables(tmp_cmd, escapeFilePaths(inputs), QStringList(tmp_out)); + QString cmd; + if (isForSymbianSbsv2()) { + // In sbsv2 the command inputs and outputs need to use absolute paths + cmd = replaceExtraCompilerVariables(tmp_cmd, + fileFixify(escapeFilePaths(inputs), FileFixifyAbsolute), + fileFixify(QStringList(tmp_out), FileFixifyAbsolute)); + } else { + cmd = replaceExtraCompilerVariables(tmp_cmd, escapeFilePaths(inputs), QStringList(tmp_out)); + } + t << escapeDependencyPath(tmp_out) << ":"; + project->values(QLatin1String("QMAKE_ET_PARSED_TARGETS.") + (*it)) << escapeDependencyPath(tmp_out); // compiler.CONFIG+=explicit_dependencies means that ONLY compiler.depends gets to cause Makefile dependencies if(project->values((*it) + ".CONFIG").indexOf("explicit_dependencies") != -1) { t << " " << valList(escapeDependencyPaths(fileFixify(tmp_dep, Option::output_dir, Option::output_dir))); + project->values(QLatin1String("QMAKE_ET_PARSED_DEPS.") + (*it) + escapeDependencyPath(tmp_out)) << tmp_dep; } else { t << " " << valList(escapeDependencyPaths(inputs)) << " " << valList(escapeDependencyPaths(deps)); + project->values(QLatin1String("QMAKE_ET_PARSED_DEPS.") + (*it) + escapeDependencyPath(tmp_out)) << inputs << deps; } t << "\n\t" << cmd << endl << endl; + project->values(QLatin1String("QMAKE_ET_PARSED_CMD.") + (*it) + escapeDependencyPath(tmp_out)) << cmd; continue; } for(QStringList::ConstIterator input = tmp_inputs.begin(); input != tmp_inputs.end(); ++input) { @@ -1909,13 +1948,32 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) for(int i = 0; i < pre_deps.size(); ++i) deps += replaceExtraCompilerVariables(pre_deps.at(i), (*input), out); } - QString cmd = replaceExtraCompilerVariables(tmp_cmd, (*input), out); + QString cmd; + if (isForSymbianSbsv2()) { + // In sbsv2 the command inputs and outputs need to use absolute paths + cmd = replaceExtraCompilerVariables(tmp_cmd, + fileFixify((*input), FileFixifyAbsolute), + fileFixify(out, FileFixifyAbsolute)); + } else { + cmd = replaceExtraCompilerVariables(tmp_cmd, (*input), out); + } for(QStringList::ConstIterator it3 = vars.constBegin(); it3 != vars.constEnd(); ++it3) cmd.replace("$(" + (*it3) + ")", "$(QMAKE_COMP_" + (*it3)+")"); if(!tmp_dep_cmd.isEmpty() && doDepends()) { char buff[256]; QString dep_cmd = replaceExtraCompilerVariables(tmp_dep_cmd, (*input), out); dep_cmd = fixEnvVariables(dep_cmd); +#if defined(Q_CC_MWERKS) && defined(Q_OS_WIN32) + QPopen procPipe; + if (procPipe.init(dep_cmd.toLatin1().constData(), "r")) { + QString indeps; + while(true) { + int read_in = procPipe.fread(buff, 255); + if(!read_in) + break; + indeps += QByteArray(buff, read_in); + } +#else if(FILE *proc = QT_POPEN(dep_cmd.toLatin1().constData(), "r")) { QString indeps; while(!feof(proc)) { @@ -1925,6 +1983,7 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) indeps += QByteArray(buff, read_in); } QT_PCLOSE(proc); +#endif if(!indeps.isEmpty()) { QStringList dep_cmd_deps = indeps.replace('\n', ' ').simplified().split(' '); for(int i = 0; i < dep_cmd_deps.count(); ++i) { @@ -1999,6 +2058,9 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) } t << escapeDependencyPath(out) << ": " << valList(escapeDependencyPaths(deps)) << "\n\t" << cmd << endl << endl; + project->values(QLatin1String("QMAKE_ET_PARSED_TARGETS.") + (*it)) << escapeDependencyPath(out); + project->values(QLatin1String("QMAKE_ET_PARSED_DEPS.") + (*it) + escapeDependencyPath(out)) << deps; + project->values(QLatin1String("QMAKE_ET_PARSED_CMD.") + (*it) + escapeDependencyPath(out)) << cmd; } } t << "compiler_clean: " << clean_targets << endl << endl; |