patch 7.4.1537
Problem:    Too many feature flags for pipes, jobs and channels.
Solution:   Only use FEAT_JOB_CHANNEL.
diff --git a/src/os_unix.c b/src/os_unix.c
index 8a61166..f2ae513 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -3919,7 +3919,7 @@
     return wait_pid;
 }
 
-#if defined(FEAT_JOB) || !defined(USE_SYSTEM) || defined(PROTO)
+#if defined(FEAT_JOB_CHANNEL) || !defined(USE_SYSTEM) || defined(PROTO)
 /*
  * Parse "cmd" and put the white-separated parts in "argv".
  * "argv" is an allocated array with "argc" entries.
@@ -3984,7 +3984,7 @@
 }
 #endif
 
-#if !defined(USE_SYSTEM) || defined(FEAT_JOB)
+#if !defined(USE_SYSTEM) || defined(FEAT_JOB_CHANNEL)
     static void
 set_child_environment(void)
 {
@@ -5035,12 +5035,11 @@
 #endif /* USE_SYSTEM */
 }
 
-#if defined(FEAT_JOB) || defined(PROTO)
+#if defined(FEAT_JOB_CHANNEL) || defined(PROTO)
     void
 mch_start_job(char **argv, job_T *job, jobopt_T *options UNUSED)
 {
     pid_t	pid;
-# ifdef FEAT_CHANNEL
     int		fd_in[2];	/* for stdin */
     int		fd_out[2];	/* for stdout */
     int		fd_err[2];	/* for stderr */
@@ -5122,7 +5121,6 @@
 	if (channel == NULL)
 	    goto failed;
     }
-# endif
 
     pid = fork();	/* maybe we should use vfork() */
     if (pid  == -1)
@@ -5133,9 +5131,7 @@
 
     if (pid == 0)
     {
-# ifdef FEAT_CHANNEL
 	int		null_fd = -1;
-# endif
 
 	/* child */
 	reset_signals();		/* handle signals normally */
@@ -5149,8 +5145,6 @@
 
 	set_child_environment();
 
-	/* TODO: re-enable this when pipes connect without a channel */
-# ifdef FEAT_CHANNEL
 	if (use_null_for_in || use_null_for_out || use_null_for_err)
 	    null_fd = open("/dev/null", O_RDWR | O_EXTRA, 0);
 
@@ -5205,7 +5199,6 @@
 	}
 	if (null_fd >= 0)
 	    close(null_fd);
-# endif
 
 	/* See above for type of argv. */
 	execvp(argv[0], argv);
@@ -5217,11 +5210,8 @@
     /* parent */
     job->jv_pid = pid;
     job->jv_status = JOB_STARTED;
-# ifdef FEAT_CHANNEL
     job->jv_channel = channel;  /* ch_refcount was set above */
-# endif
 
-# ifdef FEAT_CHANNEL
     /* child stdin, stdout and stderr */
     if (!use_file_for_in)
 	close(fd_in[0]);
@@ -5240,13 +5230,11 @@
 						    ? INVALID_FD : fd_err[0]);
 	channel_set_job(channel, job, options);
     }
-# endif
 
     /* success! */
     return;
 
-failed: ;
-# ifdef FEAT_CHANNEL
+failed:
     channel_unref(channel);
     if (fd_in[0] >= 0)
 	close(fd_in[0]);
@@ -5260,7 +5248,6 @@
 	close(fd_err[0]);
     if (fd_err[1] >= 0)
 	close(fd_err[1]);
-# endif
 }
 
     char *
@@ -5560,7 +5547,7 @@
 	    nfd++;
 	}
 # endif
-#ifdef FEAT_CHANNEL
+#ifdef FEAT_JOB_CHANNEL
 	nfd = channel_poll_setup(nfd, &fds);
 #endif
 
@@ -5608,7 +5595,7 @@
 		finished = FALSE;	/* Try again */
 	}
 # endif
-#ifdef FEAT_CHANNEL
+#ifdef FEAT_JOB_CHANNEL
 	if (ret > 0)
 	    ret = channel_poll_check(ret, &fds);
 #endif
@@ -5690,7 +5677,7 @@
 		maxfd = xsmp_icefd;
 	}
 # endif
-# ifdef FEAT_CHANNEL
+# ifdef FEAT_JOB_CHANNEL
 	maxfd = channel_select_setup(maxfd, &rfds);
 # endif
 
@@ -5772,7 +5759,7 @@
 	    }
 	}
 # endif
-#ifdef FEAT_CHANNEL
+#ifdef FEAT_JOB_CHANNEL
 	if (ret > 0)
 	    ret = channel_select_check(ret, &rfds);
 #endif