clang
22.0.0git
include
clang
Driver
Distro.h
Go to the documentation of this file.
1
//===--- Distro.h - Linux distribution detection support --------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#ifndef LLVM_CLANG_DRIVER_DISTRO_H
10
#define LLVM_CLANG_DRIVER_DISTRO_H
11
12
#include "llvm/Support/VirtualFileSystem.h"
13
#include "llvm/TargetParser/Triple.h"
14
15
namespace
clang
{
16
namespace
driver {
17
18
/// Distro - Helper class for detecting and classifying Linux distributions.
19
///
20
/// This class encapsulates the clang Linux distribution detection mechanism
21
/// as well as helper functions that match the specific (versioned) results
22
/// into wider distribution classes.
23
class
Distro
{
24
public
:
25
enum
DistroType
{
26
// Special value means that no detection was performed yet.
27
UninitializedDistro
,
28
// NB: Releases of a particular Linux distro should be kept together
29
// in this enum, because some tests are done by integer comparison against
30
// the first and last known member in the family, e.g. IsRedHat().
31
AlpineLinux
,
32
ArchLinux
,
33
DebianLenny
,
34
DebianSqueeze
,
35
DebianWheezy
,
36
DebianJessie
,
37
DebianStretch
,
38
DebianBuster
,
39
DebianBullseye
,
40
DebianBookworm
,
41
DebianTrixie
,
42
DebianForky
,
43
DebianDuke
,
44
Exherbo
,
45
RHEL5
,
46
RHEL6
,
47
RHEL7
,
48
Fedora
,
49
Gentoo
,
50
OpenSUSE
,
51
UbuntuHardy
,
52
UbuntuIntrepid
,
53
UbuntuJaunty
,
54
UbuntuKarmic
,
55
UbuntuLucid
,
56
UbuntuMaverick
,
57
UbuntuNatty
,
58
UbuntuOneiric
,
59
UbuntuPrecise
,
60
UbuntuQuantal
,
61
UbuntuRaring
,
62
UbuntuSaucy
,
63
UbuntuTrusty
,
64
UbuntuUtopic
,
65
UbuntuVivid
,
66
UbuntuWily
,
67
UbuntuXenial
,
68
UbuntuYakkety
,
69
UbuntuZesty
,
70
UbuntuArtful
,
71
UbuntuBionic
,
72
UbuntuCosmic
,
73
UbuntuDisco
,
74
UbuntuEoan
,
75
UbuntuFocal
,
76
UbuntuGroovy
,
77
UbuntuHirsute
,
78
UbuntuImpish
,
79
UbuntuJammy
,
80
UbuntuKinetic
,
81
UbuntuLunar
,
82
UbuntuMantic
,
83
UbuntuNoble
,
84
UbuntuOracular
,
85
UbuntuPlucky
,
86
UbuntuQuesting
,
87
UnknownDistro
88
};
89
90
private
:
91
/// The distribution, possibly with specific version.
92
DistroType
DistroVal;
93
94
public
:
95
/// @name Constructors
96
/// @{
97
98
/// Default constructor leaves the distribution unknown.
99
Distro
() : DistroVal() {}
100
101
/// Constructs a Distro type for specific distribution.
102
Distro
(
DistroType
D
) : DistroVal(
D
) {}
103
104
/// Detects the distribution using specified VFS.
105
explicit
Distro
(llvm::vfs::FileSystem &VFS,
const
llvm::Triple &TargetOrHost);
106
107
bool
operator==
(
const
Distro
&
Other
)
const
{
108
return
DistroVal ==
Other
.DistroVal;
109
}
110
111
bool
operator!=
(
const
Distro
&
Other
)
const
{
112
return
DistroVal !=
Other
.DistroVal;
113
}
114
115
bool
operator>=
(
const
Distro
&
Other
)
const
{
116
return
DistroVal >=
Other
.DistroVal;
117
}
118
119
bool
operator<=
(
const
Distro
&
Other
)
const
{
120
return
DistroVal <=
Other
.DistroVal;
121
}
122
123
/// @}
124
/// @name Convenience Predicates
125
/// @{
126
127
bool
IsRedhat
()
const
{
128
return
DistroVal ==
Fedora
|| (DistroVal >=
RHEL5
&& DistroVal <=
RHEL7
);
129
}
130
131
bool
IsOpenSUSE
()
const
{
return
DistroVal ==
OpenSUSE
; }
132
133
bool
IsDebian
()
const
{
134
return
DistroVal >=
DebianLenny
&& DistroVal <=
DebianDuke
;
135
}
136
137
bool
IsUbuntu
()
const
{
138
return
DistroVal >=
UbuntuHardy
&& DistroVal <=
UbuntuQuesting
;
139
}
140
141
bool
IsAlpineLinux
()
const
{
return
DistroVal ==
AlpineLinux
; }
142
143
bool
IsGentoo
()
const
{
return
DistroVal ==
Gentoo
; }
144
145
/// @}
146
};
147
148
}
// end namespace driver
149
}
// end namespace clang
150
151
#endif
D
const Decl * D
Definition:
CheckExprLifetime.cpp:212
clang::driver::Distro
Distro - Helper class for detecting and classifying Linux distributions.
Definition:
Distro.h:23
clang::driver::Distro::IsDebian
bool IsDebian() const
Definition:
Distro.h:133
clang::driver::Distro::Distro
Distro()
Default constructor leaves the distribution unknown.
Definition:
Distro.h:99
clang::driver::Distro::IsOpenSUSE
bool IsOpenSUSE() const
Definition:
Distro.h:131
clang::driver::Distro::IsGentoo
bool IsGentoo() const
Definition:
Distro.h:143
clang::driver::Distro::Distro
Distro(DistroType D)
Constructs a Distro type for specific distribution.
Definition:
Distro.h:102
clang::driver::Distro::operator!=
bool operator!=(const Distro &Other) const
Definition:
Distro.h:111
clang::driver::Distro::operator==
bool operator==(const Distro &Other) const
Definition:
Distro.h:107
clang::driver::Distro::DistroType
DistroType
Definition:
Distro.h:25
clang::driver::Distro::RHEL5
@ RHEL5
Definition:
Distro.h:45
clang::driver::Distro::UbuntuBionic
@ UbuntuBionic
Definition:
Distro.h:71
clang::driver::Distro::UbuntuNoble
@ UbuntuNoble
Definition:
Distro.h:83
clang::driver::Distro::UbuntuUtopic
@ UbuntuUtopic
Definition:
Distro.h:64
clang::driver::Distro::UbuntuArtful
@ UbuntuArtful
Definition:
Distro.h:70
clang::driver::Distro::DebianDuke
@ DebianDuke
Definition:
Distro.h:43
clang::driver::Distro::Gentoo
@ Gentoo
Definition:
Distro.h:49
clang::driver::Distro::UbuntuZesty
@ UbuntuZesty
Definition:
Distro.h:69
clang::driver::Distro::UbuntuJammy
@ UbuntuJammy
Definition:
Distro.h:79
clang::driver::Distro::DebianJessie
@ DebianJessie
Definition:
Distro.h:36
clang::driver::Distro::DebianTrixie
@ DebianTrixie
Definition:
Distro.h:41
clang::driver::Distro::UbuntuQuantal
@ UbuntuQuantal
Definition:
Distro.h:60
clang::driver::Distro::UbuntuImpish
@ UbuntuImpish
Definition:
Distro.h:78
clang::driver::Distro::UbuntuPlucky
@ UbuntuPlucky
Definition:
Distro.h:85
clang::driver::Distro::DebianBullseye
@ DebianBullseye
Definition:
Distro.h:39
clang::driver::Distro::UninitializedDistro
@ UninitializedDistro
Definition:
Distro.h:27
clang::driver::Distro::DebianStretch
@ DebianStretch
Definition:
Distro.h:37
clang::driver::Distro::ArchLinux
@ ArchLinux
Definition:
Distro.h:32
clang::driver::Distro::OpenSUSE
@ OpenSUSE
Definition:
Distro.h:50
clang::driver::Distro::UbuntuKarmic
@ UbuntuKarmic
Definition:
Distro.h:54
clang::driver::Distro::UbuntuRaring
@ UbuntuRaring
Definition:
Distro.h:61
clang::driver::Distro::DebianWheezy
@ DebianWheezy
Definition:
Distro.h:35
clang::driver::Distro::UbuntuNatty
@ UbuntuNatty
Definition:
Distro.h:57
clang::driver::Distro::UbuntuHardy
@ UbuntuHardy
Definition:
Distro.h:51
clang::driver::Distro::DebianForky
@ DebianForky
Definition:
Distro.h:42
clang::driver::Distro::DebianLenny
@ DebianLenny
Definition:
Distro.h:33
clang::driver::Distro::RHEL7
@ RHEL7
Definition:
Distro.h:47
clang::driver::Distro::UbuntuIntrepid
@ UbuntuIntrepid
Definition:
Distro.h:52
clang::driver::Distro::UbuntuDisco
@ UbuntuDisco
Definition:
Distro.h:73
clang::driver::Distro::UbuntuHirsute
@ UbuntuHirsute
Definition:
Distro.h:77
clang::driver::Distro::UbuntuJaunty
@ UbuntuJaunty
Definition:
Distro.h:53
clang::driver::Distro::UbuntuQuesting
@ UbuntuQuesting
Definition:
Distro.h:86
clang::driver::Distro::UbuntuOracular
@ UbuntuOracular
Definition:
Distro.h:84
clang::driver::Distro::UbuntuCosmic
@ UbuntuCosmic
Definition:
Distro.h:72
clang::driver::Distro::AlpineLinux
@ AlpineLinux
Definition:
Distro.h:31
clang::driver::Distro::UbuntuVivid
@ UbuntuVivid
Definition:
Distro.h:65
clang::driver::Distro::UbuntuTrusty
@ UbuntuTrusty
Definition:
Distro.h:63
clang::driver::Distro::DebianBookworm
@ DebianBookworm
Definition:
Distro.h:40
clang::driver::Distro::UbuntuEoan
@ UbuntuEoan
Definition:
Distro.h:74
clang::driver::Distro::UbuntuKinetic
@ UbuntuKinetic
Definition:
Distro.h:80
clang::driver::Distro::Exherbo
@ Exherbo
Definition:
Distro.h:44
clang::driver::Distro::UbuntuYakkety
@ UbuntuYakkety
Definition:
Distro.h:68
clang::driver::Distro::UbuntuMaverick
@ UbuntuMaverick
Definition:
Distro.h:56
clang::driver::Distro::UbuntuMantic
@ UbuntuMantic
Definition:
Distro.h:82
clang::driver::Distro::UbuntuLunar
@ UbuntuLunar
Definition:
Distro.h:81
clang::driver::Distro::RHEL6
@ RHEL6
Definition:
Distro.h:46
clang::driver::Distro::UbuntuGroovy
@ UbuntuGroovy
Definition:
Distro.h:76
clang::driver::Distro::DebianBuster
@ DebianBuster
Definition:
Distro.h:38
clang::driver::Distro::UnknownDistro
@ UnknownDistro
Definition:
Distro.h:87
clang::driver::Distro::UbuntuXenial
@ UbuntuXenial
Definition:
Distro.h:67
clang::driver::Distro::UbuntuFocal
@ UbuntuFocal
Definition:
Distro.h:75
clang::driver::Distro::UbuntuPrecise
@ UbuntuPrecise
Definition:
Distro.h:59
clang::driver::Distro::UbuntuSaucy
@ UbuntuSaucy
Definition:
Distro.h:62
clang::driver::Distro::UbuntuWily
@ UbuntuWily
Definition:
Distro.h:66
clang::driver::Distro::Fedora
@ Fedora
Definition:
Distro.h:48
clang::driver::Distro::UbuntuOneiric
@ UbuntuOneiric
Definition:
Distro.h:58
clang::driver::Distro::DebianSqueeze
@ DebianSqueeze
Definition:
Distro.h:34
clang::driver::Distro::UbuntuLucid
@ UbuntuLucid
Definition:
Distro.h:55
clang::driver::Distro::IsAlpineLinux
bool IsAlpineLinux() const
Definition:
Distro.h:141
clang::driver::Distro::IsRedhat
bool IsRedhat() const
Definition:
Distro.h:127
clang::driver::Distro::operator<=
bool operator<=(const Distro &Other) const
Definition:
Distro.h:119
clang::driver::Distro::operator>=
bool operator>=(const Distro &Other) const
Definition:
Distro.h:115
clang::driver::Distro::IsUbuntu
bool IsUbuntu() const
Definition:
Distro.h:137
clang
The JSON file list parser is used to communicate input to InstallAPI.
Definition:
CalledOnceCheck.h:17
clang::ImplicitParamKind::Other
@ Other
Other implicit parameter.
Generated on Tue Sep 2 2025 18:36:52 for clang by
1.9.6