summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Setup.hs23
1 files changed, 16 insertions, 7 deletions
diff --git a/Setup.hs b/Setup.hs
index 039b32481..fb61988b8 100644
--- a/Setup.hs
+++ b/Setup.hs
@@ -76,7 +76,7 @@ rglCommands =
return ()
]
where
- optl ls args = fromMaybe ls $ getOptLangs args
+ optl ls args = getOptLangs ls args
--------------------------------------------------------
@@ -262,12 +262,21 @@ getOptMode args
| otherwise = AllTenses
-- list of languages overriding the definitions above
-getOptLangs args = case [ls | arg <- args, let (f,ls) = splitAt (length langs_prefix) arg, f==langs_prefix] of
- ls:_ -> return $ findLangs $ seps ls
- _ -> Nothing
- where
- seps = words . map (\c -> if c==',' then ' ' else c)
- findLangs ls = [lang | lang@(_,la) <- langs, elem la ls]
+getOptLangs defaultLangs args =
+ case [ls | arg <- args,
+ let (f,ls) = splitAt (length langs_prefix) arg,
+ f==langs_prefix] of
+ ('+':ls):_ -> foldr addLang defaultLangs (seps ls)
+ ('-':ls):_ -> foldr removeLang defaultLangs (seps ls)
+ ls:_ -> findLangs langs (seps ls)
+ _ -> defaultLangs
+ where
+ seps = words . map (\c -> if c==',' then ' ' else c)
+ findLangs langs ls = [lang | lang@(_,la) <- langs, la `elem` ls]
+ removeLang l ls = [lang | lang@(_,la) <- ls, la/=l]
+ addLang l ls = if null (findLangs ls [l])
+ then findLangs langs [l]++ls
+ else ls
getRGLBuildSubDir lbi mode =
case mode of