]> git.ipfire.org Git - thirdparty/make.git/commitdiff
Enable jobserver on W32 when using configure.
authorPaul Smith <psmith@gnu.org>
Tue, 15 Nov 2011 21:12:53 +0000 (21:12 +0000)
committerPaul Smith <psmith@gnu.org>
Tue, 15 Nov 2011 21:12:53 +0000 (21:12 +0000)
Some W32 cleanups: see Savannah bug #34830
Forgot to modify the config.h.W32.template file for jobserver support.

ChangeLog
config.h.W32.template
configure.in
job.c
main.c
w32/include/sub_proc.h
w32/subproc/sub_proc.c

index d765363bc53cbedd18dabaa21b0c970a4f2fedf5..0a4c07db304f703a60e4aaddacdb2a4665ffc6a6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2011-11-15  Paul Smith  <psmith@gnu.org>
+
+       * main.c (main): Use %ld when printing DWORD values.
+       * job.c (new_job): Ditto.
+       * w32/include/sub_proc.h: Use const.
+       * w32/subproc/sub_proc.c (open_jobserver_semaphore): Use const.
+       Fixes Savannah bug #34830.  Patches suggested by Ozkan Sezer.
+
+       * configure.in (MAKE_JOBSERVER): Enable jobserver on W32 systems.
+       * config.h.W32.template (MAKE_JOBSERVER): Ditto.
+
 2011-11-14  Paul Smith  <psmith@gnu.org>
 
        * read.c (eval): parse_file_seq() might shorten the string due to
index 9b4138e3f3cd43035e6fe331d1301764ed10da4d..03a4316db71aa1c57a86ae3a0bc8e7cc8661f60b 100644 (file)
@@ -332,7 +332,7 @@ this program.  If not, see <http://www.gnu.org/licenses/>.  */
 #define MAKE_HOST "Windows32"
 
 /* Define this to enable job server support in GNU make. */
-/* #undef MAKE_JOBSERVER */
+#define MAKE_JOBSERVER 1
 
 /* Define to 1 if your `struct nlist' has an `n_un' member. Obsolete, depend
    on `HAVE_STRUCT_NLIST_N_UN_N_NAME */
index a1e720b396e40fa7e0ea9569cc5a28f5903a8aa9..31c528da7cd95fdc377e1be68979a7c0eef412cc 100644 (file)
@@ -301,18 +301,21 @@ if test "$make_cv_sa_restart" != no; then
      [Define to 1 if <signal.h> defines the SA_RESTART constant.])
 fi
 
-# enable make_cv_sa_restart for OS/2 so that the jobserver will be enabled,
-# but do it after HAVE_SA_RESTART has been defined.
-case "$host_os" in
-  os2*) make_cv_sa_restart=yes ;;
+# Only allow jobserver on systems that support it
+case "/$ac_cv_func_pipe/$ac_cv_func_sigaction/$make_cv_sa_restart/$has_wait_nohang/" in
+  */no/*) make_cv_job_server=no ;;
 esac
 
-case "$ac_cv_func_pipe/$ac_cv_func_sigaction/$make_cv_sa_restart/$has_wait_nohang/$make_cv_job_server" in
-  yes/yes/yes/yes/yes)
-    AC_DEFINE(MAKE_JOBSERVER, 1,
-              [Define to 1 to enable job server support in GNU make.]);;
+# Also supported on OS2 and W32
+case "$host_os" in
+  os2*|mingw32) make_cv_sa_restart=yes ;;
 esac
 
+if test "$make_cv_job_server" != no; then
+  AC_DEFINE(MAKE_JOBSERVER, 1,
+            [Define to 1 to enable job server support in GNU make.])
+fi
+
 # if we have both lstat() and readlink() then we can support symlink
 # timechecks.
 case "$ac_cv_func_lstat/$ac_cv_func_readlink" in
diff --git a/job.c b/job.c
index f359520d54cfa4999e1bd00f6caae0bba6fa7dfe..c5fe0bf63596a9634600fe6349d6572be054d2fa 100644 (file)
--- a/job.c
+++ b/job.c
@@ -946,7 +946,7 @@ free_child (struct child *child)
       if (! release_jobserver_semaphore())
         {
           DWORD err = GetLastError();
-          fatal (NILF,_("release jobserver semaphore: (Error %d: %s)"),
+          fatal (NILF, _("release jobserver semaphore: (Error %ld: %s)"),
                  err, map_windows32_error_to_string(err));
         }
 
@@ -1775,9 +1775,11 @@ new_job (struct file *file)
 #endif
     while (1)
       {
-        char token;
        int got_token;
+#ifndef WINDOWS32
+        char token;
        int saved_errno;
+#endif
 
         DB (DB_JOBS, ("Need a job token; we %shave children\n",
                       children ? "" : "don't "));
@@ -1842,7 +1844,7 @@ new_job (struct file *file)
         if (got_token < 0)
           {
             DWORD err = GetLastError();
-            fatal (NILF,_("semaphore or child process wait: (Error %d: %s)"),
+            fatal (NILF, _("semaphore or child process wait: (Error %ld: %s)"),
                    err, map_windows32_error_to_string(err));
           }
 #else
diff --git a/main.c b/main.c
index 16957d4c9265db6084f87c2a91666c44376de32c..86a89ad41e6c0ce98c54cb755a902d947ad016ee 100644 (file)
--- a/main.c
+++ b/main.c
@@ -36,6 +36,7 @@ this program.  If not, see <http://www.gnu.org/licenses/>.  */
 # include <io.h>
 # include "pathstuff.h"
 # include "sub_proc.h"
+# include "w32err.h"
 #endif
 #ifdef __EMX__
 # include <sys/types.h>
@@ -988,7 +989,7 @@ main (int argc, char **argv, char **envp)
   fatal_signal_mask = 0;
 #define        ADD_SIG(sig)    fatal_signal_mask |= sigmask (sig)
 #else
-#define        ADD_SIG(sig)    (void)sig      /* Needed to avoid warnings in MSVC.  */
+#define        ADD_SIG(sig)    (void)sig
 #endif
 #endif
 
@@ -1728,7 +1729,7 @@ main (int argc, char **argv, char **envp)
       if (! open_jobserver_semaphore(cp))
         {
           DWORD err = GetLastError();
-          fatal (NILF,_("internal error: unable to open jobserver semaphore `%s': (Error %d: %s)"), 
+          fatal (NILF, _("internal error: unable to open jobserver semaphore `%s': (Error %ld: %s)"), 
                  cp, err, map_windows32_error_to_string(err));
         }
       DB (DB_JOBS, (_("Jobserver client (semaphore %s)\n"), cp));
@@ -1804,7 +1805,7 @@ main (int argc, char **argv, char **envp)
       if (! create_jobserver_semaphore(job_slots - 1))
         {
           DWORD err = GetLastError();
-          fatal (NILF,_("creating jobserver semaphore: (Error %d: %s)"),
+          fatal (NILF, _("creating jobserver semaphore: (Error %ld: %s)"),
                  err, map_windows32_error_to_string(err));
         }
 #else
index b61373de5b72d9fb2eaff333261a625f72b09aba..389ddf582a4778a543380ffe637106ee59c2699a 100644 (file)
@@ -58,7 +58,7 @@ EXTERN_DECL(int process_errcnt, (HANDLE proc));
 EXTERN_DECL(void process_pipes, (HANDLE proc, int pipes[3]));
 
 /* jobserver routines */
-EXTERN_DECL(int open_jobserver_semaphore, (char* name));
+EXTERN_DECL(int open_jobserver_semaphore, (const char* name));
 EXTERN_DECL(int create_jobserver_semaphore, (int tokens));
 EXTERN_DECL(void free_jobserver_semaphore, (VOID_DECL));
 EXTERN_DECL(int acquire_jobserver_semaphore, (VOID_DECL));
index 64185b36823907628372030712dfa53cfab44fed..b4dddbee5cf8b1bfdab77c8036db8367f41f0262 100644 (file)
@@ -63,7 +63,7 @@ static char jobserver_semaphore_name[MAX_PATH + 1];
 static HANDLE jobserver_semaphore = NULL;
 
 /* Open existing jobserver semaphore */
-int open_jobserver_semaphore(char* name)
+int open_jobserver_semaphore(const char* name)
 {
     jobserver_semaphore = OpenSemaphore(
         SEMAPHORE_ALL_ACCESS,  // Semaphore access setting