diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -1,2 +1,8 @@
 import Distribution.Simple
-main = defaultMain
+import Distribution.Simple.Program
+
+main :: IO ()
+main = defaultMainWithHooks simpleUserHooks
+  { hookedPrograms = [ simpleProgram "unzip"
+                     ]
+  }
diff --git a/changelog b/changelog
--- a/changelog
+++ b/changelog
@@ -1,3 +1,7 @@
+zip-archive 0.3.2.3
+
+  * Use custom-setup stanza and specify build-tools.  Closes #41.
+
 zip-archive 0.3.2.2
 
   * Use createSymbolicLink instead of createFileLink in tests. This allows
diff --git a/tests/test-zip-archive.hs b/tests/test-zip-archive.hs
--- a/tests/test-zip-archive.hs
+++ b/tests/test-zip-archive.hs
@@ -16,7 +16,7 @@
 #ifndef _WINDOWS
 import System.FilePath.Posix
 import System.Posix.Files
-import System.Process (callCommand)
+import System.Process (rawSystem)
 #else
 import System.FilePath.Windows
 #endif
@@ -208,7 +208,8 @@
   removeDirectoryRecursive testDir
   let zipFile = tmpDir </> "testUnzip.zip"
   BL.writeFile zipFile $ fromArchive archive
-  callCommand $ "unzip " ++ zipFile
+  ec <- rawSystem "unzip" [zipFile]
+  assertBool "unzip succeeds" $ ec == ExitSuccess
   let symlinkDir = testDir </> "link_to_directory"
       symlinkFile = testDir </> "link_to_file"
   isDirSymlink <- pathIsSymbolicLink symlinkDir
diff --git a/zip-archive.cabal b/zip-archive.cabal
--- a/zip-archive.cabal
+++ b/zip-archive.cabal
@@ -1,7 +1,7 @@
 Name:                zip-archive
-Version:             0.3.2.2
+Version:             0.3.2.3
 Cabal-Version:       >= 1.10
-Build-type:          Simple
+Build-type:          Custom
 Synopsis:            Library for creating and modifying zip archives.
 Description:         The zip-archive library provides functions for creating, modifying,
                      and extracting files from zip archives.
@@ -47,6 +47,10 @@
     cpp-options:     -D_WINDOWS
   else
     Build-depends:   unix
+  Build-tools:       unzip
+
+custom-setup
+  setup-depends: base, Cabal
 
 Executable zip-archive
   if flag(executable)
