{-# LANGUAGE OverloadedStrings #-} module Distribution.Nixpkgs.Haskell.FromCabal.Normalize ( normalize ) where import Control.Lens import qualified Data.Set as Set import Data.String import Distribution.Nixpkgs.Haskell import Distribution.Nixpkgs.Meta import Distribution.Package import Language.Nix hiding ( quote ) normalize :: Derivation -> Derivation normalize :: Derivation -> Derivation normalize Derivation drv = Derivation drv forall a b. a -> (a -> b) -> b & forall s t a b. ASetter s t a b -> (a -> b) -> s -> t over Lens' Derivation BuildInfo libraryDepends (PackageName -> BuildInfo -> BuildInfo normalizeBuildInfo (forall pkg. Package pkg => pkg -> PackageName packageName Derivation drv)) forall a b. a -> (a -> b) -> b & forall s t a b. ASetter s t a b -> (a -> b) -> s -> t over Lens' Derivation BuildInfo executableDepends (PackageName -> BuildInfo -> BuildInfo normalizeBuildInfo (forall pkg. Package pkg => pkg -> PackageName packageName Derivation drv)) forall a b. a -> (a -> b) -> b & forall s t a b. ASetter s t a b -> (a -> b) -> s -> t over Lens' Derivation BuildInfo testDepends (PackageName -> BuildInfo -> BuildInfo normalizeBuildInfo (forall pkg. Package pkg => pkg -> PackageName packageName Derivation drv)) forall a b. a -> (a -> b) -> b & forall s t a b. ASetter s t a b -> (a -> b) -> s -> t over Lens' Derivation BuildInfo benchmarkDepends (PackageName -> BuildInfo -> BuildInfo normalizeBuildInfo (forall pkg. Package pkg => pkg -> PackageName packageName Derivation drv)) forall a b. a -> (a -> b) -> b & forall s t a b. ASetter s t a b -> (a -> b) -> s -> t over Lens' Derivation Meta metaSection Meta -> Meta normalizeMeta forall a b. a -> (a -> b) -> b & Lens' Derivation Bool jailbreak forall s t a b. ASetter s t a b -> (a -> b) -> s -> t %~ (Bool -> Bool -> Bool && (forall pkg. Package pkg => pkg -> PackageName packageName Derivation drv forall a. Eq a => a -> a -> Bool /= PackageName "jailbreak-cabal")) normalizeBuildInfo :: PackageName -> BuildInfo -> BuildInfo normalizeBuildInfo :: PackageName -> BuildInfo -> BuildInfo normalizeBuildInfo PackageName pname BuildInfo bi = BuildInfo bi forall a b. a -> (a -> b) -> b & Lens' BuildInfo (Set Binding) haskell forall s t a b. ASetter s t a b -> (a -> b) -> s -> t %~ forall a. (a -> Bool) -> Set a -> Set a Set.filter (\Binding b -> forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a view Lens' Binding Identifier localName Binding b forall a. Eq a => a -> a -> Bool /= forall a. IsString a => String -> a fromString (PackageName -> String unPackageName PackageName pname)) forall a b. a -> (a -> b) -> b & Lens' BuildInfo (Set Binding) tool forall s t a b. ASetter s t a b -> (a -> b) -> s -> t %~ forall a. (a -> Bool) -> Set a -> Set a Set.filter (\Binding b -> forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a view Lens' Binding Identifier localName Binding b forall a. Eq a => a -> a -> Bool /= forall a. IsString a => String -> a fromString (PackageName -> String unPackageName PackageName pname)) normalizeMeta :: Meta -> Meta normalizeMeta :: Meta -> Meta normalizeMeta Meta meta = Meta meta forall a b. a -> (a -> b) -> b & Lens' Meta String description forall s t a b. ASetter s t a b -> (a -> b) -> s -> t %~ String -> String normalizeSynopsis forall a b. a -> (a -> b) -> b & Lens' Meta (Maybe (Set NixpkgsPlatform)) hydraPlatforms forall s t a b. ASetter s t a b -> (a -> b) -> s -> t %~ (if Meta metaforall s a. s -> Getting a s a -> a ^.Lens' Meta Bool broken then forall a b. a -> b -> a const (forall a. a -> Maybe a Just forall a. Set a Set.empty) else forall a. a -> a id) normalizeSynopsis :: String -> String normalizeSynopsis :: String -> String normalizeSynopsis String desc | forall (t :: * -> *) a. Foldable t => t a -> Bool null String desc = [] | forall a. [a] -> a last String desc forall a. Eq a => a -> a -> Bool == Char '.' Bool -> Bool -> Bool && forall (t :: * -> *) a. Foldable t => t a -> Int length (forall a. (a -> Bool) -> [a] -> [a] filter (Char '.'forall a. Eq a => a -> a -> Bool ==) String desc) forall a. Eq a => a -> a -> Bool == Int 1 = String -> String normalizeSynopsis (forall a. [a] -> [a] init String desc) | Bool otherwise = String -> String quote ([String] -> String unwords (String -> [String] words String desc)) quote :: String -> String quote :: String -> String quote (Char '\\':Char c:String cs) = Char '\\' forall a. a -> [a] -> [a] : Char c forall a. a -> [a] -> [a] : String -> String quote String cs quote (Char '"':String cs) = Char '\\' forall a. a -> [a] -> [a] : Char '"' forall a. a -> [a] -> [a] : String -> String quote String cs quote (Char c:String cs) = Char c forall a. a -> [a] -> [a] : String -> String quote String cs quote [] = []