Shamrock 2025.10.0
Astrophysical Code
Loading...
Searching...
No Matches
env.cpp
Go to the documentation of this file.
1// -------------------------------------------------------//
2//
3// SHAMROCK code for hydrodynamics
4// Copyright (c) 2021-2026 Timothée David--Cléris <tim.shamrock@proton.me>
5// SPDX-License-Identifier: CeCILL Free Software License Agreement v2.1
6// Shamrock is licensed under the CeCILL 2.1 License, see LICENSE for more information
7//
8// -------------------------------------------------------//
9
15
16#include "shambase/print.hpp"
17#include "shambase/string.hpp"
18#include "fmt/core.h"
19#include "shamcmdopt/env.hpp"
20#include <optional>
21#include <utility>
22#include <vector>
23
24std::optional<std::string> shamcmdopt::getenv_str(const char *env_var) {
25 const char *val = std::getenv(env_var);
26 if (val != nullptr) {
27 return std::string(val);
28 }
29 return {};
30}
31
32std::optional<std::string_view> shamcmdopt::getenv_str_view(const char *env_var) {
33 const char *val = std::getenv(env_var);
34 if (val != nullptr) {
35 return std::string_view(val);
36 }
37 return {};
38}
39
41std::vector<std::pair<std::string, std::string>> env_var_reg = {};
42
43void shamcmdopt::register_env_var_doc(std::string env_var, std::string desc) {
44
45 for (auto &[_env_var, _desc] : env_var_reg) {
46 if (_env_var == env_var) {
48 shambase::format("The env var {} is already registered", env_var));
49 }
50 }
51
52 env_var_reg.push_back({env_var, desc});
53}
54
56
57 if (env_var_reg.empty()) {
58 return;
59 }
60
61 auto stringify = [](std::optional<std::string> val) -> std::string {
62 if (val) {
63 return shambase::format("= {}", *val);
64 }
65 return "";
66 };
67
68 fmt::println("\nEnv variables :");
69 for (const auto &[var, desc] : env_var_reg) {
70 auto val = getenv_str(var.c_str());
71
72 shambase::println(shambase::format(" {:<29} : {}", var, desc));
73
74 if (val) {
75 shambase::println(shambase::format(" = {}", *val));
76 }
77 }
78}
void println(std::string_view sv)
Prints a string to the console followed by a newline.
Definition print.cpp:37
void throw_with_loc(std::string message, SourceLocation loc=SourceLocation{})
Throw an exception and append the source location to it.
std::optional< std::string > getenv_str(const char *env_var)
Get the content of the environment variable if it exist.
Definition env.cpp:24
void print_help_env_var()
Print the documentation of the environment variables registered with register_env_var_doc().
Definition env.cpp:55
void register_env_var_doc(std::string env_var, std::string desc)
Register the documentation of an environment variable.
Definition env.cpp:43
std::optional< std::string_view > getenv_str_view(const char *env_var)
Get the content of the environment variable if it exist.
Definition env.cpp:32
std::vector< std::pair< std::string, std::string > > env_var_reg
List of documented env variables.
Definition env.cpp:41