diff --git a/include/factory.hpp b/include/factory.hpp index fa41ef4..65d7e3c 100644 --- a/include/factory.hpp +++ b/include/factory.hpp @@ -7,11 +7,13 @@ #include "modules/sway/window.hpp" #include "modules/sway/workspaces.hpp" #endif +#ifndef NO_FILESYSTEM #include "modules/battery.hpp" +#endif #include "modules/cpu.hpp" #include "modules/idle_inhibitor.hpp" #include "modules/memory.hpp" -#ifdef HAVE_DBUSMENU +#if defined(HAVE_DBUSMENU) && !defined(NO_FILESYSTEM) #include "modules/sni/tray.hpp" #endif #ifdef HAVE_LIBNL diff --git a/include/modules/temperature.hpp b/include/modules/temperature.hpp index 4941003..22bc21c 100644 --- a/include/modules/temperature.hpp +++ b/include/modules/temperature.hpp @@ -4,11 +4,6 @@ #include #include "ALabel.hpp" #include "util/sleeper_thread.hpp" -#ifdef FILESYSTEM_EXPERIMENTAL -#include -#else -#include -#endif namespace waybar::modules { diff --git a/meson.build b/meson.build index dc7778b..89f5ff3 100644 --- a/meson.build +++ b/meson.build @@ -12,7 +12,7 @@ project( cpp_args = [] cpp_link_args = [] -if false # libc++ +if get_option('libcxx') cpp_args += ['-stdlib=libc++'] cpp_link_args += ['-stdlib=libc++', '-lc++abi'] @@ -34,7 +34,12 @@ else endif if not compiler.has_header('filesystem') - add_project_arguments('-DFILESYSTEM_EXPERIMENTAL', language: 'cpp') + if compiler.has_header('experimental/filesystem') + add_project_arguments('-DFILESYSTEM_EXPERIMENTAL', language: 'cpp') + else + add_project_arguments('-DNO_FILESYSTEM', language: 'cpp') + warning('No filesystem header found, some modules may not work') + endif endif add_global_arguments(cpp_args, language : 'cpp') diff --git a/meson_options.txt b/meson_options.txt index f49d9c1..d84bd22 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -1,3 +1,4 @@ +option('libcxx', type : 'boolean', value : false, description : 'Build with Clang\'s libc++ instead of libstdc++ on Linux.') option('libnl', type: 'feature', value: 'auto', description: 'Enable libnl support for network related features') option('libudev', type: 'feature', value: 'auto', description: 'Enable libudev support for udev related features') option('pulseaudio', type: 'feature', value: 'auto', description: 'Enable support for pulseaudio') diff --git a/src/factory.cpp b/src/factory.cpp index a2e8839..100ca14 100644 --- a/src/factory.cpp +++ b/src/factory.cpp @@ -7,9 +7,11 @@ waybar::IModule* waybar::Factory::makeModule(const std::string& name) const { auto hash_pos = name.find('#'); auto ref = name.substr(0, hash_pos); auto id = hash_pos != std::string::npos ? name.substr(hash_pos + 1) : ""; +#ifndef NO_FILESYSTEM if (ref == "battery") { return new waybar::modules::Battery(id, config_[name]); } +#endif #ifdef HAVE_SWAY if (ref == "sway/mode") { return new waybar::modules::sway::Mode(id, config_[name]); @@ -33,7 +35,7 @@ waybar::IModule* waybar::Factory::makeModule(const std::string& name) const { if (ref == "clock") { return new waybar::modules::Clock(id, config_[name]); } -#ifdef HAVE_DBUSMENU +#if defined(HAVE_DBUSMENU) && !defined(NO_FILESYSTEM) if (ref == "tray") { return new waybar::modules::SNI::Tray(id, bar_, config_[name]); } diff --git a/src/modules/battery.cpp b/src/modules/battery.cpp index 607efdd..5024964 100644 --- a/src/modules/battery.cpp +++ b/src/modules/battery.cpp @@ -47,21 +47,21 @@ void waybar::modules::Battery::worker() { void waybar::modules::Battery::getBatteries() { try { - for (auto const& node : fs::directory_iterator(data_dir_)) { + for (auto& node : fs::directory_iterator(data_dir_)) { if (!fs::is_directory(node)) { continue; } auto dir_name = node.path().filename(); auto bat_defined = config_["bat"].isString(); if (((bat_defined && dir_name == config_["bat"].asString()) || !bat_defined) && - fs::exists(node / "capacity") && fs::exists(node / "uevent") && - fs::exists(node / "status")) { - batteries_.push_back(node); + fs::exists(node.path() / "capacity") && fs::exists(node.path() / "uevent") && + fs::exists(node.path() / "status")) { + batteries_.push_back(node.path()); } auto adap_defined = config_["adapter"].isString(); if (((adap_defined && dir_name == config_["adapter"].asString()) || !adap_defined) && - fs::exists(node / "online")) { - adapter_ = node; + fs::exists(node.path() / "online")) { + adapter_ = node.path(); } } } catch (fs::filesystem_error& e) { diff --git a/src/modules/temperature.cpp b/src/modules/temperature.cpp index 72c2880..c41a498 100644 --- a/src/modules/temperature.cpp +++ b/src/modules/temperature.cpp @@ -8,11 +8,8 @@ waybar::modules::Temperature::Temperature(const std::string& id, const Json::Val auto zone = config_["thermal-zone"].isInt() ? config_["thermal-zone"].asInt() : 0; file_path_ = fmt::format("/sys/class/thermal/thermal_zone{}/temp", zone); } -#ifdef FILESYSTEM_EXPERIMENTAL - if (!std::experimental::filesystem::exists(file_path_)) { -#else - if (!std::filesystem::exists(file_path_)) { -#endif + std::ifstream temp(file_path_); + if (!temp.is_open()) { throw std::runtime_error("Can't open " + file_path_); } label_.set_name("temperature");