File indexing completed on 2024-05-12 04:39:26

0001 /*
0002     SPDX-FileCopyrightText: 2009 Aleix Pol Gonzalez <aleixpol@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-only
0005 */
0006 
0007 #ifndef CMAKETYPES_H
0008 #define CMAKETYPES_H
0009 
0010 #include "cmakelistsparser.h"
0011 #include <util/path.h>
0012 
0013 #include <language/duchain/indexeddeclaration.h>
0014 
0015 #include <QHash>
0016 
0017 struct Macro
0018 {
0019     QString name;
0020     QStringList knownArgs;
0021     CMakeFileContent code;
0022     bool isFunction;
0023 };
0024 
0025 struct CacheEntry
0026 {
0027     explicit CacheEntry(const QString& value=QString(), const QString &doc=QString()) : value(value), doc(doc) {}
0028     QString value;
0029     QString doc;
0030 };
0031 
0032 struct Target
0033 {
0034     using Properties = QMap<QString, QString>;
0035     enum Type { Library, Executable, Custom };
0036     KDevelop::IndexedDeclaration declaration;
0037     QStringList files;
0038     Type type;
0039     CMakeFunctionDesc desc;
0040     QString name;
0041 };
0042 
0043 struct Subdirectory
0044 {
0045     QString name;
0046     CMakeFunctionDesc desc;
0047     QString build_dir;
0048 };
0049 
0050 struct Test
0051 {
0052     Test() {}
0053     QString name;
0054     KDevelop::Path executable;
0055     QStringList arguments;
0056     QHash<QString, QString> properties;
0057 };
0058 
0059 Q_DECLARE_TYPEINFO(Test, Q_MOVABLE_TYPE);
0060 Q_DECLARE_TYPEINFO(Subdirectory, Q_MOVABLE_TYPE);
0061 Q_DECLARE_TYPEINFO(Target, Q_MOVABLE_TYPE);
0062 Q_DECLARE_TYPEINFO(CacheEntry, Q_MOVABLE_TYPE);
0063 Q_DECLARE_TYPEINFO(Macro, Q_MOVABLE_TYPE);
0064 
0065 enum PropertyType { GlobalProperty, DirectoryProperty, TargetProperty, SourceProperty, TestProperty, CacheProperty, VariableProperty };
0066 using CategoryType = QHash<QString, QMap<QString, QStringList>>;
0067 using CMakeProperties = QMap<PropertyType, CategoryType>;
0068 
0069 using MacroMap = QHash<QString, Macro>;
0070 using CMakeDefinitions = QHash<QString, QString>;
0071 using CacheValues = QHash<QString, CacheEntry>;
0072 
0073 Q_DECLARE_METATYPE(QList<Test>)
0074 Q_DECLARE_METATYPE(PropertyType)
0075 
0076 #endif