src/Development/Shake/Language/C/Language.hs
-- Copyright 2012-2014 Samplecount S.L.
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
{-# LANGUAGE TemplateHaskell #-}
module Development.Shake.Language.C.Language (
Language(..)
, defaultLanguageMap
, languageOf
) where
import Development.Shake.FilePath (takeExtension)
-- | Source language.
--
-- Currently something derived from @C@.
data Language =
C -- ^ Plain old C
| Cpp -- ^ C++
| ObjC -- ^ Objective-C
| ObjCpp -- ^ Objective-C with C++ (Apple extension)
deriving (Enum, Eq, Show)
-- | Default mapping from file extension to source language.
defaultLanguageMap :: [(String, Language)]
defaultLanguageMap = concatMap f [
(C, [".c"])
, (Cpp, [".cc", ".CC", ".cpp", ".CPP", ".C", ".cxx", ".CXX"])
, (ObjC, [".m"])
, (ObjCpp, [".mm", ".M"])
]
where f (lang, exts) = map (\ext -> (ext, lang)) exts
-- | Determine the source language of a file based on its extension.
languageOf :: FilePath -> Maybe Language
languageOf = flip lookup defaultLanguageMap . takeExtension