2 * Copyright (C) 2005-2021 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
9 #include "AppParamParserLinux.h"
11 #include "CompileInfo.h"
12 #include "application/AppParams.h"
13 #include "utils/StringUtils.h"
22 std::vector
<std::string
> availableWindowSystems
= CCompileInfo::GetAvailableWindowSystems();
23 std::array
<std::string
, 1> availableLogTargets
= {"console"};
24 std::vector
<std::string
> availableAudioBackends
= CCompileInfo::GetAvailableAudioBackends();
25 std::vector
<std::string
> availableGlInterfaces
= CCompileInfo::GetAvailableGlInterfaces();
27 constexpr const char* windowingText
=
29 Selected window system not available: {}
30 Available window systems: {}
33 constexpr const char* loggingText
=
35 Selected logging target not available: {}
36 Available log targest: {}
39 constexpr const char* audioBackendsText
=
41 Selected audio backend not available: {}
42 Available audio backends: {}
45 constexpr const char* glInterfaceText
=
47 Selected GL interface not available: {}
48 Available GL interfaces: {}
51 constexpr const char* helpText
=
53 Linux Specific Arguments:
54 --windowing=<system> Select which windowing method to use.
55 Available window systems are: {}
56 --logging=<target> Select which log target to use (log file will always be used in conjunction).
57 Available log targets are: {}
58 --audio-backend=<backend> Select which audio backend to use.
59 Available audio backends are: {}
60 --gl-interface=<interface> Select which GL interface to use (X11 only).
61 Available GL interfaces are: {}
66 CAppParamParserLinux::CAppParamParserLinux() : CAppParamParser()
70 CAppParamParserLinux::~CAppParamParserLinux() = default;
72 void CAppParamParserLinux::ParseArg(const std::string
& arg
)
74 CAppParamParser::ParseArg(arg
);
76 if (arg
.substr(0, 12) == "--windowing=")
78 if (std::find(availableWindowSystems
.begin(), availableWindowSystems
.end(), arg
.substr(12)) !=
79 availableWindowSystems
.end())
80 GetAppParams()->SetWindowing(arg
.substr(12));
83 std::cout
<< StringUtils::Format(windowingText
, arg
.substr(12),
84 StringUtils::Join(availableWindowSystems
, ", "));
88 else if (arg
.substr(0, 10) == "--logging=")
90 if (std::find(availableLogTargets
.begin(), availableLogTargets
.end(), arg
.substr(10)) !=
91 availableLogTargets
.end())
93 GetAppParams()->SetLogTarget(arg
.substr(10));
97 std::cout
<< StringUtils::Format(loggingText
, arg
.substr(10),
98 StringUtils::Join(availableLogTargets
, ", "));
102 else if (arg
.find("--audio-backend=") != std::string::npos
)
104 const auto argValue
= arg
.substr(16);
106 std::find(availableAudioBackends
.cbegin(), availableAudioBackends
.cend(), argValue
);
107 if (it
!= availableAudioBackends
.cend())
109 GetAppParams()->SetAudioBackend(argValue
);
113 std::cout
<< StringUtils::Format(audioBackendsText
, argValue
,
114 StringUtils::Join(availableAudioBackends
, ", "));
119 else if (arg
.find("--gl-interface=") != std::string::npos
)
121 const auto argValue
= arg
.substr(15);
123 std::find(availableGlInterfaces
.cbegin(), availableGlInterfaces
.cend(), argValue
);
124 if (it
!= availableGlInterfaces
.cend())
126 GetAppParams()->SetGlInterface(argValue
);
130 std::cout
<< StringUtils::Format(glInterfaceText
, argValue
,
131 StringUtils::Join(availableGlInterfaces
, ", "));
138 void CAppParamParserLinux::DisplayHelp()
140 CAppParamParser::DisplayHelp();
142 std::cout
<< StringUtils::Format(helpText
, StringUtils::Join(availableWindowSystems
, ", "),
143 StringUtils::Join(availableLogTargets
, ", "),
144 StringUtils::Join(availableAudioBackends
, ", "),
145 StringUtils::Join(availableGlInterfaces
, ", "));