Have "execvpe.h" provide execvpe() again
authorHerbert Valerio Riedel <hvr@gnu.org>
Sat, 6 Dec 2014 20:11:59 +0000 (21:11 +0100)
committerHerbert Valerio Riedel <hvr@gnu.org>
Sat, 6 Dec 2014 20:11:59 +0000 (21:11 +0100)
Turns out `process` reuses `unix`'s execvpe() implementation,
and the refactoring in f24ba78f68b2cbc4f4afadc8dd60fc2935357255
broke process.

cbits/execvpe.c
include/execvpe.h

index b4f9472..9599836 100644 (file)
@@ -8,12 +8,13 @@
          execvpe(3) is available, we use that instead.
 
    -------------------------------------------------------------------------- */
-#include "execvpe.h"
 
-#include "HsUnixConfig.h"
+#include "execvpe.h"
 
 #if HAVE_EXECVPE
 # define _GNU_SOURCE
+#else
+# undef execvpe
 #endif
 
 #include <errno.h>
index 1d49e35..d4b6521 100644 (file)
@@ -4,8 +4,23 @@
    Interface for code in cbits/execvpe.c
    ------------------------------------------------------------------------- */
 
+#ifndef HSUNIX_EXECVPE_H
+#define HSUNIX_EXECVPE_H
+
+#include "HsUnixConfig.h"
+
 extern int
 __hsunix_execvpe(const char *name, char *const argv[], char *const envp[]);
 
+// this hack is needed for `process`; to be removed in unix-2.8
+#if HAVE_EXECVPE
+# define _GNU_SOURCE
+# include <unistd.h>
+#else
+# define execvpe(name,argv,envp) __hsunix_execvpe(name,argv,envp)
+#endif
+
 // implemented in cbits/ghcrts.c
 extern void pPrPr_disableITimers (void);
+
+#endif