name:                hslua
version:             1.0.3
synopsis:            Bindings to Lua, an embeddable scripting language
description:         HsLua provides bindings, wrappers, types, and helper
                     functions to bridge Haskell and <https://www.lua.org/ Lua>.
                     .
                     This package contains a full Lua interpreter version 5.3.5.
                     If you want to link it with a system-wide Lua installation,
                     use the @system-lua@ flag.
                     .
                     <https://github.com/hslua/hslua-examples Example programs>
                     are available in a separate repository.
homepage:            https://hslua.github.io/
bug-reports:         https://github.com/hslua/hslua/issues
license:             MIT
license-file:        LICENSE
author:              Gracjan Polak, Ömer Sinan Ağacan
maintainer:          albert+hslua@zeitkraut.de
copyright:           © 2007–2012 Gracjan Polak
                     © 2012–2016 Ömer Sinan Ağacan
                     © 2016–2019 Albert Krewinkel
category:            Foreign
build-type:          Simple
extra-source-files:  cbits/lua-5.3.5/*.h
                     cbits/error-conversion/*.h
                     README.md
                     CHANGELOG.md
                     test/lua/*.lua
cabal-version:       >=1.10
tested-with:         GHC == 7.10.3, GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.3
                   , GHC == 8.6.1

source-repository head
  type:                git
  location:            https://github.com/hslua/hslua.git


flag system-lua
  default:             False
  manual:              True
  description:         Use the system-wide Lua instead of the bundled copy.

flag apicheck
  default:             False
  manual:              True
  description:         Compile Lua with -DLUA_USE_APICHECK.

flag lua_32bits
  default:             False
  manual:              True
  description:         Compile Lua with -DLUA_32BITS

flag allow-unsafe-gc
  default:             True
  manual:              True
  description:         Allow optimizations which make Lua's garbage collection
                       potentially unsafe; haskell finalizers must be handled
                       with extreme care.

flag export-dynamic
  default:             True
  manual:              True
  description:         Add all symbols to dynamic symbol table; disabling this
                       will make it possible to create fully static binaries,
                       but renders loading of dynamic C libraries impossible.

flag pkg-config
  default:             False
  manual:              True
  description:         Use @pkg-config@ to discover library and include paths.
                       Setting this flag implies `system-lua`.


library
  exposed-modules:     Foreign.Lua
                     , Foreign.Lua.Core
                     , Foreign.Lua.Core.Constants
                     , Foreign.Lua.Core.Error
                     , Foreign.Lua.Core.RawBindings
                     , Foreign.Lua.Core.Types
                     , Foreign.Lua.FunctionCalling
                     , Foreign.Lua.Module
                     , Foreign.Lua.Types
                     , Foreign.Lua.Types.Peekable
                     , Foreign.Lua.Types.Pushable
                     , Foreign.Lua.Userdata
                     , Foreign.Lua.Util
  other-modules:       Foreign.Lua.Utf8
                     , Foreign.Lua.Core.Auxiliary
                     , Foreign.Lua.Core.Functions
  build-depends:       base                 >= 4.8    && < 5
                     , bytestring           >= 0.10.2 && < 0.11
                     , containers           >= 0.5    && < 0.7
                     , exceptions           >= 0.8    && < 0.11
                     , fail                 >= 4.9    && < 5
                     , mtl                  >= 2.2    && < 2.3
                     , text                 >= 1.0    && < 1.3
  hs-source-dirs:      src
  default-language:    Haskell2010
  ghc-options:         -Wall
  default-extensions:  CApiFFI
                     , ForeignFunctionInterface
                     , LambdaCase
  other-extensions:    CPP
                     , DeriveDataTypeable
                     , DeriveFunctor
                     , FlexibleContexts
                     , FlexibleInstances
                     , ScopedTypeVariables
  c-sources:           cbits/error-conversion/error-conversion.c
  include-dirs:        cbits/error-conversion

  if flag(system-lua) || flag(pkg-config)
    if flag(pkg-config)
      pkgconfig-depends: lua5.3
    else
      extra-libraries:   lua
      includes:          lua.h
  else
    include-dirs:        cbits/lua-5.3.5
    c-sources:           cbits/lua-5.3.5/lapi.c
                       , cbits/lua-5.3.5/lcode.c
                       , cbits/lua-5.3.5/lctype.c
                       , cbits/lua-5.3.5/ldebug.c
                       , cbits/lua-5.3.5/ldo.c
                       , cbits/lua-5.3.5/ldump.c
                       , cbits/lua-5.3.5/lfunc.c
                       , cbits/lua-5.3.5/lgc.c
                       , cbits/lua-5.3.5/llex.c
                       , cbits/lua-5.3.5/lmem.c
                       , cbits/lua-5.3.5/lobject.c
                       , cbits/lua-5.3.5/lopcodes.c
                       , cbits/lua-5.3.5/lparser.c
                       , cbits/lua-5.3.5/lstate.c
                       , cbits/lua-5.3.5/lstring.c
                       , cbits/lua-5.3.5/ltable.c
                       , cbits/lua-5.3.5/ltm.c
                       , cbits/lua-5.3.5/lundump.c
                       , cbits/lua-5.3.5/lvm.c
                       , cbits/lua-5.3.5/lzio.c

                       , cbits/lua-5.3.5/lauxlib.c
                       , cbits/lua-5.3.5/lbaselib.c
                       , cbits/lua-5.3.5/lbitlib.c
                       , cbits/lua-5.3.5/lcorolib.c
                       , cbits/lua-5.3.5/ldblib.c
                       , cbits/lua-5.3.5/liolib.c
                       , cbits/lua-5.3.5/lmathlib.c
                       , cbits/lua-5.3.5/lstrlib.c
                       , cbits/lua-5.3.5/loslib.c
                       , cbits/lua-5.3.5/ltablib.c
                       , cbits/lua-5.3.5/lutf8lib.c
                       , cbits/lua-5.3.5/loadlib.c
                       , cbits/lua-5.3.5/linit.c

  if os(linux)
    cc-options:          -DLUA_USE_LINUX
    if flag(export-dynamic)
      ld-options:        -Wl,-E

  if os(darwin)
    cc-options:          -DLUA_USE_MACOSX

  if os(freebsd)
    cc-options:          -DLUA_USE_POSIX
    if flag(export-dynamic)
      ld-options:        -Wl,-E

  if flag(lua_32bits)
    cc-options:          -DLUA_32BITS

  if flag(apicheck)
    cc-options:          -DLUA_USE_APICHECK

  if flag(allow-unsafe-gc)
    cpp-options:         -DALLOW_UNSAFE_GC


test-suite test-hslua
  type:                exitcode-stdio-1.0
  main-is:             test-hslua.hs
  hs-source-dirs:      test
  ghc-options:         -Wall -threaded
  default-language:    Haskell2010
  other-modules:       Foreign.LuaTests
                     , Foreign.Lua.CoreTests
                     , Foreign.Lua.Core.AuxiliaryTests
                     , Foreign.Lua.Core.ErrorTests
                     , Foreign.Lua.FunctionCallingTests
                     , Foreign.Lua.ModuleTests
                     , Foreign.Lua.TypesTests
                     , Foreign.Lua.Types.PeekableTests
                     , Foreign.Lua.Types.PushableTests
                     , Foreign.Lua.UserdataTests
                     , Foreign.Lua.UtilTests
                     , Test.HsLua.Arbitrary
                     , Test.HsLua.Util
  build-depends:       base                 >= 4.8    && < 5
                     , bytestring           >= 0.10.2 && < 0.11
                     , containers           >= 0.5    && < 0.7
                     , exceptions           >= 0.8    && < 0.11
                     , fail                 >= 4.9    && < 5
                     , mtl                  >= 2.2    && < 2.3
                     , text                 >= 1.0    && < 1.3
                     -- for testing
                     , hslua
                     , QuickCheck           >= 2.7
                     , quickcheck-instances >= 0.3
                     , tasty                >= 0.11
                     , tasty-hunit          >= 0.9
                     , tasty-quickcheck     >= 0.8

benchmark benchmark-hslua
  type:                exitcode-stdio-1.0
  main-is:             benchmark-hslua.hs
  hs-source-dirs:      benchmark
  default-language:    Haskell2010
  build-depends:       hslua
                     , base                 >= 4.8
                     , bytestring           >= 0.10.2 && < 0.11
                     , criterion            >= 1.0    && < 1.6
                     , deepseq              >= 1.4.1  && < 1.5
  c-sources:           benchmark/benchmark-functions.c
  include-dirs:        benchmark
                     , cbits/lua-5.3.5