cabal-version: 3.0

name:
  emacs-module
version:
  0.2.1
category: Foreign, Foreign binding

synopsis:
  Utilities to write Emacs dynamic modules

description:
  This package provides a full set of bindings to emacs-module.h that
  allows to develop Emacs modules in Haskell. Bindings are based on
  Emacs 28 version of the interface and thus should work in all
  subsequent versions of Emacs, but will now work with earlier versions.

  For pointers on how to write minimal Emacs module, please refer to
  tutorial https://github.com/sergv/emacs-module/blob/master/Tutorial.md.

  Entry point: Emacs.Module module.

license:
  Apache-2.0
license-file:
  LICENSE
author:
  Sergey Vinokurov
maintainer:
  Sergey Vinokurov <serg.foo@gmail.com>
tested-with:
  , GHC == 9.2.8
  , GHC == 9.4.7
  , GHC == 9.6.3
  , GHC == 9.8.1

extra-source-files:
  cbits/emacs-module.h

extra-source-files:
  Changelog.md
  Readme.md

build-type:
  Simple

homepage: https://github.com/sergv/emacs-module

source-repository head
  type: git
  location: https://github.com/sergv/emacs-module.git

flag call-stacks
  description:
    Enable call stacks
  default:
    False
  manual:
    True

flag assertions
  description:
    Enable runtime assertions
  default:
    False
  manual:
    True

common ghc-options
  default-language:
    GHC2021

  default-extensions:
    LambdaCase

  ghc-options:
    -Weverything
    -Wno-all-missed-specialisations
    -Wno-implicit-prelude
    -Wno-missed-specialisations
    -Wno-missing-import-lists
    -Wno-missing-local-signatures
    -Wno-missing-safe-haskell-mode
    -Wno-redundant-constraints
    -Wno-safe
    -Wno-type-defaults
    -Wno-unsafe

  if impl(ghc >= 8.8)
    ghc-options:
      -Wno-missing-deriving-strategies

  if impl(ghc >= 9.2)
    ghc-options:
      -Wno-missing-kind-signatures

  if impl(ghc >= 9.8)
    ghc-options:
      -Wno-missing-role-annotations
      -Wno-missing-poly-kind-signatures

library
  import: ghc-options
  if flag(call-stacks)
    cpp-options: -DCALL_STACKS
  if flag(assertions)
    cpp-options: -DASSERTIONS
  exposed-modules:
    Data.Emacs.Module.Args
    Data.Emacs.Module.Doc
    Data.Emacs.Module.Env
    Data.Emacs.Module.Env.Functions
    Data.Emacs.Module.Env.ProcessInput
    Data.Emacs.Module.GetRawValue
    Data.Emacs.Module.NonNullPtr
    Data.Emacs.Module.Runtime
    Data.Emacs.Module.SymbolName
    Data.Emacs.Module.SymbolName.Predefined
    Data.Emacs.Module.SymbolName.Predefined.Funcall
    Data.Emacs.Module.SymbolName.TH
    Data.Emacs.Module.Value
    Emacs.Module
    Emacs.Module.Assert
    Emacs.Module.Errors
    Emacs.Module.Functions
    Emacs.Module.Monad
    Emacs.Module.Monad.Class
  other-modules:
    Data.Emacs.Module.NonNullPtr.Internal
    Data.Emacs.Module.Raw.Env
    Data.Emacs.Module.Raw.Env.Internal
    Data.Emacs.Module.Raw.Env.TH
    Data.Emacs.Module.Raw.Value
    Data.Emacs.Module.Raw.Value.Internal
    Data.Emacs.Module.SymbolName.Internal
    Data.Emacs.Module.Value.Internal
    Emacs.Module.Monad.Common
    Foreign.Ptr.Builder
  hs-source-dirs:
    src
  build-depends:
    , base >= 4.16 && < 5
    , bytestring
    , deepseq
    , exceptions
    , filepath >= 1.4.100
    , monad-control
    , monad-interleave >= 0.2
    , mtl >= 2.3
    , primitive
    , prettyprinter >= 1.7
    , prettyprinter-combinators
    , text >= 2
    , template-haskell
    , transformers-base
    , tuples-homogenous-h98
    , vector >= 0.13
    , void

  includes:
    emacs-module.h
  install-includes:
    emacs-module.h
  include-dirs:
    cbits
  build-tool-depends:
    hsc2hs:hsc2hs