Name:                codeworld-api
Version:             0.5.0
Synopsis:            Graphics library for CodeWorld
License:             Apache
License-file:        LICENSE
Author:              The CodeWorld Authors
Maintainer:          Chris Smith <cdsmith@gmail.com>
Copyright:           (c) 2019, The CodeWorld Authors
Bug-reports:         https://github.com/google/codeworld/issues
Build-type:          Simple
Cabal-version:       >=1.8

Description:
  This module provides the drawing code for CodeWorld.  It is heavily inspired by
  Gloss, but modified for consistency and pedagogical reasons.
  .
  It comes with two backends. When compiled with GHCJS, it uses the JavaScript FFI to
  run on <http://code.world/>.  When compiled with GHC, it uses the blank-canvas
  package to provide a webpage consisting of just a panel locally. This way, the same
  program that runs on the CodeWorld server can also be run locally.

Extra-source-files:    data/README.md,
                       data/*.svg

Flag strictbuild
  Description:         Fail on warnings
  Default:             False
  Manual:              True

Library
  Exposed:             True
  Hs-source-dirs:      src
  Exposed-modules:     CodeWorld,
                       CodeWorld.App,
                       CodeWorld.App2,
                       CodeWorld.Image,
                       CodeWorld.Parameter,
                       CodeWorld.Reflex,
                       CodeWorld.Sketches
  Other-modules:       CodeWorld.CanvasM,
                       CodeWorld.CollaborationUI,
                       CodeWorld.Color,
                       CodeWorld.DrawState,
                       CodeWorld.Driver,
                       CodeWorld.EntryPoints,
                       CodeWorld.Event,
                       CodeWorld.Picture,
                       Util.EmbedAsUrl
  Build-depends:       aeson                >= 1.4.3 && < 1.5,
                       base                 >= 4.11  && < 5,
                       base64-bytestring    >= 1.0   && < 1.1,
                       bytestring           >= 0.9   && < 0.11,
                       cereal               >= 0.5.4 && < 0.6,
                       cereal-text          >= 0.1.0 && < 0.2,
                       containers           >= 0.5.7 && < 0.7,
                       deepseq              >= 1.4   && < 1.5,
                       dependent-sum        >= 0.4   && < 0.6.2,
                       ghc-prim             >= 0.3.1 && < 0.6,
                       hashable             >= 1.2.4 && < 1.3,
                       monad-loops          >= 0.3   && < 0.5,
                       mtl                  >= 2.2.1 && < 2.3,
                       random               >= 1.1   && < 1.2,
                       ref-tf               >= 0.4   && < 0.5,
                       reflex               >= 0.6.3 && < 0.7,
                       template-haskell     >= 2.8   && < 2.15,
                       text                 >= 1.2.2 && < 1.3,
                       time                 >= 1.8   && < 2.0,
                       witherable           >= 0.3   && < 0.4

  if impl(ghcjs)
    Js-sources:        jsbits/sim_fp.js
    Build-depends:     ghcjs-base,
                       ghcjs-prim,
                       codeworld-game-api,
                       codeworld-prediction,
                       ghcjs-dom             >= 0.8 && < 0.9,
                       transformers
  else
    Build-depends:     blank-canvas          >= 0.6 && < 0.8,
                       time                  >= 1.6.0 && < 1.9

  Ghc-options:         -O2 -Wall
  if flag(strictbuild)
    Ghc-options:       -Werror

Test-suite unit-tests
  Type:                exitcode-stdio-1.0
  Main-is:             Main.hs
  Hs-source-dirs:      test,
                       src
  Other-modules:       CodeWorld,
                       CodeWorld.CanvasM,
                       CodeWorld.CollaborationUI,
                       CodeWorld.Color,
                       CodeWorld.DrawState,
                       CodeWorld.Driver,
                       CodeWorld.EntryPoints,
                       CodeWorld.Event,
                       CodeWorld.Picture,
                       Util.EmbedAsUrl

  -- Test libraries
  Build-depends:       HUnit,
                       test-framework,
                       test-framework-hunit

  -- Copy of the build dependencies above
  Build-depends:       aeson                >= 1.4.3 && < 1.5,
                       base                 >= 4.11  && < 5,
                       base64-bytestring    >= 1.0   && < 1.1,
                       bytestring           >= 0.9   && < 0.11,
                       cereal               >= 0.5.4 && < 0.6,
                       cereal-text          >= 0.1.0 && < 0.2,
                       containers           >= 0.5.7 && < 0.7,
                       deepseq              >= 1.4   && < 1.5,
                       dependent-sum        >= 0.4   && < 0.6.2,
                       ghc-prim             >= 0.3.1 && < 0.6,
                       hashable             >= 1.2.4 && < 1.3,
                       monad-loops          >= 0.3   && < 0.5,
                       mtl                  >= 2.2.1 && < 2.3,
                       random               >= 1.1   && < 1.2,
                       ref-tf               >= 0.4   && < 0.5,
                       reflex               >= 0.6.3 && < 0.7,
                       template-haskell     >= 2.8   && < 2.15,
                       text                 >= 1.2.2 && < 1.3,
                       time                 >= 1.8   && < 2.0,
                       witherable           >= 0.3   && < 0.4

  if impl(ghcjs)
    Js-sources:        jsbits/sim_fp.js
    Build-depends:     ghcjs-base,
                       ghcjs-prim,
                       codeworld-game-api,
                       codeworld-prediction,
                       ghcjs-dom             >= 0.8 && < 0.9,
                       transformers
  else
    Build-depends:     blank-canvas          >= 0.6 && < 0.8,
                       time                  >= 1.6.0 && < 1.9

  Ghc-options:         -O2
  Cpp-options:         -DCODEWORLD_UNIT_TEST
