From f7d654cf658c8b0b04ec98e4c3bf216ae2976a26 Mon Sep 17 00:00:00 2001
From: Brent Yorgey <byorgey@cis.upenn.edu>
Date: Mon, 11 Feb 2013 22:00:44 -0500
Subject: [PATCH] implement a poor man's LANGUAGE pragma parser

---
 .../Distribution/Client/Init/Heuristics.hs    | 22 ++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

diff --git a/cabal-install/Distribution/Client/Init/Heuristics.hs b/cabal-install/Distribution/Client/Init/Heuristics.hs
index cc0e9f8ad9..1e2a4a14ab 100644
--- a/cabal-install/Distribution/Client/Init/Heuristics.hs
+++ b/cabal-install/Distribution/Client/Init/Heuristics.hs
@@ -124,9 +124,25 @@ findImportsAndExts projectRoot sf = do
       -- Haskell parser since cabal's dependencies must be kept at a
       -- minimum.
 
-      exts = undefined  --- XXX todo: parse LANGUAGE pragmas.
-           . lines
-           $ s
+      -- A poor man's LANGUAGE pragma parser.
+      exts = mapMaybe simpleParse
+           . concatMap getPragmas
+           . filter isLANGUAGEPragma
+           . map fst
+           . drop 1
+           . takeWhile (not . null . snd)
+           . iterate (takeBraces . snd)
+           $ ("",s)
+
+      takeBraces = break (== '}') . dropWhile (/= '{')
+
+      isLANGUAGEPragma = ("{-# LANGUAGE " `isPrefixOf`)
+
+      getPragmas = map trim . splitCommas . takeWhile (/= '#') . drop 13
+
+      splitCommas "" = []
+      splitCommas xs = x : splitCommas (drop 1 y)
+        where (x,y) = break (==',') xs
 
   return sf { imports    = modules
             , extensions = exts
-- 
GitLab