b/package/make/make-3.8.2-fix_whitespace_tokenization.patch
new file mode 100644
@@ -0,0 +1,264 @@
+diff --git a/configure b/configure
+index 130f4f8..d9d40de 100755
+--- a/configure
++++ b/configure
+@@ -9379,6 +9379,9 @@ test "x$exec_prefix" = xNONE &&
exec_prefix='${prefix}'
+
+ DEFS=-DHAVE_CONFIG_H
+
++# have lib64 dirs?
++[[ -d /lib64 ]] && DEFS="$DEFS -DHAVE_LIB64DIRS"
++
+ ac_libobjs=
+ ac_ltlibobjs=
+ for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+diff --git a/default.c b/default.c
+index 4d6d984..13ec30a 100644
+--- a/default.c
++++ b/default.c
+@@ -432,7 +432,7 @@ static const char *default_variables[] =
+ #ifdef __convex__
+ "FC", "fc",
+ #else
+- "FC", "f77",
++ "FC", "gfortran",
+ #endif /* __convex__ */
+ #endif /* _IBMR2 */
+ /* System V uses these, so explicit rules using them should work.
+diff --git a/doc/make.texi b/doc/make.texi
+index fc7e8a3..27b0f72 100644
+--- a/doc/make.texi
++++ b/doc/make.texi
+@@ -8706,7 +8706,7 @@ with the recipe @samp{$(PC) $(PFLAGS) -c}.@refill
+ @item Compiling Fortran and Ratfor programs
+ @cindex Fortran, rule to compile
+ @cindex Ratfor, rule to compile
+-@pindex f77
++@pindex gfortran
+ @pindex .f
+ @pindex .r
+ @pindex .F
+diff --git a/function.c b/function.c
+index e2f6c8c..680e954 100644
+--- a/function.c
++++ b/function.c
+@@ -1133,19 +1133,14 @@ func_sort (char *o, char **argv, const char
*funcname UNUSED)
+
+ /* Find the maximum number of words we'll have. */
+ t = argv[0];
+- wordi = 1;
+- while (*t != '\0')
++ wordi = 0;
++ while ((p = find_next_token (&t, &len)) != 0)
+ {
+- char c = *(t++);
+-
+- if (! isspace ((unsigned char)c))
+- continue;
+-
+- ++wordi;
+-
+- while (isspace ((unsigned char)*t))
+- ++t;
++ ++t;
++ wordi++;
+ }
++ if (! wordi)
++ wordi = 1;
+
+ words = xmalloc (wordi * sizeof (char *));
+
+diff --git a/main.c b/main.c
+index c6989e3..8a5cabf 100644
+--- a/main.c
++++ b/main.c
+@@ -1,3 +1,4 @@
++
+ /* Argument parsing and main program of GNU Make.
+ Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
1997,
+ 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
2009,
+@@ -1138,7 +1139,7 @@ main (int argc, char **argv, char **envp)
+ a macro and some compilers (MSVC) don't like conditionals in
macros. */
+ {
+ const char *features = "target-specific order-only
second-expansion"
+- " else-if shortest-stem undefine"
++ " else-if shortest-stem undefine oneshell"
+ #ifndef NO_ARCHIVES
+ " archives"
+ #endif
+@@ -2093,7 +2094,7 @@ main (int argc, char **argv, char **envp)
+ const char *pv = define_makeflags (1, 1);
+ char *p = alloca (sizeof ("MAKEFLAGS=") + strlen (pv) +
1);
+ sprintf (p, "MAKEFLAGS=%s", pv);
+- putenv (p);
++ putenv (allocated_variable_expand (p));
+ }
+
+ if (ISDB (DB_BASIC))
+diff --git a/read.c b/read.c
+index a3ad88e..493cea9 100644
+--- a/read.c
++++ b/read.c
+@@ -3028,7 +3028,7 @@ parse_file_seq (char **stringp, unsigned int
size, int stopchar,
+ {
+ /* This looks like the first element in an open archive
group.
+ A valid group MUST have ')' as the last character.
*/
+- const char *e = p + nlen;
++ const char *e = p;
+ do
+ {
+ e = next_token (e);
+@@ -3084,19 +3084,19 @@ parse_file_seq (char **stringp, unsigned int
size, int stopchar,
+ Go to the next item in the string. */
+ if (flags & PARSEFS_NOGLOB)
+ {
+- NEWELT (concat (2, prefix, tp));
++ NEWELT (concat (2, prefix, tmpbuf));
+ continue;
+ }
+
+ /* If we get here we know we're doing glob expansion.
+ TP is a string in tmpbuf. NLEN is no longer used.
+ We may need to do more work: after this NAME will be set. */
+- name = tp;
++ name = tmpbuf;
+
+ /* Expand tilde if applicable. */
+- if (tp[0] == '~')
++ if (tmpbuf[0] == '~')
+ {
+- tildep = tilde_expand (tp);
++ tildep = tilde_expand (tmpbuf);
+ if (tildep != 0)
+ name = tildep;
+ }
+@@ -3152,7 +3152,11 @@ parse_file_seq (char **stringp, unsigned int
size, int stopchar,
+ else
+ {
+ /* We got a chain of items. Attach them. */
+- (*newp)->next = found;
++ if (*newp)
++ (*newp)->next = found;
++ else
++ *newp = found;
++
+
+ /* Find and set the new end. Massage names if
necessary. */
+ while (1)
+diff --git a/remake.c b/remake.c
+index 27d2550..7c5ee26 100644
+--- a/remake.c
++++ b/remake.c
+@@ -39,6 +39,24 @@ this program. If not, see
<http://www.gnu.org/licenses/>. */
+ #include <io.h>
+ #endif
+
++/* Define biarch platforms. */
++#if defined(__biarch__)
++#define BIARCH_PLATFORM
++#elif defined(__linux__) && \
++ (defined(__x86_64__) || defined(__powerpc64__) || \
++ defined(__s390x__) || defined(__sparc_v9__))
++#define BIARCH_PLATFORM
++#endif
++
++/* Define IS_MODE_32_BIT if we are running under a 32-bit personality.
*/
++#ifdef BIARCH_PLATFORM
++#if defined(__linux__)
++#include <sys/syscall.h>
++#include <sys/personality.h>
++#define IS_MODE_32_BIT ((syscall(SYS_personality, 0xffffffff) &
PER_MASK) == PER_LINUX32)
++#endif
++#endif
++
+ extern int try_implicit_rule (struct file *file, unsigned int depth);
+
+
+@@ -1506,11 +1524,30 @@ name_mtime (const char *name)
+ static const char *
+ library_search (const char *lib, FILE_TIMESTAMP *mtime_ptr)
+ {
+- static char *dirs[] =
++ enum
++ {
++ MODE_32_BIT = 1,
++ MODE_64_BIT = 2,
++#ifdef BIARCH_PLATFORM
++ MODE_NATIVE = MODE_64_BIT
++#else
++ MODE_NATIVE = MODE_32_BIT
++#endif
++ };
++ struct dir
++ {
++ const char *name;
++ int mode;
++ };
++ static const struct dir dirs[] =
+ {
+ #ifndef _AMIGA
+- "/lib",
+- "/usr/lib",
++#if HAVE_LIB64DIRS
++ { "/lib64", MODE_64_BIT },
++ { "/usr/lib64", MODE_64_BIT },
++#endif
++ { "/lib", MODE_32_BIT | MODE_NATIVE },
++ { "/usr/lib", MODE_32_BIT | MODE_NATIVE },
+ #endif
+ #if defined(WINDOWS32) && !defined(LIBDIR)
+ /*
+@@ -1519,8 +1556,8 @@ library_search (const char *lib, FILE_TIMESTAMP
*mtime_ptr)
+ */
+ #define LIBDIR "."
+ #endif
+- LIBDIR, /* Defined by configuration. */
+- 0
++ { LIBDIR, MODE_NATIVE }, /* Defined by configuration. */
++ { 0, 0 }
+ };
+
+ const char *file = 0;
+@@ -1537,7 +1574,14 @@ library_search (const char *lib, FILE_TIMESTAMP
*mtime_ptr)
+ unsigned int best_vpath, best_path;
+ unsigned int std_dirs = 0;
+
+- char **dp;
++ const struct dir *dp;
++
++ /* Check for running mode (personality). */
++ int mode = MODE_NATIVE;
++#ifdef BIARCH_PLATFORM
++ if (IS_MODE_32_BIT)
++ mode = MODE_32_BIT;
++#endif
+
+ libpatterns = xstrdup (variable_expand ("$(.LIBPATTERNS)"));
+
+@@ -1614,9 +1658,9 @@ library_search (const char *lib, FILE_TIMESTAMP
*mtime_ptr)
+
+ if (!buflen)
+ {
+- for (dp = dirs; *dp != 0; ++dp)
++ for (dp = dirs; dp->name != 0; ++dp)
+ {
+- int l = strlen (*dp);