packages feed

bishbosh-0.1.2.0: bishbosh.cabal

cabal-version: 2.4

-- This file is part of BishBosh.
--
-- BishBosh is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation, either version 3 of the License, or
-- (at your option) any later version.
--
-- BishBosh is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with BishBosh.  If not, see <http://www.gnu.org/licenses/>.

Name:		bishbosh
Version:	0.1.2.0
Copyright:	(C) 2018 Dr. Alistair Ward
License:	GPL-3.0-or-later
License-file:	LICENSE
Author:		Dr. Alistair Ward
Stability:	stable
Synopsis:	Plays chess.
Build-type:	Simple
Description:	A chess-game which can be rendered in a terminal (emulator) in raw ASCII, or used as an engine by @xboard@.
Category:	Game
Tested-with:	GHC == 8.0, GHC == 8.2, GHC == 8.4, GHC == 8.6, GHC == 8.8, GHC == 8.10
Homepage:	https://functionalley.com/BishBosh/bishbosh.html
Maintainer:	mailto:bishbosh@functionalley.com
Bug-reports:	mailto:bishbosh@functionalley.com

-- Files which can be located by the application using 'Paths_bishbosh.datadir'.
Data-files:
    config/bishbosh.dtd
    config/bishbosh.rng
    config/CECP/*.xml
    config/Raw/*.xml
    config/*.xml
    pgn/*.pgn
    pgn/*.pgn.gz

-- Files which are packaged, but not required at runtime.
Extra-source-files:
    .ghci
    bishbosh.spec
    changelog.markdown
    copyright
    makefile
    man/man1/bishbosh.1
    man/man1/duel.1
    man/man5/bishbosh.5
    README.markdown

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

-- Enable using: 'runhaskell Setup configure -f llvm --verbose'.
flag llvm
    Description:	Whether the 'llvm' compiler-backend has been installed and is required for code-generation.
    Manual:		True
    Default:		False

-- Automatically disabled when the required package isn't available.
-- To force validation of the XML-configuration against the packaged DTD, manually disable using one of:
--	runhaskell Setup configure -f -hxtrelaxng --verbose;
--	stack build --flag 'bishbosh:-hxtrelaxng' --cabal-verbose;
flag hxtrelaxng
    Description:	Link with package "hxt-relaxng" when available, for more precise specification of the XML-configuration than a traditional DTD.
    Default:		True

-- Whether to use narrower numerical types than machine-defaults. CAVEAT: this option increases both the space allocated & the execution-time.
-- CAVEAT: incompatble with the flag 'precision'.
flag narrownumbers
    Description:	Use narrow numerical types.
    Manual:		True
    Default:		False

-- Whether, to wrap common types in 'newtype' for increased type-safety. CAVEAT: there's a ~10% performance-penalty.
flag newtypewrappers
    Description:	Wrap common types in newtype for increased type-safety.
    Manual:		True
    Default:		False

-- Automatically disabled when the required package isn't available.
-- To access Parsec's more precise error-messages, manually disable using one of:
--	runhaskell Setup configure -f -polyparse --verbose;
--	stack build --flag 'bishbosh:-polyparse' --cabal-verbose;
flag polyparse
    Description:	Link with package "polyparse" when available, rather than "parsec".
    Default:		True

-- Whether to use precise (rational) types rather than floating-point. CAVEAT: incompatible with 'narrownumbers'.
flag precision
    Description:	Use precise numerical types. CAVEAT: this is incompatible with either 'unboxedarrays' or 'narrownumbers'.
    Manual:		True
    Default:		False

-- Concurrency is used to implement Pondering, & parallelism is used when searching through archived games.
flag threaded
    Description:	Build for parallel runtime.
    Manual:		True
    Default:		True

-- Whether to use unboxed arrays where possible.
-- CAVEAT: incompatble with the flag 'precision'.
flag unboxedarrays
    Description:	Use unboxed arrays.
    Manual:		True
    Default:		False

-- Automatically disabled when the required package isn't available.
-- CAVEAT: on MS-Windows, it may be available but won't necessarily build, so specify "-f -unix --verbose" when configuring the package.
flag unix
    Description:	Link with package "unix" when available.
    Default:		True

common commonStanza
    Default-language:	Haskell2010

    Build-depends:
        base		== 4.*,
        containers	^>= 0.6.2,
        data-default	^>= 0.7.1,
        filepath

    GHC-options:	-Wall -Wredundant-constraints -fno-warn-tabs

common exeStanza
    Hs-source-dirs:	src-exe
    GHC-options:	-O2
    Autogen-modules:	Paths_bishbosh
    Other-modules:	Paths_bishbosh
    Build-depends:
        bishbosh,
        hxt	^>= 9.3.1

    if impl(ghc >= 7.0) && flag(llvm)
        GHC-options:	-fllvm

common profStanza
    if impl(ghc >= 7.4.1)
        GHC-prof-options:	-fprof-auto -fprof-cafs

        if flag(threaded)
            GHC-prof-options:	-fno-prof-count-entries
    else
        GHC-prof-options:	-auto-all -caf-all

common testStanza
    Hs-source-dirs:	src-test
    Build-depends:
        array		^>= 0.5.1.1,
        bishbosh,
        mtl		^>= 2.2.2,
        random,
        toolshed	^>= 0.18.0

    if flag(polyparse)
        Build-depends:	polyparse ^>= 1.13
        CPP-Options:	-DUSE_POLYPARSE='L'
    else
        Build-depends:	parsec ^>= 3.1.14.0

Library
    Import:		commonStanza, profStanza
    GHC-options:	-O2 -fno-warn-unused-top-binds -Wno-all-missed-specialisations
    Hs-source-dirs:	src-lib

    Exposed-modules:
        BishBosh.Attribute.ANSIColourCode
        BishBosh.Attribute.CaptureMoveSortAlgorithm
        BishBosh.Attribute.ColourScheme
        BishBosh.Attribute.Direction
        BishBosh.Attribute.LogicalColour
        BishBosh.Attribute.LogicalColourOfSquare
        BishBosh.Attribute.MoveType
        BishBosh.Attribute.PhysicalColour
        BishBosh.Attribute.Rank
        BishBosh.Cartesian.Abscissa
        BishBosh.Cartesian.Coordinates
        BishBosh.Cartesian.Ordinate
        BishBosh.Cartesian.Vector
        BishBosh.Component.Accountant
        BishBosh.Component.CastlingMove
        BishBosh.Component.EitherQualifiedMove
        BishBosh.Component.Move
        BishBosh.Component.Piece
        BishBosh.Component.PieceSquareByCoordinatesByRank
        BishBosh.Component.QualifiedMove
        BishBosh.Component.Turn
        BishBosh.Component.Zobrist
        BishBosh.ContextualNotation.PGN
        BishBosh.ContextualNotation.PGNComment
        BishBosh.ContextualNotation.PGNDatabase
        BishBosh.ContextualNotation.PositionHashQualifiedMoveTree
        BishBosh.ContextualNotation.QualifiedMoveForest
        BishBosh.ContextualNotation.StandardAlgebraic
        BishBosh.Data.Bool
        BishBosh.Data.Either
        BishBosh.Data.Exception
        BishBosh.Data.Foldable
        BishBosh.Data.Integral
        BishBosh.Data.List
        BishBosh.Data.Num
        BishBosh.Data.Ratio
        BishBosh.Data.RoseTree
        BishBosh.Evaluation.Fitness
        BishBosh.Evaluation.PositionHashQuantifiedGameTree
        BishBosh.Evaluation.QuantifiedGame
        BishBosh.Input.CategorisedCommandLineOptions
        BishBosh.Input.CECPFeatures
        BishBosh.Input.CECPOptions
        BishBosh.Input.CommandLineOption
        BishBosh.Input.CriteriaWeights
        BishBosh.Input.EvaluationOptions
        BishBosh.Input.IOOptions
        BishBosh.Input.NativeUIOptions
        BishBosh.Input.Options
        BishBosh.Input.PGNOptions
        BishBosh.Input.PieceSquareTable
        BishBosh.Input.RankValues
        BishBosh.Input.SearchOptions
        BishBosh.Input.StandardOpeningOptions
        BishBosh.Input.UIOptions
        BishBosh.Input.Verbosity
        BishBosh.Metric.CriterionValue
        BishBosh.Metric.CriterionWeight
        BishBosh.Metric.RankValue
        BishBosh.Metric.WeightedMeanAndCriterionValues
        BishBosh.Model.Game
        BishBosh.Model.GameTree
        BishBosh.Model.MoveFrequency
        BishBosh.Model.PositionHashTree
        BishBosh.Notation.Figurine
        BishBosh.Notation.ICCFNumeric
        BishBosh.Notation.MoveNotation
        BishBosh.Notation.Notation
        BishBosh.Notation.PureCoordinate
        BishBosh.Notation.Smith
        BishBosh.Property.Arboreal
        BishBosh.Property.Empty
        BishBosh.Property.ExtendedPositionDescription
        BishBosh.Property.FixedMembership
        BishBosh.Property.ForsythEdwards
        BishBosh.Property.Null
        BishBosh.Property.Opposable
        BishBosh.Property.Orientated
        BishBosh.Property.Reflectable
        BishBosh.Property.Rotatable
        BishBosh.Property.SelfValidating
        BishBosh.Property.ShowFloat
        BishBosh.Property.Switchable
        BishBosh.Rule.DrawReason
        BishBosh.Rule.GameTerminationReason
        BishBosh.Rule.Result
        BishBosh.Search.AlphaBeta
        BishBosh.Search.DynamicMoveData
        BishBosh.Search.EphemeralData
        BishBosh.Search.KillerMoves
        BishBosh.Search.Search
        BishBosh.Search.SearchState
        BishBosh.Search.Transpositions
        BishBosh.Search.TranspositionValue
        BishBosh.State.Board
        BishBosh.State.CastleableRooksByLogicalColour
        BishBosh.State.CoordinatesByRankByLogicalColour
        BishBosh.State.EnPassantAbscissa
        BishBosh.State.InstancesByPosition
        BishBosh.State.MaybePieceByCoordinates
        BishBosh.State.Position
        BishBosh.StateProperty.Censor
        BishBosh.StateProperty.Hashable
        BishBosh.StateProperty.Mutator
        BishBosh.StateProperty.Seeker
        BishBosh.State.TurnsByLogicalColour
        BishBosh.Text.AutoComplete
        BishBosh.Text.Case
        BishBosh.Text.Encoding
        BishBosh.Text.ShowColouredPrefix
        BishBosh.Text.ShowList
        BishBosh.Text.ShowPrefix
        BishBosh.Time.GameClock
        BishBosh.Time.StopWatch
        BishBosh.Type.Count
        BishBosh.Type.Crypto
        BishBosh.Type.Length
        BishBosh.Type.Mass
        BishBosh.UI.Command
        BishBosh.UI.PrintObject
        BishBosh.UI.ReportObject
        BishBosh.UI.SetObject

    Build-depends:
        array		^>= 0.5.1.1,
        deepseq		^>= 1.4.1,
        extra		^>= 1.7.4,
        factory		^>= 0.3.1,
        hxt		^>= 9.3.1,
        mtl		^>= 2.2.2,
        process		>= 1.6.4,
        random,
        time,
        toolshed	^>= 0.18.0

    if impl(ghc >= 7.0) && flag(llvm)
        GHC-options:	-fllvm

    if flag(precision)
        CPP-Options:	-DUSE_PRECISION
    else
        if flag(narrownumbers)
            CPP-Options:	-DUSE_NARROW_NUMBERS

        if flag(unboxedarrays)
            CPP-Options:	-DUSE_UNBOXED_ARRAYS

    if flag(newtypewrappers)
        CPP-Options:		-DUSE_NEWTYPE_WRAPPERS

    if flag(polyparse)
        Build-depends:		polyparse ^>= 1.13
        CPP-Options:		-DUSE_POLYPARSE='L'
        Exposed-modules:	BishBosh.Text.Poly
    else
        Build-depends:		parsec ^>= 3.1.14.0

    if flag(threaded)
        Build-depends:		parallel >= 3.0
        CPP-Options:		-DUSE_PARALLEL

Executable bishbosh
    Import:	commonStanza, exeStanza, profStanza
    Main-is:	Main.hs

    Other-modules:
        BishBosh.Concurrent.Pondering
        BishBosh.Play
        BishBosh.State.ApplicationTerminationReason
        BishBosh.State.PlayState
        BishBosh.UI.CECP
        BishBosh.UI.Raw

    if flag(unix)
        Other-modules:	BishBosh.Concurrent.SignalHandlers

    Build-depends:
        array		^>= 0.5.1.1,
        deepseq		^>= 1.4.1,
        directory,
        extra		^>= 1.7.4,
        factory		^>= 0.3.1,
        mtl		^>= 2.2.2,
        random,
        toolshed	^>= 0.18.0

    if impl(ghc >= 7.0)
        if flag(threaded)
            GHC-options:	-rtsopts "-with-rtsopts=-N -H100M"

        if impl(ghc >= 7.4.1)
            GHC-prof-options:	-rtsopts -with-rtsopts=-H100M

    if flag(hxtrelaxng)
        Build-depends:	hxt-relaxng ^>= 9.1.5
        CPP-Options:	-DUSE_HXTRELAXNG

    if flag(threaded)
        GHC-options:	-threaded

    if flag(unboxedarrays) && !flag(precision)
        CPP-Options:	-DUSE_UNBOXED_ARRAYS

-- N.B.: The Haskell package 'unix' may be available on MS-Windows, but building it will probably be laborious.
    if flag(unix)
        Other-modules:	BishBosh.Concurrent.SignalHandlers
        Build-depends:	unix ^>= 2.7.2

        CPP-Options:	-DUSE_UNIX

-- This application coordinates a duel between two independently configured instances of 'bishbosh'.
Executable duel
    Import:	commonStanza, exeStanza
    Main-is:	Duel.hs

    Other-modules:
        Duel.Data.Options
        Duel.IO.Logger
        Duel.Process.Handles
        Duel.Process.Intermediary

    Build-depends:	process >= 1.6.4

    CPP-Options:	-DMOVE_NOTATION='S'

-- Static unit-tests of the library.
Test-Suite hunit-tests
    Import:		commonStanza, testStanza
    Main-is:		HUnit.hs
    Type:		exitcode-stdio-1.0
    Autogen-modules:	Paths_bishbosh

    Other-modules:
        BishBosh.Test.HUnit.Attribute.Direction
        BishBosh.Test.HUnit.Attribute.LogicalColour
        BishBosh.Test.HUnit.Attribute.Rank
        BishBosh.Test.HUnit.Cartesian.Coordinates
        BishBosh.Test.HUnit.Cartesian.Vector
        BishBosh.Test.HUnit.Component.CastlingMove
        BishBosh.Test.HUnit.Component.Move
        BishBosh.Test.HUnit.Component.Piece
        BishBosh.Test.HUnit.Component.Zobrist
        BishBosh.Test.HUnit.ContextualNotation.PGN
        BishBosh.Test.HUnit.ContextualNotation.PositionHashQualifiedMoveTree
        BishBosh.Test.HUnit.ContextualNotation.StandardAlgebraic
        BishBosh.Test.HUnit.Evaluation.Fitness
        BishBosh.Test.HUnit.Input.Options
        BishBosh.Test.HUnit.Model.Game
        BishBosh.Test.HUnit.Model.GameTree
        BishBosh.Test.HUnit.Model.PositionHashTree
        BishBosh.Test.HUnit.Search.Search
        BishBosh.Test.HUnit.State.Board
        BishBosh.Test.HUnit.Text.AutoComplete
        BishBosh.Test.HUnit.Time.GameClock
        BishBosh.Test.HUnit.Time.StopWatch
        Paths_bishbosh

    Build-depends:
        HUnit,
        hxt	^>= 9.3.1

--    CPP-Options:	-DUSE_BRATKO_KOPEC

-- Random unit-tests of the library.
Test-Suite quickcheck-tests
    Import:	commonStanza, testStanza
    Main-is:	QuickCheck.hs
    Type:	exitcode-stdio-1.0

    Other-modules:
        BishBosh.Test.QuickCheck.Attribute.CaptureMoveSortAlgorithm
        BishBosh.Test.QuickCheck.Attribute.Direction
        BishBosh.Test.QuickCheck.Attribute.LogicalColour
        BishBosh.Test.QuickCheck.Attribute.MoveType
        BishBosh.Test.QuickCheck.Attribute.Rank
        BishBosh.Test.QuickCheck.Cartesian.Coordinates
        BishBosh.Test.QuickCheck.Cartesian.Vector
        BishBosh.Test.QuickCheck.Component.Move
        BishBosh.Test.QuickCheck.Component.Piece
        BishBosh.Test.QuickCheck.Component.QualifiedMove
        BishBosh.Test.QuickCheck.Component.Turn
        BishBosh.Test.QuickCheck.Component.Zobrist
        BishBosh.Test.QuickCheck.ContextualNotation.PGN
        BishBosh.Test.QuickCheck.ContextualNotation.PGNComment
        BishBosh.Test.QuickCheck.ContextualNotation.PositionHashQualifiedMoveTree
        BishBosh.Test.QuickCheck.ContextualNotation.QualifiedMoveForest
        BishBosh.Test.QuickCheck.ContextualNotation.StandardAlgebraic
        BishBosh.Test.QuickCheck.Data.Foldable
        BishBosh.Test.QuickCheck.Data.Integral
        BishBosh.Test.QuickCheck.Evaluation.PositionHashQuantifiedGameTree
        BishBosh.Test.QuickCheck.Input.CECPFeatures
        BishBosh.Test.QuickCheck.Input.CECPOptions
        BishBosh.Test.QuickCheck.Input.CriteriaWeights
        BishBosh.Test.QuickCheck.Input.EvaluationOptions
        BishBosh.Test.QuickCheck.Input.IOOptions
        BishBosh.Test.QuickCheck.Input.NativeUIOptions
        BishBosh.Test.QuickCheck.Input.Options
        BishBosh.Test.QuickCheck.Input.PGNOptions
        BishBosh.Test.QuickCheck.Input.PieceSquareTable
        BishBosh.Test.QuickCheck.Input.RankValues
        BishBosh.Test.QuickCheck.Input.SearchOptions
        BishBosh.Test.QuickCheck.Input.StandardOpeningOptions
        BishBosh.Test.QuickCheck.Input.UIOptions
        BishBosh.Test.QuickCheck.Input.Verbosity
        BishBosh.Test.QuickCheck.Metric.CriterionWeight
        BishBosh.Test.QuickCheck.Metric.RankValue
        BishBosh.Test.QuickCheck.Model.Game
        BishBosh.Test.QuickCheck.Model.GameTree
        BishBosh.Test.QuickCheck.Model.MoveFrequency
        BishBosh.Test.QuickCheck.Notation.Figurine
        BishBosh.Test.QuickCheck.Notation.ICCFNumeric
        BishBosh.Test.QuickCheck.Notation.MoveNotation
        BishBosh.Test.QuickCheck.Notation.PureCoordinate
        BishBosh.Test.QuickCheck.Notation.Smith
        BishBosh.Test.QuickCheck.Rule.DrawReason
        BishBosh.Test.QuickCheck.Rule.GameTerminationReason
        BishBosh.Test.QuickCheck.Rule.Result
        BishBosh.Test.QuickCheck.Search.KillerMoves
        BishBosh.Test.QuickCheck.Search.Search
        BishBosh.Test.QuickCheck.Search.SearchState
        BishBosh.Test.QuickCheck.State.Board
        BishBosh.Test.QuickCheck.State.CastleableRooksByLogicalColour
        BishBosh.Test.QuickCheck.State.InstancesByPosition
        BishBosh.Test.QuickCheck.State.Position
        BishBosh.Test.QuickCheck.StateProperty.Censor
        BishBosh.Test.QuickCheck.StateProperty.Hashable
        BishBosh.Test.QuickCheck.StateProperty.Seeker
        BishBosh.Test.QuickCheck.State.TurnsByLogicalColour
        BishBosh.Test.QuickCheck.Text.Encoding
        BishBosh.Test.QuickCheck.Time.StopWatch
        BishBosh.Test.QuickCheck.Type.Count
        BishBosh.Test.QuickCheck.Type.Length
        BishBosh.Test.QuickCheck.UI.Command
        BishBosh.Test.QuickCheck.UI.PrintObject
        BishBosh.Test.QuickCheck.UI.ReportObject
        BishBosh.Test.QuickCheck.UI.SetObject

    Build-depends:
        deepseq		^>= 1.4.1,
        extra		^>= 1.7.4,
        QuickCheck	^>= 2.13.2

    if flag(newtypewrappers)
        CPP-Options:	-DUSE_NEWTYPE_WRAPPERS

    if flag(precision)
        CPP-Options:	-DUSE_PRECISION
    elif flag(narrownumbers)
        CPP-Options:	-DUSE_NARROW_NUMBERS

    if flag(threaded)
        GHC-options:	-threaded