packages feed

module-management-0.20.2: testdata/debian/Debian/Repo/Internal/IO.hs

-- | Ensure that any OSKey or AptKey value available outside this
-- module corresponds to an existing entry in the corresponding
-- Map in ReposState.
{-# LANGUAGE FlexibleContexts, FlexibleInstances, TemplateHaskell #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Debian.Repo.Internal.IO
    ( buildArchOfRoot
    ) where

import Debian.Arch (Arch(..), ArchCPU(..), ArchOS(..))
import System.Exit (ExitCode(ExitSuccess))
import System.Process (readProcessWithExitCode)

buildArchOfRoot :: IO Arch
buildArchOfRoot =
    do a@(code1, out1, _err1) <- readProcessWithExitCode "dpkg-architecture" ["-qDEB_BUILD_ARCH_OS"] ""
       b@(code2, out2, _err2) <- readProcessWithExitCode "dpkg-architecture" ["-qDEB_BUILD_ARCH_CPU"] ""
       case (code1, lines out1, code2, lines out2) of
         (ExitSuccess, os : _, ExitSuccess, cpu : _) ->
             return $ Binary (parseArchOS os) (parseArchCPU cpu)
         _ -> error $ "Failure computing build architecture of /: " ++ show (a, b)
    where
      parseArchOS "any" = ArchOSAny
      parseArchOS x = ArchOS x
      parseArchCPU "any" = ArchCPUAny
      parseArchCPU x = ArchCPU x