packages feed

LambdaHack-0.8.1.0: LambdaHack.cabal

name:           LambdaHack
-- The package version. See the Haskell package versioning policy (PVP)
-- for standards guiding when and how versions should be incremented.
-- http://www.haskell.org/haskellwiki/Package_versioning_policy
-- PVP summary:+-+------- breaking API changes
--             | | +----- minor or non-breaking API additions
--             | | | +--- code changes with no API change
version:       0.8.1.0
synopsis:      A game engine library for tactical squad ASCII roguelike dungeon crawlers
description:   LambdaHack is a Haskell game engine library for ASCII roguelike
               games of arbitrary theme, size and complexity, with optional
               tactical squad combat. It's packaged together with a sample
               dungeon crawler in fantasy setting that can be tried out
               in the browser: <http://lambdahack.github.io>
               (It runs fastest on Chrome. Keyboard commands and savefiles
               are supported only on recent enough versions of browsers.
               Mouse should work everywhere.)
               .
               Please see the changelog file for recent improvements
               and the issue tracker for short-term plans. Long term goals
               include multiplayer tactical squad combat, in-game content
               creation, auto-balancing and persistent content modification
               based on player behaviour. Contributions are welcome.
               .
               Games known to use the LambdaHack library:
               .
               * Allure of the Stars, a near-future Sci-Fi game,
               <http://hackage.haskell.org/package/Allure>
               .
               * Space Privateers, an adventure game set in far future,
               <http://hackage.haskell.org/package/SpacePrivateers>
               .
               Note: All modules in this library are kept visible,
               to let games override and reuse them.
               OTOH, to reflect that some modules are implementation details
               relative to others, the source code adheres to the following
               convention. If a module has the same name as a directory,
               the module is the exclusive interface to the directory.
               No references to the modules in the directory are allowed
               except from the interface module. This policy is only binding
               when developing the library --- library users are free
               to access any modules, since the library authors are in
               no position to guess their particular needs.
homepage:      https://lambdahack.github.io
bug-reports:   http://github.com/LambdaHack/LambdaHack/issues
license:       BSD3
license-file:  LICENSE
tested-with:   GHC==8.0.2, GHC==8.2.2, GHC==8.4.3
data-files:    GameDefinition/config.ui.default,
               GameDefinition/fonts/16x16x.fon,
               GameDefinition/fonts/8x8xb.fon,
               GameDefinition/fonts/8x8x.fon,
               GameDefinition/fonts/LICENSE.16x16x,
               GameDefinition/fonts/Fix15Mono-Bold.woff,
               GameDefinition/fonts/LICENSE.Fix15Mono-Bold,
               GameDefinition/InGameHelp.txt,
               README.md,
               CHANGELOG.md,
               LICENSE,
               CREDITS
extra-source-files: GameDefinition/MainMenu.ascii,
                    GameDefinition/PLAYING.md,
                    Makefile
author:        Andres Loeh, Mikolaj Konarski
maintainer:    Mikolaj Konarski <mikolaj.konarski@funktory.com>
category:      Game Engine, Game
build-type:    Simple
cabal-version: >= 1.10

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

flag vty
  description:        switch to the vty frontend
  default:            False
  manual:             True

flag curses
  description:        switch to the curses frontend (not fully supported)
  default:            False
  manual:             True

flag gtk
  description:        switch to the GTK frontend
  default:            False
  manual:             True

flag sdl
  description:        switch to the SDL2 frontend
  default:            False
  manual:             True

flag jsaddle
  description:        switch to the JSaddle frontend
  default:            False
  manual:             True

flag with_expensive_assertions
  description:        turn on expensive assertions of well-tested code
  default:            False
  manual:             True

flag release
  description:        prepare for a release (expose internal functions and types, etc.)
  default:            True
  manual:             True

library
  exposed-modules:    Game.LambdaHack.Atomic
                      Game.LambdaHack.Atomic.CmdAtomic
                      Game.LambdaHack.Atomic.HandleAtomicWrite
                      Game.LambdaHack.Atomic.MonadStateWrite
                      Game.LambdaHack.Atomic.PosAtomicRead
                      Game.LambdaHack.Client
                      Game.LambdaHack.Client.AI
                      Game.LambdaHack.Client.AI.ConditionM
                      Game.LambdaHack.Client.AI.HandleAbilityM
                      Game.LambdaHack.Client.AI.PickActorM
                      Game.LambdaHack.Client.AI.PickTargetM
                      Game.LambdaHack.Client.AI.Strategy
                      Game.LambdaHack.Client.Bfs
                      Game.LambdaHack.Client.BfsM
                      Game.LambdaHack.Client.ClientOptions
                      Game.LambdaHack.Client.CommonM
                      Game.LambdaHack.Client.HandleAtomicM
                      Game.LambdaHack.Client.HandleResponseM
                      Game.LambdaHack.Client.LoopM
                      Game.LambdaHack.Client.MonadClient
                      Game.LambdaHack.Client.Preferences
                      Game.LambdaHack.Client.Request
                      Game.LambdaHack.Client.Response
                      Game.LambdaHack.Client.State
                      Game.LambdaHack.Client.UI
                      Game.LambdaHack.Client.UI.ActorUI
                      Game.LambdaHack.Client.UI.Animation
                      Game.LambdaHack.Client.UI.Content.KeyKind
                      Game.LambdaHack.Client.UI.DrawM
                      Game.LambdaHack.Client.UI.DisplayAtomicM
                      Game.LambdaHack.Client.UI.EffectDescription
                      Game.LambdaHack.Client.UI.Frame
                      Game.LambdaHack.Client.UI.FrameM
                      Game.LambdaHack.Client.UI.Frontend
                      Game.LambdaHack.Client.UI.Frontend.Chosen
                      Game.LambdaHack.Client.UI.Frontend.Common
                      Game.LambdaHack.Client.UI.Frontend.Teletype
                      Game.LambdaHack.Client.UI.HandleHelperM
                      Game.LambdaHack.Client.UI.HandleHumanGlobalM
                      Game.LambdaHack.Client.UI.HandleHumanLocalM
                      Game.LambdaHack.Client.UI.HandleHumanM
                      Game.LambdaHack.Client.UI.HumanCmd
                      Game.LambdaHack.Client.UI.InventoryM
                      Game.LambdaHack.Client.UI.ItemDescription
                      Game.LambdaHack.Client.UI.ItemSlot
                      Game.LambdaHack.Client.UI.Key
                      Game.LambdaHack.Client.UI.KeyBindings
                      Game.LambdaHack.Client.UI.MonadClientUI
                      Game.LambdaHack.Client.UI.Msg
                      Game.LambdaHack.Client.UI.MsgM
                      Game.LambdaHack.Client.UI.Overlay
                      Game.LambdaHack.Client.UI.RunM
                      Game.LambdaHack.Client.UI.SessionUI
                      Game.LambdaHack.Client.UI.Slideshow
                      Game.LambdaHack.Client.UI.SlideshowM
                      Game.LambdaHack.Client.UI.UIOptions
                      Game.LambdaHack.Common.Ability
                      Game.LambdaHack.Common.Actor
                      Game.LambdaHack.Common.ActorState
                      Game.LambdaHack.Common.Color
                      Game.LambdaHack.Common.ContentData
                      Game.LambdaHack.Common.Dice
                      Game.LambdaHack.Common.Faction
                      Game.LambdaHack.Common.File
                      Game.LambdaHack.Common.Flavour
                      Game.LambdaHack.Common.Frequency
                      Game.LambdaHack.Common.HighScore
                      Game.LambdaHack.Common.Item
                      Game.LambdaHack.Common.ItemAspect
                      Game.LambdaHack.Common.Kind
                      Game.LambdaHack.Common.Level
                      Game.LambdaHack.Common.Misc
                      Game.LambdaHack.Common.MonadStateRead
                      Game.LambdaHack.Common.Perception
                      Game.LambdaHack.Common.PointArray
                      Game.LambdaHack.Common.Point
                      Game.LambdaHack.Common.Prelude
                      Game.LambdaHack.Common.Random
                      Game.LambdaHack.Common.ReqFailure
                      Game.LambdaHack.Common.RingBuffer
                      Game.LambdaHack.Common.Save
                      Game.LambdaHack.Common.State
                      Game.LambdaHack.Common.Thread
                      Game.LambdaHack.Common.Tile
                      Game.LambdaHack.Common.Time
                      Game.LambdaHack.Common.Vector
                      Game.LambdaHack.Content.CaveKind
                      Game.LambdaHack.Content.ItemKind
                      Game.LambdaHack.Content.ModeKind
                      Game.LambdaHack.Content.PlaceKind
                      Game.LambdaHack.Content.RuleKind
                      Game.LambdaHack.Content.TileKind
                      Game.LambdaHack.Server
                      Game.LambdaHack.Server.BroadcastAtomic
                      Game.LambdaHack.Server.Commandline
                      Game.LambdaHack.Server.CommonM
                      Game.LambdaHack.Server.DebugM
                      Game.LambdaHack.Server.DungeonGen
                      Game.LambdaHack.Server.DungeonGen.Area
                      Game.LambdaHack.Server.DungeonGen.AreaRnd
                      Game.LambdaHack.Server.DungeonGen.Cave
                      Game.LambdaHack.Server.DungeonGen.Place
                      Game.LambdaHack.Server.EndM
                      Game.LambdaHack.Server.Fov
                      Game.LambdaHack.Server.FovDigital
                      Game.LambdaHack.Server.HandleAtomicM
                      Game.LambdaHack.Server.HandleEffectM
                      Game.LambdaHack.Server.HandleRequestM
                      Game.LambdaHack.Server.ItemRev
                      Game.LambdaHack.Server.ItemM
                      Game.LambdaHack.Server.LoopM
                      Game.LambdaHack.Server.MonadServer
                      Game.LambdaHack.Server.PeriodicM
                      Game.LambdaHack.Server.ProtocolM
                      Game.LambdaHack.Server.ServerOptions
                      Game.LambdaHack.Server.StartM
                      Game.LambdaHack.Server.State

  other-modules:      Paths_LambdaHack
  build-depends:
                      assert-failure >= 0.1.2 && < 0.2,
                      async      >= 2.2.1,
                      base       >= 4.9 && < 99,
                      base-compat >= 0.8.0,
                      binary     >= 0.8,
                      bytestring >= 0.9.2 ,
                      containers >= 0.5.3.0,
                      deepseq    >= 1.3,
                      directory  >= 1.1.0.1,
                      enummapset >= 0.5.2.2,
                      filepath   >= 1.2.0.1,
                      ghc-prim,
                      hashable   >= 1.1.2.5,
                      hsini      >= 0.2,
                      keys       >= 3,
                      miniutter  >= 0.4.5.0,
                      optparse-applicative >= 0.13,
                      pretty-show >= 1.6,
                      random     >= 1.1,
                      stm        >= 2.4,
                      time       >= 1.4,
                      text       >= 0.11.2.3,
                      transformers >= 0.4,
                      unordered-containers >= 0.2.3,
                      vector     >= 0.11,
                      vector-binary-instances >= 0.2.3.1

  default-language:   Haskell2010
  default-extensions: MonoLocalBinds, ScopedTypeVariables, OverloadedStrings
                      BangPatterns, RecordWildCards, NamedFieldPuns, MultiWayIf,
                      LambdaCase, StrictData, CPP
  other-extensions:   TemplateHaskell, MultiParamTypeClasses, RankNTypes,
                      TypeFamilies, FlexibleContexts, FlexibleInstances,
                      DeriveFunctor, FunctionalDependencies,
                      GeneralizedNewtypeDeriving, TupleSections,
                      DeriveFoldable, DeriveTraversable,
                      ExistentialQuantification, GADTs, StandaloneDeriving,
                      DataKinds, KindSignatures, DeriveGeneric
  ghc-options:        -Wall -Wcompat -Worphans -Wincomplete-uni-patterns -Wincomplete-record-updates -Wimplicit-prelude -Wmissing-home-modules -Widentities -Wredundant-constraints
  ghc-options:        -Wall-missed-specialisations
  ghc-options:        -fno-ignore-asserts -fexpose-all-unfoldings -fspecialise-aggressively -fsimpl-tick-factor=200

  if impl(ghcjs) || flag(jsaddle) {
    exposed-modules:    Game.LambdaHack.Client.UI.Frontend.Dom
    build-depends:    ghcjs-dom >= 0.9.1.1
    cpp-options:      -DUSE_BROWSER
  } else { if flag(vty) {
    exposed-modules:    Game.LambdaHack.Client.UI.Frontend.Vty
    build-depends:    vty >= 5
    cpp-options:      -DUSE_VTY
  } else { if flag(curses) {
    exposed-modules:    Game.LambdaHack.Client.UI.Frontend.Curses
    build-depends:    hscurses >= 1.4.1
    cpp-options:      -DUSE_CURSES
  } else { if flag(gtk) {
    exposed-modules:    Game.LambdaHack.Client.UI.Frontend.Gtk
    build-depends:    gtk3 >= 0.12.1
    cpp-options:      -DUSE_GTK
  } else {
    exposed-modules:    Game.LambdaHack.Client.UI.Frontend.Sdl
    build-depends:    sdl2 >= 2, sdl2-ttf >= 2
    cpp-options:      -DUSE_SDL
  } } } }

  if impl(ghcjs) {
    exposed-modules:    Game.LambdaHack.Common.JSFile
    cpp-options:      -DUSE_JSFILE
  } else {
    exposed-modules:    Game.LambdaHack.Common.HSFile
    build-depends:    zlib >= 0.5.3.1
  }

  if flag(with_expensive_assertions)
    cpp-options:      -DWITH_EXPENSIVE_ASSERTIONS

  if flag(release)
    cpp-options:      -DEXPOSE_INTERNAL

executable LambdaHack
  hs-source-dirs:     GameDefinition
  main-is:            Main.hs
  other-modules:      Client.UI.Content.KeyKind,
                      Content.CaveKind,
                      Content.ItemKind,
                      Content.ItemKindEmbed,
                      Content.ItemKindActor,
                      Content.ItemKindOrgan,
                      Content.ItemKindBlast,
                      Content.ItemKindTemporary,
                      Content.ModeKind,
                      Content.ModeKindPlayer,
                      Content.PlaceKind,
                      Content.RuleKind,
                      Content.TileKind,
                      Implementation.MonadClientImplementation,
                      Implementation.MonadServerImplementation,
                      Implementation.TieKnot,
                      Paths_LambdaHack
  build-depends:      LambdaHack,
                      template-haskell >= 2.6,

                      assert-failure >= 0.1.2 && < 0.2,
                      async      >= 2.2.1,
                      base       >= 4.9 && < 99,
                      base-compat >= 0.8.0,
                      binary     >= 0.8,
                      bytestring >= 0.9.2 ,
                      containers >= 0.5.3.0,
                      deepseq    >= 1.3,
                      directory  >= 1.1.0.1,
                      enummapset >= 0.5.2.2,
                      filepath   >= 1.2.0.1,
                      ghc-prim,
                      hashable   >= 1.1.2.5,
                      hsini      >= 0.2,
                      keys       >= 3,
                      miniutter  >= 0.4.5.0,
                      optparse-applicative >= 0.13,
                      pretty-show >= 1.6,
                      random     >= 1.1,
                      stm        >= 2.4,
                      text       >= 0.11.2.3,
                      time       >= 1.4,
                      transformers >= 0.4,
                      unordered-containers >= 0.2.3,
                      vector     >= 0.11,
                      vector-binary-instances >= 0.2.3.1

  default-language:   Haskell2010
  default-extensions: MonoLocalBinds, ScopedTypeVariables, OverloadedStrings
                      BangPatterns, RecordWildCards, NamedFieldPuns, MultiWayIf,
                      LambdaCase, StrictData, CPP
  other-extensions:   TemplateHaskell
  ghc-options:        -Wall -Wcompat -Worphans -Wincomplete-uni-patterns -Wincomplete-record-updates -Wimplicit-prelude -Wmissing-home-modules -Widentities -Wredundant-constraints
  ghc-options:        -Wall-missed-specialisations
  ghc-options:        -fno-ignore-asserts -fexpose-all-unfoldings -fspecialise-aggressively
  ghc-options:        -threaded -rtsopts
-- Minimize median lag at the cost of occasional bigger GC lag,
-- which fortunately sometimes fits into idle time between turns):
  ghc-options:        -with-rtsopts=-A99m

  if impl(ghcjs) {
-- This is the largest GHCJS_BUSY_YIELD value that does not cause dropped frames
-- on my machine with default --maxFps.
    cpp-options:      -DGHCJS_BUSY_YIELD=50
    cpp-options:      -DUSE_JSFILE
  } else {
    build-depends:    zlib >= 0.5.3.1
  }

test-suite test
  type:               exitcode-stdio-1.0
  hs-source-dirs:     GameDefinition, test
  main-is:            test.hs
  other-modules:      Client.UI.Content.KeyKind,
                      Content.CaveKind,
                      Content.ItemKind,
                      Content.ItemKindEmbed,
                      Content.ItemKindActor,
                      Content.ItemKindOrgan,
                      Content.ItemKindBlast,
                      Content.ItemKindTemporary,
                      Content.ModeKind,
                      Content.ModeKindPlayer,
                      Content.PlaceKind,
                      Content.RuleKind,
                      Content.TileKind,
                      Implementation.MonadClientImplementation,
                      Implementation.MonadServerImplementation,
                      Implementation.TieKnot,
                      Paths_LambdaHack
  build-depends:      LambdaHack,
                      template-haskell >= 2.6,

                      assert-failure >= 0.1.2 && < 0.2,
                      async      >= 2.2.1,
                      base       >= 4.9 && < 99,
                      base-compat >= 0.8.0,
                      binary     >= 0.8,
                      bytestring >= 0.9.2 ,
                      containers >= 0.5.3.0,
                      deepseq    >= 1.3,
                      directory  >= 1.1.0.1,
                      enummapset >= 0.5.2.2,
                      filepath   >= 1.2.0.1,
                      ghc-prim,
                      hashable   >= 1.1.2.5,
                      hsini      >= 0.2,
                      keys       >= 3,
                      miniutter  >= 0.4.5.0,
                      optparse-applicative >= 0.13,
                      pretty-show >= 1.6,
                      random     >= 1.1,
                      stm        >= 2.4,
                      text       >= 0.11.2.3,
                      time       >= 1.4,
                      transformers >= 0.4,
                      unordered-containers >= 0.2.3,
                      vector     >= 0.11,
                      vector-binary-instances >= 0.2.3.1

  default-language:   Haskell2010
  default-extensions: MonoLocalBinds, ScopedTypeVariables, OverloadedStrings
                      BangPatterns, RecordWildCards, NamedFieldPuns, MultiWayIf,
                      LambdaCase, StrictData, CPP
  other-extensions:   TemplateHaskell
  ghc-options:        -Wall -Wcompat -Worphans -Wincomplete-uni-patterns -Wincomplete-record-updates -Wimplicit-prelude -Wmissing-home-modules -Widentities -Wredundant-constraints
  ghc-options:        -fno-ignore-asserts -fexpose-all-unfoldings -fspecialise-aggressively
  ghc-options:        -threaded -rtsopts
-- Minimize median lag at the cost of occasional bigger GC lag,
-- which fortunately sometimes fits into idle time between turns):
  ghc-options:        -with-rtsopts=-A99m

  if impl(ghcjs) {
-- This is the largest GHCJS_BUSY_YIELD value that does not cause dropped frames
-- on my machine with default --maxFps.
    cpp-options:      -DGHCJS_BUSY_YIELD=50
  } else {
    build-depends:    zlib >= 0.5.3.1
  }