From 5e7cfeb420094b3b481f33ee9fb6c4bc0942bed3 Mon Sep 17 00:00:00 2001 From: ShrykeWindgrace Date: Fri, 8 Dec 2023 15:18:16 +0100 Subject: [PATCH] feat: support hledger-ui on windows Introduced or bumped dependencies: - brick-2.1.1 - vty-6.1 - vty-crossplatform-0.4.0.0 - vty-windows-0.2.0.1 conditionally on windows (current version of vty-crossplatform has 0.2.0.0 as a lower bound, need to put a newer version explcitly; once we get a newer vty-crossplatform, we will be able to drop this conditional) - vty-unix (indirectly via vty-crossplatform) --- hledger-ui/Hledger/UI/Main.hs | 3 ++- hledger-ui/hledger-ui.cabal | 16 +++++++--------- hledger-ui/package.yaml | 25 ++++++++++++++----------- stack.yaml | 7 +++++++ 4 files changed, 30 insertions(+), 21 deletions(-) diff --git a/hledger-ui/Hledger/UI/Main.hs b/hledger-ui/Hledger/UI/Main.hs index 8dd9d7f369fa..628815cc6f25 100644 --- a/hledger-ui/Hledger/UI/Main.hs +++ b/hledger-ui/Hledger/UI/Main.hs @@ -20,7 +20,8 @@ import Data.List (find) import Data.List.Extra (nubSort) import Data.Maybe (fromMaybe) import qualified Data.Text as T -import Graphics.Vty (mkVty, Mode (Mouse), Vty (outputIface), Output (setMode)) +import Graphics.Vty (Mode (Mouse), Vty (outputIface), Output (setMode)) +import Graphics.Vty.CrossPlatform (mkVty) import Lens.Micro ((^.)) import System.Directory (canonicalizePath) import System.Environment (withProgName) diff --git a/hledger-ui/hledger-ui.cabal b/hledger-ui/hledger-ui.cabal index 30b46e597fde..7bf5c958b985 100644 --- a/hledger-ui/hledger-ui.cabal +++ b/hledger-ui/hledger-ui.cabal @@ -73,7 +73,7 @@ library ansi-terminal >=0.9 , async , base >=4.14 && <4.19 - , brick >=1.5 && <2 + , brick >=2.1.1 && <2.2 , cmdargs >=0.8 , containers >=0.5.9 , data-default @@ -95,14 +95,16 @@ library , text-zipper >=0.4 , time >=1.5 , transformers - , unix , vector - , vty >=5.15 && <6 + , vty ==6.1.* + , vty-crossplatform >=0.4.0.0 && <0.5.0.0 default-language: Haskell2010 if os(windows) - buildable: False + build-depends: + vty-windows >=0.2.0.1 && <0.3.0.0 else - buildable: True + build-depends: + unix executable hledger-ui main-is: hledger-ui.hs @@ -116,9 +118,5 @@ executable hledger-ui base >=4.14 && <4.19 , hledger-ui default-language: Haskell2010 - if os(windows) - buildable: False - else - buildable: True if flag(threaded) ghc-options: -threaded diff --git a/hledger-ui/package.yaml b/hledger-ui/package.yaml index c2243ead9dc8..0ba59b685e7e 100644 --- a/hledger-ui/package.yaml +++ b/hledger-ui/package.yaml @@ -51,7 +51,6 @@ ghc-options: dependencies: - base >=4.14 && <4.19 -when: # curses is required to build terminfo for vty for hledger-ui. # On POSIX systems it might be not present. # On windows it's very likely not present, but possibly it could be. @@ -61,12 +60,10 @@ when: # curses # default: True # description: - # For now, just don't build hledger-ui on windows - - condition: os(windows) - then: - buildable: false - else: - buildable: true + # + # note on windows: the vty-windows (and hence hledger-ui) will reliably work only on the newer backends + # like Windows Terminal. + # mintty-based backends (default for cygwin/gitbash/msys2) are not supported (yet) library: source-dirs: . @@ -101,10 +98,16 @@ library: - time >=1.5 - transformers - vector - # not installable on windows, cf buildable flag below - - brick >=1.5 && <2 - - vty >=5.15 && <6 - - unix + - brick >=2.1.1 && <2.2 + - vty >=6.1 && <6.2 + - vty-crossplatform >= 0.4.0.0 && < 0.5.0.0 + when: + - condition: os(windows) + then: + dependencies: vty-windows >= 0.2.0.1 && < 0.3.0.0 + else: + dependencies: unix + executables: hledger-ui: diff --git a/stack.yaml b/stack.yaml index 2058862ebd22..54d645999ddb 100644 --- a/stack.yaml +++ b/stack.yaml @@ -31,3 +31,10 @@ nix: # # "$targets": -Werror # # "$everything": -O2 # # some-package: -DSOME_CPP_FLAG +extra-deps: + - vty-windows-0.2.0.1 + - vty-crossplatform-0.4.0.0 + - brick-2.1.1 + - vty-6.1 + - vty-unix-0.2.0.0 +