xmobar 0.24.5 → 0.25
raw patch · 15 files changed
+136/−129 lines, 15 filesdep +iwlib
Dependencies added: iwlib
Files
- news.md +17/−0
- readme.md +39/−19
- src/Bitmap.hs +2/−2
- src/Config.hs +4/−0
- src/IWlib.hsc +0/−75
- src/Main.hs +6/−0
- src/Parsers.hs +6/−2
- src/Plugins/Kbd.hsc +5/−0
- src/Plugins/Monitors.hs +10/−2
- src/Plugins/Monitors/Mpris.hs +3/−1
- src/Plugins/Monitors/UVMeter.hs +16/−9
- src/Plugins/Monitors/Wireless.hs +1/−1
- src/Signal.hs +1/−1
- src/Window.hs +4/−4
- xmobar.cabal +22/−13
news.md view
@@ -1,5 +1,22 @@ % xmobar - Release notes +## Version 0.25 (February, 2018)++_New features_++ - The X11 properties `WM_NAME` and `WM_CLASS` for xmobar windows can+ be setup in either the configuration file (`wmName` and `wmClass`)+ or using the new flags `-n` adn `-w` (see [issue #323]).+ - New flag `with_weather`, to build sans `Weather` monitor.++_Bug fixes_++ - Honouring -x in MPris monitor ([issue #325])+++[issue #323]: https://github.com/jaor/xmobar/issues/323+[issue #325]: https://github.com/jaor/xmobar/issues/325+ ## Version 0.24.5 (May, 2017) _Bug fixes_
readme.md view
@@ -1,3 +1,4 @@+[](http://hackage.haskell.org/package/xmobar) [](https://travis-ci.org/jaor/xmobar) # About@@ -10,7 +11,7 @@ features, like dynamic color management, icons, output templates, and extensibility through plugins. -This page documents xmobar 0.24.5 (see [release notes]).+This page documents xmobar 0.25 (see [release notes]). [This screenshot] shows xmobar running under [sawfish], with antialiased fonts. And [this one] is my desktop with [xmonad] and two@@ -141,7 +142,7 @@ : Support for wireless cards. Enables the Wireless plugin. No Haskell library is required, but you will need the [iwlib] C library and headers in your system (e.g., install `libiw-dev` in Debian-based- systems).+ systems or `wireless_tools` on Arch Linux). `with_alsa` : Support for ALSA sound cards. Enables the Volume plugin. Requires the@@ -158,11 +159,16 @@ Requires the [libXpm] C library. `with_uvmeter`-: Enables UVMeter plugin. The plugin shows UV data for Australia.+: Enables UVMeter plugin. The plugin shows UV data for Australia. Requires+ `with_conduit` to connect to HTTPS URLs. +`with_weather`+: Support to display weather information. Enables Weather plugin.+ `with_conduit` : Use http-conduit for getting weather data enabling support for http proxies. Requires [http-conduit] and [http-types].+ Note that this flag has only an effect if `with_weather` is also set. `all_extensions` : Enables all the extensions above.@@ -362,6 +368,13 @@ `template` : The output template. ++`wmClass`+: The value for the window's X11 WM_CLASS property. Defaults to "xmobar".++`wmName`+: The value for the window's X11 WM_NAME property. Defaults to "xmobar".+ ### Running xmobar with i3status xmobar can be used to display information generated by [i3status], a@@ -389,6 +402,8 @@ -h, -? --help This help -V --version Show version information -f font name --font=font name The font name+ -w class --wmclass=class X11 WM_CLASS property+ -n name --wmname=name X11 WM_NAME property -B bg color --bgcolor=bg color The background color. Default black -F fg color --fgcolor=fg color The foreground color. Default grey -A alpha --alpha=alpha The transparency: 0 is transparent, 255 (the default) is opaque@@ -1115,7 +1130,9 @@ - Aliases to `mpris1` - Requires [dbus] and [text] packages. To activate, pass `--flags="with_mpris"` during compilation.-- PlayerName: player supporting MPRIS v1 protocol, in lowercase.+- PlayerName: player supporting MPRIS v1 protocol. Some players need+ this to be an all lowercase name (e.g. "spotify"), but some others+ don't. - Args: default monitor arguments. - Variables that can be used with the `-t`/`--template` argument: `album`, `artist`, `arturl`, `length`, `title`, `tracknumber`@@ -1129,7 +1146,9 @@ - Aliases to `mpris2` - Requires [dbus] and [text] packages. To activate, pass `--flags="with_mpris"` during compilation.-- PlayerName: player supporting MPRIS v2 protocol, in lowercase.+- PlayerName: player supporting MPRIS v2 protocol. Some players need+ this to be an all lowercase name (e.g. "spotify"), but some others+ don't. - Args: default monitor arguments. - Variables that can be used with the `-t`/`--template` argument: `album`, `artist`, `arturl`, `length`, `title`,@@ -1161,6 +1180,7 @@ the mail count (use an empty string for the default). - Opts is a possibly empty list of options, as flags. Possible values: -a --all (no arg) Show all mailboxes, even if empty.+ -u (no arg) Show only the mailboxes' names, sans counts. -d dir --dir dir a string giving the base directory where mbox files with a relative path live. -p prefix --prefix prefix a string giving a prefix for the list@@ -1547,20 +1567,20 @@ version 0.11.1. Since then, it is maintained and developed by [jao], with the help of the greater xmobar and Haskell communities. -In particular, xmobar [incorporates patches] by Axel Angel, Dragos-Boca, Ben Boeckel, Duncan Burke, Roman Cheplyaka, Patrick Chilton,-Antoine Eiche, Nathaniel Wesley Filardo, John Goerzen, Reto Hablützel,-Juraj Hercek, Tomáš Janoušek, Spencer Janssen, Roman Joost, Jochen-Keil, Lennart Kolmodin, Krzysztof Kosciuszkiewicz, Dmitry Kurochkin,-Todd Lunter, Robert J. Macomber, Dmitry Malikov, David McLean, Marcin-Mikołajczyk, Dino Morelli, Tony Morris, Eric Mrak, Thiago Negri,-Edward O'Callaghan, Svein Ove, Martin Perner, Jens Petersen, Alexander-Polakov, Petr Rockai, Andrew Sackville-West, Markus Scherer, Alexander-Shabalin, Valentin Shirokov, Peter Simons, Alexander Solovyov, Will-Song, John Soros, Travis Staton, Artem Tarasov, Samuli Thomasson,-Edward Tjörnhammar, Sergei Trofimovich, Thomas Tuegel, Jan Vornberger,-Anton Vorontsov, Daniel Wagner, Zev Weiss, Phil Xiaojun Hu, Edward-Z. Yang and Norbert Zeh.+In particular, xmobar [incorporates patches] by Mohammed Alshiekh,+Axel Angel, Dragos Boca, Ben Boeckel, Duncan Burke, Roman Cheplyaka,+Patrick Chilton, Antoine Eiche, Nathaniel Wesley Filardo, John+Goerzen, Reto Hablützel, Juraj Hercek, Tomáš Janoušek, Spencer+Janssen, Roman Joost, Jochen Keil, Lennart Kolmodin, Krzysztof+Kosciuszkiewicz, Dmitry Kurochkin, Todd Lunter, Robert J. Macomber,+Dmitry Malikov, David McLean, Marcin Mikołajczyk, Dino Morelli, Tony+Morris, Eric Mrak, Thiago Negri, Edward O'Callaghan, Svein Ove, Martin+Perner, Jens Petersen, Alexander Polakov, Petr Rockai, Andrew+Sackville-West, Markus Scherer, Alexander Shabalin, Valentin Shirokov,+Peter Simons, Alexander Solovyov, Will Song, John Soros, Travis+Staton, Artem Tarasov, Samuli Thomasson, Edward Tjörnhammar, Sergei+Trofimovich, Thomas Tuegel, Jan Vornberger, Anton Vorontsov, Daniel+Wagner, Zev Weiss, Phil Xiaojun Hu, Edward Z. Yang and Norbert Zeh. [jao]: http://jao.io [incorporates patches]: http://www.ohloh.net/p/xmobar/contributors
src/Bitmap.hs view
@@ -2,7 +2,7 @@ ----------------------------------------------------------------------------- -- | -- Module : Bitmap--- Copyright : (C) 2013, 2015, 2017 Alexander Polakov+-- Copyright : (C) 2013, 2015, 2017, 2018 Alexander Polakov -- License : BSD3 -- -- Maintainer : jao@gnu.org@@ -18,7 +18,7 @@ import Control.Monad import Control.Monad.Trans(MonadIO(..))-import Data.Map hiding (foldr, map, filter)+import Data.Map hiding (map, filter) import Graphics.X11.Xlib import System.Directory (doesFileExist) import System.FilePath ((</>))
src/Config.hs view
@@ -50,6 +50,8 @@ data Config = Config { font :: String -- ^ Font , additionalFonts :: [String] -- ^ List of alternative fonts+ , wmClass :: String -- ^ X11 WM_CLASS property value+ , wmName :: String -- ^ X11 WM_NAME property value , bgColor :: String -- ^ Backgroud color , fgColor :: String -- ^ Default font color , position :: XPosition -- ^ Top Bottom or Static@@ -112,6 +114,8 @@ defaultConfig = Config { font = "-misc-fixed-*-*-*-*-10-*-*-*-*-*-*-*" , additionalFonts = []+ , wmClass = "xmobar"+ , wmName = "xmobar" , bgColor = "#000000" , fgColor = "#BFBFBF" , alpha = 255
− src/IWlib.hsc
@@ -1,75 +0,0 @@--------------------------------------------------------------------------------- |--- Module : IWlib--- Copyright : (c) Jose A Ortega Ruiz--- License : BSD-style (see LICENSE)------ Maintainer : Jose A Ortega Ruiz <jao@gnu.org>--- Stability : unstable--- Portability : unportable------ A partial binding to iwlib-----------------------------------------------------------------------------------{-# LANGUAGE CPP, ForeignFunctionInterface, EmptyDataDecls #-}---module IWlib (WirelessInfo(..), getWirelessInfo) where--import Foreign-import Foreign.C.Types-import Foreign.C.String--data WirelessInfo = WirelessInfo { wiEssid :: String, wiQuality :: Int }- deriving Show--#include <iwlib.h>--data WCfg-data WStats-data WRange--foreign import ccall "iwlib.h iw_sockets_open"- c_iw_open :: IO CInt--foreign import ccall "unistd.h close"- c_iw_close :: CInt -> IO ()--foreign import ccall "iwlib.h iw_get_basic_config"- c_iw_basic_config :: CInt -> CString -> Ptr WCfg -> IO CInt--foreign import ccall "iwlib.h iw_get_stats"- c_iw_stats :: CInt -> CString -> Ptr WStats -> Ptr WRange -> CInt -> IO CInt--foreign import ccall "iwlib.h iw_get_range_info"- c_iw_range :: CInt -> CString -> Ptr WRange -> IO CInt--getWirelessInfo :: String -> IO WirelessInfo-getWirelessInfo iface =- allocaBytes (#size struct wireless_config) $ \wc ->- allocaBytes (#size struct iw_statistics) $ \stats ->- allocaBytes (#size struct iw_range) $ \rng ->- withCString iface $ \istr -> do- i <- c_iw_open- bcr <- c_iw_basic_config i istr wc- str <- c_iw_stats i istr stats rng 1- rgr <- c_iw_range i istr rng- c_iw_close i- if bcr < 0 then return WirelessInfo { wiEssid = "", wiQuality = 0 } else- do hase <- (#peek struct wireless_config, has_essid) wc :: IO CInt- eon <- (#peek struct wireless_config, essid_on) wc :: IO CInt- essid <- if hase /= 0 && eon /= 0 then- do let e = (#ptr struct wireless_config, essid) wc- peekCString e- else return ""- q <- if str >= 0 && rgr >=0 then- do qualv <- xqual $ (#ptr struct iw_statistics, qual) stats- mv <- xqual $ (#ptr struct iw_range, max_qual) rng- let mxv = if mv /= 0 then fromIntegral mv else 1- return $ fromIntegral qualv / mxv- else return 0- let qv = round (100 * (q :: Double))- return WirelessInfo { wiEssid = essid, wiQuality = min 100 qv }- where xqual p = let qp = (#ptr struct iw_param, value) p in- (#peek struct iw_quality, qual) qp :: IO CChar
src/Main.hs view
@@ -135,6 +135,8 @@ | OnScr String | IconRoot String | Position String+ | WmClass String+ | WmName String deriving Show options :: [OptDescr Opts]@@ -142,6 +144,8 @@ [ Option "h?" ["help"] (NoArg Help) "This help" , Option "V" ["version"] (NoArg Version) "Show version information" , Option "f" ["font"] (ReqArg Font "font name") "The font name"+ , Option "w" ["wmclass"] (ReqArg WmClass "class") "X11 WM_CLASS property"+ , Option "n" ["wmname"] (ReqArg WmName "name") "X11 WM_NAME property" , Option "B" ["bgcolor"] (ReqArg BgColor "bg color" ) "The background color. Default black" , Option "F" ["fgcolor"] (ReqArg FgColor "fg color")@@ -206,6 +210,8 @@ Help -> putStr usage >> exitSuccess Version -> putStrLn info >> exitSuccess Font s -> doOpts' (conf {font = s})+ WmClass s -> doOpts' (conf {wmClass = s})+ WmName s -> doOpts' (conf {wmName = s}) BgColor s -> doOpts' (conf {bgColor = s}) FgColor s -> doOpts' (conf {fgColor = s}) Alpha n -> doOpts' (conf {alpha = read n})
src/Parsers.hs view
@@ -212,7 +212,8 @@ return (x,s) perms = permute $ Config- <$?> pFont <|?> pFontList <|?> pBgColor <|?> pFgColor+ <$?> pFont <|?> pFontList <|?> pWmClass <|?> pWmName+ <|?> pBgColor <|?> pFgColor <|?> pPosition <|?> pTextOffset <|?> pIconOffset <|?> pBorder <|?> pBdColor <|?> pBdWidth <|?> pAlpha <|?> pHideOnStart <|?> pAllDesktops <|?> pOverrideRedirect <|?> pPickBroadest@@ -220,7 +221,8 @@ <|?> pCommands <|?> pSepChar <|?> pAlignSep <|?> pTemplate - fields = [ "font", "additionalFonts","bgColor", "fgColor", "sepChar"+ fields = [ "font", "additionalFonts","bgColor", "fgColor"+ , "wmClass", "wmName", "sepChar" , "alignSep" , "border", "borderColor" ,"template" , "position" , "textOffset", "iconOffset" , "allDesktops", "overrideRedirect", "pickBroadest"@@ -230,6 +232,8 @@ pFont = strField font "font" pFontList = strListField additionalFonts "additionalFonts"+ pWmClass = strField wmClass "wmclass"+ pWmName = strField wmName "windowName" pBgColor = strField bgColor "bgColor" pFgColor = strField fgColor "fgColor" pBdColor = strField borderColor "borderColor"
src/Plugins/Kbd.hsc view
@@ -54,6 +54,7 @@ instance Storable XkbStateRec where sizeOf _ = (#size XkbStateRec) alignment _ = alignment (undefined :: CUShort)+ poke _ _ = undefined peek ptr = do r_group <- (#peek XkbStateRec, group) ptr r_locked_group <- (#peek XkbStateRec, locked_group) ptr@@ -155,6 +156,7 @@ instance Storable XkbKeyNameRec where sizeOf _ = (#size XkbKeyNameRec) alignment _ = alignment (undefined :: CUShort)+ poke _ _ = undefined peek ptr = do r_name <- (#peek XkbKeyNameRec, name) ptr @@ -165,6 +167,7 @@ instance Storable XkbKeyAliasRec where sizeOf _ = (#size XkbKeyAliasRec) alignment _ = alignment (undefined :: CUShort)+ poke _ _ = undefined peek ptr = do r_real <- (#peek XkbKeyAliasRec, real) ptr r_alias <- (#peek XkbKeyAliasRec, alias) ptr@@ -177,6 +180,7 @@ instance Storable XkbNamesRec where sizeOf _ = (#size XkbNamesRec) alignment _ = alignment (undefined :: CUShort)+ poke _ _ = undefined peek ptr = do r_keycodes <- (#peek XkbNamesRec, keycodes) ptr r_geometry <- (#peek XkbNamesRec, geometry) ptr@@ -215,6 +219,7 @@ instance Storable XkbDescRec where sizeOf _ = (#size XkbDescRec) alignment _ = alignment (undefined :: CUShort)+ poke _ _ = undefined peek ptr = do r_dpy <- (#peek XkbDescRec, dpy) ptr r_flags <- (#peek XkbDescRec, flags) ptr
src/Plugins/Monitors.hs view
@@ -20,7 +20,9 @@ import Plugins import Plugins.Monitors.Common (runM, runMD)+#ifdef WEATHER import Plugins.Monitors.Weather+#endif import Plugins.Monitors.Net import Plugins.Monitors.Mem import Plugins.Monitors.Swap@@ -53,8 +55,7 @@ import Plugins.Monitors.Mpris #endif -data Monitors = Weather Station Args Rate- | Network Interface Args Rate+data Monitors = Network Interface Args Rate | DynNetwork Args Rate | BatteryP Args Args Rate | BatteryN Args Args Rate Alias@@ -74,6 +75,9 @@ | TopMem Args Rate | Uptime Args Rate | CatInt Int FilePath Args Rate+#ifdef WEATHER+ | Weather Station Args Rate+#endif #ifdef UVMETER | UVMeter Station Args Rate #endif@@ -104,7 +108,9 @@ type DiskSpec = [(String, String)] instance Exec Monitors where+#ifdef WEATHER alias (Weather s _ _) = s+#endif alias (Network i _ _) = i alias (DynNetwork _ _) = "dynnetwork" alias (Thermal z _ _) = z@@ -148,7 +154,9 @@ start (MultiCpu a r) = startMultiCpu a r start (TopProc a r) = startTop a r start (TopMem a r) = runM a topMemConfig runTopMem r+#ifdef WEATHER start (Weather s a r) = runMD (a ++ [s]) weatherConfig runWeather r weatherReady+#endif start (Thermal z a r) = runM (a ++ [z]) thermalConfig runThermal r start (ThermalZone z a r) = runM (a ++ [show z]) thermalZoneConfig runThermalZone r
src/Plugins/Monitors/Mpris.hs view
@@ -85,7 +85,9 @@ runMPRIS :: (MprisVersion a) => a -> String -> [String] -> Monitor String runMPRIS version playerName _ = do metadata <- io $ getMetadata version dbusClient playerName- mapM showWithPadding (makeList version metadata) >>= parseTemplate+ if [] == metadata then+ getConfigValue naString+ else mapM showWithPadding (makeList version metadata) >>= parseTemplate runMPRIS1 :: String -> [String] -> Monitor String runMPRIS1 = runMPRIS MprisVersion1
src/Plugins/Monitors/UVMeter.hs view
@@ -18,11 +18,14 @@ import Plugins.Monitors.Common import qualified Control.Exception as CE-import Control.Applicative hiding ((<|>),many)-import Network.HTTP+import Network.HTTP.Conduit+ (parseRequest, newManager, tlsManagerSettings, httpLbs,+ responseBody)+import Data.ByteString.Lazy.Char8 as B import Text.Read (readMaybe) import Text.Parsec import Text.Parsec.String+import Control.Monad (void) uvConfig :: IO MConfig@@ -35,14 +38,18 @@ deriving (Show) uvURL :: String-uvURL = "http://www.arpansa.gov.au/uvindex/realtime/xml/uvvalues.xml"+uvURL = "https://uvdata.arpansa.gov.au/xml/uvvalues.xml" getData :: IO String-getData = do- let request = getRequest uvURL- CE.catch (simpleHTTP request >>= getResponseBody) errHandler- where errHandler :: CE.IOException -> IO String- errHandler _ = return "<Could not retrieve data>"+getData =+ CE.catch (do request <- parseRequest uvURL+ manager <- newManager tlsManagerSettings+ res <- httpLbs request manager+ return $ B.unpack $ responseBody res)+ errHandler+ where errHandler+ :: CE.SomeException -> IO String+ errHandler _ = return "<Could not retrieve data>" textToXMLDocument :: String -> Either ParseError [XML] textToXMLDocument = parse document ""@@ -123,7 +130,7 @@ xmlDecl :: Parser XML xmlDecl = do- string "<?xml"+ void $ manyTill anyToken (string "<?xml") -- ignore the byte order mark decl <- many (noneOf "?>") string "?>" return (Decl decl)
src/Plugins/Monitors/Wireless.hs view
@@ -17,7 +17,7 @@ import System.Console.GetOpt import Plugins.Monitors.Common-import IWlib+import Network.IWlib newtype WirelessOpts = WirelessOpts { qualityIconPattern :: Maybe IconPattern
src/Signal.hs view
@@ -20,7 +20,7 @@ import Data.Typeable (Typeable) import Control.Concurrent.STM-import Control.Exception hiding (handle)+import Control.Exception import System.Posix.Signals import Graphics.X11.Types (Button) import Graphics.X11.Xlib.Types (Position)
src/Window.hs view
@@ -1,7 +1,7 @@ ----------------------------------------------------------------------------- -- | -- Module : Window--- Copyright : (c) 2011-17 Jose A. Ortega Ruiz+-- Copyright : (c) 2011-18 Jose A. Ortega Ruiz -- : (c) 2012 Jochen Keil -- License : BSD-style (see LICENSE) --@@ -18,7 +18,7 @@ import Prelude import Control.Applicative ((<$>)) import Control.Monad (when, unless)-import Graphics.X11.Xlib hiding (textExtents, textWidth)+import Graphics.X11.Xlib hiding (textExtents) import Graphics.X11.Xlib.Extras import Graphics.X11.Xinerama import Foreign.C.Types (CLong)@@ -100,8 +100,8 @@ card <- mkatom "CARDINAL" atom <- mkatom "ATOM" - setTextProperty d w "xmobar" wM_CLASS- setTextProperty d w "xmobar" wM_NAME+ setTextProperty d w (wmClass c) wM_CLASS+ setTextProperty d w (wmName c) wM_NAME wtype <- mkatom "_NET_WM_WINDOW_TYPE" dock <- mkatom "_NET_WM_WINDOW_TYPE_DOCK"
xmobar.cabal view
@@ -1,5 +1,5 @@ name: xmobar-version: 0.24.5+version: 0.25 homepage: http://xmobar.org synopsis: A Minimalistic Text Based Status Bar description: Xmobar is a minimalistic text based status bar.@@ -82,8 +82,12 @@ description: UVMeter only useful to australians. default: False +flag with_weather+ description: Enable weather plugin+ default: True+ flag with_conduit- description: Use http-conduits for getting weather data+ description: Use http-conduits for getting weather data, only has an effect if with_weather is set. default: False executable xmobar@@ -105,9 +109,8 @@ Plugins.Monitors.MultiCpu, Plugins.Monitors.Net, Plugins.Monitors.Swap, Plugins.Monitors.Thermal, Plugins.Monitors.ThermalZone, Plugins.Monitors.Top,- Plugins.Monitors.Uptime, Plugins.Monitors.Weather,- Plugins.Monitors.Bright, Plugins.Monitors.CatInt,- Plugins.Monitors.UVMeter+ Plugins.Monitors.Uptime,+ Plugins.Monitors.Bright, Plugins.Monitors.CatInt ghc-options: -funbox-strict-fields -Wall -fno-warn-unused-do-bind extra-libraries: Xrandr Xrender@@ -127,14 +130,8 @@ X11 >= 1.6.1, mtl >= 2.1 && < 2.3, parsec == 3.1.*,- HTTP >= 4000.2.4, stm >= 2.3 && < 2.5 - if flag(with_conduit)- -- use http-conduit instead of simple-http- build-depends: http-conduit, http-types- cpp-options: -DHTTP_CONDUIT- if flag(with_threaded) -- -threaded is a workaround for 100% CPU busy loop -- (http://hackage.haskell.org/trac/ghc/ticket/4934).@@ -161,7 +158,8 @@ if flag(with_iwlib) || flag(all_extensions) extra-libraries: iw- other-modules: IWlib, Plugins.Monitors.Wireless+ build-depends: iwlib >= 0.1.0 && < 0.2+ other-modules: Plugins.Monitors.Wireless cpp-options: -DIWLIB if flag(with_mpd) || flag(all_extensions)@@ -195,5 +193,16 @@ other-modules: XPMFile cpp-options: -DXPM - if flag(with_uvmeter)+ if flag(with_weather) || flag(all_extensions)+ build-depends: HTTP >= 4000.2.4+ other-modules: Plugins.Monitors.Weather+ cpp-options: -DWEATHER+ if flag(with_conduit)+ -- use http-conduit instead of simple-http+ build-depends: http-conduit, http-types+ cpp-options: -DHTTP_CONDUIT++ if flag(with_uvmeter) && flag(with_conduit)+ other-modules: Plugins.Monitors.UVMeter+ build-depends: http-conduit, http-types cpp-options: -DUVMETER