diff -ru make-3.82.90-1.orig/function.c make-3.82.90-1/function.c
--- make-3.82.90-1.orig/function.c	2011-12-02 20:35:49.000000000 +0400
+++ make-3.82.90-1/function.c	2013-01-09 15:45:17.516663100 +0400
@@ -1672,7 +1672,7 @@
       return o;
     }
 
-# ifdef __EMX__
+# if defined (__EMX__) || defined (__CYGWIN__)
   /* close some handles that are unnecessary for the child process */
   CLOSE_ON_EXEC(pipedes[1]);
   CLOSE_ON_EXEC(pipedes[0]);
diff -ru make-3.82.90-1.orig/job.c make-3.82.90-1/job.c
--- make-3.82.90-1.orig/job.c	2011-12-02 20:35:49.000000000 +0400
+++ make-3.82.90-1/job.c	2013-01-09 15:52:24.827067000 +0400
@@ -111,8 +111,11 @@
 # define WAIT_NOHANG 1
 #endif /* WINDOWS32 */
 
-#ifdef __EMX__
+#if defined (__EMX__) || defined (__CYGWIN__)
 # include <process.h>
+# ifndef P_NOWAIT
+#  define P_NOWAIT _P_NOWAIT
+# endif
 #endif
 
 #if defined (HAVE_SYS_WAIT_H) || defined (HAVE_UNION_WAIT)
@@ -1351,7 +1354,7 @@
 
       parent_environ = environ;
 
-# ifdef __EMX__
+# if defined (__EMX__) || defined (__CYGWIN__)
       /* If we aren't running a recursive command and we have a jobserver
          pipe, close it before exec'ing.  */
       if (!(flags & COMMANDS_RECURSE) && job_fds[0] >= 0)
@@ -2071,7 +2074,7 @@
 #ifndef WINDOWS32
 
 /* EMX: Start a child process. This function returns the new pid.  */
-# if defined __EMX__
+# if defined (__EMX__) || defined (__CYGWIN__)
 int
 child_execute_job (int stdin_fd, int stdout_fd, char **argv, char **envp)
 {
@@ -2158,7 +2161,7 @@
    with environment ENVP.  This function does not return.  */
 
 /* EMX: This function returns the pid of the child process.  */
-# ifdef __EMX__
+# if defined (__EMX__) || defined (__CYGWIN__)
 int
 # else
 void
@@ -2236,14 +2239,14 @@
 
 #else  /* !WINDOWS32 */
 
-# ifdef __EMX__
+# if defined (__EMX__) || defined (__CYGWIN__)
   int pid;
 # endif
 
   /* Be the user, permanently.  */
   child_access ();
 
-# ifdef __EMX__
+# if defined (__EMX__) || defined (__CYGWIN__)
 
   /* Run the program.  */
   pid = spawnvpe (P_NOWAIT, argv[0], argv, envp);
@@ -2318,7 +2321,7 @@
 	    --argc;
 	  }
 
-# ifdef __EMX__
+# if defined (__EMX__) || defined (__CYGWIN__)
 	pid = spawnvpe (P_NOWAIT, shell, new_argv, envp);
 	if (pid >= 0)
           break;
@@ -2344,7 +2347,7 @@
       break;
     }
 
-# ifdef __EMX__
+# if defined (__EMX__) || defined (__CYGWIN__)
   return pid;
 # else
   _exit (127);
diff -ru make-3.82.90-1.orig/job.h make-3.82.90-1/job.h
--- make-3.82.90-1.orig/job.h	2010-07-13 06:20:41.000000000 +0500
+++ make-3.82.90-1/job.h	2013-01-09 15:54:03.977133000 +0400
@@ -77,14 +77,14 @@
                                int cmd_flags, char** batch_file);
 #ifdef VMS
 int child_execute_job (char *argv, struct child *child);
-#elif defined(__EMX__)
+#elif defined(__EMX__) || defined (__CYGWIN__)
 int child_execute_job (int stdin_fd, int stdout_fd, char **argv, char **envp);
 #else
 void child_execute_job (int stdin_fd, int stdout_fd, char **argv, char **envp);
 #endif
 #ifdef _AMIGA
 void exec_command (char **argv);
-#elif defined(__EMX__)
+#elif defined(__EMX__) || defined (__CYGWIN__)
 int exec_command (char **argv, char **envp);
 #else
 void exec_command (char **argv, char **envp);
diff -ru make-3.82.90-1.orig/main.c make-3.82.90-1/main.c
--- make-3.82.90-1.orig/main.c	2011-12-02 20:35:49.000000000 +0400
+++ make-3.82.90-1/main.c	2013-01-09 16:06:05.679456400 +0400
@@ -38,7 +38,7 @@
 # include "sub_proc.h"
 # include "w32err.h"
 #endif
-#ifdef __EMX__
+#if defined (__EMX__) || defined (__CYGWIN__)
 # include <sys/types.h>
 # include <sys/wait.h>
 #endif
@@ -2207,7 +2207,7 @@
 #ifdef _AMIGA
 	  exec_command (nargv);
 	  exit (0);
-#elif defined (__EMX__)
+#elif defined (__EMX__) || defined(__CYGWIN__)
 	  {
 	    /* It is not possible to use execve() here because this
 	       would cause the parent process to be terminated with
@@ -2216,15 +2216,15 @@
 	       child process including all file handles and to wait for its
 	       termination. */
 	    int pid;
-	    int status;
+	    int child_status;
 	    pid = child_execute_job (0, 1, nargv, environ);
 
 	    /* is this loop really necessary? */
 	    do {
-	      pid = wait (&status);
+	      pid = wait (&child_status);
 	    } while (pid <= 0);
 	    /* use the exit code of the child process */
-	    exit (WIFEXITED(status) ? WEXITSTATUS(status) : EXIT_FAILURE);
+	    exit (WIFEXITED(child_status) ? WEXITSTATUS(child_status) : EXIT_FAILURE);
 	  }
 #else
 	  exec_command (nargv, environ);
