packages feed

rounded-hw-0.1.0.0: Setup.hs

import           Distribution.Simple
import           Distribution.Simple.Configure (configure)
import           Distribution.Simple.PackageIndex (allPackages)
import           Distribution.Types.BuildInfo (BuildInfo (includeDirs))
import qualified Distribution.Types.InstalledPackageInfo as InstalledPackageInfo (includeDirs)
import           Distribution.Types.Library (Library (libBuildInfo))
import           Distribution.Types.LocalBuildInfo (LocalBuildInfo (installedPkgs, localPkgDescr))
import           Distribution.Types.PackageDescription (PackageDescription (library))

{-
We want to access "ghcconfig.h" from assembly source file (.S),
but GHC does not pass the include directory to the assembler.
So we need to set include-dirs to include the path to "ghcconfig.h"
-}

main = defaultMainWithHooks simpleUserHooks { confHook = myConfHook }
  where
    -- myConfHook :: (GenericPackageDescription, HookedBuildInfo) -> ConfigFlags -> IO LocalBuildInfo
    myConfHook a cf  = do
      localBuildInfo <- configure a cf
      let extraIncludeDirs :: [String]
          extraIncludeDirs = concatMap InstalledPackageInfo.includeDirs (allPackages $ installedPkgs localBuildInfo)
          updateBuildInfo :: BuildInfo -> BuildInfo
          updateBuildInfo bi = bi { includeDirs = includeDirs bi ++ extraIncludeDirs }
          updateLibrary :: Library -> Library
          updateLibrary lib = lib { libBuildInfo = updateBuildInfo (libBuildInfo lib) }
          updatePkgDescr :: PackageDescription -> PackageDescription
          updatePkgDescr pd = pd { library = updateLibrary <$> library pd }
      return localBuildInfo { localPkgDescr = updatePkgDescr (localPkgDescr localBuildInfo) }