Fix missing definition of PAGE_SIZE
authorAnas Nashif <anas.nashif@intel.com>
Thu, 30 May 2013 07:25:38 +0000 (03:25 -0400)
committerPhilippe Coval <philippe.coval@open.eurogiciel.org>
Fri, 2 Jan 2015 10:46:16 +0000 (11:46 +0100)
configure.in [new file with mode: 0644]
job.c

diff --git a/configure.in b/configure.in
new file mode 100644 (file)
index 0000000..923145b
--- /dev/null
@@ -0,0 +1,479 @@
+# Process this file with autoconf to produce a configure script.
+#
+# Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+# This file is part of GNU Make.
+#
+# GNU Make is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 3 of the License, or (at your option) any later
+# version.
+#
+# GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+# details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program.  If not, see <http://www.gnu.org/licenses/>.
+
+AC_INIT([GNU make],[3.82],[bug-make@gnu.org])
+
+AC_PREREQ(2.59)
+AC_REVISION([[$Id: configure.in,v 1.156 2010/07/28 05:39:50 psmith Exp $]])
+
+# Autoconf setup
+AC_CONFIG_AUX_DIR(config)
+AC_CONFIG_SRCDIR(vpath.c)
+AC_CONFIG_HEADERS(config.h)
+
+# Automake setup
+AM_INIT_AUTOMAKE([1.9])
+
+# Checks for programs.
+AC_PROG_CC
+AC_PROG_INSTALL
+AC_PROG_RANLIB
+AC_PROG_CPP
+AC_CHECK_PROG(AR, ar, ar, ar)
+# Perl is needed for the test suite (only)
+AC_CHECK_PROG(PERL, perl, perl, perl)
+
+# Specialized system macros
+AC_CANONICAL_HOST
+AC_AIX
+AC_ISC_POSIX
+AC_MINIX
+
+# Enable gettext, in "external" mode.
+
+AM_GNU_GETTEXT_VERSION(0.14.1)
+AM_GNU_GETTEXT([external])
+
+# This test must come as early as possible after the compiler configuration
+# tests, because the choice of the file model can (in principle) affect
+# whether functions and headers are available, whether they work, etc.
+AC_SYS_LARGEFILE
+
+# Checks for libraries.
+AC_SEARCH_LIBS(getpwnam, [sun])
+
+# Checks for header files.
+AC_HEADER_STDC
+AC_HEADER_DIRENT
+AC_HEADER_STAT
+AC_HEADER_TIME
+AC_CHECK_HEADERS(stdlib.h locale.h unistd.h limits.h fcntl.h string.h \
+                memory.h sys/param.h sys/resource.h sys/time.h sys/timeb.h \
+                sys/user.h linux/binfmts.h)
+
+# Set a flag if we have an ANSI C compiler
+if test "$ac_cv_prog_cc_stdc" != no; then
+  AC_DEFINE(HAVE_ANSI_COMPILER, 1,
+             [Define to 1 if your compiler conforms to the ANSI C standard.])
+fi
+
+
+# Determine what kind of variadic function calls we support
+AC_CHECK_HEADERS(stdarg.h varargs.h, break)
+
+AM_PROG_CC_C_O
+AC_C_CONST
+AC_TYPE_SIGNAL
+AC_TYPE_UID_T
+AC_TYPE_PID_T
+
+# Find some definition for uintmax_t
+
+AC_CHECK_TYPE(uintmax_t,,[
+  uintmax_t="unsigned long"
+  AC_CHECK_TYPE(unsigned long long,[uintmax_t="unsigned long long"])
+  AC_DEFINE_UNQUOTED(uintmax_t,$uintmax_t,
+    [Define uintmax_t if not defined in <stdint.h> or <inttypes.h>.])])
+
+# Find out whether our struct stat returns nanosecond resolution timestamps.
+
+AC_STRUCT_ST_MTIM_NSEC
+AC_MSG_CHECKING([whether to use high resolution file timestamps])
+AC_CACHE_VAL(make_cv_file_timestamp_hi_res, [
+  make_cv_file_timestamp_hi_res=no
+  if test "$ac_cv_struct_st_mtim_nsec" != no; then
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#      if HAVE_INTTYPES_H
+#       include <inttypes.h>
+#      endif]],
+                     [[char a[0x7fffffff < (uintmax_t)-1 >> 30 ? 1 : -1];]])],
+      [make_cv_file_timestamp_hi_res=yes],
+      [])
+  fi])
+AC_MSG_RESULT($make_cv_file_timestamp_hi_res)
+if test "$make_cv_file_timestamp_hi_res" = yes; then
+  val=1
+else
+  val=0
+fi
+AC_DEFINE_UNQUOTED(FILE_TIMESTAMP_HI_RES, $val,
+                  [Use high resolution file timestamps if nonzero.])
+
+if test "$make_cv_file_timestamp_hi_res" = yes; then
+  # Solaris 2.5.1 needs -lposix4 to get the clock_gettime function.
+  # Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4.
+  AC_SEARCH_LIBS(clock_gettime, [rt posix4])
+  if test "$ac_cv_search_clock_gettime" != no; then
+    AC_DEFINE(HAVE_CLOCK_GETTIME, 1,
+             [Define to 1 if you have the clock_gettime function.])
+  fi
+fi
+
+# Check for DOS-style pathnames.
+pds_AC_DOS_PATHS
+
+# See if we have a standard version of gettimeofday().  Since actual
+# implementations can differ, just make sure we have the most common
+# one.
+AC_CACHE_CHECK([for standard gettimeofday], ac_cv_func_gettimeofday,
+  [ac_cv_func_gettimeofday=no
+   AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <sys/time.h>
+                  int main ()
+                 {
+                   struct timeval t; t.tv_sec = -1; t.tv_usec = -1;
+                   exit (gettimeofday (&t, 0) != 0
+                         || t.tv_sec < 0 || t.tv_usec < 0);
+                 }]])],
+                 [ac_cv_func_gettimeofday=yes],
+                 [ac_cv_func_gettimeofday=no],
+                 [ac_cv_func_gettimeofday="no (cross-compiling)"])])
+if test "$ac_cv_func_gettimeofday" = yes; then
+  AC_DEFINE(HAVE_GETTIMEOFDAY, 1,
+           [Define to 1 if you have a standard gettimeofday function])
+fi
+
+AC_CHECK_FUNCS( strdup strndup mkstemp mktemp fdopen fileno \
+               dup2 getcwd realpath sigsetmask sigaction \
+                getgroups seteuid setegid setlinebuf setreuid setregid \
+                getrlimit setrlimit setvbuf pipe strerror strsignal \
+               lstat readlink atexit)
+
+# We need to check declarations, not just existence, because on Tru64 this
+# function is not declared without special flags, which themselves cause
+# other problems.  We'll just use our own.
+AC_CHECK_DECLS([bsd_signal], [], [], [[#include <signal.h>]])
+
+AC_FUNC_SETVBUF_REVERSED
+
+# Rumor has it that strcasecmp lives in -lresolv on some odd systems.
+# It doesn't hurt much to use our own if we can't find it so I don't
+# make the effort here.
+AC_CHECK_FUNCS(strcasecmp strncasecmp strcmpi strncmpi stricmp strnicmp)
+
+# strcoll() is used by the GNU glob library
+AC_FUNC_STRCOLL
+
+AC_FUNC_ALLOCA
+AC_FUNC_FORK([])
+AC_FUNC_VPRINTF
+AC_FUNC_CLOSEDIR_VOID
+
+AC_FUNC_GETLOADAVG
+
+# AC_FUNC_GETLOADAVG is documented to set the NLIST_STRUCT value, but it
+# doesn't.  So, we will.
+
+if test "$ac_cv_header_nlist_h" = yes; then
+  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <nlist.h>]],
+       [[struct nlist nl;
+          nl.n_name = "string";
+          return 0;]])],
+       [make_cv_nlist_struct=yes],
+       [make_cv_nlist_struct=no])
+  if test "$make_cv_nlist_struct" = yes; then
+    AC_DEFINE(NLIST_STRUCT, 1,
+       [Define to 1 if struct nlist.n_name is a pointer rather than an array.])
+  fi
+fi
+
+AC_CHECK_DECLS([sys_siglist, _sys_siglist, __sys_siglist], , ,
+  [AC_INCLUDES_DEFAULT
+#include <signal.h>
+/* NetBSD declares sys_siglist in unistd.h.  */
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+])
+
+
+# Check out the wait reality.
+AC_CHECK_HEADERS(sys/wait.h,,,[[#include <sys/types.h>]])
+AC_CHECK_FUNCS(waitpid wait3)
+AC_MSG_CHECKING(for union wait)
+AC_CACHE_VAL(make_cv_union_wait, [dnl
+    AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
+#include <sys/wait.h>]],
+     [[union wait status; int pid; pid = wait (&status);
+#ifdef WEXITSTATUS
+/* Some POSIXoid systems have both the new-style macros and the old
+   union wait type, and they do not work together.  If union wait
+   conflicts with WEXITSTATUS et al, we don't want to use it at all.  */
+        if (WEXITSTATUS (status) != 0) pid = -1;
+#ifdef WTERMSIG
+        /* If we have WEXITSTATUS and WTERMSIG, just use them on ints.  */
+        -- blow chunks here --
+#endif
+#endif
+#ifdef HAVE_WAITPID
+        /* Make sure union wait works with waitpid.  */
+        pid = waitpid (-1, &status, 0);
+#endif
+      ]])],
+    [make_cv_union_wait=yes],
+    [make_cv_union_wait=no])])
+if test "$make_cv_union_wait" = yes; then
+  AC_DEFINE(HAVE_UNION_WAIT, 1,
+            [Define to 1 if you have the \`union wait' type in <sys/wait.h>.])
+fi
+AC_MSG_RESULT($make_cv_union_wait)
+
+
+# If we're building on Windows/DOS/OS/2, add some support for DOS drive specs.
+if test "$PATH_SEPARATOR" = ';'; then
+  AC_DEFINE(HAVE_DOS_PATHS, 1,
+            [Define to 1 if your system requires backslashes or drive specs in pathnames.])
+fi
+
+
+# See if the user wants to use pmake's "customs" distributed build capability
+
+AC_SUBST(REMOTE) REMOTE=stub
+use_customs=false
+AC_ARG_WITH(customs,
+  AC_HELP_STRING([--with-customs=DIR],
+                [enable remote jobs via Customs--see README.customs]),
+  [case $withval in
+    n|no) : ;;
+    *) make_cppflags="$CPPFLAGS"
+       case $withval in
+        y|ye|yes) : ;;
+        *) CPPFLAGS="$CPPFLAGS -I$with_customs/include/customs"
+           make_ldflags="$LDFLAGS -L$with_customs/lib" ;;
+       esac
+       CF_NETLIBS
+       AC_CHECK_HEADER(customs.h,
+                      [use_customs=true
+                        REMOTE=cstms
+                        LIBS="$LIBS -lcustoms" LDFLAGS="$make_ldflags"],
+                      [with_customs=no
+                        CPPFLAGS="$make_cppflags" make_badcust=yes])
+       ;;
+  esac])
+# Tell automake about this, so it can include the right .c files.
+AM_CONDITIONAL(USE_CUSTOMS, test "$use_customs" = true)
+
+# See if the user asked to handle case insensitive file systems.
+
+AH_TEMPLATE(HAVE_CASE_INSENSITIVE_FS, [Use case insensitive file names])
+AC_ARG_ENABLE(case-insensitive-file-system,
+  AC_HELP_STRING([--enable-case-insensitive-file-system],
+                [assume file systems are case insensitive]),
+  [case $enableval in
+     yes) AC_DEFINE(HAVE_CASE_INSENSITIVE_FS) ;;
+   esac])
+
+# See if we can handle the job server feature, and if the user wants it.
+
+AC_ARG_ENABLE(job-server,
+  AC_HELP_STRING([--disable-job-server],
+                 [disallow recursive make communication during -jN]),
+  [make_cv_job_server="$enableval" user_job_server="$enableval"],
+  [make_cv_job_server="yes"])
+
+has_wait_nohang=yes
+case "$ac_cv_func_waitpid/$ac_cv_func_wait3" in
+  no/no) has_wait_nohang=no ;;
+esac
+
+AC_CACHE_CHECK(for SA_RESTART, make_cv_sa_restart, [
+  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <signal.h>]],
+      [[return SA_RESTART;]])],
+    [make_cv_sa_restart=yes],
+    [make_cv_sa_restart=no])])
+
+if test "$make_cv_sa_restart" != no; then
+  AC_DEFINE(HAVE_SA_RESTART, 1,
+     [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 ;;
+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.]);;
+esac
+
+# if we have both lstat() and readlink() then we can support symlink
+# timechecks.
+case "$ac_cv_func_lstat/$ac_cv_func_readlink" in
+  yes/yes)
+    AC_DEFINE(MAKE_SYMLINKS, 1,
+              [Define to 1 to enable symbolic link timestamp checking.]);;
+esac
+
+# Find the SCCS commands, so we can include them in our default rules.
+
+AC_CACHE_CHECK(for location of SCCS get command, make_cv_path_sccs_get, [
+if test -f /usr/sccs/get; then
+  make_cv_path_sccs_get=/usr/sccs/get
+else
+  make_cv_path_sccs_get=get
+fi])
+AC_DEFINE_UNQUOTED(SCCS_GET, ["$make_cv_path_sccs_get"],
+                  [Define to the name of the SCCS 'get' command.])
+
+ac_clean_files="$ac_clean_files s.conftest conftoast" # Remove these later.
+if ( /usr/sccs/admin -n s.conftest || admin -n s.conftest ) >/dev/null 2>&1 &&
+   test -f s.conftest; then
+  # We successfully created an SCCS file.
+  AC_CACHE_CHECK(if SCCS get command understands -G, make_cv_sys_get_minus_G, [
+    if $make_cv_path_sccs_get -Gconftoast s.conftest >/dev/null 2>&1 &&
+       test -f conftoast; then
+       make_cv_sys_get_minus_G=yes
+    else
+       make_cv_sys_get_minus_G=no
+    fi])
+  case "$make_cv_sys_get_minus_G" in
+    yes) AC_DEFINE(SCCS_GET_MINUS_G, 1,
+           [Define to 1 if the SCCS 'get' command understands the '-G<file>' option.]);;
+  esac
+fi
+rm -f s.conftest conftoast
+
+# Check the system to see if it provides GNU glob.  If not, use our
+# local version.
+AC_MSG_CHECKING(if system libc has GNU glob)
+AC_CACHE_VAL(make_cv_sys_gnu_glob, [
+ AC_EGREP_CPP(gnu glob,[
+#include <features.h>
+#include <glob.h>
+#include <fnmatch.h>
+
+#define GLOB_INTERFACE_VERSION 1
+#if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1
+# include <gnu-versions.h>
+# if _GNU_GLOB_INTERFACE_VERSION == GLOB_INTERFACE_VERSION
+   gnu glob
+# endif
+#endif
+ ], [AC_MSG_RESULT(yes)
+make_cv_sys_gnu_glob=yes], [AC_MSG_RESULT([no; using local copy])
+make_cv_sys_gnu_glob=no])])
+if test "$make_cv_sys_gnu_glob" = no; then
+  GLOBINC='-I$(srcdir)/glob'
+  GLOBLIB=glob/libglob.a
+fi
+AC_SUBST(GLOBINC)
+AC_SUBST(GLOBLIB)
+
+# Tell automake about this, so it can build the right .c files.
+AM_CONDITIONAL(USE_LOCAL_GLOB, test "$make_cv_sys_gnu_glob" = no)
+
+# Let the makefile know what our build host is
+
+AC_DEFINE_UNQUOTED(MAKE_HOST,"$host",[Build host information.])
+MAKE_HOST="$host"
+AC_SUBST(MAKE_HOST)
+
+w32_target_env=no
+AM_CONDITIONAL([WINDOWSENV], false)
+
+case "$host" in
+  *-*-mingw32)
+    AM_CONDITIONAL(WINDOWSENV, true)
+    w32_target_env=yes
+    AC_DEFINE([WINDOWS32], [1], [Use platform specific coding])
+    AC_DEFINE([HAVE_DOS_PATHS], [1], [Use platform specific coding])
+    ;;
+esac
+
+AC_DEFINE_UNQUOTED(PATH_SEPARATOR_CHAR,'$PATH_SEPARATOR',[Define to the character that separates directories in PATH.])
+
+# Include the Maintainer's Makefile section, if it's here.
+
+MAINT_MAKEFILE=/dev/null
+if test -r "$srcdir/maintMakefile"; then
+  MAINT_MAKEFILE="$srcdir/maintMakefile"
+fi
+AC_SUBST_FILE(MAINT_MAKEFILE)
+
+# Allow building with dmalloc
+AM_WITH_DMALLOC
+
+# Forcibly disable SET_MAKE.  If it's set it breaks things like the test
+# scripts, etc.
+SET_MAKE=
+
+# Sanity check and inform the user of what we found
+
+case "$make_badcust" in
+  yes) echo
+       echo "WARNING: --with-customs specified but no customs.h could be found;"
+       echo "         disabling Customs support."
+       echo ;;
+esac
+
+case "$with_customs" in
+  ""|n|no|y|ye|yes) ;;
+  *) if test -f "$with_customs/lib/libcustoms.a"; then
+       :
+     else
+       echo
+       echo "WARNING: '$with_customs/lib' does not appear to contain the"
+       echo "         Customs library.  You must build and install Customs"
+       echo "         before compiling GNU make."
+       echo
+     fi ;;
+esac
+
+case "$has_wait_nohang" in
+  no) echo
+      echo "WARNING: Your system has neither waitpid() nor wait3()."
+      echo "         Without one of these, signal handling is unreliable."
+      echo "         You should be aware that running GNU make with -j"
+      echo "         could result in erratic behavior."
+      echo ;;
+esac
+
+case "$make_cv_job_server/$user_job_server" in
+  no/yes) echo
+         echo "WARNING: Make job server requires a POSIX-ish system that"
+         echo "         supports the pipe(), sigaction(), and either"
+          echo "         waitpid() or wait3() functions.  Your system doesn't"
+         echo "         appear to provide one or more of those."
+         echo "         Disabling job server support."
+          echo ;;
+esac
+
+
+# Specify what files are to be created.
+AC_CONFIG_FILES(Makefile glob/Makefile po/Makefile.in config/Makefile doc/Makefile w32/Makefile)
+
+# OK, do it!
+
+AC_OUTPUT
+
+# We only generate the build.sh if we have a build.sh.in; we won't have
+# one before we've created a distribution.
+if test -f "$srcdir/build.sh.in"; then
+  ./config.status --file build.sh
+  chmod +x build.sh
+fi
+
+dnl Local Variables:
+dnl comment-start: "dnl "
+dnl comment-end: ""
+dnl comment-start-skip: "\\bdnl\\b\\s *"
+dnl compile-command: "make configure config.h.in"
+dnl End:
diff --git a/job.c b/job.c
index febfac0..170ead9 100644 (file)
--- a/job.c
+++ b/job.c
@@ -27,6 +27,14 @@ this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <string.h>
 
+#if defined (HAVE_LINUX_BINFMTS_H) && defined (HAVE_SYS_USER_H)
+#include <sys/user.h>
+#include <linux/binfmts.h>
+#ifndef PAGE_SIZE
+#define PAGE_SIZE getpagesize()
+#endif
+#endif
+
 /* Default shell to use.  */
 #ifdef WINDOWS32
 #include <windows.h>
@@ -3057,6 +3065,7 @@ construct_command_argv_internal (char *line, char **restp, char *shell,
 #ifdef WINDOWS32
     char *command_ptr = NULL; /* used for batch_mode_shell mode */
 #endif
+    char *args_ptr;
 
 # ifdef __EMX__ /* is this necessary? */
     if (!unixy_shell && shellflags)
@@ -3222,8 +3231,17 @@ construct_command_argv_internal (char *line, char **restp, char *shell,
         return new_argv;
       }
 
+#ifdef MAX_ARG_STRLEN
+    static char eval_line[] = "eval\\ \\\"set\\ x\\;\\ shift\\;\\ ";
+#define ARG_NUMBER_DIGITS 5
+#define EVAL_LEN (sizeof(eval_line)-1 + shell_len + 4                   \
+                  + (7 + ARG_NUMBER_DIGITS) * 2 * line_len / (MAX_ARG_STRLEN - 2))
+#else
+#define EVAL_LEN 0
+#endif
+
     new_line = xmalloc ((shell_len*2) + 1 + sflags_len + 1
-                        + (line_len*2) + 1);
+                        + (line_len*2) + 1 + EVAL_LEN);
     ap = new_line;
     /* Copy SHELL, escaping any characters special to the shell.  If
        we don't escape them, construct_command_argv_internal will
@@ -3243,6 +3261,30 @@ construct_command_argv_internal (char *line, char **restp, char *shell,
 #ifdef WINDOWS32
     command_ptr = ap;
 #endif
+
+#if !defined (WINDOWS32) && defined (MAX_ARG_STRLEN)
+    if (unixy_shell && line_len > MAX_ARG_STRLEN)
+      {
+       unsigned j;
+       memcpy (ap, eval_line, sizeof (eval_line) - 1);
+       ap += sizeof (eval_line) - 1;
+       for (j = 1; j <= 2 * line_len / (MAX_ARG_STRLEN - 2); j++)
+         ap += sprintf (ap, "\\$\\{%u\\}", j);
+       *ap++ = '\\';
+       *ap++ = '"';
+       *ap++ = ' ';
+       /* Copy only the first word of SHELL to $0.  */
+       for (p = shell; *p != '\0'; ++p)
+         {
+           if (isspace ((unsigned char)*p))
+             break;
+           *ap++ = *p;
+         }
+       *ap++ = ' ';
+      }
+#endif
+    args_ptr = ap;
+
     for (p = line; *p != '\0'; ++p)
       {
         if (restp != NULL && *p == '\n')
@@ -3289,7 +3331,15 @@ construct_command_argv_internal (char *line, char **restp, char *shell,
             p  += 2;
           }
 #endif
-        *ap++ = *p;
+       *ap++ = *p;
+
+#if !defined (WINDOWS32) && defined (MAX_ARG_STRLEN)
+       if (unixy_shell && line_len > MAX_ARG_STRLEN && (ap - args_ptr > MAX_ARG_STRLEN - 2))
+         {
+           *ap++ = ' ';
+           args_ptr = ap;
+         }
+#endif
       }
     if (ap == new_line + shell_len + sflags_len + 2)
       {