diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d08b116 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +SOURCES/make-4.2.1.tar.bz2 +/make-4.2.1.tar.bz2 diff --git a/make-4.0-newlines.patch b/make-4.0-newlines.patch new file mode 100644 index 0000000..add32c5 --- /dev/null +++ b/make-4.0-newlines.patch @@ -0,0 +1,19 @@ +diff -Nrup a/job.c b/job.c +--- a/job.c 2014-02-03 18:23:45.936436714 -0500 ++++ b/job.c 2014-02-04 00:17:53.232074893 -0500 +@@ -3269,13 +3269,14 @@ construct_command_argv_internal (char *l + #endif + if (PRESERVE_BSNL) + { +- *(ap++) = '\\'; ++ *(ap++) = '\''; + /* Only non-batch execution needs another backslash, + because it will be passed through a recursive + invocation of this function. */ + if (!batch_mode_shell) + *(ap++) = '\\'; + *(ap++) = '\n'; ++ *(ap++) = '\''; + } + ++p; + continue; diff --git a/make-4.0-noclock_gettime.patch b/make-4.0-noclock_gettime.patch new file mode 100644 index 0000000..f63e1fc --- /dev/null +++ b/make-4.0-noclock_gettime.patch @@ -0,0 +1,14 @@ +diff -up make-3.82/configure\~ make-3.82/configure +--- make-3.82/configure~ 2010-07-28 07:41:51.000000000 +0200 ++++ make-3.82/configure 2010-08-11 15:07:50.000000000 +0200 +@@ -7215,7 +7215,7 @@ return clock_gettime (); + return 0; + } + _ACEOF +-for ac_lib in '' rt posix4; do ++for ac_lib in '' posix4; do + if test -z "$ac_lib"; then + ac_res="none required" + else + +Diff finished. Wed Aug 11 15:07:59 2010 diff --git a/make-4.0-weird-shell.patch b/make-4.0-weird-shell.patch new file mode 100644 index 0000000..dfdaf89 --- /dev/null +++ b/make-4.0-weird-shell.patch @@ -0,0 +1,16 @@ +diff -up make-3.82/job.c\~ make-3.82/job.c +--- make-3.82/job.c~ 2010-08-11 16:13:33.000000000 +0200 ++++ make-3.82/job.c 2010-08-12 14:20:08.000000000 +0200 +@@ -2442,7 +2442,11 @@ construct_command_argv_internal (char *l + + /* See if it is safe to parse commands internally. */ + if (shell == 0) +- shell = default_shell; ++ { ++ shell = default_shell; ++ if (shellflags == 0) ++ shellflags = "-c"; ++ } + #ifdef WINDOWS32 + else if (strcmp (shell, default_shell)) + { diff --git a/make-4.2-getcwd.patch b/make-4.2-getcwd.patch new file mode 100644 index 0000000..6c47238 --- /dev/null +++ b/make-4.2-getcwd.patch @@ -0,0 +1,12 @@ +diff -Nrup a/makeint.h b/makeint.h +--- a/makeint.h 2016-05-21 16:22:32.000000000 -0400 ++++ b/makeint.h 2016-09-22 16:12:38.606702160 -0400 +@@ -596,7 +596,7 @@ long int lseek (); + # endif + + # ifdef HAVE_GETCWD +-# if !defined(VMS) && !defined(__DECC) ++# if !defined(VMS) && !defined(__DECC) && !defined(getcwd) + char *getcwd (); + # endif + # else diff --git a/make-4.2-j8k.patch b/make-4.2-j8k.patch new file mode 100644 index 0000000..2b9d7fc --- /dev/null +++ b/make-4.2-j8k.patch @@ -0,0 +1,25 @@ +diff -Nrup a/main.c b/main.c +--- a/main.c 2016-05-31 03:17:26.000000000 -0400 ++++ b/main.c 2016-09-22 16:18:52.283889265 -0400 +@@ -2051,6 +2051,21 @@ main (int argc, char **argv, char **envp + } + #endif + ++#ifdef PIPE_BUF ++ if (job_slots > PIPE_BUF) ++#elif defined _POSIX_PIPE_BUF ++ if (job_slots > _POSIX_PIPE_BUF) ++#else ++ if (job_slots > 512) ++#endif ++ { ++ O (error, NILF, ++ _("More parallel jobs (-jN) than this platform can handle requested.")); ++ O (error, NILF, _("Resetting to single job (-j1) mode.")); ++ job_slots = 1; ++ } ++ ++ + /* If we have >1 slot at this point, then we're a top-level make. + Set up the jobserver. + diff --git a/make-4.2.1-glob-fix-2.patch b/make-4.2.1-glob-fix-2.patch new file mode 100644 index 0000000..911e315 --- /dev/null +++ b/make-4.2.1-glob-fix-2.patch @@ -0,0 +1,67 @@ +From 193f1e81edd6b1b56b0eb0ff8aa4b41c7b4257b4 Mon Sep 17 00:00:00 2001 +From: Paul Eggert +Date: Sun, 24 Sep 2017 09:12:58 -0400 +Subject: glob: Do not assume glibc glob internals. + +It has been proposed that glibc glob start using gl_lstat, +which the API allows it to do. GNU 'make' should not get in +the way of this. See: +https://sourceware.org/ml/libc-alpha/2017-09/msg00409.html + +* dir.c (local_lstat): New function, like local_stat. +(dir_setup_glob): Use it to initialize gl_lstat too, as the API +requires. +--- + dir.c | 29 +++++++++++++++++++++++++++-- + 1 file changed, 27 insertions(+), 2 deletions(-) + +diff --git a/dir.c b/dir.c +index adbb8a9..c343e4c 100644 +--- a/dir.c ++++ b/dir.c +@@ -1299,15 +1299,40 @@ local_stat (const char *path, struct stat *buf) + } + #endif + ++/* Similarly for lstat. */ ++#if !defined(lstat) && !defined(WINDOWS32) || defined(VMS) ++# ifndef VMS ++# ifndef HAVE_SYS_STAT_H ++int lstat (const char *path, struct stat *sbuf); ++# endif ++# else ++ /* We are done with the fake lstat. Go back to the real lstat */ ++# ifdef lstat ++# undef lstat ++# endif ++# endif ++# define local_lstat lstat ++#elif defined(WINDOWS32) ++/* Windows doesn't support lstat(). */ ++# define local_lstat local_stat ++#else ++static int ++local_lstat (const char *path, struct stat *buf) ++{ ++ int e; ++ EINTRLOOP (e, lstat (path, buf)); ++ return e; ++} ++#endif ++ + void + dir_setup_glob (glob_t *gl) + { + gl->gl_opendir = open_dirstream; + gl->gl_readdir = read_dirstream; + gl->gl_closedir = free; ++ gl->gl_lstat = local_lstat; + gl->gl_stat = local_stat; +- /* We don't bother setting gl_lstat, since glob never calls it. +- The slot is only there for compatibility with 4.4 BSD. */ + } + + void +-- +cgit v1.0-41-gc330 + diff --git a/make-4.2.1-glob-fix-3.patch b/make-4.2.1-glob-fix-3.patch new file mode 100644 index 0000000..879fe50 --- /dev/null +++ b/make-4.2.1-glob-fix-3.patch @@ -0,0 +1,15 @@ +diff -Nrup a/configure b/configure +--- a/configure 2018-03-18 23:53:43.991741060 -0400 ++++ b/configure 2018-03-18 23:52:52.456028175 -0400 +@@ -11481,10 +11481,9 @@ else + #include + #include + +-#define GLOB_INTERFACE_VERSION 1 + #if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1 + # include +-# if _GNU_GLOB_INTERFACE_VERSION == GLOB_INTERFACE_VERSION ++# if _GNU_GLOB_INTERFACE_VERSION == 1 || _GNU_GLOB_INTERFACE_VERSION == 2 + gnu glob + # endif + #endif diff --git a/make-4.2.1-glob-fix.patch b/make-4.2.1-glob-fix.patch new file mode 100644 index 0000000..be3abae --- /dev/null +++ b/make-4.2.1-glob-fix.patch @@ -0,0 +1,28 @@ +From 48c8a116a914a325a0497721f5d8b58d5bba34d4 Mon Sep 17 00:00:00 2001 +From: Paul Smith +Date: Sun, 19 Nov 2017 15:09:16 -0500 +Subject: * configure.ac: Support GLIBC glob interface version 2 + +--- + configure.ac | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 8c72568..4710832 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -404,10 +404,9 @@ AC_CACHE_CHECK([if system libc has GNU glob], [make_cv_sys_gnu_glob], + #include + #include + +-#define GLOB_INTERFACE_VERSION 1 + #if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1 + # include +-# if _GNU_GLOB_INTERFACE_VERSION == GLOB_INTERFACE_VERSION ++# if _GNU_GLOB_INTERFACE_VERSION == 1 || _GNU_GLOB_INTERFACE_VERSION == 2 + gnu glob + # endif + #endif], +-- +cgit v1.0-41-gc330 + diff --git a/make-4.2.1-jvar.patch b/make-4.2.1-jvar.patch new file mode 100644 index 0000000..0e86baa --- /dev/null +++ b/make-4.2.1-jvar.patch @@ -0,0 +1,442 @@ +From 0c5a9f9b92af1634dc60fa21e9ac86ed50e5d595 Mon Sep 17 00:00:00 2001 +From: Paul Smith +Date: Mon, 30 Oct 2017 12:53:49 -0400 +Subject: * main.c (main): [SV 48274] Allow -j in makefile MAKEFLAGS variable. + +* tests/jhelp.pl: New file to allow testing parallelism without sleep. +* tests/scripts/features/parallelism: Test this. +* tests/scripts/features/jobserver: Update tests. +* tests/scripts/features/output-sync: Remove useless rm command. +--- + main.c | 80 ++++++++++++++++++++++++++-------- + tests/jhelp.pl | 63 +++++++++++++++++++++++++++ + tests/scripts/features/jobserver | 6 +-- + tests/scripts/features/output-sync | 2 +- + tests/scripts/features/parallelism | 89 +++++++++++++++++++++----------------- + 5 files changed, 177 insertions(+), 63 deletions(-) + create mode 100755 tests/jhelp.pl + +diff -rupN a/main.c b/main.c +--- a/main.c 2021-10-18 15:23:21.769274000 -0400 ++++ b/main.c 2021-10-18 15:30:43.579608645 -0400 +@@ -1482,7 +1482,7 @@ main (int argc, char **argv, char **envp + || output_sync == OUTPUT_SYNC_TARGET); + OUTPUT_SET (&make_sync); + +- /* Remember the job slots set through the environment vs. command line. */ ++ /* Parse the command line options. Remember the job slots set this way. */ + { + int env_slots = arg_job_slots; + arg_job_slots = INVALID_JOB_SLOTS; +@@ -1609,41 +1609,38 @@ main (int argc, char **argv, char **envp + /* We may move, but until we do, here we are. */ + starting_directory = current_directory; + +- /* Set up the job_slots value and the jobserver. This can't be usefully set +- in the makefile, and we want to verify the authorization is valid before +- make has a chance to start using it for something else. */ ++ /* Validate the arg_job_slots configuration before we define MAKEFLAGS so ++ users get an accurate value in their makefiles. ++ At this point arg_job_slots is the argv setting, if there is one, else ++ the MAKEFLAGS env setting, if there is one. */ + + if (jobserver_auth) + { ++ /* We're a child in an existing jobserver group. */ + if (argv_slots == INVALID_JOB_SLOTS) + { ++ /* There's no -j option on the command line: check authorization. */ + if (jobserver_parse_auth (jobserver_auth)) + { + /* Success! Use the jobserver. */ +- job_slots = 0; + goto job_setup_complete; + } + ++ /* Oops: we have jobserver-auth but it's invalid :(. */ + O (error, NILF, _("warning: jobserver unavailable: using -j1. Add '+' to parent make rule.")); + arg_job_slots = 1; + } + +- /* The user provided a -j setting on the command line: use it. */ ++ /* The user provided a -j setting on the command line so use it: we're ++ the master make of a new jobserver group. */ + else if (!restarts) +- /* If restarts is >0 we already printed this message. */ +- O (error, NILF, +- _("warning: -jN forced in submake: disabling jobserver mode.")); ++ ON (error, NILF, ++ _("warning: -j%d forced in submake: resetting jobserver mode."), ++ argv_slots); + +- /* We failed to use our parent's jobserver. */ ++ /* We can't use our parent's jobserver, so reset. */ + reset_jobserver (); +- job_slots = (unsigned int)arg_job_slots; + } +- else if (arg_job_slots == INVALID_JOB_SLOTS) +- /* The default is one job at a time. */ +- job_slots = 1; +- else +- /* Use whatever was provided. */ +- job_slots = (unsigned int)arg_job_slots; + + job_setup_complete: + +@@ -1999,6 +1996,9 @@ main (int argc, char **argv, char **envp + { + int old_builtin_rules_flag = no_builtin_rules_flag; + int old_builtin_variables_flag = no_builtin_variables_flag; ++ int old_arg_job_slots = arg_job_slots; ++ ++ arg_job_slots = INVALID_JOB_SLOTS; + + /* Decode switches again, for variables set by the makefile. */ + decode_env_switches (STRING_SIZE_TUPLE ("GNUMAKEFLAGS")); +@@ -2011,6 +2011,24 @@ main (int argc, char **argv, char **envp + decode_env_switches (STRING_SIZE_TUPLE ("MFLAGS")); + #endif + ++ /* If -j is not set in the makefile, or it was set on the command line, ++ reset to use the previous value. */ ++ if (arg_job_slots == INVALID_JOB_SLOTS || argv_slots != INVALID_JOB_SLOTS) ++ arg_job_slots = old_arg_job_slots; ++ ++ else if (jobserver_auth) ++ { ++ /* Makefile MAKEFLAGS set -j, but we already have a jobserver. ++ Make us the master of a new jobserver group. */ ++ if (!restarts) ++ ON (error, NILF, ++ _("warning: -j%d forced in makefile: resetting jobserver mode."), ++ arg_job_slots); ++ ++ /* We can't use our parent's jobserver, so reset. */ ++ reset_jobserver (); ++ } ++ + /* Reset in case the switches changed our mind. */ + syncing = (output_sync == OUTPUT_SYNC_LINE + || output_sync == OUTPUT_SYNC_TARGET); +@@ -2037,8 +2055,31 @@ main (int argc, char **argv, char **envp + undefine_default_variables (); + } + ++ /* Final jobserver configuration. ++ ++ If we have jobserver_auth then we are a client in an existing jobserver ++ group, that's already been verified OK above. If we don't have ++ jobserver_auth and jobserver is enabled, then start a new jobserver. ++ ++ arg_job_slots = INVALID_JOB_SLOTS if we don't want -j in MAKEFLAGS ++ ++ arg_job_slots = # of jobs of parallelism ++ ++ job_slots = 0 for no limits on jobs, or when limiting via jobserver. ++ ++ job_slots = 1 for standard non-parallel mode. ++ ++ job_slots >1 for old-style parallelism without jobservers. */ ++ ++ if (jobserver_auth) ++ job_slots = 0; ++ else if (arg_job_slots == INVALID_JOB_SLOTS) ++ job_slots = 1; ++ else ++ job_slots = arg_job_slots; ++ + #if defined (__MSDOS__) || defined (__EMX__) || defined (VMS) +- if (arg_job_slots != 1 ++ if (job_slots != 1 + # ifdef __EMX__ + && _osmode != OS2_MODE /* turn off -j if we are in DOS mode */ + # endif +@@ -2047,7 +2088,8 @@ main (int argc, char **argv, char **envp + O (error, NILF, + _("Parallel jobs (-j) are not supported on this platform.")); + O (error, NILF, _("Resetting to single job (-j1) mode.")); +- arg_job_slots = job_slots = 1; ++ arg_job_slots = INVALID_JOB_SLOTS; ++ job_slots = 1; + } + #endif + +diff -rupN a/tests/jhelp.pl b/tests/jhelp.pl +--- a/tests/jhelp.pl 1969-12-31 19:00:00.000000000 -0500 ++++ b/tests/jhelp.pl 2021-10-18 15:30:43.582608763 -0400 +@@ -0,0 +1,63 @@ ++#!/usr/bin/env perl ++# -*-perl-*- ++# ++# This script helps us test jobserver/parallelism without a lot of unreliable ++# (and slow) sleep calls. Written in Perl to get portable sub-second sleep. ++# ++# It can run the following steps based on arguments: ++# -t : maximum # of seconds the script can run; else we fail. ++# Default is 4 seconds. ++# -e : echo to stdout ++# -f : echo to stdout AND create an (empty) file named ++# -w : wait for a file named to exist ++ ++# Force flush ++$| = 1; ++ ++my $timeout = 4; ++ ++sub op { ++ my ($op, $nm) = @_; ++ ++ defined $nm or die "Missing value for $op\n"; ++ ++ if ($op eq '-e') { ++ print "$nm\n"; ++ return 1; ++ } ++ ++ if ($op eq '-f') { ++ print "$nm\n"; ++ open(my $fh, '>', $nm) or die "$nm: open: $!\n"; ++ close(my $fh); ++ return 1; ++ } ++ ++ if ($op eq '-w') { ++ if (-f $nm) { ++ return 1; ++ } ++ select(undef, undef, undef, 0.1); ++ return 0; ++ } ++ ++ if ($op eq '-t') { ++ $timeout = $nm; ++ return 1; ++ } ++ ++ die("Invalid command: $op $nm\n"); ++} ++ ++my $start = time(); ++while (@ARGV) { ++ if (op($ARGV[0], $ARGV[1])) { ++ shift; ++ shift; ++ } ++ if ($start + $timeout < time()) { ++ die("Timeout after ".(time()-$start-1)." seconds\n"); ++ } ++} ++ ++exit(0); +diff -rupN a/tests/scripts/features/jobserver b/tests/scripts/features/jobserver +--- a/tests/scripts/features/jobserver 2016-04-09 19:07:29.000000000 -0400 ++++ b/tests/scripts/features/jobserver 2021-10-18 15:30:43.585608880 -0400 +@@ -42,7 +42,7 @@ recurse: ; @echo $@: "/$(SHOW)/"; $(MAKE + recurse2: ; @echo $@: "/$(SHOW)/"; $(MAKE) -f #MAKEFILE# all + all:;@echo $@: "/$(SHOW)/" + !, +- "-j2 $np", "recurse: /-j2 --jobserver-auth= $np/\n#MAKE#[1]: warning: -jN forced in submake: disabling jobserver mode.\nrecurse2: /-j3 --jobserver-auth= $np/\nall: /-j3 --jobserver-auth= $np/\n"); ++ "-j2 $np", "recurse: /-j2 --jobserver-auth= $np/\n#MAKE#[1]: warning: -j3 forced in submake: resetting jobserver mode.\nrecurse2: /-j3 --jobserver-auth= $np/\nall: /-j3 --jobserver-auth= $np/\n"); + delete $extraENV{MAKEFLAGS}; + + # Test override of -jN with -j +@@ -52,7 +52,7 @@ recurse: ; @echo $@: "/$(SHOW)/"; $(MAKE + recurse2: ; @echo $@: "/$(SHOW)/"; $(MAKE) -f #MAKEFILE# all + all:;@echo $@: "/$(SHOW)/" + !, +- "-j2 $np", "recurse: /-j2 --jobserver-auth= $np/\n#MAKE#[1]: warning: -jN forced in submake: disabling jobserver mode.\nrecurse2: /-j $np/\nall: /-j $np/\n"); ++ "-j2 $np", "recurse: /-j2 --jobserver-auth= $np/\n#MAKE#[1]: warning: -j0 forced in submake: resetting jobserver mode.\nrecurse2: /-j $np/\nall: /-j $np/\n"); + + # Don't put --jobserver-auth into a re-exec'd MAKEFLAGS. + # We can't test this directly because there's no way a makefile can +@@ -76,7 +76,7 @@ inc.mk: + # @echo 'MAKEFLAGS = $(MAKEFLAGS)' + @echo 'FOO = bar' > $@ + !, +- "$np -j2", "#MAKE#[1]: warning: -jN forced in submake: disabling jobserver mode.\nall\n"); ++ "$np -j2", "#MAKE#[1]: warning: -j2 forced in submake: resetting jobserver mode.\nall\n"); + + unlink('inc.mk'); + +diff -rupN a/tests/scripts/features/output-sync b/tests/scripts/features/output-sync +--- a/tests/scripts/features/output-sync 2016-04-23 10:09:35.000000000 -0400 ++++ b/tests/scripts/features/output-sync 2021-10-18 15:31:40.903857757 -0400 +@@ -45,7 +45,7 @@ sub output_sync_clean { + # reliable. If things are too fast, then sometimes a different job will steal + # the output sync lock and the output is mis-ordered from what we expect. + sub output_sync_wait { +- return "while [ ! -f ../mksync.$_[0] ]; do :; done; rm -f ../mksync.$_[0].wait; $sleep_command 1"; ++ return "while [ ! -f ../mksync.$_[0] ]; do :; done; $sleep_command 1"; + } + sub output_sync_set { + return "date > ../mksync.$_[0]"; +diff -rupN a/tests/scripts/features/parallelism b/tests/scripts/features/parallelism +--- a/tests/scripts/features/parallelism 2016-04-11 07:50:44.000000000 -0400 ++++ b/tests/scripts/features/parallelism 2021-10-18 17:12:39.005009030 -0400 +@@ -1,17 +1,7 @@ + # -*-perl-*- + + $description = "Test parallelism (-j) option."; +- +- +-$details = "This test creates a makefile with two double-colon default +-rules. The first rule has a series of sleep and echo commands +-intended to run in series. The second and third have just an +-echo statement. When make is called in this test, it is given +-the -j option with a value of 4. This tells make that it may +-start up to four jobs simultaneously. In this case, since the +-first command is a sleep command, the output of the second +-and third commands will appear before the first if indeed +-make is running all of these commands in parallel."; ++$details = ""; + + if (!$parallel_jobs) { + return -1; +@@ -24,13 +14,36 @@ else { + $sleep_command = "sleep"; + } + ++rmfiles(qw(ONE TWO THREE FOUR)); + + run_make_test(" + all : def_1 def_2 def_3 +-def_1 : ; \@echo ONE; $sleep_command 3 ; echo TWO +-def_2 : ; \@$sleep_command 2 ; echo THREE +-def_3 : ; \@$sleep_command 1 ; echo FOUR", ++def_1 : ; \@#PERL# jhelp.pl -f ONE -w THREE -e TWO ++def_2 : ; \@#PERL# jhelp.pl -w FOUR -f THREE ++def_3 : ; \@#PERL# jhelp.pl -w ONE -f FOUR", + '-j4', "ONE\nFOUR\nTHREE\nTWO"); ++rmfiles(qw(ONE TWO THREE FOUR)); ++ ++# Verify -j added to MAKEFLAGS in the makefile ++run_make_test(" ++MAKEFLAGS += -j4 ++all : def_1 def_2 def_3 ++def_1 : ; \@#PERL# jhelp.pl -f ONE -w THREE -e TWO ++def_2 : ; \@#PERL# jhelp.pl -w FOUR -f THREE ++def_3 : ; \@#PERL# jhelp.pl -w ONE -f FOUR", ++ '', "ONE\nFOUR\nTHREE\nTWO"); ++rmfiles(qw(ONE TWO THREE FOUR)); ++ ++# Command line should take precedence ++rmfiles(qw(ONE TWO THREE FOUR)); ++run_make_test(" ++MAKEFLAGS += -j2 ++all : def_1 def_2 def_3 ++def_1 : ; \@#PERL# jhelp.pl -f ONE -w THREE -e TWO ++def_2 : ; \@#PERL# jhelp.pl -w FOUR -f THREE ++def_3 : ; \@#PERL# jhelp.pl -w ONE -f FOUR", ++ '-j4', "ONE\nFOUR\nTHREE\nTWO"); ++rmfiles(qw(ONE TWO THREE FOUR)); + + # Test parallelism with included files. Here we sleep/echo while + # building the included files, to test that they are being built in +@@ -38,12 +51,12 @@ def_3 : ; \@$sleep_command 1 ; echo FOUR + run_make_test(" + all: 1 2; \@echo success + -include 1.inc 2.inc +-1.inc: ; \@echo ONE.inc; $sleep_command 2; echo TWO.inc; echo '1: ; \@echo ONE; $sleep_command 2; echo TWO' > \$\@ +-2.inc: ; \@$sleep_command 1; echo THREE.inc; echo '2: ; \@$sleep_command 1; echo THREE' > \$\@", ++1.inc: ; \@#PERL# jhelp.pl -f ONE.inc -w THREE.inc -f TWO.inc; echo '1: ; \@#PERL# jhelp.pl -f ONE -w THREE -f TWO' > \$\@ ++2.inc: ; \@#PERL# jhelp.pl -w ONE.inc -f THREE.inc; echo '2: ; \@#PERL# jhelp.pl -w ONE -f THREE' > \$\@", + "-j4", + "ONE.inc\nTHREE.inc\nTWO.inc\nONE\nTHREE\nTWO\nsuccess\n", 0, 7); + +-rmfiles(qw(1.inc 2.inc)); ++rmfiles(qw(ONE.inc TWO.inc THREE.inc ONE TWO THREE 1.inc 2.inc)); + + + # Test parallelism with included files--this time recurse first and make +@@ -57,12 +70,12 @@ ifeq (\$(INC),yes) + -include 1.inc 2.inc + endif + +-1.inc: ; \@echo ONE.inc; $sleep_command 2; echo TWO.inc; echo '1: ; \@echo ONE; $sleep_command 2; echo TWO' > \$\@ +-2.inc: ; \@$sleep_command 1; echo THREE.inc; echo '2: ; \@$sleep_command 1; echo THREE' > \$\@", ++1.inc: ; \@#PERL# jhelp.pl -f ONE.inc -w THREE.inc -f TWO.inc; echo '1: ; \@#PERL# jhelp.pl -f ONE -w THREE -f TWO' > \$\@ ++2.inc: ; \@#PERL# jhelp.pl -w ONE.inc -f THREE.inc; echo '2: ; \@#PERL# jhelp.pl -w ONE -f THREE' > \$\@", + "-j4", + "ONE.inc\nTHREE.inc\nTWO.inc\nONE\nTHREE\nTWO\nsuccess\n", 0, 7); + +-rmfiles(qw(1.inc 2.inc)); ++rmfiles(qw(ONE.inc TWO.inc THREE.inc ONE TWO THREE 1.inc 2.inc)); + + # Grant Taylor reports a problem where tokens can be lost (not written back + # to the pipe when they should be): this happened when there is a $(shell ...) +@@ -90,21 +103,23 @@ run_make_test(" + .PHONY: all fail.1 fail.2 fail.3 ok + all: fail.1 ok fail.2 fail.3 + ++.RECIPEPREFIX := > ++ + fail.1 fail.2 fail.3: +- \@$sleep_command \$(patsubst fail.%,%,\$\@) +- \@echo Fail +- \@exit 1 ++> \@$sleep_command \$(patsubst fail.%,%,\$\@) ++> \@echo Fail ++> \@exit 1 + + ok: +- \@$sleep_command 4 +- \@echo Ok done", ++> \@$sleep_command 4 ++> \@echo Ok done", + '-rR -j5', "Fail +-#MAKE#: *** [#MAKEFILE#:8: fail.1] Error 1 ++#MAKE#: *** [#MAKEFILE#:10: fail.1] Error 1 + #MAKE#: *** Waiting for unfinished jobs.... + Fail +-#MAKE#: *** [#MAKEFILE#:8: fail.2] Error 1 ++#MAKE#: *** [#MAKEFILE#:10: fail.2] Error 1 + Fail +-#MAKE#: *** [#MAKEFILE#:8: fail.3] Error 1 ++#MAKE#: *** [#MAKEFILE#:10: fail.3] Error 1 + Ok done", + 512); + +@@ -117,13 +132,11 @@ all:; @: + + -include foo.d + +-foo.d: comp +- @echo building $@ ++foo.d: comp ; @echo building $@ + + comp: mod_a.o mod_b.o; @: + +-mod_a.o mod_b.o: +- @exit 1 ++mod_a.o mod_b.o: ; @exit 1 + ', '-j2', ''); + + +@@ -148,15 +161,15 @@ $extraENV{MAKEFLAGS} = '-j4'; + run_make_test(q! + things = thing1 thing2 + all: $(things) +-thing1:; @sleep 1; echo '$@ start'; sleep 2; echo '$@ end' +-thing2:; @echo '$@ start'; sleep 2; echo '$@ end' ++thing1:; @#PERL# jhelp.pl -w thing2start -f $@start -w thing2end -e $@end ++thing2:; @#PERL# jhelp.pl -f $@start -w thing1start -f $@end + -include inc.mk + inc.mk: ; @touch $@ + !, +- '', "thing2 start\nthing1 start\nthing2 end\nthing1 end\n"); ++ '', "thing2start\nthing1start\nthing2end\nthing1end\n"); + + delete $extraENV{MAKEFLAGS}; +-rmfiles('inc.mk'); ++rmfiles(qw(inc.mk thing1start thing1end thing2start thing2end)); + + # Ensure intermediate/secondary files are not pruned incorrectly. + # See Savannah bug #30653 +@@ -211,7 +224,3 @@ rmfiles('file1', 'file2', 'file3', 'file + # rmfiles(qw(dependfile output)); + + 1; +- +-### Local Variables: +-### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action)) +-### End: diff --git a/make-4.2.1-nonblocking-reads.patch b/make-4.2.1-nonblocking-reads.patch new file mode 100644 index 0000000..76b9545 --- /dev/null +++ b/make-4.2.1-nonblocking-reads.patch @@ -0,0 +1,164 @@ +From b552b05251980f693c729e251f93f5225b400714 Mon Sep 17 00:00:00 2001 +From: Paul Smith +Date: Sat, 3 Jun 2017 16:20:51 -0400 +Subject: [SV 51159] Use a non-blocking read with pselect to avoid hangs. + +* posixos.c (set_blocking): Set blocking on a file descriptor. +(jobserver_setup): Set non-blocking on the jobserver read side. +(jobserver_parse_auth): Ditto. +(jobserver_acquire_all): Set blocking to avoid a busy-wait loop. +(jobserver_acquire): If the non-blocking read() returns without +taking a token then try again. + +diff --git a/posixos.c b/posixos.c +index e642d7f..dbafa51 100644 +--- a/posixos.c ++++ b/posixos.c +@@ -62,6 +62,24 @@ make_job_rfd (void) + #endif + } + ++static void ++set_blocking (int fd, int blocking) ++{ ++ // If we're not using pselect() don't change the blocking ++#ifdef HAVE_PSELECT ++ int flags; ++ EINTRLOOP (flags, fcntl (fd, F_GETFL)); ++ if (flags >= 0) ++ { ++ int r; ++ flags = blocking ? (flags & ~O_NONBLOCK) : (flags | O_NONBLOCK); ++ EINTRLOOP (r, fcntl (fd, F_SETFL, flags)); ++ if (r < 0) ++ pfatal_with_name ("fcntl(O_NONBLOCK)"); ++ } ++#endif ++} ++ + unsigned int + jobserver_setup (int slots) + { +@@ -86,6 +104,9 @@ jobserver_setup (int slots) + pfatal_with_name (_("init jobserver pipe")); + } + ++ /* When using pselect() we want the read to be non-blocking. */ ++ set_blocking (job_fds[0], 0); ++ + return 1; + } + +@@ -121,6 +142,9 @@ jobserver_parse_auth (const char *auth) + return 0; + } + ++ /* When using pselect() we want the read to be non-blocking. */ ++ set_blocking (job_fds[0], 0); ++ + return 1; + } + +@@ -169,7 +193,10 @@ jobserver_acquire_all (void) + { + unsigned int tokens = 0; + +- /* Close the write side, so the read() won't hang. */ ++ /* Use blocking reads to wait for all outstanding jobs. */ ++ set_blocking (job_fds[0], 1); ++ ++ /* Close the write side, so the read() won't hang forever. */ + close (job_fds[1]); + job_fds[1] = -1; + +@@ -236,18 +263,12 @@ jobserver_pre_acquire (void) + unsigned int + jobserver_acquire (int timeout) + { +- sigset_t empty; +- fd_set readfds; + struct timespec spec; + struct timespec *specp = NULL; +- int r; +- char intake; ++ sigset_t empty; + + sigemptyset (&empty); + +- FD_ZERO (&readfds); +- FD_SET (job_fds[0], &readfds); +- + if (timeout) + { + /* Alarm after one second (is this too granular?) */ +@@ -256,28 +277,52 @@ jobserver_acquire (int timeout) + specp = &spec; + } + +- r = pselect (job_fds[0]+1, &readfds, NULL, NULL, specp, &empty); +- +- if (r == -1) ++ while (1) + { +- /* Better be SIGCHLD. */ +- if (errno != EINTR) +- pfatal_with_name (_("pselect jobs pipe")); +- return 0; +- } ++ fd_set readfds; ++ int r; ++ char intake; + +- if (r == 0) +- /* Timeout. */ +- return 0; ++ FD_ZERO (&readfds); ++ FD_SET (job_fds[0], &readfds); + +- /* The read FD is ready: read it! */ +- EINTRLOOP (r, read (job_fds[0], &intake, 1)); +- if (r < 0) +- pfatal_with_name (_("read jobs pipe")); ++ r = pselect (job_fds[0]+1, &readfds, NULL, NULL, specp, &empty); ++ if (r < 0) ++ switch (errno) ++ { ++ case EINTR: ++ /* SIGCHLD will show up as an EINTR. */ ++ return 0; ++ ++ case EBADF: ++ /* Someone closed the jobs pipe. ++ That shouldn't happen but if it does we're done. */ ++ O (fatal, NILF, _("job server shut down")); + +- /* What does it mean if read() returns 0? It shouldn't happen because only +- the master make can reap all the tokens and close the write side...?? */ +- return r > 0; ++ default: ++ pfatal_with_name (_("pselect jobs pipe")); ++ } ++ ++ if (r == 0) ++ /* Timeout. */ ++ return 0; ++ ++ /* The read FD is ready: read it! This is non-blocking. */ ++ EINTRLOOP (r, read (job_fds[0], &intake, 1)); ++ ++ if (r < 0) ++ { ++ /* Someone sniped our token! Try again. */ ++ if (errno == EAGAIN) ++ continue; ++ ++ pfatal_with_name (_("read jobs pipe")); ++ } ++ ++ /* read() should never return 0: only the master make can reap all the ++ tokens and close the write side...?? */ ++ return r > 0; ++ } + } + + #else diff --git a/make-4.2.1-test-driver.patch b/make-4.2.1-test-driver.patch new file mode 100644 index 0000000..1d6ce89 --- /dev/null +++ b/make-4.2.1-test-driver.patch @@ -0,0 +1,27 @@ +diff -Nrup a/tests/run_make_tests.pl b/tests/run_make_tests.pl +--- a/tests/run_make_tests.pl 2016-04-04 01:38:37.000000000 -0400 ++++ b/tests/run_make_tests.pl 2018-03-19 00:46:11.329131847 -0400 +@@ -58,8 +58,8 @@ if ($^O eq 'VMS') + *CORE::GLOBAL::rmdir = \&vms_rmdir; + } + +-require "test_driver.pl"; +-require "config-flags.pm"; ++require "./test_driver.pl"; ++require "./config-flags.pm"; + + # Some target systems might not have the POSIX module... + $has_POSIX = eval { require "POSIX.pm" }; +diff -Nrup a/tests/test_driver.pl b/tests/test_driver.pl +--- a/tests/test_driver.pl 2018-03-19 00:41:11.982406829 -0400 ++++ b/tests/test_driver.pl 2018-03-19 00:54:12.484794671 -0400 +@@ -165,7 +165,7 @@ sub toplevel + $detail = 0; # detailed verbosity + $keep = 0; # keep temp files around + $workdir = "work"; # The directory where the test will start running +- $scriptdir = "scripts"; # The directory where we find the test scripts ++ $scriptdir = "./scripts"; # The directory where we find the test scripts + $tmpfilesuffix = "t"; # the suffix used on tmpfiles + $default_output_stack_level = 0; # used by attach_default_output, etc. + $default_input_stack_level = 0; # used by attach_default_input, etc. + diff --git a/make.spec b/make.spec new file mode 100644 index 0000000..abf56b2 --- /dev/null +++ b/make.spec @@ -0,0 +1,519 @@ +# -*- coding: utf-8 -*- +Summary: A GNU tool which simplifies the build process for users +Name: make +Epoch: 1 +Version: 4.2.1 +Release: 11%{?dist} +License: GPLv3+ +Group: Development/Tools +URL: http://www.gnu.org/software/make/ +Source: ftp://ftp.gnu.org/gnu/make/make-%{version}.tar.bz2 + +Patch0: make-4.2-getcwd.patch +Patch1: make-4.0-newlines.patch + +# Assume we don't have clock_gettime in configure, so that +# make is not linked against -lpthread (and thus does not +# limit stack to 2MB). +Patch2: make-4.0-noclock_gettime.patch + +# BZs #142691, #17374 +Patch3: make-4.2-j8k.patch + +# Upstream: https://savannah.gnu.org/bugs/?30748 +# The default value of .SHELL_FLAGS is -c. +Patch4: make-4.0-weird-shell.patch + +# Upstream patch: https://git.savannah.gnu.org/cgit/make.git/patch/?id=193f1e81edd6b1b56b0eb0ff8aa4b41c7b4257b4 +# Fixes wrong assumptions of glibc's glob internals. +Patch5: make-4.2.1-glob-fix-2.patch +# Upstream patch: https://git.savannah.gnu.org/cgit/make.git/patch/?id=48c8a116a914a325a0497721f5d8b58d5bba34d4 +# Fixes incorrect use of glibc 2.27 glob internals. +Patch6: make-4.2.1-glob-fix.patch +Patch7: make-4.2.1-glob-fix-3.patch + +# Perl 5.26 is removed the implicit CWD in @INC. +# Provide relative path. Also provide better error for missing tests. +Patch8: make-4.2.1-test-driver.patch + +# Upstream patch: https://git.savannah.gnu.org/cgit/make.git/commit/?id=b552b05251980f693c729e251f93f5225b400714 +# Avoids hangs in parallel builds +Patch9: make-4.2.1-nonblocking-reads.patch + +# Upstream patch: https://git.savannah.gnu.org/cgit/make.git/commit/?id=0c5a9f9b92af1634dc60fa21e9ac86ed50e5d595 +# BZ 2004246 - allow setting -j within the Makefile +Patch10: make-4.2.1-jvar.patch + +# Unfortunately the glob patches configure.ac, so: +BuildRequires: autoconf, automake + +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +Requires(post): /sbin/install-info +Requires(preun): /sbin/install-info +BuildRequires: procps +BuildRequires: perl-interpreter + +%description +A GNU tool for controlling the generation of executables and other +non-source files of a program from the program's source files. Make +allows users to build and install packages without any significant +knowledge about the details of the build process. The details about +how the program should be built are provided for make in the program's +makefile. + +%package devel +Summary: Header file for externally visible definitions +Group: Development/Libraries + +%description devel +The make-devel package contains gnumake.h. + +%prep +%autosetup -p1 + +rm -f tests/scripts/features/parallelism.orig + +%build +# Since we made a change to configure.ac (and configure) touch +# the files to avoid rebuild problems with automake versioning. +# Specifically make expects 1.15 but some systems use 1.16.1. +touch `find . -name configure` +touch `find . -name aclocal.m4` +touch `find . -name Makefile.in` + +%configure +make %{?_smp_mflags} + +%install +rm -rf ${RPM_BUILD_ROOT} +make DESTDIR=$RPM_BUILD_ROOT install +ln -sf make ${RPM_BUILD_ROOT}/%{_bindir}/gmake +ln -sf make.1 ${RPM_BUILD_ROOT}/%{_mandir}/man1/gmake.1 +rm -f ${RPM_BUILD_ROOT}/%{_infodir}/dir + +%find_lang %name + +%check +echo ============TESTING=============== +/usr/bin/env LANG=C make -k check && true +echo ============END TESTING=========== + +%clean +rm -rf ${RPM_BUILD_ROOT} + +%post +if [ -f %{_infodir}/make.info.gz ]; then # for --excludedocs + /sbin/install-info %{_infodir}/make.info.gz %{_infodir}/dir --entry="* Make: (make). The GNU make utility." || : +fi + +%preun +if [ $1 = 0 ]; then + if [ -f %{_infodir}/make.info.gz ]; then # for --excludedocs + /sbin/install-info --delete %{_infodir}/make.info.gz %{_infodir}/dir --entry="* Make: (make). The GNU make utility." || : + fi +fi + +%files -f %{name}.lang +%defattr(-,root,root) +%license COPYING +%doc NEWS README AUTHORS +%{_bindir}/* +%{_mandir}/man*/* +%{_infodir}/*.info* +%{_includedir}/gnumake.h + +%files devel +%defattr(-,root,root) +%{_includedir}/gnumake.h + +%changelog +* Mon Oct 18 2021 DJ Delorie - 1:4.2.1-11 +- Allow -j in MAKEFLAGS. BZ #2004246 + +* Fri Dec 20 2019 DJ Delorie - 1:4.2.1-10 +- Use a non-blocking read with pselect to avoid hangs. BZ #1774790 + +* Fri Sep 28 2018 Patsy Griffin Franklin 1:4.2.1-9 +- Add -k to make check to insure that all tests are run even if failures + occur. + +* Fri Jul 20 2018 Patsy Griffin Franklin 1:4.2.1-8 +- Do not enable Guile support. (#1569105) + +* Mon Jun 11 2018 Patsy Griffin Franklin 1:4.2.1-7 +- Fix build failure caused by automake versioning differences related + to the glob changes. (#1589769) +- Fix testing failure due to Perl changes related to expanding paths. + +* Fri Feb 02 2018 Igor Gnatenko - 1:4.2.1-6 +- Fix wrong assumptions of glibc's glob internals + +* Thu Feb 01 2018 Richard W.M. Jones - 1:4.2.1-5 +- Add upstream patch to fix incorrect use of glibc 2.27 glob internals. + +* Thu Aug 03 2017 Fedora Release Engineering - 1:4.2.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 1:4.2.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Wed Feb 01 2017 Stephen Gallagher - 4.2.1-2 +- Add missing %%license macro + +* Sun Sep 25 2016 Fedora Release Engineering - 1:4.2.1-1 +- Rebase to make-4.2.1. Remove obsolete patches. BZ #1338558 + +* Sun Sep 25 2016 Fedora Release Engineering - 1:4.1-6 +- Make test suite requires Perl to run. + +* Thu Feb 04 2016 Fedora Release Engineering - 1:4.1-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Wed Nov 4 2015 Patsy Franklin 1:4.1-4 +- Handle NULL returns from ttyname() Upstream Bug 43434. + Resolves: #1277968 + +* Thu Oct 29 2015 Patsy Franklin 1:4.1-3 +- Enable Guile support. + +* Thu Oct 29 2015 Patsy Franklin 1:4.1-2 +- Include patches dropped in last update as they fix reported bugs and + update the spec file to include more info on the patches. + +* Sat Oct 24 2015 Zbigniew Jędrzejewski-Szmek - 1:4.1-1 +- Update to latest version + +* Wed Jun 17 2015 Fedora Release Engineering - 1:4.0-5.1 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Sat Feb 21 2015 Till Maas - 1:4.0-4.1 +- Rebuilt for Fedora 23 Change + https://fedoraproject.org/wiki/Changes/Harden_all_packages_with_position-independent_code + +* Wed Sep 03 2014 Kyle McMartin - 1:4.0-3.1 +- Pass the test-suite unconditionally until I fix the tests to cope with + deterministic ar archives (which result in expected rebuilds not occuring) + +* Sun Aug 17 2014 Fedora Release Engineering - 1:4.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Sat Jun 07 2014 Fedora Release Engineering - 1:4.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Wed Apr 30 2014 Patsy Franklin 1:4.0-1 +- Rebase to make-4.0 + - Created make-devel sub-package to handle new dependency on gnumake.h. + +* Thu Aug 22 2013 Petr Machata - 1:3.82-19 +- make now restores rlimit to its original values before launching + subprocess via $(shell) (make-3.82-func_shell-rlimit.patch) +- Determinize one test (make-3.82-tests-SECONDARY.patch) + +* Fri Jul 26 2013 Petr Machata - 1:3.82-18 +- Backport upstream patch that adds wildcard expansion to pattern + rules. (make-3.82-stem_glob.patch) + +* Wed Jun 19 2013 Petr Machata - 1:3.82-17 +- Add another fix for upstream bug 30612 + +* Thu Apr 4 2013 Petr Machata - 1:3.82-16 +- Update config.sub and config.guess to support aarch64 + +* Thu Feb 14 2013 Fedora Release Engineering - 1:3.82-15 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Thu Nov 29 2012 Petr Machata - 1:3.82-14 +- Drop patch5, which hasn't been applied for years + +* Mon Sep 10 2012 Petr Machata - 1:3.82-13 +- Add fix for upstream bug 30653 +- Resolves: #835424 + +* Fri Jul 27 2012 Fedora Release Engineering - 1:3.82-12 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Tue Mar 13 2012 Petr Machata - 1:3.82-11 +- Add a patch for avoiding glob if possible by Michael Meeks + +* Mon Mar 12 2012 Petr Machata - 1:3.82-10 +- Apply the following patches, proposed upstream by Norbert Thiebaud: + - A patch for warning on call of undefined function + - A patch for tracing calls to "eval" and "call" + +* Fri Jan 13 2012 Fedora Release Engineering - 1:3.82-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Thu Nov 3 2011 Petr Machata - 1:3.82-8 +- Add a patch for preserving -j across Makefile rebuild +- Resolves: #698702 + +* Wed Oct 26 2011 Fedora Release Engineering - 1:3.82-7 +- Rebuilt for glibc bug#747377 + +* Thu May 12 2011 Lubomir Rintel - 1:3.82-6 +- Fix free-after-use with nested assignments (#703104) + +* Tue Feb 08 2011 Fedora Release Engineering - 1:3.82-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Wed Oct 27 2010 Petr Machata - 1:3.82-4 +- Fix a discrepancy between behavior of find_next_token and + pre-allocation of token memory in func_sort. +- Resolves: #643359 + +* Wed Sep 29 2010 jkeating - 1:3.82-3 +- Rebuilt for gcc bug 634757 + +* Mon Sep 13 2010 Petr Machata - 1:3.82-2 +- Add upstream fixes for upstream bugs 30612 and 30723 +- Resolves: #631552 + +* Wed Aug 11 2010 Petr Machata - 1:3.82-1 +- Upstream 3.82: + - Drop rlimit, fdleak, strcpy-overlap, recursion-test, double-free + patches, make supports this functionality now + - Disable the memory patch for the time being + - Port remaining patches + - Add weird-shell patch, upstream bug 30748 +- Resolves: #618998 + +* Wed Aug 11 2010 Petr Machata - 1:3.81-21 +- Add BR procps +- Resolves: #616813 + +* Thu Jul 1 2010 Petr Machata - 1:3.81-20 +- Add a patch by Steve Kemp @debian that might fix the double free + problem. +- Related: #609806 + +* Fri Jun 4 2010 Petr Machata - 1:3.81-19 +- Fix testsuite on F13 +- Resolves: #600004 + +* Tue Aug 11 2009 Petr Machata - 1:3.81-18 +- Fix installation with --excludedocs +- Resolves: #515917 + +* Fri Jul 31 2009 Petr Machata - 1:3.81-17 +- Replace the use of strcpy on overlapping areas with memmove +- Resolves: #514721 + +* Sat Jul 25 2009 Fedora Release Engineering - 1:3.81-16 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Wed Feb 25 2009 Fedora Release Engineering - 1:3.81-15 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Mon Sep 22 2008 Petr Machata - 1:3.81-14 +- Fix patches to apply cleanly with fuzz=0 + +* Tue Sep 16 2008 Petr Machata - 1:3.81-13 +- Mark opened files as cloexec to prevent their leaking through fork +- Resolves: #462090 + +* Tue Mar 25 2008 Petr Machata - 1:3.81-12 +- Fix the rlimit patch. The success flag is kept in memory shared + with parent process after vfork, and so cannot be reset. +- Related: #214033 + +* Tue Feb 19 2008 Fedora Release Engineering - 1:3.81-11 +- Autorebuild for GCC 4.3 + +* Thu Oct 4 2007 Petr Machata - 1:3.81-10 +- Fix parallel builds with reexec. +- Related: #212111, #211290 + +* Thu Oct 4 2007 Petr Machata - 1:3.81-8 +- Cleaned up per merge review. +- Related: #226120 + +* Thu Aug 16 2007 Petr Machata - 1:3.81-7 +- Fix licensing tag. + +* Fri Mar 16 2007 Petr Machata - 1:3.81-6 +- Always run testsuite with C locale. +- Resolves: #232607 + +* Thu Feb 22 2007 Petr Machata - 1:3.81-5 +- Fix newline handling for quoted SHELL. +- Resolves: #219409 + +* Fri Feb 2 2007 Petr Machata - 1:3.81-4 +- Tidy up the specfile per rpmlint comments +- Use utf-8 and fix national characters in contributor's names + +* Thu Jan 25 2007 Petr Machata - 1:3.81-3 +- Ville Skyttä: patch for non-failing %%post, %%preun +- Resolves: #223709 + +* Thu Jan 25 2007 Petr Machata - 1:3.81-2 +- make now restores rlimit to its original values before launching + subprocess (#214033) + +* Wed Jul 12 2006 Jesse Keating - 1:3.81-1.1 +- rebuild + +* Tue May 23 2006 Petr Machata - 1:3.81-1 +- Upstream 3.81: + - Contains several backwards incompatible changes. See NEWS inside + the source package to find out more. +- memory patch and error reporting patch were ported to this version. + +* Wed Mar 15 2006 Petr Machata 1:3.80-11 +- Applied (five years old) patch from Jonathan Kamens to allow make to + handle several pattern-specific variables (#52962). + + The patch was changed so that it forces make to process pattern + specific variables in the same order as they appear in file. + (Upstream make behaves this way, too.) This is change from old make + behavior, which processed the variables in reverse order. In case + you used only x=a assignments, this had the effect of using the + first pattern specific variable that matched. For x+=a this just + doesn't work, and it produces absolutely nonintuitive results. + +- (It would be great if make's target-specific variables were handled + the same way as pattern-specific ones, just without the pattern + component. However current handling is documented and considered a + feature.) + +* Fri Feb 10 2006 Jesse Keating - 1:3.80-10.2 +- bump again for double-long bug on ppc(64) + +* Tue Feb 07 2006 Jesse Keating - 1:3.80-10.1 +- rebuilt for new gcc4.1 snapshot and glibc changes + +* Thu Feb 02 2006 Petr Machata 3.80-10 +- H.J. Lu caught a typo in the patch and provided a new one. (#175376) + +* Mon Jan 09 2006 Petr Machata 3.80-9 +- Applied patch from H.J. Lu. Somehow reduces make's enormous memory + consumption. (#175376) + +* Fri Dec 09 2005 Jesse Keating +- rebuilt + +* Mon Aug 22 2005 Jakub Jelinek 3.80-8 +- make sure errno for error reporting is not lost accross _() calls +- report EOF on read pipe differently from read returning < 0 reporting + +* Mon Mar 7 2005 Jakub Jelinek 3.80-7 +- rebuilt with GCC 4 + +* Mon Dec 13 2004 Jakub Jelinek 3.80-6 +- refuse -jN where N is bigger than PIPE_BUF (#142691, #17374) + +* Thu Oct 7 2004 Jakub Jelinek 3.80-5 +- add URL rpm tag (#134799) + +* Tue Jun 15 2004 Elliot Lee +- rebuilt + +* Fri Feb 13 2004 Elliot Lee +- rebuilt + +* Tue Dec 02 2003 Florian La Roche +- add important bug-fixes from make home-page + +* Sun Nov 30 2003 Florian La Roche +- update to 3.80 + +* Wed Jun 04 2003 Elliot Lee +- rebuilt + +* Wed Jan 22 2003 Tim Powers +- rebuilt + +* Sun Dec 29 2002 Tim Powers +- fix references to %%install in the changelog so that the package will build + +* Tue Dec 03 2002 Elliot Lee 3.79.1-15 +- _smp_mflags +- Fix ppc build (sys_siglist issues in patch2) + +* Fri Jun 21 2002 Tim Powers +- automated rebuild + +* Thu May 23 2002 Tim Powers +- automated rebuild + +* Thu May 23 2002 Jakub Jelinek +- Run make check during build + +* Thu May 23 2002 Bernhard Rosenkraenzer +- Fix build with current auto* tools + +* Fri Jan 25 2002 Jakub Jelinek +- rebuilt with gcc 3.1 + +* Fri Jul 6 2001 Trond Eivind Glomsrød +- s/Copyright/License/ +- langify +- Make sure it isn't setgid if built as root + +* Sun Jun 24 2001 Elliot Lee +- Bump release + rebuild. + +* Mon Aug 7 2000 Tim Waugh +- change info-dir entry so that 'info make' works (#15029). + +* Tue Aug 1 2000 Jakub Jelinek +- assume we don't have clock_gettime in configure, so that + make is not linked against -lpthread (and thus does not + limit stack to 2MB). + +* Sat Jul 22 2000 Jeff Johnson +- add locale files (#14362). + +* Wed Jul 12 2000 Prospector +- automatic rebuild + +* Sat Jun 24 2000 Preston Brown +- 3.79.1 bugfix release + +* Mon Jun 5 2000 Jeff Johnson +- FHS packaging. + +* Sun May 7 2000 Bernhard Rosenkraenzer +- Fix build for some odd situations, such as + - previously installed make != GNU make + - /bin/sh != bash + +* Mon Apr 17 2000 Florian La Roche +- update to 3.79 + +* Thu Feb 24 2000 Cristian Gafton +- add patch from Andreas Jaeger to fix dtype lookups (for glibc 2.1.3 + builds) + +* Mon Feb 7 2000 Jeff Johnson +- compress man page. + +* Fri Jan 21 2000 Cristian Gafton +- apply patch to fix a /tmp race condition from Thomas Biege +- simplify %%install + +* Sat Nov 27 1999 Jeff Johnson +- update to 3.78.1. + +* Thu Apr 15 1999 Bill Nottingham +- added a serial tag so it upgrades right + +* Sun Mar 21 1999 Cristian Gafton +- auto rebuild in the new build environment (release 5) + +* Wed Sep 16 1998 Cristian Gafton +- added a patch for large file support in glob + +* Tue Aug 18 1998 Jeff Johnson +- update to 3.77 + +* Mon Apr 27 1998 Prospector System +- translations modified for de, fr, tr + +* Thu Oct 16 1997 Donnie Barnes +- udpated from 3.75 to 3.76 +- various spec file cleanups +- added install-info support + +* Mon Jun 02 1997 Erik Troan +- built against glibc diff --git a/sources b/sources new file mode 100644 index 0000000..32546cc --- /dev/null +++ b/sources @@ -0,0 +1 @@ +SHA512 (make-4.2.1.tar.bz2) = 9cf00869a2f938492554f71d8cb288b5b009b3bd0489ef164f2c8f6532fc37db5c7e20af1dea288536e7c9710ee0bc6e1ddcdfc4928a8540e6e43661741825b8