Changeset 362


Ignore:
Timestamp:
Nov 30, 2009, 12:56:45 AM (16 years ago)
Author:
Dmitry A. Kuminov
Message:

qmake: Don't assume that relative paths in all OSes look like in *nix [vendor bug].

Location:
trunk/qmake
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/qmake/cachekeys.h

    r2 r362  
    4848#include <qfile.h>
    4949#include <qfileinfo.h>
     50#include <qdir.h>
    5051#include <qhash.h>
    5152
     
    107108            return true;
    108109
     110#ifdef Q_OS_OS2
     111        return QDir::isRelativePath(file);
     112#else
    109113        const QChar c0 = file.at(0);
    110114        const QChar c1 = length >= 2 ? file.at(1) : QChar(0);
     
    114118                || (c0 == QLatin1Char('/') && c1 == QLatin1Char('/'))
    115119                || (c0 == QLatin1Char('\\') && c1 == QLatin1Char('\\')));
     120#endif   
    116121    }
    117122};
  • trunk/qmake/generators/makefile.cpp

    r356 r362  
    125125    }
    126126    bool ret = true;
    127 #if defined(Q_OS_WIN) || defined(Q_OS_OS2)
     127#if defined(Q_OS_WIN)
    128128    bool driveExists = true;
    129129    if(!QDir::isRelativePath(path)) {
     
    138138    }
    139139    if(driveExists)
     140#elif defined(Q_OS_OS2)
     141    path = QFileInfo(path).absoluteFilePath();
     142    QString drv = path.left(3);
     143    if (!QFile::exists(drv))
     144        warn_msg(WarnLogic, "Cannot access drive '%s' (%s)",
     145                 drv.toLocal8Bit().data(), path.toLocal8Bit().data());
     146    else
    140147#endif
    141148    {
     
    341348                        vpath += Option::output_dir;
    342349                }
    343                 for(QStringList::Iterator vpath_it = vpath.begin();
    344                     vpath_it != vpath.end(); ++vpath_it) {
    345                     QString real_dir = Option::fixPathToLocalOS((*vpath_it));
    346                     if(exists(real_dir + QDir::separator() + val)) {
    347                         QString dir = (*vpath_it);
    348                         if(dir.right(Option::dir_sep.length()) != Option::dir_sep)
    349                             dir += Option::dir_sep;
    350                         val = dir + val;
     350                foreach(const QString &vp, vpath) {
     351                    QString real_val = QDir(vp).absoluteFilePath(val);
     352                    if (exists(real_val)) {
     353                        val = real_val;
    351354                        if(!(flags & VPATH_NoFixify))
    352355                            val = fileFixify(val);
     
    850853                    file = libinfo.first("QMAKE_PRL_TARGET");
    851854                    if(QDir::isRelativePath(file))
    852                         file.prepend(dir);
     855                        file = QDir(dir).absoluteFilePath(file);
    853856                }
    854857            }
     
    27822785    if(fix == FileFixifyAbsolute || (fix == FileFixifyDefault && project->isActiveConfig("no_fixpath"))) {
    27832786        if(fix == FileFixifyAbsolute && QDir::isRelativePath(ret)) //already absolute
    2784             ret.prepend(pwd);
     2787            ret = QDir(pwd).absoluteFilePath(ret);
    27852788        ret = Option::fixPathToTargetOS(ret, false, canon);
    27862789    } else { //fix it..
     
    28002803        if(out_dir != in_dir || !qfileinfo.isRelative()) {
    28012804            if(qfileinfo.isRelative()) {
    2802                 ret = in_dir + "/" + qfile;
     2805                ret = QDir(in_dir).absoluteFilePath(qfile);
    28032806                qfileinfo.setFile(ret);
    28042807            }
     
    30223025        if(!file.fileName().isEmpty()) {
    30233026            if(QDir::isRelativePath(file.fileName()))
    3024                 file.setFileName(Option::output_dir + "/" + file.fileName()); //pwd when qmake was run
     3027                file.setFileName(QDir(Option::output_dir).absoluteFilePath(file.fileName())); //pwd when qmake was run
    30253028            QFileInfo fi(fileInfo(file.fileName()));
    30263029            if(fi.isDir())
     
    30353038    }
    30363039    if(QDir::isRelativePath(file.fileName())) {
    3037         QString fname = Option::output_dir;  //pwd when qmake was run
    3038         if(!fname.endsWith("/"))
    3039             fname += "/";
    3040         fname += file.fileName();
    3041         file.setFileName(fname);
     3040        file.setFileName(QDir(Option::output_dir).absoluteFilePath(file.fileName())); //pwd when qmake was run
    30423041    }
    30433042    if(!build.isEmpty())
     
    30573056        od = Option::fixPathToTargetOS(od);
    30583057        if(QDir::isRelativePath(od))
    3059             od.prepend(Option::output_dir);
     3058            od = QDir(Option::output_dir).absoluteFilePath(od);
    30603059        Option::output_dir = od;
    30613060        return true;
  • trunk/qmake/generators/makefiledeps.cpp

    r2 r362  
    625625                    if(try_local) {
    626626                        QString dir = findFileInfo(file->file).path();
    627                         if(QDir::isRelativePath(dir))
    628                             dir.prepend(qmake_getpwd() + "/");
    629                         if(!dir.endsWith("/"))
    630                             dir += "/";
    631                         QMakeLocalFileName f(dir + lfn.local());
     627                        QMakeLocalFileName f(QDir(dir).absoluteFilePath(lfn.local()));
    632628                        if(findFileInfo(f).exists()) {
    633629                            lfn = fixPathForFile(f);
     
    636632                    }
    637633                    if(!exists) { //path lookup
    638                         for(QList<QMakeLocalFileName>::Iterator it = depdirs.begin(); it != depdirs.end(); ++it) {
    639                             QMakeLocalFileName f((*it).real() + Option::dir_sep + lfn.real());
     634                        foreach(const QMakeLocalFileName &dd, depdirs) {
     635                            QMakeLocalFileName f(QDir(dd.real()).absoluteFilePath(lfn.real()));
    640636                            QFileInfo fi(findFileInfo(f));
    641637                            if(fi.exists() && !fi.isDir()) {
  • trunk/qmake/generators/metamakefile.cpp

    r29 r362  
    325325            sub->input_dir = subdir.absolutePath();
    326326            if(subdir.isRelative() && old_output_dir != oldpwd) {
    327                 sub->output_dir = old_output_dir + "/" + subdir.path();
     327                sub->output_dir = QDir(old_output_dir).absoluteFilePath(subdir.path());
    328328                printf("Reading %s [%s]\n", subdir.absoluteFilePath().toLatin1().constData(), sub->output_dir.toLatin1().constData());
    329329            } else { //what about shadow builds?
  • trunk/qmake/generators/win32/winmakefile.cpp

    r193 r362  
    246246                        tmp = opt;
    247247                    for(QList<QMakeLocalFileName>::Iterator it = libdirs.begin(); it != libdirs.end(); ++it) {
    248                         QString prl = (*it).local() + Option::dir_sep + tmp;
     248                        QString prl = QDir((*it).local()).absoluteFilePath(tmp);
    249249                        // the original is used as the key
    250250                        QString orgprl = prl;
  • trunk/qmake/main.cpp

    r29 r362  
    127127            Option::output_dir = dir;
    128128        if(QDir::isRelativePath(Option::output_dir))
    129             Option::output_dir.prepend(oldpwd);
     129            Option::output_dir = QDir(oldpwd).absoluteFilePath(Option::output_dir);
    130130        Option::output_dir = QDir::cleanPath(Option::output_dir);
    131131    }
  • trunk/qmake/meta.cpp

    r2 r362  
    163163                        QString targ = dirs[i] + (*lst_it);
    164164                        if(QDir::isRelativePath(targ))
    165                             targ.prepend(qmake_getpwd() + QDir::separator());
     165                            targ = QDir(qmake_getpwd()).absoluteFilePath(targ);
    166166                        vars["QMAKE_PRL_TARGET"] << targ;
    167167                        found = true;
  • trunk/qmake/project.cpp

    r29 r362  
    14571457                if (QFile::exists(qmakespec+"/qmake.conf")) {
    14581458                    Option::mkfile::qmakespec = QFileInfo(Option::mkfile::qmakespec).absoluteFilePath();
    1459                 } else if (QFile::exists(Option::output_dir+"/"+qmakespec+"/qmake.conf")) {
    1460                     qmakespec = Option::mkfile::qmakespec = QFileInfo(Option::output_dir+"/"+qmakespec).absoluteFilePath();
    14611459                } else {
    1462                     bool found_mkspec = false;
    1463                     for(QStringList::ConstIterator it = mkspec_roots.begin(); it != mkspec_roots.end(); ++it) {
    1464                         QString mkspec = (*it) + QDir::separator() + qmakespec;
    1465                         if(QFile::exists(mkspec)) {
    1466                             found_mkspec = true;
    1467                             Option::mkfile::qmakespec = qmakespec = mkspec;
    1468                             break;
     1460                    QString tmp = QDir(Option::output_dir).absoluteFilePath(qmakespec);
     1461                    if (QFile::exists(tmp+"/qmake.conf"))
     1462                        qmakespec = Option::mkfile::qmakespec = tmp;
     1463                    else {
     1464                        bool found_mkspec = false;
     1465                        foreach(const QString &root, mkspec_roots) {
     1466                            QString mkspec = QDir(root).absoluteFilePath(qmakespec);
     1467                            if(QFile::exists(mkspec)) {
     1468                                found_mkspec = true;
     1469                                Option::mkfile::qmakespec = qmakespec = mkspec;
     1470                                break;
     1471                            }
    14691472                        }
    1470                     }
    1471                     if(!found_mkspec) {
    1472                         fprintf(stderr, "Could not find mkspecs for your QMAKESPEC(%s) after trying:\n\t%s\n",
    1473                                 qmakespec.toLatin1().constData(), mkspec_roots.join("\n\t").toLatin1().constData());
    1474                         return false;
     1473                        if(!found_mkspec) {
     1474                            fprintf(stderr, "Could not find mkspecs for your QMAKESPEC(%s) after trying:\n\t%s\n",
     1475                                    qmakespec.toLatin1().constData(), mkspec_roots.join("\n\t").toLatin1().constData());
     1476                            return false;
     1477                        }
    14751478                    }
    14761479                }
     
    17751778            include_roots << qmake_getpwd();
    17761779        include_roots << Option::output_dir;
    1777         for(int root = 0; root < include_roots.size(); ++root) {
    1778             QString testName = QDir::toNativeSeparators(include_roots[root]);
    1779             if (!testName.endsWith(QString(QDir::separator())))
    1780                 testName += QDir::separator();
    1781             testName += file;
     1780        foreach(const QString &root, include_roots) {
     1781            QString testName = QDir(root).absoluteFilePath(file);
    17821782            if(QFile::exists(testName)) {
    17831783                file = testName;
Note: See TracChangeset for help on using the changeset viewer.