autotoolsproject.h 3.68 KB
Newer Older
1
/****************************************************************************
2
**
3 4 5 6
** Copyright (C) 2016 Openismus GmbH.
** Author: Peter Penz (ppenz@openismus.com)
** Author: Patricia Santana Cruz (patriciasantanacruz@gmail.com)
** Contact: https://www.qt.io/licensing/
7
**
hjk's avatar
hjk committed
8
** This file is part of Qt Creator.
9
**
hjk's avatar
hjk committed
10 11 12 13
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
14 15 16
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
17
**
18 19 20 21 22 23 24
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
25
**
hjk's avatar
hjk committed
26
****************************************************************************/
27

Tobias Hunger's avatar
Tobias Hunger committed
28
#pragma once
29 30 31

#include <projectexplorer/project.h>

32 33
#include <utils/fileutils.h>

34
namespace Utils { class FileSystemWatcher; }
35

36 37
namespace CppTools { class CppProjectUpdater; }

38 39
namespace AutotoolsProjectManager {
namespace Internal {
hjk's avatar
hjk committed
40

41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
class MakefileParserThread;
class AutotoolsTarget;

/**
 * @brief Implementation of the ProjectExplorer::Project interface.
 *
 * Loads the autotools project and embeds it into the QtCreator project tree.
 * The class AutotoolsProject is the core of the autotools project plugin.
 * It is responsible to parse the Makefile.am files and do trigger project
 * updates if a Makefile.am file or a configure.ac file has been changed.
 */
class AutotoolsProject : public ProjectExplorer::Project
{
    Q_OBJECT

public:
57
    explicit AutotoolsProject(const Utils::FileName &fileName);
58
    ~AutotoolsProject() override;
59

60
    static QString defaultBuildDirectory(const QString &projectPath);
61 62 63
    QStringList buildTargets() const;

protected:
64
    RestoreResult fromMap(const QVariantMap &map, QString *errorMessage) override;
65

Tobias Hunger's avatar
Tobias Hunger committed
66
private:
67 68 69
    /**
     *  Loads the project tree by parsing the makefiles.
     */
70
    void loadProjectTree();
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105

    /**
     * Is invoked when the makefile parsing by m_makefileParserThread has
     * been started. Turns the mouse cursor into a busy cursor.
     */
    void makefileParsingStarted();

    /**
     * Is invoked when the makefile parsing by m_makefileParserThread has
     * been finished. Adds all sources and files into the project tree and
     * takes care listen to file changes for Makefile.am and configure.ac
     * files.
     */
    void makefileParsingFinished();

    /**
     * Is invoked, if a file of the project tree has been changed by the user.
     * If a Makefile.am or a configure.ac file has been changed, the project
     * configuration must be updated.
     */
    void onFileChanged(const QString &file);

    /**
     * This function is in charge of the code completion.
     */
    void updateCppCodeModel();

    /// Return value for AutotoolsProject::files()
    QStringList m_files;

    /// Watches project files for changes.
    Utils::FileSystemWatcher *m_fileWatcher;
    QStringList m_watchedFiles;

    /// Responsible for parsing the makefiles asynchronously in a thread
Tobias Hunger's avatar
Tobias Hunger committed
106
    MakefileParserThread *m_makefileParserThread = nullptr;
107

108
    CppTools::CppProjectUpdater *m_cppCodeModelUpdater = nullptr;
109 110 111 112
};

} // namespace Internal
} // namespace AutotoolsProjectManager