packages feed

direct-rocksdb-0.0.1: Setup.hs

{-# OPTIONS_GHC -Wall -Wno-deprecations #-}

import Data.Foldable
import Distribution.Simple
import Distribution.Simple.LocalBuildInfo
import Distribution.Simple.Toolkit
import Distribution.Types.BuildInfo
import Distribution.Types.GenericPackageDescription
import Distribution.Types.PackageDescription
import System.Directory
import System.Environment
import System.FilePath

main :: IO ()
main =
  defaultMainWithHooks
    simpleUserHooks
    { hookedPrograms = [cmakeProgram, ninjaProgram]
    , confHook =
        \t f -> do
          lbi <- confHook simpleUserHooks t f
          rocksdb_srcdir <- (</> "rocksdb-5.8") <$> getCurrentDirectory
          let clbi = getComponentLocalBuildInfo lbi CLibName
              rocksdb_libname =
                getHSLibraryName (componentUnitId clbi) ++ "-rocksdb-5.8"
              rocksdb_builddir = componentBuildDir lbi clbi </> "rocksdb-5.8"
              lib_installdir =
                libdir $
                getComponentInstallDirs
                  (packageDescription $ fst t)
                  lbi
                  CLibName
          for_ [rocksdb_builddir, lib_installdir] $
            createDirectoryIfMissing True
          withCurrentDirectory rocksdb_builddir $ do
            runLBIProgram
              lbi
              cmakeProgram
              [ rocksdb_srcdir
              , "-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=true"
              , "-G"
              , "Ninja"
              ]
            ninja_extra_args <-
              do r <- lookupEnv "NINJA_J"
                 pure $
                   case r of
                     Just s -> ["-j", s]
                     _ -> []
            runLBIProgram lbi ninjaProgram $
              ninja_extra_args ++ ["librocksdb.a"]
            copyFile "librocksdb.a" $
              lib_installdir </> "lib" ++ rocksdb_libname <.> "a"
          pure
            lbi
            { localPkgDescr =
                updatePackageDescription
                  ( Just
                      emptyBuildInfo
                      { extraLibs = [rocksdb_libname]
                      , extraLibDirs = [lib_installdir]
                      }
                  , []) $
                localPkgDescr lbi
            }
    }