File indexing completed on 2024-05-05 16:46:16

0001 /*
0002     SPDX-FileCopyrightText: 2007 Andreas Pakulat <apaku@gmx.de>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #ifndef QMAKEFILE_H
0008 #define QMAKEFILE_H
0009 
0010 
0011 #include <util/stack.h>
0012 
0013 #include "qmakefilevisitor.h"
0014 
0015 class QStringList;
0016 
0017 namespace KDevelop
0018 {
0019 class IProject;
0020 }
0021 
0022 namespace QMake
0023 {
0024     class ProjectAST;
0025 }
0026 
0027 class Scope;
0028 class QMakeMkSpecs;
0029 
0030 class QMakeFile : public QMakeVariableResolver
0031 {
0032 public:
0033     explicit QMakeFile( QString  file );
0034     ~QMakeFile() override;
0035     virtual bool read();
0036     QString absoluteDir() const;
0037     QString absoluteFile() const;
0038     QMake::ProjectAST* ast() const;
0039 
0040     QStringList variableValues(const QString&) const;
0041     QStringList variables() const;
0042     VariableMap variableMap() const;
0043 
0044     bool containsVariable( const QString& ) const;
0045 
0046     QStringList resolveVariable( const QString& variable, VariableInfo::VariableType type) const override;
0047 
0048     /// required for proper build-dir resolution
0049     void setProject(KDevelop::IProject* project);
0050     KDevelop::IProject* project() const;
0051 protected:
0052     VariableMap m_variableValues;
0053 
0054     QStringList resolveShellGlobbing( const QString& pattern, const QString& base = {} ) const;
0055     QStringList resolveFileName( const QString& file, const QString& base = {} ) const;
0056     QString resolveToSingleFileName( const QString& file, const QString& base = {} ) const;
0057 private:
0058     QMake::ProjectAST* m_ast;
0059     QString m_projectFile;
0060     KDevelop::IProject* m_project;
0061 };
0062 
0063 #endif