Implement delegated control-C handling on Unix (#2301)

This is a generalisation of the SIGINT-ignoring that system and
rawSystem do, to allow it to be used via the general createProcess.

For the gory details of SIGINT handling, see
http://www.cons.org/cracauer/sigint.html

We implement the 'WCE' method described there.

That important feature was only available to system and rawSystem
(mirroring the C system() behaviour). These functions are very limited
and indeed deprecated, so we need this feature in general. In particular
projects like Cabal are suffering because they cannot do this properly
(or need horrible workarounds copy and pasting much of System.Process
and using System.Process.Internals).

The feature is available now via a new delegate_ctlc flag in the
CreateProcess options record. The use of signal handlers is still a
little hairy, but probably better than before (for situations where
there were multiple concurrent calls to system/rawSystem).

One thing to note is that waitForProcess and getProcessExitCode can now
throw the UserInterrupt exception.

This is all documented in the haddock docs (both a short description and
also the excruciating details).

Authored-by: Duncan Coutts <duncan@well-typed.com>
Signed-off-by: Herbert Valerio Riedel <hvr@gnu.org>
Add tests for the delegated control-C handling (#2301)

Authored-by: Duncan Coutts <duncan@well-typed.com>
Signed-off-by: Herbert Valerio Riedel <hvr@gnu.org>
Rename runGenProcess_ and leave a deprecated stub

At least Cabal was using runGenProcess_, and the previous patches
addressing #2301 changed its type already. So this adds a deprecated
stub with the original type and the real function gets to have a less
odd name.

Authored-by: Duncan Coutts <duncan@well-typed.com>
Signed-off-by: Herbert Valerio Riedel <hvr@gnu.org>
API cleanup with new functions and old "soft" deprecated

Add callProcess, callCommand, spawnProcess, spawnCommand as per the
design in #2233 (but not relying on any of the SIGCHLD stuff).

Move the various pre-createProcess functions to a section at the bottom
in the Haddock docs. Don't yet mark anything as deprecated. That can
come later.

Authored-by: Duncan Coutts <duncan@well-typed.com>
Signed-off-by: Herbert Valerio Riedel <hvr@gnu.org>
Reorder code sections to be rather clearer

And move the deprecated things (as per #2233) to the end, out of the way.

Authored-by: Duncan Coutts <duncan@well-typed.com>
Signed-off-by: Herbert Valerio Riedel <hvr@gnu.org>
Add TODO notes on what should be marked DEPRECATED later

We don't want to do it immediately because some of the replacements have
not been around for long. There's no hurry, can do it in a release or
two.

Authored-by: Duncan Coutts <duncan@well-typed.com>
Signed-off-by: Herbert Valerio Riedel <hvr@gnu.org>
Document spawnProcess and spawnCommand (#2233)

Authored-by: Duncan Coutts <duncan@well-typed.com>
Signed-off-by: Herbert Valerio Riedel <hvr@gnu.org>
Drop redundant `{-# ForeignFunctionInterface #-}`

...which is implied by Haskell2010; moreover add missing
`BangPatterns` to `other-extensions`.

Signed-off-by: Herbert Valerio Riedel <hvr@gnu.org>
Add `/Since: 1.2.0.0/` annotations to recently added entities

...and update changelog

Signed-off-by: Herbert Valerio Riedel <hvr@gnu.org>
Minor Haddock markup fix

Signed-off-by: Herbert Valerio Riedel <hvr@gnu.org>