char *name, *p;
size_t length;
- {
- /* Turn off --warn-undefined-variables while we expand MAKEFILES. */
- int save = warn_undefined_variables_flag;
- warn_undefined_variables_flag = 0;
-
- value = allocated_variable_expand ("$(MAKEFILES)");
-
- warn_undefined_variables_flag = save;
- }
+ value = allocated_variable_expand ("$(MAKEFILES)");
/* Set NAME to the start of next token and LENGTH to its length.
MAKEFILES is updated for finding remaining tokens. */
return vp;
}
+
+/* These variables are internal to make, and so considered "defined" for the
+ purposes of warn_undefined even if they are not really defined. */
+
+static const char *const defined_vars[] = {
+ "MAKECMDGOALS", "MAKE_RESTARTS", "MAKE_TERMOUT", "MAKE_TERMERR",
+ "MAKEOVERRIDES", ".DEFAULT", "-*-command-variables-*-", "-*-eval-flags-*-",
+ "VPATH", "GPATH",
+ NULL };
+
+void
+warn_undefined (const char *name, size_t len)
+{
+ if (warn_undefined_variables_flag)
+ {
+ const char *const *cp;
+ for (cp = defined_vars; *cp != NULL; ++cp)
+ if (memcmp (*cp, name, len) == 0 && (*cp)[len] == '\0')
+ return;
+
+ error (reading_file, len, _("warning: undefined variable '%.*s'"),
+ (int)len, name);
+ }
+}
\f
/* Print information for variable V, prefixing it with PREFIX. */
int recursive,
struct variable_set *set,
const floc *flocp);
+void warn_undefined (const char* name, size_t length);
/* Define a variable in the current variable set. */
#define undefine_variable_global(n,l,o) \
undefine_variable_in_set((n),(l),(o),NULL)
-/* Warn that NAME is an undefined variable. */
-
-#define warn_undefined(n,l) do{\
- if (warn_undefined_variables_flag) \
- error (reading_file, (l), \
- _("warning: undefined variable '%.*s'"), \
- (int)(l), (n)); \
- }while(0)
-
char **target_environment (struct file *file, int recursive);
struct pattern_var *create_pattern_var (const char *target,
vpaths = new;
- /* If there is a VPATH variable with a nonnull value, construct the
- general VPATH list from it. We use variable_expand rather than just
- calling lookup_variable so that it will be recursively expanded. */
+ /* If there is a VPATH variable with a nonnull expanded value, construct the
+ general VPATH list from it. */
- {
- /* Turn off --warn-undefined-variables while we expand SHELL and IFS. */
- int save = warn_undefined_variables_flag;
- warn_undefined_variables_flag = 0;
-
- p = variable_expand ("$(strip $(VPATH))");
-
- warn_undefined_variables_flag = save;
- }
+ p = variable_expand ("$(strip $(VPATH))");
if (*p != '\0')
{
vpaths = save_vpaths;
}
- /* If there is a GPATH variable with a nonnull value, construct the
- GPATH list from it. We use variable_expand rather than just
- calling lookup_variable so that it will be recursively expanded. */
+ /* If there is a GPATH variable with a nonnull expanded value, construct the
+ GPATH list from it. */
- {
- /* Turn off --warn-undefined-variables while we expand SHELL and IFS. */
- int save = warn_undefined_variables_flag;
- warn_undefined_variables_flag = 0;
-
- p = variable_expand ("$(strip $(GPATH))");
-
- warn_undefined_variables_flag = save;
- }
+ p = variable_expand ("$(strip $(GPATH))");
if (*p != '\0')
{
$details = "Verify that warnings are printed for referencing undefined variables.";
+# Verify that make's special variables don't warn even if they're not set
+run_make_test(q!
+vars := $(.VARIABLES) $(MAKECMDGOALS) $(MAKE_RESTARTS) $(CURDIR)
+vars += $(GNUMAKEFLAGS) $(MAKEFLAGS) $(MFLAGS) $(MAKE_COMMAND) $(MAKE)
+vars += $(MAKEFILE_LIST) $(MAKEOVERRIDES) $(-*-command-variables-*-)
+vars += $(.RECIPEPREFIX) $(.LOADED) $(.FEATURES)
+vars += $(SHELL) $(.SHELLFLAGS) $(MAKE_TERMOUT) $(MAKE_TERMERR)
+vars += $(.DEFAULT) $(.DEFAULT_GOAL) $(-*-eval-flags-*-) $(SUFFIXES)
+vars += $(VPATH) $(GPATH)
+all:;
+!,
+ '--warn-undefined-variables', "#MAKE#: 'all' is up to date.");
+
# Without --warn-undefined-variables, nothing should happen
run_make_test('
EMPTY =