packages feed

h-raylib-5.1.2.0: h-raylib.cabal

cabal-version:      2.4
name:               h-raylib
version:            5.1.2.0
synopsis:           Raylib bindings for Haskell
category:           graphics
description:
  This library contains Haskell bindings to the Raylib library. It supports Windows, Mac, Linux, and BSD.

bug-reports:        https://github.com/Anut-py/h-raylib/issues
license:            Apache-2.0
license-file:       LICENSE
author:             Anut
maintainer:         Anut
extra-doc-files:
  CHANGELOG.md
  CONTRIBUTING.md
  DOCUMENTATION.md
  README.md

extra-source-files:
  examples/**/*.frag
  examples/**/*.mtl
  examples/**/*.obj
  examples/**/*.png
  examples/**/*.ttf
  examples/**/*.txt
  examples/**/*.vert
  examples/**/*.xm
  lib/**/*.c
  lib/**/*.h
  lib/**/*.m
  raygui/examples/styles/*.h
  raygui/src/*.h
  raylib/**/*.c
  raylib/**/*.h
  raylib/**/*.m
  flake.nix
  default.nix

source-repository head
  type:     git
  location: git://github.com/Anut-py/h-raylib.git

flag detect-platform
  description:
    Detect platform and automatically add platform-specific configuration

  default:     True
  manual:      True

flag platform-windows
  description: Build for Windows
  default:     False
  manual:      True

flag platform-mac
  description: Build for macOS/OSX
  default:     False
  manual:      True

flag platform-linux
  description: Build for Linux
  default:     False
  manual:      True

flag platform-bsd
  description: Build for FreeBSD, OpenBSD, or NetBSD
  default:     False
  manual:      True

flag platform-nixos
  description: Build for Nix (use external GLFW)
  default:     False
  manual:      True

flag platform-web
  description: Build for web
  default:     False
  manual:      True

flag mingw-cross
  description:
    Cross-compiling for mingw (used in combination with Windows)

  default:     False
  manual:      True

flag examples
  description: Build the example projects
  default:     False
  manual:      True

flag ghci
  description: Used when running the program in GHCi
  default:     False
  manual:      True

common example-options
  default-language: Haskell2010

  if !flag(examples)
    buildable: False

  else
    build-depends:
      , base
      , h-raylib

    other-extensions:
      BangPatterns
      TemplateHaskell

    if flag(platform-web)
      ghc-options:
        -no-hs-main -optl-mexec-model=reactor
        "-optl-Wl,--export=hs_init,--import-memory,--shared-memory,--max-memory=67108864,--no-check-features"
        "-optl-Wl,--export=startup,--export=mainLoop,--export=shouldClose,--export=teardown"

-- core
executable basic-window
  import:         example-options
  hs-source-dirs: examples/basic-window/src
  main-is:        Main.hs

executable basic-callbacks
  import:         example-options
  hs-source-dirs: examples/basic-callbacks/src
  main-is:        Main.hs

executable basic-automation-events
  import:         example-options
  hs-source-dirs: examples/basic-automation-events/src
  main-is:        Main.hs

executable first-person-camera
  import:         example-options
  hs-source-dirs: examples/first-person-camera/src
  main-is:        Main.hs

executable camera-ray-collision
  import:         example-options
  hs-source-dirs: examples/camera-ray-collision/src
  main-is:        Main.hs

-- textures
executable basic-images
  import:         example-options
  hs-source-dirs: examples/basic-images/src
  main-is:        Main.hs

executable bunnymark
  import:         example-options
  hs-source-dirs: examples/bunnymark/src
  main-is:        Main.hs

-- text
executable custom-font-text
  import:         example-options
  hs-source-dirs: examples/custom-font-text/src
  main-is:        Main.hs

-- models
executable basic-models
  import:         example-options
  hs-source-dirs: examples/basic-models/src
  main-is:        Main.hs

-- shaders
executable basic-shaders
  import:         example-options
  hs-source-dirs: examples/basic-shaders/src
  main-is:        Main.hs

executable postprocessing-effects
  import:         example-options
  hs-source-dirs: examples/postprocessing-effects/src
  main-is:        Main.hs

-- audio
executable basic-audio
  import:         example-options
  hs-source-dirs: examples/basic-audio/src
  main-is:        Main.hs

-- rlgl
executable basic-rlgl
  import:         example-options
  hs-source-dirs: examples/basic-rlgl/src
  main-is:        Main.hs

-- raygui
executable raygui-suite
  import:         example-options
  hs-source-dirs: examples/raygui-suite/src
  main-is:        Main.hs

library
  exposed-modules:
    Raylib.Core
    Raylib.Core.Audio
    Raylib.Core.Camera
    Raylib.Core.Models
    Raylib.Core.Shapes
    Raylib.Core.Text
    Raylib.Core.Textures
    Raylib.Types
    Raylib.Types.Core
    Raylib.Types.Core.Audio
    Raylib.Types.Core.Camera
    Raylib.Types.Core.Models
    Raylib.Types.Core.Text
    Raylib.Types.Core.Textures
    Raylib.Types.Util.GUI
    Raylib.Types.Util.RLGL
    Raylib.Util
    Raylib.Util.Camera
    Raylib.Util.Colors
    Raylib.Util.GUI
    Raylib.Util.GUI.Styles
    Raylib.Util.Lenses
    Raylib.Util.Math
    Raylib.Util.RLGL

  other-modules:
    Raylib.Internal
    Raylib.Internal.Foreign
    Raylib.Internal.TH
    Raylib.Internal.Web.Native
    Raylib.Internal.Web.Processable

  build-depends:
    , base              >=4.0      && <4.20
    , bytestring        >=0.11.0   && <0.13
    , containers        >=0.6.0    && <0.7.0
    , exceptions        >=0.10.4   && <0.10.8
    , lens              >=4.0      && <5.2.4
    , template-haskell  >=2.16.0.0 && <2.22.0.0
    , text              >=2.0      && <2.2

  hs-source-dirs:   src
  default-language: Haskell2010
  other-extensions:
    CPP
    ConstrainedClassMethods
    DeriveAnyClass
    FlexibleInstances
    ForeignFunctionInterface
    ScopedTypeVariables
    TemplateHaskell
    TemplateHaskellQuotes

  if (flag(platform-windows) || (flag(detect-platform) && os(windows)))
    if flag(mingw-cross)
      extra-libraries:
        opengl32
        gdi32
        winmm
        shell32
        gcc

      if impl(ghc <9.4.1)
        extra-libraries: gcc_eh

    else
      extra-libraries:
        opengl32
        gdi32
        winmm
        shell32

      if impl(ghc <9.4.1)
        extra-libraries: gcc_eh

  elif (flag(platform-linux) || (flag(detect-platform) && os(linux)))
    extra-libraries:
      GL
      c
      m
      pthread
      dl
      rt
      X11
      Xinerama
      Xcursor
      Xrandr
      Xi
      Xext

    cc-options:      -Wno-implicit-function-declaration -Wno-unused-result -D_GLFW_X11

  elif (flag(platform-mac) || (flag(detect-platform) && os(osx)))
    frameworks: OpenGL Cocoa IOKit CoreVideo CoreAudio CoreFoundation

  elif (flag(platform-bsd) || (flag(detect-platform) && ((os(freebsd) || os(netbsd)) || os(openbsd))))
    extra-libraries:
      GL
      pthread

  else

  -- Unsupported OS, do nothing. If you can get it working on an
  -- OS that isn't listed here, please add it here.
  if flag(platform-nixos)
    extra-libraries: raylib

  include-dirs:     lib

  if flag(platform-web)
    cpp-options: -DWEB_FFI
    c-sources:   lib/web.c

  else
    cc-options: -DPLATFORM_DESKTOP
    c-sources:
      lib/rgui_bindings.c
      lib/rl_bindings.c
      lib/rl_internal.c
      lib/rlgl_bindings.c

    if !flag(platform-nixos)
      include-dirs:
        raylib/src raylib/src/external/glfw/src
        raylib/src/external/glfw/include raygui/src raygui/examples/styles

      c-sources:
        raylib/src/raudio.c
        raylib/src/rcore.c
        raylib/src/rmodels.c
        raylib/src/rshapes.c
        raylib/src/rtext.c
        raylib/src/rtextures.c
        raylib/src/utils.c

      if (flag(platform-mac) || (flag(detect-platform) && os(osx)))
        -- Use rgflw.m instead of .c on Mac to force objective-c
        c-sources: lib/rglfw.m

      elif (flag(ghci) && (flag(platform-windows) || (flag(detect-platform) && os(windows))))
        c-sources: lib/glfw_patch/rglfw_patch.c

      else
        c-sources: raylib/src/rglfw.c

  if flag(ghci)
    cpp-options: -DGHCI