qmake/generators/makefiledeps.h
changeset 0 1918ee327afb
child 4 3b1da2848fc7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qmake/generators/makefiledeps.h	Mon Jan 11 14:00:40 2010 +0000
@@ -0,0 +1,132 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the qmake application of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef MAKEFILEDEPS_H
+#define MAKEFILEDEPS_H
+
+#include <qstringlist.h>
+#include <qfileinfo.h>
+
+QT_BEGIN_NAMESPACE
+
+struct SourceFile;
+struct SourceDependChildren;
+class SourceFiles;
+
+class QMakeLocalFileName {
+    uint is_null : 1;
+    mutable QString real_name, local_name;
+public:
+    QMakeLocalFileName() : is_null(1) { }
+    QMakeLocalFileName(const QString &);
+    bool isNull() const { return is_null; }
+    inline const QString &real() const { return real_name; }
+    const QString &local() const;
+
+    bool operator==(const QMakeLocalFileName &other) {
+        return (this->real_name == other.real_name);
+    }
+    bool operator!=(const QMakeLocalFileName &other) {
+        return !(*this == other);
+    }
+};
+
+class QMakeSourceFileInfo
+{
+private:
+    //quick project lookups
+    SourceFiles *files, *includes;
+    bool files_changed;
+    QList<QMakeLocalFileName> depdirs;
+
+    //sleezy buffer code
+    char *spare_buffer;
+    int   spare_buffer_size;
+    char *getBuffer(int s);
+
+    //actual guts
+    bool findMocs(SourceFile *);
+    bool findDeps(SourceFile *);
+    void dependTreeWalker(SourceFile *, SourceDependChildren *);
+
+    //cache
+    QString cachefile;
+
+protected:
+    virtual QMakeLocalFileName fixPathForFile(const QMakeLocalFileName &, bool forOpen=false);
+    virtual QMakeLocalFileName findFileForDep(const QMakeLocalFileName &, const QMakeLocalFileName &);
+    virtual QFileInfo findFileInfo(const QMakeLocalFileName &);
+
+public:
+    QMakeSourceFileInfo(const QString &cachefile="");
+    virtual ~QMakeSourceFileInfo();
+
+    QList<QMakeLocalFileName> dependencyPaths() const { return depdirs; }
+    void setDependencyPaths(const QList<QMakeLocalFileName> &);
+
+    enum DependencyMode { Recursive, NonRecursive };
+    inline void setDependencyMode(DependencyMode mode) { dep_mode = mode; }
+    inline DependencyMode dependencyMode() const { return dep_mode; }
+
+    enum SourceFileType { TYPE_UNKNOWN, TYPE_C, TYPE_UI, TYPE_QRC };
+    enum SourceFileSeek { SEEK_DEPS=0x01, SEEK_MOCS=0x02 };
+    void addSourceFiles(const QStringList &, uchar seek, SourceFileType type=TYPE_C);
+    void addSourceFile(const QString &, uchar seek, SourceFileType type=TYPE_C);
+    bool containsSourceFile(const QString &, SourceFileType type=TYPE_C);
+
+    int included(const QString &file);
+    QStringList dependencies(const QString &file);
+
+    bool mocable(const QString &file);
+
+    virtual QMap<QString, QStringList> getCacheVerification();
+    virtual bool verifyCache(const QMap<QString, QStringList> &);
+    void setCacheFile(const QString &cachefile); //auto caching
+    void loadCache(const QString &cf);
+    void saveCache(const QString &cf);
+
+private:
+    DependencyMode dep_mode;
+};
+
+QT_END_NAMESPACE
+
+#endif // MAKEFILEDEPS_H