⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 makefiledeps.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 3 页
字号:
        file->file = fn;        files->addFile(file);    } else {        if(file->type != type && file->type != TYPE_UNKNOWN && type != TYPE_UNKNOWN)            warn_msg(WarnLogic, "%s is marked as %d, then %d!", f.toLatin1().constData(),                     file->type, type);    }    if(type != TYPE_UNKNOWN)        file->type = type;    if(seek & SEEK_MOCS && !file->moc_checked)        findMocs(file);    if(seek & SEEK_DEPS && !file->dep_checked)        findDeps(file);}bool QMakeSourceFileInfo::containsSourceFile(const QString &f, SourceFileType type){    if(SourceFile *file = files->lookupFile(QMakeLocalFileName(f)))        return (file->type == type || file->type == TYPE_UNKNOWN || type == TYPE_UNKNOWN);    return false;}char *QMakeSourceFileInfo::getBuffer(int s) {    if(!spare_buffer || spare_buffer_size < s)        spare_buffer = (char *)realloc(spare_buffer, spare_buffer_size=s);    return spare_buffer;}#ifndef S_ISDIR#define S_ISDIR(x) (x & _S_IFDIR)#endifQMakeLocalFileName QMakeSourceFileInfo::fixPathForFile(const QMakeLocalFileName &f, bool){    return f;}QMakeLocalFileName QMakeSourceFileInfo::findFileForDep(const QMakeLocalFileName &/*dep*/,                                                       const QMakeLocalFileName &/*file*/){    return QMakeLocalFileName();}QFileInfo QMakeSourceFileInfo::findFileInfo(const QMakeLocalFileName &dep){    return QFileInfo(dep.real());}bool QMakeSourceFileInfo::findDeps(SourceFile *file){    if(file->dep_checked || file->type == TYPE_UNKNOWN)        return true;    files_changed = true;    file->dep_checked = true;    struct stat fst;    char *buffer = 0;    int buffer_len = 0;    {        int fd;#if defined(_MSC_VER) && _MSC_VER >= 1400        if (_sopen_s(&fd, fixPathForFile(file->file, true).local().toLatin1().constData(),            _O_RDONLY, _SH_DENYNO, _S_IREAD) != 0)            fd = -1;#else        fd = open(fixPathForFile(file->file, true).local().toLatin1().constData(), O_RDONLY);#endif        if(fd == -1 || fstat(fd, &fst) || S_ISDIR(fst.st_mode))            return false;        buffer = getBuffer(fst.st_size);        for(int have_read = 0;            (have_read = QT_READ(fd, buffer + buffer_len, fst.st_size - buffer_len));            buffer_len += have_read);        QT_CLOSE(fd);    }    if(!buffer)        return false;    if(!file->deps)        file->deps = new SourceDependChildren;    int line_count = 1;    for(int x = 0; x < buffer_len; ++x) {        bool try_local = true;        char *inc = 0;        if(file->type == QMakeSourceFileInfo::TYPE_UI) {            // skip whitespaces            while(x < buffer_len && (*(buffer+x) == ' ' || *(buffer+x) == '\t'))                ++x;            if(*(buffer + x) == '<') {                ++x;                if(buffer_len >= x + 12 && !strncmp(buffer + x, "includehint", 11) &&                   (*(buffer + x + 11) == ' ' || *(buffer + x + 11) == '>')) {                    for(x += 11; *(buffer + x) != '>'; ++x);                    int inc_len = 0;                    for(x += 1 ; *(buffer + x + inc_len) != '<'; ++inc_len);                    *(buffer + x + inc_len) = '\0';                    inc = buffer + x;                } else if(buffer_len >= x + 13 && !strncmp(buffer + x, "customwidget", 12) &&                          (*(buffer + x + 12) == ' ' || *(buffer + x + 12) == '>')) {                    for(x += 13; *(buffer + x) != '>'; ++x); //skip up to >                    while(x < buffer_len) {                        for(x++; *(buffer + x) != '<'; ++x); //skip up to <                        x++;                        if(buffer_len >= x + 7 && !strncmp(buffer+x, "header", 6) &&                           (*(buffer + x + 6) == ' ' || *(buffer + x + 6) == '>')) {                            for(x += 7; *(buffer + x) != '>'; ++x); //skip up to >                            int inc_len = 0;                            for(x += 1 ; *(buffer + x + inc_len) != '<'; ++inc_len);                            *(buffer + x + inc_len) = '\0';                            inc = buffer + x;                            break;                        } else if(buffer_len >= x + 14 && !strncmp(buffer+x, "/customwidget", 13) &&                                  (*(buffer + x + 13) == ' ' || *(buffer + x + 13) == '>')) {                            x += 14;                            break;                        }                    }                } else if(buffer_len >= x + 8 && !strncmp(buffer + x, "include", 7) &&                          (*(buffer + x + 7) == ' ' || *(buffer + x + 7) == '>')) {                    for(x += 8; *(buffer + x) != '>'; ++x) {                        if(buffer_len >= x + 9 && *(buffer + x) == 'i' &&                           !strncmp(buffer + x, "impldecl", 8)) {                            for(x += 8; *(buffer + x) != '='; ++x);                            if(*(buffer + x) != '=')                                continue;                            for(++x; *(buffer+x) == '\t' || *(buffer+x) == ' '; ++x);                            char quote = 0;                            if(*(buffer+x) == '\'' || *(buffer+x) == '"') {                                quote = *(buffer + x);                                ++x;                            }                            int val_len;                            for(val_len = 0; true; ++val_len) {                                if(quote) {                                    if(*(buffer+x+val_len) == quote)                                        break;                                } else if(*(buffer + x + val_len) == '>' ||                                          *(buffer + x + val_len) == ' ') {                                    break;                                }                            }//?                            char saved = *(buffer + x + val_len);                            *(buffer + x + val_len) = '\0';                            if(!strcmp(buffer+x, "in implementation")) {                                //### do this                            }                        }                    }                    int inc_len = 0;                    for(x += 1 ; *(buffer + x + inc_len) != '<'; ++inc_len);                    *(buffer + x + inc_len) = '\0';                    inc = buffer + x;                }            }            //read past new line now..            for(; x < buffer_len && !qmake_endOfLine(*(buffer + x)); ++x);            ++line_count;        } else if(file->type == QMakeSourceFileInfo::TYPE_QRC) {        } else if(file->type == QMakeSourceFileInfo::TYPE_C) {            for(int beginning=1; x < buffer_len; ++x) {                while(x < buffer_len) {                    if(*(buffer+x) != ' ' && *(buffer+x) != '\t')                        break;                    ++x;                }                if(*(buffer+x) == '/') {                    ++x;                    if(buffer_len >= x) {                        if(*(buffer+x) == '/') { //c++ style comment                            for(; x < buffer_len && !qmake_endOfLine(*(buffer + x)); ++x);                        } else if(*(buffer+x) == '*') { //c style comment                            while(x < buffer_len) {                                ++x;                                if(*(buffer+x) == '*') {                                    if(x < buffer_len-1 && *(buffer + (x+1)) == '/') {                                        x += 2;                                        break;                                    }                                } else if(qmake_endOfLine(*(buffer+x))) {                                    ++line_count;                                }                            }                        }                    }                } else if(*(buffer+x) == '\'' || *(buffer+x) == '"') {                    beginning = 0;                    const char term = *(buffer+(x++));                    while(x < buffer_len) {                        if(*(buffer+x) == term)                            break;                        if(*(buffer+x) == '\\') {                            x+=2;                        } else {                            if(qmake_endOfLine(*(buffer+x)))                                ++line_count;                            ++x;                        }                    }                }                if(qmake_endOfLine(*(buffer+x))) {                    ++line_count;                    beginning = 1;                } else if(beginning && *(buffer+x) == '#') {                    break;                } else {                    beginning = 0;                }            }            if(x >= buffer_len)                break;            //got a preprocessor symbol            ++x;            while(x < buffer_len) {                if(*(buffer+x) != ' ' && *(buffer+x) != '\t')                    break;                ++x;            }            int keyword_len = 0;            const char *keyword = buffer+x;            while(x+keyword_len < buffer_len) {                if(((*(buffer+x+keyword_len) < 'a' || *(buffer+x+keyword_len) > 'z')) &&                   *(buffer+x+keyword_len) != '_') {                    for(x+=keyword_len; //skip spaces after keyword                        x < buffer_len && (*(buffer+x) == ' ' || *(buffer+x) == '\t');                        x++);                    break;                } else if(qmake_endOfLine(*(buffer+x+keyword_len))) {                    x += keyword_len-1;                    keyword_len = 0;                    break;                }                keyword_len++;            }            if(keyword_len == 7 && !strncmp(keyword, "include", keyword_len)) {                char term = *(buffer + x);                if(term == '<') {                    try_local = false;                    term = '>';                } else if(term != '"') { //wtf?                    continue;                }                x++;                int inc_len;                for(inc_len = 0; *(buffer + x + inc_len) != term && !qmake_endOfLine(*(buffer + x + inc_len)); ++inc_len);                *(buffer + x + inc_len) = '\0';                inc = buffer + x;                x += inc_len;            } else if(keyword_len == 13 && !strncmp(keyword, "qmake_warning", keyword_len)) {                char term = 0;                if(*(buffer + x) == '"')                    term = '"';                if(*(buffer + x) == '\'')                    term = '\'';                if(term)                    x++;                int msg_len;                for(msg_len = 0; (term && *(buffer + x + msg_len) != term) &&                              !qmake_endOfLine(*(buffer + x + msg_len)); ++msg_len);                *(buffer + x + msg_len) = '\0';                debug_msg(0, "%s:%d %s -- %s", file->file.local().toLatin1().constData(), line_count, keyword, buffer+x);                x += msg_len;            } else if(*(buffer+x) == '\'' || *(buffer+x) == '"') {                const char term = *(buffer+(x++));                while(x < buffer_len) {                    if(*(buffer+x) == term)                        break;                    if(*(buffer+x) == '\\') {                        x+=2;                    } else {                        if(qmake_endOfLine(*(buffer+x)))                            ++line_count;                        ++x;                    }                }            } else {                --x;            }        }        if(inc) {            if(!includes)                includes = new SourceFiles;            SourceFile *dep = includes->lookupFile(inc);            if(!dep) {                bool exists = false;                QMakeLocalFileName lfn(inc);                if(QDir::isRelativePath(lfn.real())) {                    if(try_local) {                        QString dir = findFileInfo(file->file).path();                        if(QDir::isRelativePath(dir))                            dir.prepend(qmake_getpwd() + "/");                        if(!dir.endsWith("/"))                            dir += "/";                        QMakeLocalFileName f(dir + lfn.local());                        if(findFileInfo(f).exists()) {                            lfn = fixPathForFile(f);                            exists = true;                        }                    }                    if(!exists) { //path lookup                        for(QList<QMakeLocalFileName>::Iterator it = depdirs.begin(); it != depdirs.end(); ++it) {                            QMakeLocalFileName f((*it).real() + Option::dir_sep + lfn.real());                            QFileInfo fi(findFileInfo(f));                            if(fi.exists() && !fi.isDir()) {                                lfn = fixPathForFile(f);                                exists = true;                                break;                            }                        }                    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -