diff options
Diffstat (limited to 'qmake/generators/win32/mingw_make.cpp')
-rw-r--r-- | qmake/generators/win32/mingw_make.cpp | 110 |
1 files changed, 21 insertions, 89 deletions
diff --git a/qmake/generators/win32/mingw_make.cpp b/qmake/generators/win32/mingw_make.cpp index 57955dc456..97bfef88a4 100644 --- a/qmake/generators/win32/mingw_make.cpp +++ b/qmake/generators/win32/mingw_make.cpp @@ -33,7 +33,6 @@ #include "mingw_make.h" #include "option.h" -#include "meta.h" #include <proitems.h> @@ -56,11 +55,6 @@ QString MingwMakefileGenerator::escapeDependencyPath(const QString &path) const return ret; } -QString MingwMakefileGenerator::getLibTarget() -{ - return QString("lib" + project->first("TARGET") + project->first("TARGET_VERSION_EXT") + ".a"); -} - QString MingwMakefileGenerator::getManifestFileForRcFile() const { return project->first("QMAKE_MANIFEST").toQString(); @@ -68,48 +62,21 @@ QString MingwMakefileGenerator::getManifestFileForRcFile() const ProString MingwMakefileGenerator::fixLibFlag(const ProString &lib) { - if (lib.startsWith("lib")) - return QStringLiteral("-l") + escapeFilePath(lib.mid(3)); - return escapeFilePath(lib); + if (lib.startsWith("-l")) // Fallback for unresolved -l libs. + return QLatin1String("-l") + escapeFilePath(lib.mid(2)); + if (lib.startsWith("-L")) // Lib search path. Needed only by -l above. + return QLatin1String("-L") + + escapeFilePath(Option::fixPathToTargetOS(lib.mid(2).toQString(), false)); + if (lib.startsWith("lib")) // Fallback for unresolved MSVC-style libs. + return QLatin1String("-l") + escapeFilePath(lib.mid(3).toQString()); + return escapeFilePath(Option::fixPathToTargetOS(lib.toQString(), false)); } -bool MingwMakefileGenerator::findLibraries() +MakefileGenerator::LibFlagType +MingwMakefileGenerator::parseLibFlag(const ProString &flag, ProString *arg) { - QList<QMakeLocalFileName> dirs; - static const char * const lflags[] = { "QMAKE_LIBS", "QMAKE_LIBS_PRIVATE", 0 }; - for (int i = 0; lflags[i]; i++) { - ProStringList &l = project->values(lflags[i]); - ProStringList::Iterator it = l.begin(); - while (it != l.end()) { - if ((*it).startsWith("-l")) { - QString steam = (*it).mid(2).toQString(); - ProString out; - QString suffix = project->first(ProKey("QMAKE_" + steam.toUpper() + "_SUFFIX")).toQString(); - for (QList<QMakeLocalFileName>::Iterator dir_it = dirs.begin(); dir_it != dirs.end(); ++dir_it) { - QString extension; - int ver = findHighestVersion((*dir_it).local(), steam, "dll.a|a"); - if (ver > 0) - extension += QString::number(ver); - extension += suffix; - if (QMakeMetaInfo::libExists((*dir_it).local() + '/' + steam) - || exists((*dir_it).local() + '/' + steam + extension + ".a") - || exists((*dir_it).local() + '/' + steam + extension + ".dll.a")) { - out = *it + extension; - break; - } - } - if (!out.isEmpty()) // We assume if it never finds it that its correct - (*it) = out; - } else if ((*it).startsWith("-L")) { - QMakeLocalFileName f((*it).mid(2).toQString()); - dirs.append(f); - *it = "-L" + f.real(); - } - - ++it; - } - } - return true; + // Skip MSVC handling from Win32MakefileGenerator + return MakefileGenerator::parseLibFlag(flag, arg); } bool MingwMakefileGenerator::writeMakefile(QTextStream &t) @@ -183,25 +150,6 @@ void createArObjectScriptFile(const QString &fileName, const QString &target, co } } -void createRvctObjectScriptFile(const QString &fileName, const ProStringList &objList) -{ - QString filePath = Option::output_dir + QDir::separator() + fileName; - QFile file(filePath); - if (file.open(QIODevice::WriteOnly | QIODevice::Text)) { - QTextStream t(&file); - for (ProStringList::ConstIterator it = objList.constBegin(); it != objList.constEnd(); ++it) { - QString path = (*it).toQString(); - // ### quoting? - if (QDir::isRelativePath(path)) - t << "./" << path << endl; - else - t << path << endl; - } - t.flush(); - file.close(); - } -} - void MingwMakefileGenerator::writeMingwParts(QTextStream &t) { writeStandardParts(t); @@ -239,8 +187,6 @@ void MingwMakefileGenerator::init() project->values("TARGET_PRL").append(project->first("TARGET")); - project->values("QMAKE_L_FLAG") << "-L"; - processVars(); project->values("QMAKE_LIBS") += project->values("RES_FILE"); @@ -249,8 +195,7 @@ void MingwMakefileGenerator::init() QString destDir = ""; if(!project->first("DESTDIR").isEmpty()) destDir = Option::fixPathToTargetOS(project->first("DESTDIR") + Option::dir_sep, false, false); - project->values("MINGW_IMPORT_LIB").prepend(destDir + "lib" + project->first("TARGET") - + project->first("TARGET_VERSION_EXT") + ".a"); + project->values("MINGW_IMPORT_LIB").prepend(destDir + project->first("LIB_TARGET")); project->values("QMAKE_LFLAGS").append(QString("-Wl,--out-implib,") + fileVar("MINGW_IMPORT_LIB")); } @@ -335,32 +280,19 @@ void MingwMakefileGenerator::writeObjectsPart(QTextStream &t) ar_script_file += "." + var("BUILD_NAME"); } // QMAKE_LIB is used for win32, including mingw, whereas QMAKE_AR is used on Unix. - if (project->isActiveConfig("rvct_linker")) { - createRvctObjectScriptFile(ar_script_file, project->values("OBJECTS")); - QString ar_cmd = project->values("QMAKE_LIB").join(' '); - if (ar_cmd.isEmpty()) - ar_cmd = "armar --create"; - objectsLinkLine = ar_cmd + ' ' + fileVar("DEST_TARGET") + " --via " + escapeFilePath(ar_script_file); - } else { - // Strip off any options since the ar commands will be read from file. - QString ar_cmd = var("QMAKE_LIB").section(" ", 0, 0);; - if (ar_cmd.isEmpty()) - ar_cmd = "ar"; - createArObjectScriptFile(ar_script_file, var("DEST_TARGET"), project->values("OBJECTS")); - objectsLinkLine = ar_cmd + " -M < " + escapeFilePath(ar_script_file); - } + // Strip off any options since the ar commands will be read from file. + QString ar_cmd = var("QMAKE_LIB").section(" ", 0, 0); + if (ar_cmd.isEmpty()) + ar_cmd = "ar"; + createArObjectScriptFile(ar_script_file, var("DEST_TARGET"), project->values("OBJECTS")); + objectsLinkLine = ar_cmd + " -M < " + escapeFilePath(ar_script_file); } else { QString ld_script_file = var("QMAKE_LINK_OBJECT_SCRIPT") + "." + var("TARGET"); if (!var("BUILD_NAME").isEmpty()) { ld_script_file += "." + var("BUILD_NAME"); } - if (project->isActiveConfig("rvct_linker")) { - createRvctObjectScriptFile(ld_script_file, project->values("OBJECTS")); - objectsLinkLine = QString::fromLatin1("--via ") + escapeFilePath(ld_script_file); - } else { - createLdObjectScriptFile(ld_script_file, project->values("OBJECTS")); - objectsLinkLine = escapeFilePath(ld_script_file); - } + createLdObjectScriptFile(ld_script_file, project->values("OBJECTS")); + objectsLinkLine = escapeFilePath(ld_script_file); } Win32MakefileGenerator::writeObjectsPart(t); } |