packages feed

immutaball-core-0.1.0.5.1: immutaball-core.cabal

cabal-version: 3.0

name: immutaball-core
version: 0.1.0.5.1

synopsis: Immutaball platformer game (prototype version)
description:
    The Immutaball platformer game is a rewrite of Neverball in Haskell.
    (Prototype version.)
category:     Games
homepage:     https://nibzdil.org/
bug-reports:  https://nibzdil.org/

-- When packaged with Neverball data (e.g. into ‘immutaball’), distribute under
-- GPL terms to be compliant.
license:      0BSD
license-file: LICENSE.md
author:       Byron Johnson
maintainer:   bjohnson@nibzdil.org
build-type:   Simple
copyright:    2024-2025, Byron Johnson

extra-source-files:
    README.md
    NOTES-building-dependencies.md
extra-doc-files:
    CHANGELOG.md
    doc/legal/*.md
    doc/legal/*.txt
    doc/screenshots/*.png

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

--source-repository this
--    type: git
--    location: https://github.com/nibzdil/immutaball
--    tag: v0.1.0.0-dev

flag add-default-compiler-flags
    description:
        Add default set of compiler flags.
    default: True
    manual: True

flag internal-wires
    description:
        Instead of an external wires dependency, use an internal implementation
        sufficient for this package.  Useful since as of now, the latest
        version on Hackage is not up-to-date with the latest versions of its
        dependencies, so it would not build with this project without a
        manually modified local build of this external dependency.
    default: False
    manual: False

common all-components
    default-language: Haskell2010
    other-extensions:
        TemplateHaskell
        TypeSynonymInstances
        FlexibleInstances
        InstanceSigs
        ScopedTypeVariables
        UndecidableInstances
        RankNTypes
        Arrows
        DerivingVia
        FlexibleContexts
        ExistentialQuantification
        ExplicitForAll
        NondecreasingIndentation

    hs-source-dirs: .

    -- We use multiple threads.  Include to fix this error:
    -- > user error (RTS doesn't support multiple OS threads (use ghc -threaded when linking))
    -- >
    -- > Package: ghc-internal
    -- > Module: GHC.Internal.IO.Exception
    -- > Type: IOException
    ghc-options: -threaded

    if flag(add-default-compiler-flags)
        -- Disable tab warner.
        -- It's a better style: https://dmitryfrank.com/articles/indent_with_tabs_align_with_spaces
        ghc-options: -Wall -Wno-tabs
        -- ghc-options: -O2

    build-depends:
        base             >= 4.9      && < 9.5,
        bytestring       >= 0.11.0.0 && < 0.13,
        containers       >= 0.6.0.1  && < 0.8,
        transformers     >= 0.5.0.0  && < 0.7,
        pipes            >= 4.3.16   && < 4.4,
        lens             >= 5.3.2    && < 5.4,
        parallel         >= 3.2.2.0  && < 3.3,
        --stm              >= 2.5.3.1  && < 2.6,
        stm              >= 2.5.1.0  && < 2.6,
        async            >= 2.2.5    && < 2.3,
        --wires            >  0.2.1    && < 0.3,
        mtl              >= 2.2      && < 2.4,
        --filepath         >= 1.5.3.0  && < 1.6,
        filepath         >= 1.4.2.2  && < 1.6,
        --directory        >= 1.3.8.5  && < 1.4,
        directory        >= 1.3.8.4  && < 1.4,
        prettyprinter    >= 1.7.1    && < 1.8,
        parsec           >= 3.1.17.0 && < 3.2,
        unbounded-delays >= 0.1.1.1  && < 0.2,
        time             >= 1.12     && < 1.15,

        sdl2             >= 2.5.5.0  && < 2.6,
        gl               >= 0.9      && < 0.10,
        array            >= 0.5.8.0  && < 0.6,
        OpenGL           >= 3.0.3.0  && < 3.1,
        sdl2-ttf         >= 2.1.3    && < 2.2,
        libvorbis        >= 0.1.0.2  && < 0.2,
        JuicyPixels      >= 3.3.9    && < 3.4,
        curl             >= 1.3.8    && < 1.3.9,
        i18n             >= 0.4.0.0  && < 0.5,
        text             >= 2.1      && < 2.2

    if !flag(internal-wires)
        build-depends:
            wires            >  0.2.1    && < 0.3
        hs-source-dirs:
            .
            ./dependency-substitutions/wires-nofallback-meta
        other-modules:
            Control.Wire.Meta
    else
        hs-source-dirs:
            .
            ./dependency-substitutions/wires-fallback-meta
            ./dependency-substitutions/wires
        other-modules:
            Control.Wire.Meta
        other-modules:
            Control.Wire
            Control.Wire.Controller
            Control.Wire.Internal

common executable-components
    build-depends: immutaball-core

    other-modules:
        Control.Monad.Trans.MaybeM
        Data.LabeledBinTree
        Immutaball.Ball.CLI
        Immutaball.Ball.CLI.Config
        Immutaball.Ball.Game
        Immutaball.Ball.Level
        Immutaball.Ball.Level.Render
        Immutaball.Ball.LevelSets
        Immutaball.Ball.Main
        Immutaball.Ball.State.Game
        Immutaball.Ball.State.LevelSelect
        Immutaball.Ball.State.LevelSets
        Immutaball.Ball.State.Play
        Immutaball.Ball.State.Preplay
        Immutaball.Ball.State.Title
        Immutaball.Prelude
        Immutaball.Putt.CLI
        Immutaball.Putt.CLI.Config
        Immutaball.Putt.Main
        Immutaball.Share.AutoPar
        Immutaball.Share.Config
        Immutaball.Share.Config.Parser
        Immutaball.Share.Config.Printer
        Immutaball.Share.Context
        Immutaball.Share.Context.Config
        Immutaball.Share.Controller
        Immutaball.Share.GLManager
        Immutaball.Share.GLManager.Config
        Immutaball.Share.GLManager.Types
        Immutaball.Share.GUI
        Immutaball.Share.ImmutaballIO
        Immutaball.Share.ImmutaballIO.BasicIO
        Immutaball.Share.ImmutaballIO.DirectoryIO
        Immutaball.Share.ImmutaballIO.GLIO
        Immutaball.Share.ImmutaballIO.SDLIO
        Immutaball.Share.Level
        Immutaball.Share.Level.Analysis
        Immutaball.Share.Level.Analysis.LowLevel
        Immutaball.Share.Level.Attributes
        Immutaball.Share.Level.Base
        Immutaball.Share.Level.Parser
        Immutaball.Share.Level.Utils
        Immutaball.Share.Math
        Immutaball.Share.Math.Core
        Immutaball.Share.Math.X3D
        Immutaball.Share.SDLManager
        Immutaball.Share.SDLManager.Config
        Immutaball.Share.SDLManager.Types
        Immutaball.Share.State
        Immutaball.Share.State.Context
        Immutaball.Share.Utils
        Immutaball.Share.Video
        Immutaball.Share.Video.LowLevel
        Immutaball.Share.Video.Shaders
        Immutaball.Share.Wire

executable immutaball
    import: all-components
    import: executable-components

    main-is: Main.hs

executable immutaputt
    import: all-components
    import: executable-components

    main-is: Putt.hs

library
    import: all-components

    exposed-modules:
        Control.Monad.Trans.MaybeM
        Data.LabeledBinTree
        Immutaball.Ball.CLI
        Immutaball.Ball.CLI.Config
        Immutaball.Ball.Game
        Immutaball.Ball.Level
        Immutaball.Ball.Level.Render
        Immutaball.Ball.LevelSets
        Immutaball.Ball.Main
        Immutaball.Ball.State.Game
        Immutaball.Ball.State.LevelSelect
        Immutaball.Ball.State.LevelSets
        Immutaball.Ball.State.Play
        Immutaball.Ball.State.Preplay
        Immutaball.Ball.State.Title
        Immutaball.Prelude
        Immutaball.Putt.CLI
        Immutaball.Putt.CLI.Config
        Immutaball.Putt.Main
        Immutaball.Share.AutoPar
        Immutaball.Share.Config
        Immutaball.Share.Config.Parser
        Immutaball.Share.Config.Printer
        Immutaball.Share.Context
        Immutaball.Share.Context.Config
        Immutaball.Share.Controller
        Immutaball.Share.GLManager
        Immutaball.Share.GLManager.Config
        Immutaball.Share.GLManager.Types
        Immutaball.Share.GUI
        Immutaball.Share.ImmutaballIO
        Immutaball.Share.ImmutaballIO.BasicIO
        Immutaball.Share.ImmutaballIO.DirectoryIO
        Immutaball.Share.ImmutaballIO.GLIO
        Immutaball.Share.ImmutaballIO.SDLIO
        Immutaball.Share.Level
        Immutaball.Share.Level.Analysis
        Immutaball.Share.Level.Analysis.LowLevel
        Immutaball.Share.Level.Attributes
        Immutaball.Share.Level.Base
        Immutaball.Share.Level.Parser
        Immutaball.Share.Level.Utils
        Immutaball.Share.Math
        Immutaball.Share.Math.Core
        Immutaball.Share.Math.X3D
        Immutaball.Share.SDLManager
        Immutaball.Share.SDLManager.Config
        Immutaball.Share.SDLManager.Types
        Immutaball.Share.State
        Immutaball.Share.State.Context
        Immutaball.Share.Utils
        Immutaball.Share.Video
        Immutaball.Share.Video.LowLevel
        Immutaball.Share.Video.Shaders
        Immutaball.Share.Wire

test-suite test-immutaball
    import: all-components
    import: executable-components

    type: exitcode-stdio-1.0

    main-is: Test.hs

    build-depends:
        -- tasty: avoid deprecated 1.5.1 version.
        --tasty            >= 1.5      && < 1.6,
        tasty            (>= 1.5     && < 1.5.1) || (> 1.5.1 && < 1.6),
        tasty-hunit      >= 0.10.2   && < 0.11,
        tasty-quickcheck >= 0.11     && < 0.12,
        HUnit            >= 1.6.2.0  && < 1.7,
        QuickCheck       >= 2.15.0.1 && < 2.16

    other-modules:
        Test.Data.LabeledBinTree.Orphans
        Test.Data.LabeledBinTree.Test
        Test.Immutaball.Test
        Test.Immutaball.Share.Math.Core.Orphans
        Test.Immutaball.Share.Math.Core.Test
        Test.Immutaball.Share.Math.Orphans
        Test.Immutaball.Share.Math.Test
        Test.Immutaball.Share.Math.X3D.Test
        Test.Immutaball.Share.State.Fixtures
        Test.Immutaball.Share.State.Test
        Test.Immutaball.Share.Wire.Test