Implements the custom cabal
installation of zcash-haskell
#66
5 changed files with 119 additions and 13 deletions
101
Setup.hs
101
Setup.hs
|
@ -1,17 +1,93 @@
|
||||||
|
import Control.Exception (throw)
|
||||||
|
import Control.Monad (forM_, when)
|
||||||
|
import Data.Maybe (isNothing)
|
||||||
import Distribution.PackageDescription
|
import Distribution.PackageDescription
|
||||||
import Distribution.Simple
|
import Distribution.Simple
|
||||||
import Distribution.Simple.LocalBuildInfo (LocalBuildInfo(..), localPkgDescr)
|
import Distribution.Simple.LocalBuildInfo (LocalBuildInfo(..), localPkgDescr)
|
||||||
import Distribution.Simple.PreProcess
|
import Distribution.Simple.PreProcess
|
||||||
|
import Distribution.Simple.Program.Find
|
||||||
|
( defaultProgramSearchPath
|
||||||
|
, findProgramOnSearchPath
|
||||||
|
)
|
||||||
import Distribution.Simple.Setup
|
import Distribution.Simple.Setup
|
||||||
import System.Directory (getCurrentDirectory)
|
import Distribution.Simple.Utils
|
||||||
|
( IODataMode(IODataModeBinary)
|
||||||
|
, maybeExit
|
||||||
|
, rawSystemStdInOut
|
||||||
|
)
|
||||||
|
import Distribution.Verbosity (Verbosity)
|
||||||
|
import qualified Distribution.Verbosity as Verbosity
|
||||||
|
import System.Directory
|
||||||
|
( XdgDirectory(..)
|
||||||
|
, copyFile
|
||||||
|
, createDirectory
|
||||||
|
, createDirectoryIfMissing
|
||||||
|
, doesDirectoryExist
|
||||||
|
, doesFileExist
|
||||||
|
, getCurrentDirectory
|
||||||
|
, getDirectoryContents
|
||||||
|
, getHomeDirectory
|
||||||
|
, getXdgDirectory
|
||||||
|
)
|
||||||
|
import System.Environment
|
||||||
import System.FilePath ((</>))
|
import System.FilePath ((</>))
|
||||||
|
import Text.Regex
|
||||||
|
import Text.Regex.Base
|
||||||
|
|
||||||
main :: IO ()
|
main :: IO ()
|
||||||
main = defaultMainWithHooks hooks
|
main = defaultMainWithHooks hooks
|
||||||
where
|
where
|
||||||
hooks =
|
hooks =
|
||||||
simpleUserHooks
|
simpleUserHooks
|
||||||
{confHook = \a flags -> confHook simpleUserHooks a flags >>= rsAddDirs}
|
{ preConf =
|
||||||
|
\_ flags -> do
|
||||||
|
prepDeps (fromFlag $ configVerbosity flags)
|
||||||
|
pure emptyHookedBuildInfo
|
||||||
|
--, confHook = \a flags -> confHook simpleUserHooks a flags >>= rsAddDirs
|
||||||
|
}
|
||||||
|
|
||||||
|
execCargo :: Verbosity -> String -> [String] -> IO ()
|
||||||
|
execCargo verbosity command args = do
|
||||||
|
cargoPath <-
|
||||||
|
findProgramOnSearchPath Verbosity.silent defaultProgramSearchPath "cargo"
|
||||||
|
dir <- getCurrentDirectory
|
||||||
|
let cargoExec =
|
||||||
|
case cargoPath of
|
||||||
|
Just (p, _) -> p
|
||||||
|
Nothing -> "cargo"
|
||||||
|
cargoArgs = command : args
|
||||||
|
workingDir = Just (dir </> rsFolder)
|
||||||
|
thirdComponent (_, _, c) = c
|
||||||
|
maybeExit . fmap thirdComponent $
|
||||||
|
rawSystemStdInOut
|
||||||
|
verbosity
|
||||||
|
cargoExec
|
||||||
|
cargoArgs
|
||||||
|
workingDir
|
||||||
|
Nothing
|
||||||
|
Nothing
|
||||||
|
IODataModeBinary
|
||||||
|
|
||||||
|
rsMake :: Verbosity -> IO ()
|
||||||
|
rsMake verbosity = do
|
||||||
|
execCargo verbosity "cbuild" []
|
||||||
|
|
||||||
|
prepDeps :: Verbosity -> IO ()
|
||||||
|
prepDeps verbosity = do
|
||||||
|
ldPath <- lookupEnv "LD_LIBRARY_PATH"
|
||||||
|
pkgPath <- lookupEnv "PKG_CONFIG_PATH"
|
||||||
|
if maybe False (matchTest (mkRegex ".*zcash-haskell.*")) ldPath &&
|
||||||
|
maybe False (matchTest (mkRegex ".*zcash-haskell.*")) pkgPath
|
||||||
|
then do
|
||||||
|
execCargo verbosity "cbuild" []
|
||||||
|
localData <- getXdgDirectory XdgData "zcash-haskell"
|
||||||
|
createDirectoryIfMissing True localData
|
||||||
|
dir <- getCurrentDirectory
|
||||||
|
let rustLibDir =
|
||||||
|
dir </> rsFolder </> "target/x86_64-unknown-linux-gnu/debug"
|
||||||
|
copyDir rustLibDir localData
|
||||||
|
else throw $
|
||||||
|
userError "Paths not set correctly, please run the 'configure' script."
|
||||||
|
|
||||||
rsFolder :: FilePath
|
rsFolder :: FilePath
|
||||||
rsFolder = "zcash-haskell/librustzcash-wrapper"
|
rsFolder = "zcash-haskell/librustzcash-wrapper"
|
||||||
|
@ -32,3 +108,24 @@ rsAddDirs lbi' = do
|
||||||
, extraLibDirs = rustLibDir : extraLibDirs libBuild
|
, extraLibDirs = rustLibDir : extraLibDirs libBuild
|
||||||
}
|
}
|
||||||
pure $ updateLbi lbi'
|
pure $ updateLbi lbi'
|
||||||
|
|
||||||
|
copyDir :: FilePath -> FilePath -> IO ()
|
||||||
|
copyDir src dst = do
|
||||||
|
whenM (not <$> doesDirectoryExist src) $
|
||||||
|
throw (userError "source does not exist")
|
||||||
|
--whenM (doesFileOrDirectoryExist dst) $
|
||||||
|
--throw (userError "destination already exists")
|
||||||
|
createDirectoryIfMissing True dst
|
||||||
|
content <- getDirectoryContents src
|
||||||
|
let xs = filter (`notElem` [".", ".."]) content
|
||||||
|
forM_ xs $ \name -> do
|
||||||
|
let srcPath = src </> name
|
||||||
|
let dstPath = dst </> name
|
||||||
|
isDirectory <- doesDirectoryExist srcPath
|
||||||
|
if isDirectory
|
||||||
|
then copyDir srcPath dstPath
|
||||||
|
else copyFile srcPath dstPath
|
||||||
|
where
|
||||||
|
doesFileOrDirectoryExist x = orM [doesDirectoryExist x, doesFileExist x]
|
||||||
|
orM xs = or <$> sequence xs
|
||||||
|
whenM s r = s >>= flip when r
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
packages:
|
packages:
|
||||||
zcash-haskell/zcash-haskell.cabal
|
|
||||||
./*.cabal
|
./*.cabal
|
||||||
|
zcash-haskell/zcash-haskell.cabal
|
||||||
|
|
||||||
with-compiler: ghc-9.4.8
|
with-compiler: ghc-9.4.8
|
||||||
|
|
||||||
|
|
6
configure
vendored
Executable file
6
configure
vendored
Executable file
|
@ -0,0 +1,6 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo "export PKG_CONFIG_PATH=$HOME/.local/share/zcash-haskell:\$PKG_CONFIG_PATH" | tee -a ~/.bashrc
|
||||||
|
echo "export LD_LIBRARY_PATH=$HOME/.local/share/zcash-haskell:\$LD_LIBRARY_PATH" | tee -a ~/.bashrc
|
||||||
|
source ~/.bashrc
|
||||||
|
cd zcash-haskell && cabal build
|
|
@ -1 +1 @@
|
||||||
Subproject commit ef93147f22a72cf3a5ffc2db686626d75704024a
|
Subproject commit 419f041ca9d1dd921673721c56a673fe1dc058e8
|
21
zenith.cabal
21
zenith.cabal
|
@ -1,6 +1,6 @@
|
||||||
cabal-version: 3.0
|
cabal-version: 3.0
|
||||||
name: zenith
|
name: zenith
|
||||||
version: 0.4.2.1
|
version: 0.4.3.0
|
||||||
license: MIT
|
license: MIT
|
||||||
license-file: LICENSE
|
license-file: LICENSE
|
||||||
author: Rene Vergara
|
author: Rene Vergara
|
||||||
|
@ -18,10 +18,12 @@ common warnings
|
||||||
|
|
||||||
custom-setup
|
custom-setup
|
||||||
setup-depends:
|
setup-depends:
|
||||||
base >= 4.7 && < 5
|
base >= 4.12 && < 5
|
||||||
, Cabal >= 3.0.0.0
|
, Cabal >= 3.2.0.0
|
||||||
, directory >= 1.3.6.0
|
, directory >= 1.3.6.0
|
||||||
, filepath >= 1.3.0.2
|
, filepath >= 1.3.0.2
|
||||||
|
, regex-base
|
||||||
|
, regex-compat
|
||||||
|
|
||||||
library
|
library
|
||||||
import: warnings
|
import: warnings
|
||||||
|
@ -39,7 +41,7 @@ library
|
||||||
Clipboard
|
Clipboard
|
||||||
, aeson
|
, aeson
|
||||||
, array
|
, array
|
||||||
, base >=4.7 && <5
|
, base >=4.12 && <5
|
||||||
, base64-bytestring
|
, base64-bytestring
|
||||||
, brick
|
, brick
|
||||||
, bytestring
|
, bytestring
|
||||||
|
@ -63,7 +65,7 @@ library
|
||||||
, vty
|
, vty
|
||||||
, zcash-haskell
|
, zcash-haskell
|
||||||
--pkgconfig-depends: rustzcash_wrapper
|
--pkgconfig-depends: rustzcash_wrapper
|
||||||
default-language: GHC2021
|
default-language: Haskell2010
|
||||||
|
|
||||||
executable zenith
|
executable zenith
|
||||||
import: warnings
|
import: warnings
|
||||||
|
@ -71,7 +73,7 @@ executable zenith
|
||||||
hs-source-dirs:
|
hs-source-dirs:
|
||||||
app
|
app
|
||||||
build-depends:
|
build-depends:
|
||||||
base >=4.7 && <5
|
base >=4.12 && <5
|
||||||
, brick
|
, brick
|
||||||
, bytestring
|
, bytestring
|
||||||
, configurator
|
, configurator
|
||||||
|
@ -81,8 +83,9 @@ executable zenith
|
||||||
, text
|
, text
|
||||||
, time
|
, time
|
||||||
, zenith
|
, zenith
|
||||||
|
, zcash-haskell
|
||||||
pkgconfig-depends: rustzcash_wrapper
|
pkgconfig-depends: rustzcash_wrapper
|
||||||
default-language: GHC2021
|
default-language: Haskell2010
|
||||||
|
|
||||||
test-suite zenith-tests
|
test-suite zenith-tests
|
||||||
import: warnings
|
import: warnings
|
||||||
|
@ -91,7 +94,7 @@ test-suite zenith-tests
|
||||||
hs-source-dirs:
|
hs-source-dirs:
|
||||||
test
|
test
|
||||||
build-depends:
|
build-depends:
|
||||||
base >=4.7 && <5
|
base >=4.12 && <5
|
||||||
, bytestring
|
, bytestring
|
||||||
, configurator
|
, configurator
|
||||||
, data-default
|
, data-default
|
||||||
|
@ -104,4 +107,4 @@ test-suite zenith-tests
|
||||||
, zcash-haskell
|
, zcash-haskell
|
||||||
, zenith
|
, zenith
|
||||||
pkgconfig-depends: rustzcash_wrapper
|
pkgconfig-depends: rustzcash_wrapper
|
||||||
default-language: GHC2021
|
default-language: Haskell2010
|
||||||
|
|
Loading…
Reference in a new issue