packages feed

autonix-deps-kf5 0.2.0.1 → 0.3.0.0

raw patch · 3 files changed

+51/−109 lines, 3 filesdep +textdep ~autonix-deps

Dependencies added: text

Dependency ranges changed: autonix-deps

Files

autonix-deps-kf5.cabal view
@@ -1,5 +1,5 @@ name:                autonix-deps-kf5-version:             0.2.0.1+version:             0.3.0.0 synopsis:            Generate dependencies for KDE 5 Nix expressions license:             BSD3 license-file:        LICENSE@@ -23,7 +23,7 @@   exposed-modules:     Autonix.KF5   build-depends:-      autonix-deps ==0.2.*+      autonix-deps ==0.3.*     , base >=4.7 && <5     , bytestring >=0.10     , conduit ==1.2.*@@ -31,6 +31,7 @@     , filepath >=1.3     , lens >=4.0     , mtl >=2.1+    , text >= 1.2     , transformers >=0.3   hs-source-dirs: src   default-language: Haskell2010
kf5-deps.hs view
@@ -2,19 +2,8 @@  module Main where -import Control.Monad.State-import Data.Monoid--import Autonix.Analyze-import Autonix.Args-import Autonix.Deps-import Autonix.Generate+import Autonix import Autonix.KF5  main :: IO ()-main = withArgs $ \manifest -> flip evalStateT mempty $ do-    rename "ECM" "extra-cmake-modules"-    analyzePackages (analyzeFiles kf5Analyzers) manifest-    kf5PostAnalyze-    get >>= writeDeps-    get >>= writeRenames+main = autonix kf5Analyzers
src/Autonix/KF5.hs view
@@ -7,53 +7,35 @@ import Control.Lens import Control.Monad.IO.Class import Control.Monad.State+import Data.ByteString (ByteString) import qualified Data.ByteString.Char8 as B import Data.Conduit import Data.List (isPrefixOf)-import qualified Data.Map as M-import Data.Maybe (fromMaybe)+import Data.Map (Map) import Data.Monoid import qualified Data.Set as S+import Data.Text (Text)+import qualified Data.Text as T+import qualified Data.Text.Encoding as T import System.FilePath (takeBaseName, takeExtensions, takeFileName)  import Autonix.Analyze import Autonix.CMake-import Autonix.Deps+import Autonix.Package (Package)+import qualified Autonix.Package as Package import Autonix.Regex+import Autonix.Renames  printFilePaths :: MonadIO m => Analyzer m-printFilePaths _ = awaitForever $ \(path, _) -> liftIO $ putStrLn path--renameKF5Pkgs :: (MonadIO m, MonadState Deps m) => Analyzer m-renameKF5Pkgs pkg = awaitForever $ \(path, contents) ->-    when (takeFileName path == "metainfo.yaml") $ do-        let regex = makeRegex "cmakename:[[:space:]]*([[:alnum:]]*)"-            matches = match regex contents-        case matches of-            ((_ : cmakeName : _) : _) -> rename cmakeName pkg-            _ -> return ()--propagateKF5Deps :: (MonadIO m, MonadState Deps m) => Analyzer m-propagateKF5Deps newPkg = awaitForever $ \(path, contents) ->-    when (".cmake" `isPrefixOf` takeExtensions path) $ do-        let base = takeBaseName $ takeBaseName path-            regex = makeRegex-                    "find_dependency[[:space:]]*\\([[:space:]]*\-                    \([^[:space:],$\\)]+)"-        case splitAt (length base - 6) base of-            (oldPkg, "Config") -> do-                let new = concatMap (take 1 . drop 1) $ match regex contents-                rename (B.pack oldPkg) newPkg-                at newPkg %=-                    Just-                    . (propagatedBuildInputs %~ S.union (S.fromList new))-                    . fromMaybe mempty-            _ -> return ()+printFilePaths _ _ = awaitForever $ \(path, _) -> liftIO $ putStrLn path -findKF5Components :: (MonadIO m, MonadState Deps m) => Analyzer m-findKF5Components pkg = awaitForever $ \(path, contents) ->+findKF5Components :: (MonadIO m, MonadState (Map Text Package, Renames) m) => Analyzer m+findKF5Components pkg _ = awaitForever $ \(path, contents) ->     when ("CMakeLists.txt" == takeFileName path) $ do-        let new = filter (not . cmakeReserved)+        let new = S.fromList+                  $ map ("kf5" <>)+                  $ map (T.toLower . T.decodeUtf8)+                  $ filter (not . cmakeReserved)                   $ filter (not . B.null)                   $ concatMap B.words                   $ concatMap (take 1 . drop 1)@@ -61,12 +43,34 @@             regex = makeRegex                     "find_package[[:space:]]*\\([[:space:]]*KF5\                     \[[:space:]]*([#\\.${}_[:alnum:][:space:]]+)\\)"-        ix pkg . buildInputs %= S.union (S.fromList $ map ("KF5" <>) new)+        _1 . ix pkg . Package.buildInputs <>= new -findQt5Components :: (MonadIO m, MonadState Deps m) => Analyzer m-findQt5Components pkg = awaitForever $ \(path, contents) ->+propagateKF5Deps :: (MonadIO m, MonadState (Map Text Package, Renames) m) => Analyzer m+propagateKF5Deps pkg _ = awaitForever $ \(path, contents) ->+  when (".cmake" `isPrefixOf` takeExtensions path) $ do+    let base = T.pack $ takeBaseName $ takeBaseName path+        regex = makeRegex+                "find_dependency[[:space:]]*\\([[:space:]]*\+                \([^[:space:],$\\)]+)"+    case T.splitAt (T.length base - 6) base of+      (upstream, "Config") -> do+        let new = S.fromList+                  $ map (T.toLower . T.decodeUtf8)+                  $ filter (not . cmakeReserved)+                  $ filter (not . B.null)+                  $ concatMap (take 1 . drop 1)+                  $ match regex contents+        _1 . ix pkg . Package.propagatedBuildInputs <>= new+        _2 . at (T.toLower upstream) .= Just pkg+      _ -> return ()++findQt5Components :: (MonadIO m, MonadState (Map Text Package, Renames) m) => Analyzer m+findQt5Components pkg _ = awaitForever $ \(path, contents) ->     when ("CMakeLists.txt" == takeFileName path) $ do-        let new = filter (not . cmakeReserved)+        let new = S.fromList+                  $ map ("qt5" <>)+                  $ map (T.toLower . T.decodeUtf8)+                  $ filter (not . cmakeReserved)                   $ filter (not . B.null)                   $ concatMap B.words                   $ concatMap (take 1 . drop 1)@@ -74,7 +78,7 @@             regex = makeRegex                     "find_package[[:space:]]*\\([[:space:]]*Qt5\                     \[[:space:]]*([#\\.${}_[:alnum:][:space:]]+)\\)"-        ix pkg . buildInputs %= S.union (S.fromList $ map ("Qt5" <>) new)+        _1 . ix pkg . Package.buildInputs <>= new  cmakeReserved :: ByteString -> Bool cmakeReserved bs = or $ map ($ bs)@@ -86,67 +90,15 @@                    , (==) "COMPONENTS"                    , (==) "REQUIRED"                    , (==) "CONFIG"+                   , (==) "NO_MODULE"+                   , (==) "QUIET"+                   , (==) "CTest"                    ] -kf5Analyzers :: (MonadIO m, MonadState Deps m) => [Analyzer m]+kf5Analyzers :: (MonadIO m, MonadState (Map Text Package, Renames) m) => [Analyzer m] kf5Analyzers =   [ findKF5Components   , findQt5Components-  , renameKF5Pkgs   , propagateKF5Deps   ]   ++ cmakeAnalyzers--kf5PostAnalyze :: MonadState Deps m => m ()-kf5PostAnalyze = do-    moveNativeInputs-    movePropagatedInputs-    moveUserEnvPkgs--moveNativeInputs :: MonadState Deps m => m ()-moveNativeInputs = deps %= M.map makeNative-  where-    makeNative = execState $ forM_ native $ \dep -> do-        hasDep <- use (buildInputs.to (S.member dep))-        when hasDep $ do-            buildInputs %= S.delete dep-            nativeBuildInputs %= S.insert dep-        hasPropDep <- use (propagatedBuildInputs.to (S.member dep))-        when hasPropDep $ do-            propagatedBuildInputs %= S.delete dep-            propagatedNativeBuildInputs %= S.insert dep-    native = [ "BISON"-             , "extra-cmake-modules"-             , "FLEX"-             , "kdoctools"-             , "ki18n"-             , "LibXslt"-             , "Perl"-             , "PythonInterp"-             ]--movePropagatedInputs :: MonadState Deps m => m ()-movePropagatedInputs = deps %= M.map propagate-  where-    propagate = execState $ forM_ propagated $ \dep -> do-        hasDep <- use (buildInputs.to (S.member dep))-        when hasDep $ do-            buildInputs %= S.delete dep-            propagatedBuildInputs %= S.insert dep-        hasNativeDep <- use (nativeBuildInputs.to (S.member dep))-        when hasNativeDep $ do-            nativeBuildInputs %= S.delete dep-            propagatedNativeBuildInputs %= S.insert dep-    propagated = [ "extra-cmake-modules" ]--moveUserEnvPkgs :: MonadState Deps m => m ()-moveUserEnvPkgs = deps %= M.map propagate-  where-    propagate = execState $ forM_ userEnv $ \dep -> do-        hasDep <- use (buildInputs.to (S.member dep))-        hasNativeDep <- use (buildInputs.to (S.member dep))-        hasPropDep <- use (buildInputs.to (S.member dep))-        hasPropNativeDep <- use (buildInputs.to (S.member dep))-        when (hasDep || hasNativeDep || hasPropDep || hasPropNativeDep)-            $ propagatedUserEnvPkgs %= S.insert dep-    userEnv = [ "SharedMimeInfo" ]