Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I get text-icu working on Windows?

I was able to cabal install text-icu without errors. (I used --extra-lib-dirs and --extra-include-dirs to point to the lib and include directories in the binary distribution of icu4c.)

I was also able to build the following simple program that uses text-icu, by doing ghc --make icu.hs:

-- icu.hs import Data.Text.ICU main = print $ Locale "tr-TR" 

No errors or warnings in either of these steps. But when I try to run the compiled program, icu.exe, I get no output at all. I expected to get a line with Locale "tr-TR", but instead I get nothing -- not even an error or warning. This remains the case if I try

main = do   print $ Locale "tr-TR"   print "Done" 

so using the text-icu stuff seems to cause the program to silently fail. echo $? yields False.

Does anyone have text-icu up and running on Windows? Can you tell me what I'm doing wrong?

like image 483
John MacFarlane Avatar asked Apr 21 '13 03:04

John MacFarlane


2 Answers

Stack includes a copy of msys2 on Windows, which contains the pacman package manager, so we can run:

stack exec -- pacman -Sy mingw64/mingw-w64-x86_64-icu stack build text-icu 
like image 128
Michael Snoyman Avatar answered Oct 07 '22 08:10

Michael Snoyman


I managed it by doing:

  • Download the binaries from http://site.icu-project.org/download/56#TOC-ICU4C-Download, specifically http://download.icu-project.org/files/icu4c/56.1/icu4c-56_1-Win32-msvc10.zip.
  • Extract the contents of icu/bin into the directory C:\bin which is on my %PATH%. Extract the contents of icu into the directory C:\bin\icu.
  • Use Stack to run stack ghci text-icu --extra-lib-dirs=c:\bin --extra-include-dirs=c:\bin\icu\include.
  • In GHCi, run import Data.Text.ICU.Normalize, then :set -XOverloadedStrings, then normalize None "test".
  • For each dll that is reported as cannot be found, e.g. icuuc.dll, take the C:\bin\icuuc56.dll and make a copy at C:\bin\icuuc.dll. For me, there were three relevant dlls.

After all that, I can normalise a string in ghci.

like image 22
Neil Mitchell Avatar answered Oct 07 '22 09:10

Neil Mitchell