diff options
Diffstat (limited to 'qmake/generators/makefile.cpp')
-rw-r--r-- | qmake/generators/makefile.cpp | 135 |
1 files changed, 68 insertions, 67 deletions
diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp index 7d4026c292..c991a57c9d 100644 --- a/qmake/generators/makefile.cpp +++ b/qmake/generators/makefile.cpp @@ -252,10 +252,11 @@ MakefileGenerator::setProjectFile(QMakeProject *p) else target_mode = TARG_UNIX_MODE; init(); - findLibraries(); - if(Option::qmake_mode == Option::QMAKE_GENERATE_MAKEFILE && - project->isActiveConfig("link_prl")) //load up prl's' - processPrlFiles(); + bool linkPrl = (Option::qmake_mode == Option::QMAKE_GENERATE_MAKEFILE) + && project->isActiveConfig("link_prl"); + bool mergeLflags = !project->isActiveConfig("no_smart_library_merge") + && !project->isActiveConfig("no_lflags_merge"); + findLibraries(linkPrl, mergeLflags); } ProStringList @@ -871,65 +872,59 @@ MakefileGenerator::init() bool MakefileGenerator::processPrlFile(QString &file) { - bool ret = false, try_replace_file=false; - QString meta_file, orig_file = file; - if(QMakeMetaInfo::libExists(file)) { + bool try_replace_file = false; + QString f = fileFixify(file, FileFixifyBackwards); + QString meta_file = QMakeMetaInfo::findLib(f); + if (!meta_file.isEmpty()) { try_replace_file = true; - meta_file = file; - file = ""; } else { - QString tmp = file; + QString tmp = f; int ext = tmp.lastIndexOf('.'); if(ext != -1) tmp = tmp.left(ext); - meta_file = tmp; - } -// meta_file = fileFixify(meta_file); - QString real_meta_file = Option::normalizePath(meta_file); - if(!meta_file.isEmpty()) { - QString f = fileFixify(real_meta_file, FileFixifyBackwards); - if(QMakeMetaInfo::libExists(f)) { - QMakeMetaInfo libinfo(project); - debug_msg(1, "Processing PRL file: %s", real_meta_file.toLatin1().constData()); - if(!libinfo.readLib(f)) { - fprintf(stderr, "Error processing meta file: %s\n", real_meta_file.toLatin1().constData()); - } else if(project->isActiveConfig("no_read_prl_" + libinfo.type().toLower())) { - debug_msg(2, "Ignored meta file %s [%s]", real_meta_file.toLatin1().constData(), libinfo.type().toLatin1().constData()); - } else { - ret = true; - project->values("QMAKE_CURRENT_PRL_LIBS") = libinfo.values("QMAKE_PRL_LIBS"); - ProStringList &defs = project->values("DEFINES"); - const ProStringList &prl_defs = project->values("PRL_EXPORT_DEFINES"); - foreach (const ProString &def, libinfo.values("QMAKE_PRL_DEFINES")) - if (!defs.contains(def) && prl_defs.contains(def)) - defs.append(def); - if(try_replace_file && !libinfo.isEmpty("QMAKE_PRL_TARGET")) { - QString dir; - int slsh = real_meta_file.lastIndexOf('/'); - if(slsh != -1) - dir = real_meta_file.left(slsh+1); - file = libinfo.first("QMAKE_PRL_TARGET").toQString(); - if(QDir::isRelativePath(file)) - file.prepend(dir); - } - } - } - if(ret) { - QString mf = QMakeMetaInfo::findLib(meta_file); - if(project->values("QMAKE_PRL_INTERNAL_FILES").indexOf(mf) == -1) - project->values("QMAKE_PRL_INTERNAL_FILES").append(mf); - if(project->values("QMAKE_INTERNAL_INCLUDED_FILES").indexOf(mf) == -1) - project->values("QMAKE_INTERNAL_INCLUDED_FILES").append(mf); - } + meta_file = QMakeMetaInfo::findLib(tmp); } - if(try_replace_file && file.isEmpty()) { -#if 0 - warn_msg(WarnLogic, "Found prl [%s] file with no target [%s]!", meta_file.toLatin1().constData(), - orig_file.toLatin1().constData()); -#endif - file = orig_file; + if (meta_file.isEmpty()) + return false; + QMakeMetaInfo libinfo(project); + debug_msg(1, "Processing PRL file: %s", meta_file.toLatin1().constData()); + if (!libinfo.readLib(meta_file)) { + fprintf(stderr, "Error processing meta file %s\n", meta_file.toLatin1().constData()); + return false; } - return ret; + if (project->isActiveConfig("no_read_prl_" + libinfo.type().toLower())) { + debug_msg(2, "Ignored meta file %s [%s]", + meta_file.toLatin1().constData(), libinfo.type().toLatin1().constData()); + return false; + } + project->values("QMAKE_CURRENT_PRL_LIBS") = libinfo.values("QMAKE_PRL_LIBS"); + ProStringList &defs = project->values("DEFINES"); + const ProStringList &prl_defs = project->values("PRL_EXPORT_DEFINES"); + foreach (const ProString &def, libinfo.values("QMAKE_PRL_DEFINES")) + if (!defs.contains(def) && prl_defs.contains(def)) + defs.append(def); + if (try_replace_file) { + ProString tgt = libinfo.first("QMAKE_PRL_TARGET"); + if (tgt.isEmpty()) { + fprintf(stderr, "Error: %s does not define QMAKE_PRL_TARGET\n", + meta_file.toLatin1().constData()); + } else if (!tgt.contains('.')) { + fprintf(stderr, "Error: %s defines QMAKE_PRL_TARGET without extension\n", + meta_file.toLatin1().constData()); + } else { + int off = qMax(file.lastIndexOf('/'), file.lastIndexOf('\\')) + 1; + debug_msg(1, " Replacing library reference %s with %s", + file.mid(off).toLatin1().constData(), + tgt.toQString().toLatin1().constData()); + file.replace(off, 1000, tgt.toQString()); + } + } + QString mf = fileFixify(meta_file); + if (!project->values("QMAKE_PRL_INTERNAL_FILES").contains(mf)) + project->values("QMAKE_PRL_INTERNAL_FILES").append(mf); + if (!project->values("QMAKE_INTERNAL_INCLUDED_FILES").contains(mf)) + project->values("QMAKE_INTERNAL_INCLUDED_FILES").append(mf); + return true; } void @@ -944,12 +939,6 @@ MakefileGenerator::filterIncludedFiles(const char *var) } } -void -MakefileGenerator::processPrlFiles() -{ - qFatal("MakefileGenerator::processPrlFiles() called!"); -} - static QString qv(const ProString &val) { @@ -968,10 +957,6 @@ qv(const ProStringList &val) void MakefileGenerator::writePrlFile(QTextStream &t) { - ProString target = project->first("TARGET"); - int slsh = target.lastIndexOf(Option::dir_sep); - if(slsh != -1) - target.chopFront(slsh + 1); QString bdir = Option::output_dir; if(bdir.isEmpty()) bdir = qmake_getpwd(); @@ -981,7 +966,7 @@ MakefileGenerator::writePrlFile(QTextStream &t) if(!project->isEmpty("QMAKE_ABSOLUTE_SOURCE_PATH")) t << "QMAKE_PRL_SOURCE_DIR =" << qv(project->first("QMAKE_ABSOLUTE_SOURCE_PATH")) << endl; - t << "QMAKE_PRL_TARGET =" << qv(target) << endl; + t << "QMAKE_PRL_TARGET =" << qv(project->first("LIB_TARGET")) << endl; if(!project->isEmpty("PRL_EXPORT_DEFINES")) t << "QMAKE_PRL_DEFINES =" << qv(project->values("PRL_EXPORT_DEFINES")) << endl; if(!project->isEmpty("PRL_EXPORT_CFLAGS")) @@ -2744,6 +2729,22 @@ MakefileGenerator::fileInfo(QString file) const return fi; } +MakefileGenerator::LibFlagType +MakefileGenerator::parseLibFlag(const ProString &flag, ProString *arg) +{ + if (flag.startsWith("-L")) { + *arg = flag.mid(2); + return LibFlagPath; + } + if (flag.startsWith("-l")) { + *arg = flag.mid(2); + return LibFlagLib; + } + if (flag.startsWith('-')) + return LibFlagOther; + return LibFlagFile; +} + ProStringList MakefileGenerator::fixLibFlags(const ProKey &var) { |