-- 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