Skip to content
Snippets Groups Projects
Unverified Commit 7313c3b0 authored by mergify[bot]'s avatar mergify[bot] Committed by GitHub
Browse files

Merge pull request #7844 from sergv/master

Fix cabal on Windows 7
parents d0b35b40 c8841f67
No related branches found
No related tags found
No related merge requests found
......@@ -18,23 +18,44 @@ import qualified System.Process as Process
import System.Process (waitForProcess)
#endif
#if defined(mingw32_HOST_OS) && MIN_VERSION_process(1,6,9)
import System.IO.Unsafe (unsafePerformIO)
import System.Win32.Info.Version (dwMajorVersion, dwMinorVersion, getVersionEx)
#endif
-------------------------------------------------------------------------------
-- enableProcessJobs
-------------------------------------------------------------------------------
#if defined(mingw32_HOST_OS) && MIN_VERSION_process(1,6,9)
-- This exception, needed to support Windows 7, could be removed when
-- the lowest GHC version cabal supports is a GHC that doesn’t support
-- Windows 7 any more.
{-# NOINLINE isWindows8OrLater #-}
isWindows8OrLater :: Bool
isWindows8OrLater = unsafePerformIO $ do
v <- getVersionEx
pure $ (dwMajorVersion v, dwMinorVersion v) >= (6, 2)
#endif
-- | Enable process jobs to ensure accurate determination of process completion
-- in the presence of @exec(3)@ on Windows.
--
-- Unfortunately the process job support is badly broken in @process@ releases
-- prior to 1.6.9, so we disable it in these versions, despite the fact that
-- this means we may see sporatic build failures without jobs.
-- this means we may see sporadic build failures without jobs.
--
-- On Windows 7 or before the jobs are disabled due to the fact that
-- processes on these systems can only have one job. This prevents
-- spawned process from assigning jobs to its own children. Suppose
-- processs A spawns process B. The B process has a job assigned (call
-- it J1) and when it tries to spawn a new process C the C
-- automatically inherits the job. But at it also tries to assign a
-- new job J2 to C since it doesn’t have access J1. This fails on
-- Windows 7 or before.
enableProcessJobs :: CreateProcess -> CreateProcess
#ifdef MIN_VERSION_process
#if MIN_VERSION_process(1,6,9)
enableProcessJobs cp = cp {Process.use_process_jobs = True}
#else
enableProcessJobs cp = cp
#endif
#if defined(mingw32_HOST_OS) && MIN_VERSION_process(1,6,9)
enableProcessJobs cp = cp {Process.use_process_jobs = isWindows8OrLater}
#else
enableProcessJobs cp = cp
#endif
......
synopsis: Disable job management on Windows 7
packages: Cabal
prs: #7844
significance: significant
description: {
- cabal now works on Windows 7
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment