blob: 01ec5373b557871434f70d3ac8ef848674df42f2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
// Copyright (C) Filippo Cucchetto <filippocucchetto@gmail.com>
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "nimtoolchainfactory.h"
#include "nimconstants.h"
#include "nimtoolchain.h"
#include "nimtr.h"
#include <projectexplorer/devicesupport/devicemanager.h>
#include <utils/algorithm.h>
#include <utils/environment.h>
#include <utils/fileutils.h>
#include <utils/pathchooser.h>
#include <utils/qtcassert.h>
#include <QFormLayout>
using namespace ProjectExplorer;
using namespace Utils;
namespace Nim {
NimToolChainFactory::NimToolChainFactory()
{
setDisplayName(Tr::tr("Nim"));
setSupportedToolChainType(Constants::C_NIMTOOLCHAIN_TYPEID);
setSupportedLanguages({Constants::C_NIMLANGUAGE_ID});
setToolchainConstructor([] { return new NimToolChain; });
setUserCreatable(true);
}
Toolchains NimToolChainFactory::autoDetect(const ToolchainDetector &detector) const
{
Toolchains result;
const FilePath compilerPath = detector.device->searchExecutableInPath("nim");
if (compilerPath.isEmpty())
return result;
result = Utils::filtered(detector.alreadyKnown, [compilerPath](ToolChain *tc) {
return tc->typeId() == Constants::C_NIMTOOLCHAIN_TYPEID
&& tc->compilerCommand() == compilerPath;
});
if (!result.empty())
return result;
auto tc = new NimToolChain;
tc->setDetection(ToolChain::AutoDetection);
tc->setCompilerCommand(compilerPath);
result.append(tc);
return result;
}
Toolchains NimToolChainFactory::detectForImport(const ToolChainDescription &tcd) const
{
Toolchains result;
if (tcd.language == Constants::C_NIMLANGUAGE_ID) {
auto tc = new NimToolChain;
tc->setDetection(ToolChain::ManualDetection); // FIXME: sure?
tc->setCompilerCommand(tcd.compilerPath);
result.append(tc);
}
return result;
}
NimToolChainConfigWidget::NimToolChainConfigWidget(NimToolChain *tc)
: ToolChainConfigWidget(tc)
, m_compilerCommand(new PathChooser)
, m_compilerVersion(new QLineEdit)
{
// Create ui
const auto gnuVersionArgs = QStringList("--version");
m_compilerCommand->setExpectedKind(PathChooser::ExistingCommand);
m_compilerCommand->setCommandVersionArguments(gnuVersionArgs);
m_mainLayout->addRow(Tr::tr("&Compiler path:"), m_compilerCommand);
m_compilerVersion->setReadOnly(true);
m_mainLayout->addRow(Tr::tr("&Compiler version:"), m_compilerVersion);
// Fill
fillUI();
// Connect
connect(m_compilerCommand, &PathChooser::textChanged, this, [this] {
const FilePath path = m_compilerCommand->rawFilePath();
auto tc = static_cast<NimToolChain *>(toolChain());
QTC_ASSERT(tc, return);
tc->setCompilerCommand(path);
fillUI();
});
}
void NimToolChainConfigWidget::applyImpl()
{
auto tc = static_cast<NimToolChain *>(toolChain());
Q_ASSERT(tc);
if (tc->isAutoDetected())
return;
tc->setCompilerCommand(m_compilerCommand->filePath());
}
void NimToolChainConfigWidget::discardImpl()
{
fillUI();
}
bool NimToolChainConfigWidget::isDirtyImpl() const
{
auto tc = static_cast<NimToolChain *>(toolChain());
Q_ASSERT(tc);
return tc->compilerCommand() != m_compilerCommand->filePath();
}
void NimToolChainConfigWidget::makeReadOnlyImpl()
{
m_compilerCommand->setReadOnly(true);
}
void NimToolChainConfigWidget::fillUI()
{
auto tc = static_cast<NimToolChain *>(toolChain());
Q_ASSERT(tc);
m_compilerCommand->setFilePath(tc->compilerCommand());
m_compilerVersion->setText(tc->compilerVersion());
}
}
|