From d1d75c37c446dfbe9cbae503300e17f2973dbf44 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 17 Sep 2012 00:03:15 +0000 Subject: Mon Sep 17 00:03:15 UTC 2012 --- core/make/PKGBUILD | 30 ++++-- core/make/make-3.82-bug30612.patch | 66 ++++++++++++ core/make/make-3.82-bug30723.patch | 12 +++ core/make/make-3.82-dont-prune-intermediate.patch | 57 +++++++++++ core/make/make-3.82-expensive_glob.patch | 116 ++++++++++++++++++++++ core/make/make.install | 4 +- 6 files changed, 273 insertions(+), 12 deletions(-) create mode 100644 core/make/make-3.82-bug30612.patch create mode 100644 core/make/make-3.82-bug30723.patch create mode 100644 core/make/make-3.82-dont-prune-intermediate.patch create mode 100644 core/make/make-3.82-expensive_glob.patch (limited to 'core/make') diff --git a/core/make/PKGBUILD b/core/make/PKGBUILD index 3f38c53f3..8a3be4a9b 100644 --- a/core/make/PKGBUILD +++ b/core/make/PKGBUILD @@ -1,10 +1,10 @@ -# $Id: PKGBUILD 138005 2011-09-14 05:05:13Z allan $ +# $Id: PKGBUILD 166683 2012-09-15 15:22:53Z allan $ # Maintainer: Allan McRae # Contributor: judd pkgname=make pkgver=3.82 -pkgrel=4 +pkgrel=5 pkgdesc="GNU make utility to maintain groups of programs" arch=('i686' 'x86_64') url="http://www.gnu.org/software/make" @@ -12,34 +12,44 @@ license=('GPL3') groups=('base-devel') depends=('glibc' 'sh') install=$pkgname.install -source=(ftp://ftp.gnu.org/gnu/${pkgname}/${pkgname}-${pkgver}.tar.bz2 - bug30612.patch - bug30723.patch +source=(ftp://ftp.gnu.org/gnu/${pkgname}/${pkgname}-${pkgver}.tar.bz2{,.sig} + make-3.82-bug30612.patch + make-3.82-bug30723.patch make-3.82-sort-blank.patch - make-3.82-makeflags.patch) + make-3.82-makeflags.patch + make-3.82-expensive_glob.patch + make-3.82-dont-prune-intermediate.patch) md5sums=('1a11100f3c63fcf5753818e59d63088f' + 'c78daf24f4ec5900c8f81e89a6e1cd5a' 'c8f496b22191f9fb9420ab14c1a19a47' '662e6450e19a5acdaa5c9fcb8ad78dea' '7d01a99f389d8f08dec93ed479071ee4' - 'bc12ad4d0c6e6c0e72d9fb61054f446b') + 'bc12ad4d0c6e6c0e72d9fb61054f446b' + 'e58d4211c5b29d7d927a304d082849e7' + '45ac9e987f4bf16c0d7e1685db943917') build() { cd ${srcdir}/${pkgname}-${pkgver} # http://savannah.gnu.org/bugs/?30612 - patch -Np1 -i $srcdir/bug30612.patch + patch -Np1 -i $srcdir/make-3.82-bug30612.patch # http://savannah.gnu.org/bugs/?30723 - patch -Np1 -i $srcdir/bug30723.patch + patch -Np1 -i $srcdir/make-3.82-bug30723.patch # https://bugs.archlinux.org/task/22733 (fix from Fedora) patch -Np1 -i $srcdir/make-3.82-sort-blank.patch - # https://savannah.gnu.org/support/index.php?107487 # https://savannah.gnu.org/bugs/?33873 patch -Np0 -i $srcdir/make-3.82-makeflags.patch + # http://lists.gnu.org/archive/html/bug-make/2011-04/msg00002.html + patch -Np0 -i $srcdir/make-3.82-expensive_glob.patch + + # https://savannah.gnu.org/bugs/?30653 + patch -Np0 -i $srcdir/make-3.82-dont-prune-intermediate.patch + ./configure --prefix=/usr make } diff --git a/core/make/make-3.82-bug30612.patch b/core/make/make-3.82-bug30612.patch new file mode 100644 index 000000000..fb843bcd9 --- /dev/null +++ b/core/make/make-3.82-bug30612.patch @@ -0,0 +1,66 @@ +diff -Naur make-3.82-orig/main.c make-3.82-fix30612//main.c +--- make-3.82-orig/main.c 2010-07-19 17:10:53.000000000 +1000 ++++ make-3.82-fix30612//main.c 2010-09-23 23:33:37.908855839 +1000 +@@ -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 @@ + 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 +diff -Naur make-3.82-orig/read.c make-3.82-fix30612//read.c +--- make-3.82-orig/read.c 2010-07-13 11:20:42.000000000 +1000 ++++ make-3.82-fix30612//read.c 2010-09-23 23:30:58.018855839 +1000 +@@ -3028,7 +3028,7 @@ + { + /* 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 @@ + 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 @@ + 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/core/make/make-3.82-bug30723.patch b/core/make/make-3.82-bug30723.patch new file mode 100644 index 000000000..84e7ebe7a --- /dev/null +++ b/core/make/make-3.82-bug30723.patch @@ -0,0 +1,12 @@ +diff -Naur make-3.82-orig/main.c make-3.82-fix30723//main.c +--- make-3.82-orig/main.c 2010-07-19 17:10:53.000000000 +1000 ++++ make-3.82-fix30723//main.c 2010-09-23 23:34:10.932188592 +1000 +@@ -2093,7 +2093,7 @@ + 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/core/make/make-3.82-dont-prune-intermediate.patch b/core/make/make-3.82-dont-prune-intermediate.patch new file mode 100644 index 000000000..f4f47dd27 --- /dev/null +++ b/core/make/make-3.82-dont-prune-intermediate.patch @@ -0,0 +1,57 @@ +2012-09-09 Paul Smith + + * remake.c (update_file_1): Force intermediate files to be + considered, not pruned, if their non-intermediate parent needs to + be remade. Fixes Savannah bug #30653. + +Index: remake.c +=================================================================== +RCS file: /sources/make/make/remake.c,v +retrieving revision 1.153 +retrieving revision 1.154 +diff -u -r1.153 -r1.154 +--- remake.c 5 Mar 2012 14:10:45 -0000 1.153 ++++ remake.c 10 Sep 2012 02:36:05 -0000 1.154 +@@ -612,6 +612,10 @@ + d->file->dontcare = file->dontcare; + } + ++ /* We may have already considered this file, when we didn't know ++ we'd need to update it. Force update_file() to consider it and ++ not prune it. */ ++ d->file->considered = !considered; + + dep_status |= update_file (d->file, depth); + +Index: tests/scripts/features/parallelism +=================================================================== +RCS file: /sources/make/make/tests/scripts/features/parallelism,v +retrieving revision 1.19 +retrieving revision 1.20 +diff -u -r1.19 -r1.20 +--- tests/scripts/features/parallelism 4 Mar 2012 00:24:32 -0000 1.19 ++++ tests/scripts/features/parallelism 10 Sep 2012 02:36:05 -0000 1.20 +@@ -214,6 +214,23 @@ + rmfiles(qw(foo.y foo.y.in main.bar)); + } + ++# Ensure intermediate/secondary files are not pruned incorrectly. ++# See Savannah bug #30653 ++ ++utouch(-15, 'file2'); ++utouch(-10, 'file4'); ++utouch(-5, 'file1'); ++ ++run_make_test(q! ++.INTERMEDIATE: file3 ++file4: file3 ; @mv -f $< $@ ++file3: file2 ; touch $@ ++file2: file1 ; @touch $@ ++!, ++ '--no-print-directory -j2', "touch file3"); ++ ++#rmfiles('file1', 'file2', 'file3', 'file4'); ++ + if ($all_tests) { + # Jobserver FD handling is messed up in some way. + # Savannah bug #28189 diff --git a/core/make/make-3.82-expensive_glob.patch b/core/make/make-3.82-expensive_glob.patch new file mode 100644 index 000000000..8663f5039 --- /dev/null +++ b/core/make/make-3.82-expensive_glob.patch @@ -0,0 +1,116 @@ +Index: read.c +=================================================================== +RCS file: /sources/make/make/read.c,v +retrieving revision 1.198 +retrieving revision 1.200 +diff -u -r1.198 -r1.200 +--- read.c 29 Apr 2011 15:27:39 -0000 1.198 ++++ read.c 7 May 2011 14:36:12 -0000 1.200 +@@ -2901,6 +2901,7 @@ + const char *name; + const char **nlist = 0; + char *tildep = 0; ++ int globme = 1; + #ifndef NO_ARCHIVES + char *arname = 0; + char *memname = 0; +@@ -3109,32 +3110,40 @@ + } + #endif /* !NO_ARCHIVES */ + +- switch (glob (name, GLOB_NOSORT|GLOB_ALTDIRFUNC, NULL, &gl)) +- { +- case GLOB_NOSPACE: +- fatal (NILF, _("virtual memory exhausted")); +- +- case 0: +- /* Success. */ +- i = gl.gl_pathc; +- nlist = (const char **)gl.gl_pathv; +- break; +- +- case GLOB_NOMATCH: +- /* If we want only existing items, skip this one. */ +- if (flags & PARSEFS_EXISTS) +- { +- i = 0; +- break; +- } +- /* FALLTHROUGH */ +- +- default: +- /* By default keep this name. */ ++ /* glob() is expensive: don't call it unless we need to. */ ++ if (!(flags & PARSEFS_EXISTS) && strpbrk (name, "?*[") == NULL) ++ { ++ globme = 0; + i = 1; + nlist = &name; +- break; +- } ++ } ++ else ++ switch (glob (name, GLOB_NOSORT|GLOB_ALTDIRFUNC, NULL, &gl)) ++ { ++ case GLOB_NOSPACE: ++ fatal (NILF, _("virtual memory exhausted")); ++ ++ case 0: ++ /* Success. */ ++ i = gl.gl_pathc; ++ nlist = (const char **)gl.gl_pathv; ++ break; ++ ++ case GLOB_NOMATCH: ++ /* If we want only existing items, skip this one. */ ++ if (flags & PARSEFS_EXISTS) ++ { ++ i = 0; ++ break; ++ } ++ /* FALLTHROUGH */ ++ ++ default: ++ /* By default keep this name. */ ++ i = 1; ++ nlist = &name; ++ break; ++ } + + /* For each matched element, add it to the list. */ + while (i-- > 0) +@@ -3174,7 +3183,8 @@ + #endif /* !NO_ARCHIVES */ + NEWELT (concat (2, prefix, nlist[i])); + +- globfree (&gl); ++ if (globme) ++ globfree (&gl); + + #ifndef NO_ARCHIVES + if (arname) +Index: tests/scripts/functions/wildcard +=================================================================== +RCS file: /sources/make/make/tests/scripts/functions/wildcard,v +retrieving revision 1.6 +retrieving revision 1.7 +diff -u -r1.6 -r1.7 +--- tests/scripts/functions/wildcard 13 Jun 2009 21:21:49 -0000 1.6 ++++ tests/scripts/functions/wildcard 7 May 2011 14:36:11 -0000 1.7 +@@ -88,4 +88,16 @@ + !, + '', "\n"); + ++# TEST #5: wildcard used to verify file existence ++ ++touch('xxx.yyy'); ++ ++run_make_test(q!exists: ; @echo file=$(wildcard xxx.yyy)!, ++ '', "file=xxx.yyy\n"); ++ ++unlink('xxx.yyy'); ++ ++run_make_test(q!exists: ; @echo file=$(wildcard xxx.yyy)!, ++ '', "file=\n"); ++ + 1; diff --git a/core/make/make.install b/core/make/make.install index 6cf8b0dc4..84260853c 100644 --- a/core/make/make.install +++ b/core/make/make.install @@ -2,7 +2,7 @@ infodir=usr/share/info filelist=(make.info make.info-1 make.info-2) post_install() { - [ -x usr/bin/install-info ] || return 0 + [[ -x usr/bin/install-info ]] || return 0 for file in ${filelist[@]}; do install-info $infodir/$file.gz $infodir/dir 2> /dev/null done @@ -13,7 +13,7 @@ post_upgrade() { } pre_remove() { - [ -x usr/bin/install-info ] || return 0 + [[ -x usr/bin/install-info ]] || return 0 for file in ${filelist[@]}; do install-info --delete $infodir/$file.gz $infodir/dir 2> /dev/null done -- cgit v1.2.3-54-g00ecf