diff --git a/make-3.82-trace.patch b/make-3.82-trace.patch new file mode 100644 index 0000000..b8cafa9 --- /dev/null +++ b/make-3.82-trace.patch @@ -0,0 +1,111 @@ + +This patch add the support for --debug=c and --debug=e to make +this option when activated will trace in stdout the activity of $(call and $(eval in the Makefile + +The trace use the format: + ### xxx --> + ### xxx <-- +the number of space before ### is at least 1 and increase with the nesting of eval/call + +usage: make --debug=c,e + +diff -r -u make-3.82/debug.h make-3.82-lo_trace/debug.h +--- make-3.82/debug.h 2010-07-12 20:20:38.000000000 -0500 ++++ make-3.82-lo_trace/debug.h 2011-06-22 12:06:37.000000000 -0500 +@@ -21,6 +21,8 @@ + #define DB_JOBS (0x004) + #define DB_IMPLICIT (0x008) + #define DB_MAKEFILES (0x100) ++#define DB_CALL (0x01000) ++#define DB_EVAL (0x02000) + + #define DB_ALL (0xfff) + +diff -r -u make-3.82/function.c make-3.82-lo_trace/function.c +--- make-3.82/function.c 2011-06-23 01:01:35.000000000 -0500 ++++ make-3.82-lo_trace/function.c 2011-06-23 01:40:05.000000000 -0500 +@@ -28,6 +28,8 @@ + #include "amiga.h" + #endif + ++static int depth = 0; ++ + + struct function_table_entry + { +@@ -1371,7 +1373,12 @@ + + install_variable_buffer (&buf, &len); + ++ depth += 1; ++ DBS( DB_EVAL, ("### eval -->\n")); ++ DB( DB_EVAL, ("%s\n", argv[0])); + eval_buffer (argv[0]); ++ DBS( DB_EVAL, ("### eval <--\n")); ++ depth -= 1; + + restore_variable_buffer (buf, len); + +@@ -2338,6 +2345,7 @@ + if (v == 0 || *v->value == '\0') + return o; + ++ depth += 1; + body = alloca (flen + 4); + body[0] = '$'; + body[1] = '('; +@@ -2345,6 +2353,7 @@ + body[flen+2] = ')'; + body[flen+3] = '\0'; + ++ DBS(DB_CALL, ("### call %s -->\n", body)); + /* Set up arguments $(1) .. $(N). $(0) is the function name. */ + + push_new_variable_scope (); +@@ -2354,6 +2363,7 @@ + char num[11]; + + sprintf (num, "%d", i); ++ DBS(DB_CALL, ("### arg %i for call %s is '%s'\n", i, body, *argv)); + define_variable (num, strlen (num), *argv, o_automatic, 0); + } + +@@ -2367,6 +2377,7 @@ + char num[11]; + + sprintf (num, "%d", i); ++ DBS(DB_CALL, ("### arg %i for call %s is implicit\n", i, body)); + define_variable (num, strlen (num), "", o_automatic, 0); + } + +@@ -2377,7 +2388,14 @@ + + saved_args = max_args; + max_args = i; ++ + o = variable_expand_string (o, body, flen+3); ++ DBS(DB_CALL, ("### call to %s expended into\n", body)); ++ DB(DB_CALL, ("%s\n", o)); ++ DBS(DB_CALL, ("### call %s <--\n", body)); ++ ++ depth -= 1; ++ + max_args = saved_args; + + v->exp_count = 0; +diff -r -u make-3.82/main.c make-3.82-lo_trace/main.c +--- make-3.82/main.c 2010-07-19 02:10:53.000000000 -0500 ++++ make-3.82-lo_trace/main.c 2011-06-22 11:46:39.000000000 -0500 +@@ -634,6 +634,12 @@ + case 'b': + db_level |= DB_BASIC; + break; ++ case 'c': ++ db_level |= DB_CALL; ++ break; ++ case 'e': ++ db_level |= DB_EVAL; ++ break; + case 'i': + db_level |= DB_BASIC | DB_IMPLICIT; + break; diff --git a/make-3.82-warn_undefined_function.patch b/make-3.82-warn_undefined_function.patch new file mode 100644 index 0000000..d4fd502 --- /dev/null +++ b/make-3.82-warn_undefined_function.patch @@ -0,0 +1,84 @@ +diff --git a/make-3.82-gbuild/function.c b/make-3.82-gbuild/function.c +index e2f6c8c..ff0527f 100644 +--- a/make-3.82/function.c ++++ b/make-3.82/function.c +@@ -2333,8 +2333,10 @@ func_call (char *o, char **argv, const char *funcname UNUSED) + v = lookup_variable (fname, flen); + + if (v == 0) +- warn_undefined (fname, flen); +- ++ { ++ warn_undefined (fname, flen); ++ warn_undefined_function (fname, flen); ++ } + if (v == 0 || *v->value == '\0') + return o; + +diff --git a/make-3.82-gbuild/main.c b/make-3.82-gbuild/main.c +index c6989e3..2f545a7 100644 +--- a/make-3.82/main.c ++++ b/make-3.82/main.c +@@ -275,6 +275,11 @@ static int print_usage_flag = 0; + + int warn_undefined_variables_flag; + ++/* If nonzero, we should print a warning message ++ for each attemtp to call an undefined user function. */ ++ ++int warn_undefined_functions_flag; ++ + /* If nonzero, always build all targets, regardless of whether + they appear out of date or not. */ + +@@ -368,6 +373,8 @@ static const char *const usage[] = + Consider FILE to be infinitely new.\n"), + N_("\ + --warn-undefined-variables Warn when an undefined variable is referenced.\n"), ++ N_("\ ++ --warn-undefined-functions Warn when an undefined user function is called.\n"), + NULL + }; + +@@ -424,6 +431,8 @@ static const struct command_switch switches[] = + { CHAR_MAX+5, flag, &warn_undefined_variables_flag, 1, 1, 0, 0, 0, + "warn-undefined-variables" }, + { CHAR_MAX+6, string, &eval_strings, 1, 0, 0, 0, 0, "eval" }, ++ { CHAR_MAX+7, flag, &warn_undefined_functions_flag, 1, 1, 0, 0, 0, ++ "warn-undefined-functions" }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0 } + }; + +diff --git a/make-3.82-gbuild/make.h b/make-3.82-gbuild/make.h +index 60ade4c..f2ebb56 100644 +--- a/make-3.82/make.h ++++ b/make-3.82/make.h +@@ -513,7 +513,7 @@ extern int env_overrides, no_builtin_rules_flag, no_builtin_variables_flag; + extern int print_version_flag, print_directory_flag, check_symlink_flag; + extern int warn_undefined_variables_flag, posix_pedantic, not_parallel; + extern int second_expansion, clock_skew_detected, rebuilding_makefiles; +-extern int one_shell; ++extern int one_shell, warn_undefined_functions_flag; + + /* can we run commands via 'sh -c xxx' or must we use batch files? */ + extern int batch_mode_shell; +diff --git a/make-3.82-gbuild/variable.h b/make-3.82-gbuild/variable.h +index c215867..02713c1 100644 +--- a/make-3.82/variable.h ++++ b/make-3.82/variable.h +@@ -220,6 +220,13 @@ void undefine_variable_in_set (const char *name, unsigned int length, + (int)(l), (n)); \ + }while(0) + ++#define warn_undefined_function(n,l) do{\ ++ if (warn_undefined_functions_flag) \ ++ error (reading_file, \ ++ _("warning: undefined function `%.*s'"), \ ++ (int)(l), (n)); \ ++ }while(0) ++ + char **target_environment (struct file *file); + + struct pattern_var *create_pattern_var (const char *target, +-- +cgit v0.9.0.2-2-gbebe diff --git a/make.spec b/make.spec index f0081dc..1816aab 100644 --- a/make.spec +++ b/make.spec @@ -3,11 +3,12 @@ Summary: A GNU tool which simplifies the build process for users Name: make Epoch: 1 Version: 3.82 -Release: 9%{?dist} +Release: 10%{?dist} License: GPLv2+ Group: Development/Tools URL: http://www.gnu.org/software/make/ Source: ftp://ftp.gnu.org/gnu/make/make-%{version}.tar.bz2 + Patch1: make-3.82-noclock_gettime.patch Patch2: make-3.82-j8k.patch Patch3: make-3.82-getcwd.patch @@ -19,8 +20,16 @@ Patch8: make-3.82-jobserver.patch Patch9: make-3.82-bugfixes.patch Patch10: make-3.82-sort-blank.patch Patch11: make-3.82-copy-on-expand.patch + # Uptream fix of https://savannah.gnu.org/bugs/?33873 Patch12: make-3.82-parallel-remake.patch + +# http://savannah.gnu.org/bugs/?34335 +Patch13: make-3.82-warn_undefined_function.patch + +# http://lists.gnu.org/archive/html/bug-make/2011-06/msg00032.html +Patch14: make-3.82-trace.patch + BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) Requires(post): /sbin/install-info Requires(preun): /sbin/install-info @@ -48,6 +57,8 @@ makefile. %patch10 -p1 %patch11 -p1 %patch12 -p0 +%patch13 -p2 +%patch14 -p1 %build %configure @@ -90,6 +101,11 @@ fi %{_infodir}/*.info* %changelog +* 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