diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,9 +1,17 @@
-<!-- -*- text -*- prevent Emacs from formatting ChangeLog incorrectly -->
+<!-- -*- text -*- (prevent Emacs from formatting ChangeLog incorrectly) -->
+
 # Revision history for mercury-api
 
+## 0.1.0.2  -- 2019-01-09
+
+* Avoid including `xlocale.h` on Linux.  (Fixes [#1][1] and [#2][2].)
+
+[1]: https://github.com/ppelleti/hs-mercury-api/issues/1
+[2]: https://github.com/ppelleti/hs-mercury-api/issues/2
+
 ## 0.1.0.1  -- 2017-06-11
 
-* Fixed a crash that could occur when peeking the mask of a TagFilter.  (I was rading the length as a 32-bit number instead of a 16-bit number, which could cause the length to be impossibly long.)
+* Fixed a crash that could occur when peeking the mask of a TagFilter.  (I was reading the length as a 32-bit number instead of a 16-bit number, which could cause the length to be impossibly long.)
 
 ## 0.1.0.0  -- 2017-06-05
 
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -5,6 +5,8 @@
 Windows:
 [![Build status](https://ci.appveyor.com/api/projects/status/aywuy9y05ow8wja2/branch/master?svg=true)](https://ci.appveyor.com/project/ppelleti/hs-mercury-api/branch/master)
 
+## Description
+
 This package is a Haskell binding to the [Mercury API][5] C API for
 [ThingMagic][6] RFID readers.  It is especially geared toward
 the [SparkFun Simultaneous RFID Reader][1], which uses ThingMagic's
@@ -67,6 +69,80 @@
 
 Additional examples are available in the `examples` directory.
 
+## How to build
+
+This package is mostly of interest to Haskell programmers, and if
+you're a Haskell programmer, you already know how to build it with
+`stack` or `cabal`.
+
+However, some of the utilities like `tmr-firmware` might be of
+interest to non-Haskellers, so here is how to build them if you don't
+know anything about Haskell:
+
+* Install [stack][11].
+
+* Clone this repository.
+
+* Run `stack --install-ghc install` at the top level of the repository.
+
+* Add `~/.local/bin` to your `$PATH`.
+
+Now the following utilities will be available in your `$PATH`:
+
+```
+tmr-firmware - write a new firmware image to reader
+
+Usage: tmr-firmware [-u|--uri URI] [-t|--transport-listener] [FILENAME]
+  If run without firmware file, just print current firmware version. Firmware
+  file can be downloaded from:
+  http://www.thingmagic.com/index.php/download-nano-firmware
+
+Available options:
+  -h,--help                Show this help text
+  -u,--uri URI             Reader to connect to (default tmr:///dev/ttyUSB0)
+  -t,--transport-listener  Print bytes sent on serial port
+
+
+tmr-params - print parameters
+
+Usage: tmr-params [-u|--uri URI] [-t|--transport-listener]
+
+Available options:
+  -h,--help                Show this help text
+  -u,--uri URI             Reader to connect to (default tmr:///dev/ttyUSB0)
+  -t,--transport-listener  Print bytes sent on serial port
+
+
+tmr-read - read tags
+
+Usage: tmr-read [-u|--uri URI] [-r|--region REGION] [-p|--power CENTI-DBM]
+                [-t|--transport-listener] [-l|--long]
+
+Available options:
+  -h,--help                Show this help text
+  -u,--uri URI             Reader to connect to (default tmr:///dev/ttyUSB0)
+  -r,--region REGION       Regulatory region (default na2)
+  -p,--power CENTI-DBM     Power level (0-2700, default 2300)
+  -t,--transport-listener  Print bytes sent on serial port
+  -l,--long                Print lots of information per tag
+
+
+tmr-write - write a string to user data of tag
+
+Usage: tmr-write [-u|--uri URI] [-r|--region REGION] [-p|--power CENTI-DBM]
+                 [-t|--transport-listener] [-R|--rewrite] STRING
+
+Available options:
+  -h,--help                Show this help text
+  -u,--uri URI             Reader to connect to (default tmr:///dev/ttyUSB0)
+  -r,--region REGION       Regulatory region (default na2)
+  -p,--power CENTI-DBM     Power level (0-2700, default 2300)
+  -t,--transport-listener  Print bytes sent on serial port
+  -R,--rewrite             Write to a tag even if written before
+```
+
+## Resources
+
 Additional resources:
 
 * [RFID Basics][8]
@@ -88,3 +164,4 @@
 [8]: https://learn.sparkfun.com/tutorials/rfid-basics
 [9]: https://github.com/ppelleti/hs-mercury-api/blob/master/UPGRADING.md
 [10]: https://github.com/gotthardp/python-mercuryapi
+[11]: https://docs.haskellstack.org/en/stable/README/#how-to-install
diff --git a/cbits/glue/glue.c b/cbits/glue/glue.c
--- a/cbits/glue/glue.c
+++ b/cbits/glue/glue.c
@@ -5,8 +5,10 @@
 #include <stdlib.h>
 #include <string.h>
 #include <time.h>
-#ifndef _WIN32
+#if defined(__APPLE__)
 #include <xlocale.h>
+#elif !defined(_WIN32)
+#include <locale.h>
 #endif
 #include <HsFFI.h>
 
diff --git a/mercury-api.cabal b/mercury-api.cabal
--- a/mercury-api.cabal
+++ b/mercury-api.cabal
@@ -10,7 +10,7 @@
 -- PVP summary:      +-+------- breaking API changes
 --                   | | +----- non-breaking API additions
 --                   | | | +--- code changes with no API change
-version:             0.1.0.1
+version:             0.1.0.2
 
 -- A short (one-line) description of the package.
 synopsis:            Haskell binding to Mercury API for ThingMagic RFID readers
@@ -57,6 +57,7 @@
                    , README.md
                    , UPGRADING.md
                    , examples/LICENSE-FOR-EXAMPLES
+                   , stack.yaml
                    , tests/*.result
                    , tests/*.transport
                    , cbits/api/*.h
@@ -133,7 +134,7 @@
 
   -- Other library packages from which modules are imported.
   build-depends:       base >= 4.6 && < 5
-                     , ansi-terminal >= 0.6.2.3 && < 0.7
+                     , ansi-terminal >= 0.6.2.3 && < 0.9
                      , bytestring >= 0.10.4 && < 0.11
                      , clock >= 0.7.2 && < 0.8
                      , hashable >= 1.2.4 && < 1.3
@@ -154,7 +155,7 @@
   main-is:             tmr-params.hs
   other-modules:       ExampleUtil
   build-depends:       base >= 4.6 && < 5
-                     , ansi-terminal >= 0.6.2.3 && < 0.7
+                     , ansi-terminal >= 0.6.2.3 && < 0.9
                      , bytestring >= 0.10.4 && < 0.11
                      , mercury-api
                      , optparse-applicative >= 0.13 && < 0.15
@@ -181,7 +182,7 @@
   main-is:             tmr-read.hs
   other-modules:       ExampleUtil
   build-depends:       base >= 4.6 && < 5
-                     , ansi-terminal >= 0.6.2.3 && < 0.7
+                     , ansi-terminal >= 0.6.2.3 && < 0.9
                      , bytestring >= 0.10.4 && < 0.11
                      , mercury-api
                      , optparse-applicative >= 0.13 && < 0.15
@@ -195,7 +196,7 @@
   main-is:             tmr-write.hs
   other-modules:       ExampleUtil
   build-depends:       base >= 4.6 && < 5
-                     , ansi-terminal >= 0.6.2.3 && < 0.7
+                     , ansi-terminal >= 0.6.2.3 && < 0.9
                      , bytestring >= 0.10.4 && < 0.11
                      , mercury-api
                      , optparse-applicative >= 0.13 && < 0.15
diff --git a/stack.yaml b/stack.yaml
new file mode 100644
--- /dev/null
+++ b/stack.yaml
@@ -0,0 +1,35 @@
+# This file was automatically generated by stack init
+# For more information, see: http://docs.haskellstack.org/en/stable/yaml_configuration/
+
+# Specifies the GHC version and set of packages available (e.g., lts-3.5, nightly-2015-09-21, ghc-7.10.2)
+resolver: lts-9.1
+
+# Local packages, usually specified by relative directory name
+packages:
+- '.'
+# Packages to be pulled from upstream that are not in the resolver (e.g., acme-missiles-0.3)
+extra-deps: []
+
+# Override default flag values for local packages and extra-deps
+flags: {}
+
+# Extra package databases containing global packages
+extra-package-dbs: []
+
+# Control whether we use the GHC we find on the path
+# system-ghc: true
+
+# Require a specific version of stack, using version ranges
+# require-stack-version: -any # Default
+# require-stack-version: >= 1.0.0
+
+# Override the architecture used by stack, especially useful on Windows
+# arch: i386
+# arch: x86_64
+
+# Extra directories used by stack for building
+# extra-include-dirs: [/path/to/dir]
+# extra-lib-dirs: [/path/to/dir]
+
+# Allow a newer minor version of GHC than the snapshot specifies
+# compiler-check: newer-minor
