summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'sys-devel/make')
-rw-r--r--sys-devel/make/files/make-4.1-fix_double_colon_rules_plus_parallel_builds.patch139
-rw-r--r--sys-devel/make/make-4.2-r1.ebuild54
2 files changed, 193 insertions, 0 deletions
diff --git a/sys-devel/make/files/make-4.1-fix_double_colon_rules_plus_parallel_builds.patch b/sys-devel/make/files/make-4.1-fix_double_colon_rules_plus_parallel_builds.patch
new file mode 100644
index 000000000000..af7a9f2f6bb4
--- /dev/null
+++ b/sys-devel/make/files/make-4.1-fix_double_colon_rules_plus_parallel_builds.patch
@@ -0,0 +1,139 @@
+From 9bb994e8319c2b153cd3d6d61e2c2882895e7c3a Mon Sep 17 00:00:00 2001
+From: Joe Crayne <oh.hello.joe@gmail.com>
+Date: Sat, 21 May 2016 21:26:00 +0000
+Subject: [SV 44742] Fix double-colon rules plus parallel builds.
+
+* remake.c (update_file): Don't update double-colon target status
+if we're still building targets.
+(ftime_t): Don't propagate timestamps for double-colon targets that
+we've not examined yet.
+* tests/scripts/features/double_colon: Add parallel build tests.
+
+Copyright-paperwork-exempt: yes
+---
+diff --git a/remake.c b/remake.c
+index 63ee648..df1a9e0 100644
+--- a/remake.c
++++ b/remake.c
+@@ -320,7 +320,7 @@ update_file (struct file *file, unsigned int depth)
+ && !f->dontcare && f->no_diag))
+ {
+ DBF (DB_VERBOSE, _("Pruning file '%s'.\n"));
+- return f->command_state == cs_finished ? f->update_status : 0;
++ return f->command_state == cs_finished ? f->update_status : us_success;
+ }
+ }
+
+@@ -344,12 +344,9 @@ update_file (struct file *file, unsigned int depth)
+
+ if (f->command_state == cs_running
+ || f->command_state == cs_deps_running)
+- {
+- /* Don't run the other :: rules for this
+- file until this rule is finished. */
+- status = us_success;
+- break;
+- }
++ /* Don't run other :: rules for this target until
++ this rule is finished. */
++ return us_success;
+
+ if (new > status)
+ status = new;
+@@ -1274,6 +1271,7 @@ FILE_TIMESTAMP
+ f_mtime (struct file *file, int search)
+ {
+ FILE_TIMESTAMP mtime;
++ int propagate_timestamp;
+
+ /* File's mtime is not known; must get it from the system. */
+
+@@ -1450,10 +1448,13 @@ f_mtime (struct file *file, int search)
+ }
+ }
+
+- /* Store the mtime into all the entries for this file. */
++ /* Store the mtime into all the entries for this file for which it is safe
++ to do so: avoid propagating timestamps to double-colon rules that haven't
++ been examined so they're run or not based on the pre-update timestamp. */
+ if (file->double_colon)
+ file = file->double_colon;
+
++ propagate_timestamp = file->updated;
+ do
+ {
+ /* If this file is not implicit but it is intermediate then it was
+@@ -1465,7 +1466,8 @@ f_mtime (struct file *file, int search)
+ && !file->tried_implicit && file->intermediate)
+ file->intermediate = 0;
+
+- file->last_mtime = mtime;
++ if (file->updated == propagate_timestamp)
++ file->last_mtime = mtime;
+ file = file->prev;
+ }
+ while (file != 0);
+diff --git a/tests/scripts/features/double_colon b/tests/scripts/features/double_colon
+index 1097775..80ddb31 100644
+--- a/tests/scripts/features/double_colon
++++ b/tests/scripts/features/double_colon
+@@ -151,8 +151,7 @@ two');
+
+ unlink('result','one','two');
+
+-# TEST 10: check for proper backslash handling
+-# Savannah bug #33399
++# TEST 10: SV 33399 : check for proper backslash handling
+
+ run_make_test('
+ a\ xb :: ; @echo one
+@@ -160,5 +159,47 @@ a\ xb :: ; @echo two
+ ',
+ '', "one\ntwo\n");
+
++# Test 11: SV 44742 : All double-colon rules should be run in parallel build.
++
++run_make_test('result :: 01
++ @echo update
++ @touch $@
++result :: 02
++ @echo update
++ @touch $@
++result :: 03
++ @echo update
++ @touch $@
++result :: 04
++ @echo update
++ @touch $@
++result :: 05
++ @echo update
++ @touch $@
++01 02 03 04 05:
++ @touch 01 02 03 04 05
++',
++ '-j10 result', "update\nupdate\nupdate\nupdate\nupdate\n");
++
++unlink('result', '01', '02', '03', '04', '05');
++
++# Test 12: SV 44742 : Double-colon rules with parallelism
++
++run_make_test('
++root: all
++ echo root
++all::
++ echo all_one
++all:: 3
++ echo all_two
++%:
++ sleep $*
++',
++ '-rs -j2 1 2 root', "all_one\nall_two\nroot\n");
++
+ # This tells the test driver that the perl test script executed properly.
+ 1;
++
++### Local Variables:
++### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action))
++### End:
+--
+cgit v0.9.0.2
diff --git a/sys-devel/make/make-4.2-r1.ebuild b/sys-devel/make/make-4.2-r1.ebuild
new file mode 100644
index 000000000000..4f5d2e3f6783
--- /dev/null
+++ b/sys-devel/make/make-4.2-r1.ebuild
@@ -0,0 +1,54 @@
+# Copyright 1999-2016 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=5
+
+inherit flag-o-matic eutils
+
+DESCRIPTION="Standard tool to compile source trees"
+HOMEPAGE="https://www.gnu.org/software/make/make.html"
+SRC_URI="mirror://gnu//make/${P}.tar.bz2"
+
+LICENSE="GPL-3+"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~ppc-aix ~amd64-fbsd ~sparc-fbsd ~x86-fbsd ~x64-freebsd ~x86-freebsd ~hppa-hpux ~ia64-hpux ~x86-interix ~amd64-linux ~arm-linux ~ia64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~m68k-mint ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
+IUSE="guile nls static"
+
+CDEPEND="guile? ( >=dev-scheme/guile-1.8:= )"
+DEPEND="${CDEPEND}
+ nls? ( sys-devel/gettext )"
+RDEPEND="${CDEPEND}
+ nls? ( virtual/libintl )"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-3.82-darwin-library_search-dylib.patch
+)
+
+src_prepare() {
+ epatch "${PATCHES[@]}"
+
+ # Revert this upstream commit until a real fix is available.
+ # See https://bugs.gentoo.org/583812
+ EPATCH_OPTS="-R" \
+ epatch "${FILESDIR}"/${PN}-4.1-fix_double_colon_rules_plus_parallel_builds.patch
+}
+
+src_configure() {
+ use static && append-ldflags -static
+ econf \
+ --program-prefix=g \
+ $(use_with guile) \
+ $(use_enable nls)
+}
+
+src_install() {
+ emake DESTDIR="${D}" install
+ dodoc AUTHORS NEWS README*
+ if [[ ${USERLAND} == "GNU" ]] ; then
+ # we install everywhere as 'gmake' but on GNU systems,
+ # symlink 'make' to 'gmake'
+ dosym gmake /usr/bin/make
+ dosym gmake.1 /usr/share/man/man1/make.1
+ fi
+}