How to use stack with nix to build wxHaskell project?

536 views Asked by At

I'm trying to set up a build environment for wxHaskell using Nix and Stack.

I've installed wxWidgets-3.0.2 through nix. This is the relevant portion from by .cabal file

executable hellowx-exe
hs-source-dirs:     app
main-is:            Main.hs
ghc-options:        -threaded -rtsopts -with-rtsopts=-N
build-depends:      base
                  , hellowx
                  , wx
                  , wxc
                  , wxcore
                  , wxdirect

and the stack.yaml file

resolver: lts-5.0
extra-deps: 
- wx-0.92.2.0
- wxc-0.92.2.0
- wxcore-0.92.2.0
- wxdirect-0.92.2.0

I tried adding

nix:
  enable: true
  packages: [wxwidgets]

but that wasn't the right way apparently.

So I got rid of the nix part in the .yaml file and tried the command $ stack --nix build which resulted in failure. The log file said

[1 of 1] Compiling Main             ( /run/user/1000/stack8847/wxc-0.92.2.0/Setup.hs, /run/user/1000/stack8847/wxc-0.92.2.0/.stack-work/dist/x86_64-linux-nix/Cabal-1.22.5.0/setup/Main.o )
Linking /run/user/1000/stack8847/wxc-0.92.2.0/.stack-work/dist/x86_64-linux-nix/Cabal-1.22.5.0/setup/setup ...
Error: wx-config not found, please install wx-config before installing wxc

However I do have wx-config and wxwidgets installed through nix. The build process can't find it for some reason. What can I do to set up this build environment? Is there a way to direct the build process to look in the directory containing wx-config? I can't figure out why it can't find it. Its in the PATH.

1

There are 1 answers

1
Houyi Ishkander On

Ok, I figured it out. I was adding the wrong "attribute name". Here is the correct stack.yaml file

# at this point in time nix supports lts-5.0
resolver: lts-5.0

packages:
-'.'

extra-deps: 
- wx-0.92.2.0
- wxc-0.92.2.0
- wxcore-0.92.2.0
- wxdirect-0.92.2.0

# wxwidgets-3.0.2 has the attribute name wxGTK30
# you also need zlib, mesa_noglu and x11

nix:
  enable: true
  packages: [zlib, wxGTK30, mesa_noglu, x11]

That seems to build everything properly, and I was able to build a minimal window from here (minimal.hs)