diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -5,24 +5,49 @@
 import Data.List (isPrefixOf, (\\), intercalate, stripPrefix)
 import Data.Map (Map)
 import qualified Data.Map as Map
+import Data.Char
 import Distribution.Simple
 import Distribution.Simple.Program
 import Distribution.Simple.Setup hiding (Flag)
 import Distribution.Simple.LocalBuildInfo
 import Distribution.PackageDescription
+import Distribution.Version
 import System.Environment
 import System.SetEnv
 import Distribution.System
 
-
-
 -- define these selectively in C files (where _not_ using HsFFI.h),
 -- rather than universally in the ccOptions, because HsFFI.h currently defines them
 -- without checking they're already defined and so causes warnings.
 uncheckedHsFFIDefines = ["__STDC_LIMIT_MACROS"]
 
-llvmProgram = simpleProgram "llvm-config"
+llvmVersion = Version [3,2] []
 
+llvmConfigNames = [
+  "llvm-config-" ++ (intercalate "." . map show . versionBranch $ llvmVersion),
+  "llvm-config"
+ ]
+
+llvmProgram = (simpleProgram "llvm-config") {
+  programFindLocation = 
+    let
+      findJustBy :: Monad m => (a -> m (Maybe b)) -> [a] -> m (Maybe b)
+      findJustBy f (x:xs) = do
+        x' <- f x
+        case x' of
+          Nothing -> findJustBy f xs
+          j -> return j
+    in 
+      \v -> findJustBy (findProgramLocation v) llvmConfigNames,
+  programFindVersion = 
+    let
+      stripSuffix suf str = let r = reverse in liftM r (stripPrefix (r suf) (r str))
+      svnToTag v = maybe v (++"-svn") (stripSuffix "svn" v)
+      trim = dropWhile isSpace . reverse . dropWhile isSpace . reverse
+    in
+      \v p -> findProgramVersion "--version" (svnToTag . trim) v p
+ }
+
 main = do
   let (ldLibraryPathVar, ldLibraryPathSep) = 
         case buildOS of
@@ -33,13 +58,11 @@
          setEnv ldLibraryPathVar (s ++ either (const "") (ldLibraryPathSep ++) v)
       getLLVMConfig configFlags = do
          let verbosity = fromFlag $ configVerbosity configFlags
-         -- preconfigure the configuration-generating program "llvm-config"
-         programDb <- configureProgram verbosity llvmProgram
-                      . userSpecifyPaths (configProgramPaths configFlags)
-                      . userSpecifyArgss (configProgramArgs configFlags)
-                      $ configPrograms configFlags
+         (program, _, _) <- requireProgramVersion verbosity llvmProgram
+                            (withinVersion llvmVersion)
+                            (configPrograms configFlags)
          let llvmConfig :: [String] -> IO String
-             llvmConfig = getDbProgramOutput verbosity llvmProgram programDb
+             llvmConfig = getProgramOutput verbosity program
          return llvmConfig
       addLLVMToLdLibraryPath configFlags = do
         llvmConfig <- getLLVMConfig configFlags
diff --git a/llvm-general.cabal b/llvm-general.cabal
--- a/llvm-general.cabal
+++ b/llvm-general.cabal
@@ -1,5 +1,5 @@
 name: llvm-general
-version: 3.2.0.7
+version: 3.2.0.8
 license: BSD3
 license-file: LICENSE
 author: Benjamin S.Scarlet <fgthb0@greynode.net>
@@ -33,7 +33,7 @@
   type: git
   location: git://github.com/bscarlet/llvm-general.git
   branch: llvm-3.2
-  tag: v3.2.0.7
+  tag: v3.2.0.8
 
 flag shared-llvm
   description: link against llvm shared rather than static library
