diff options
Diffstat (limited to 'variable.h')
-rw-r--r-- | variable.h | 83 |
1 files changed, 44 insertions, 39 deletions
@@ -1,7 +1,5 @@ /* Definitions for using variables in 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, -2010 Free Software Foundation, Inc. +Copyright (C) 1988-2013 Free Software Foundation, Inc. This file is part of GNU Make. GNU Make is free software; you can redistribute it and/or modify it under the @@ -22,62 +20,63 @@ this program. If not, see <http://www.gnu.org/licenses/>. */ Increasing numeric values signify less-overridable definitions. */ enum variable_origin { - o_default, /* Variable from the default set. */ - o_env, /* Variable from environment. */ - o_file, /* Variable given in a makefile. */ - o_env_override, /* Variable from environment, if -e. */ - o_command, /* Variable given by user. */ - o_override, /* Variable from an `override' directive. */ - o_automatic, /* Automatic variable -- cannot be set. */ - o_invalid /* Core dump time. */ + o_default, /* Variable from the default set. */ + o_env, /* Variable from environment. */ + o_file, /* Variable given in a makefile. */ + o_env_override, /* Variable from environment, if -e. */ + o_command, /* Variable given by user. */ + o_override, /* Variable from an 'override' directive. */ + o_automatic, /* Automatic variable -- cannot be set. */ + o_invalid /* Core dump time. */ }; enum variable_flavor { f_bogus, /* Bogus (error) */ - f_simple, /* Simple definition (:=) */ + f_simple, /* Simple definition (:= or ::=) */ f_recursive, /* Recursive definition (=) */ f_append, /* Appending definition (+=) */ - f_conditional /* Conditional definition (?=) */ + f_conditional, /* Conditional definition (?=) */ + f_shell /* Shell assignment (!=) */ }; /* Structure that represents one variable definition. Each bucket of the hash table is a chain of these, - chained through `next'. */ + chained through 'next'. */ #define EXP_COUNT_BITS 15 /* This gets all the bitfields into 32 bits */ #define EXP_COUNT_MAX ((1<<EXP_COUNT_BITS)-1) struct variable { - char *name; /* Variable name. */ - int length; /* strlen (name) */ - char *value; /* Variable value. */ - struct floc fileinfo; /* Where the variable was defined. */ - unsigned int recursive:1; /* Gets recursively re-evaluated. */ - unsigned int append:1; /* Nonzero if an appending target-specific + char *name; /* Variable name. */ + char *value; /* Variable value. */ + gmk_floc fileinfo; /* Where the variable was defined. */ + int length; /* strlen (name) */ + unsigned int recursive:1; /* Gets recursively re-evaluated. */ + unsigned int append:1; /* Nonzero if an appending target-specific variable. */ unsigned int conditional:1; /* Nonzero if set with a ?=. */ - unsigned int per_target:1; /* Nonzero if a target-specific variable. */ + unsigned int per_target:1; /* Nonzero if a target-specific variable. */ unsigned int special:1; /* Nonzero if this is a special variable. */ unsigned int exportable:1; /* Nonzero if the variable _could_ be exported. */ - unsigned int expanding:1; /* Nonzero if currently being expanded. */ + unsigned int expanding:1; /* Nonzero if currently being expanded. */ unsigned int private_var:1; /* Nonzero avoids inheritance of this target-specific variable. */ unsigned int exp_count:EXP_COUNT_BITS; /* If >1, allow this many self-referential expansions. */ enum variable_flavor - flavor ENUM_BITFIELD (3); /* Variable flavor. */ + flavor ENUM_BITFIELD (3); /* Variable flavor. */ enum variable_origin - origin ENUM_BITFIELD (3); /* Variable origin. */ + origin ENUM_BITFIELD (3); /* Variable origin. */ enum variable_export { - v_export, /* Export this variable. */ - v_noexport, /* Don't export this variable. */ - v_ifset, /* Export it if it has a non-default value. */ - v_default /* Decide in target_environment. */ + v_export, /* Export this variable. */ + v_noexport, /* Don't export this variable. */ + v_ifset, /* Export it if it has a non-default value. */ + v_default /* Decide in target_environment. */ } export ENUM_BITFIELD (2); }; @@ -85,15 +84,15 @@ struct variable struct variable_set { - struct hash_table table; /* Hash table of variables. */ + struct hash_table table; /* Hash table of variables. */ }; /* Structure that represents a list of variable sets. */ struct variable_set_list { - struct variable_set_list *next; /* Link in the chain. */ - struct variable_set *set; /* Variable set. */ + struct variable_set_list *next; /* Link in the chain. */ + struct variable_set *set; /* Variable set. */ int next_is_parent; /* True if next is a parent target. */ }; @@ -117,7 +116,7 @@ char *variable_buffer_output (char *ptr, const char *string, unsigned int length char *variable_expand (const char *line); char *variable_expand_for_file (const char *line, struct file *file); char *allocated_variable_expand_for_file (const char *line, struct file *file); -#define allocated_variable_expand(line) \ +#define allocated_variable_expand(line) \ allocated_variable_expand_for_file (line, (struct file *) 0) char *expand_argument (const char *str, const char *end); char *variable_expand_string (char *line, const char *string, long length); @@ -134,6 +133,8 @@ char *patsubst_expand_pat (char *o, const char *text, const char *pattern, const char *replace, const char *pattern_percent, const char *replace_percent); char *patsubst_expand (char *o, const char *text, char *pattern, char *replace); +char *func_shell_base (char *o, char **argv, int trim_newlines); + /* expand.c */ char *recursively_expand_for_file (struct variable *v, struct file *file); @@ -147,22 +148,26 @@ void pop_variable_scope (void); void define_automatic_variables (void); void initialize_file_variables (struct file *file, int reading); void print_file_variables (const struct file *file); -void print_variable_set (struct variable_set *set, char *prefix); +void print_file_variables (const struct file *file); +void print_target_variables (const struct file *file); void merge_variable_set_lists (struct variable_set_list **to_list, struct variable_set_list *from_list); -struct variable *do_variable_definition (const struct floc *flocp, +struct variable *do_variable_definition (const gmk_floc *flocp, const char *name, const char *value, enum variable_origin origin, enum variable_flavor flavor, int target_var); char *parse_variable_definition (const char *line, - enum variable_flavor *flavor); + struct variable *v); struct variable *assign_variable_definition (struct variable *v, char *line); -struct variable *try_variable_definition (const struct floc *flocp, char *line, +struct variable *try_variable_definition (const gmk_floc *flocp, char *line, enum variable_origin origin, int target_var); void init_hash_global_variable_set (void); void hash_init_function_table (void); +void define_new_function(const gmk_floc *flocp, const char *name, + unsigned int min, unsigned int max, unsigned int flags, + gmk_func_ptr func); struct variable *lookup_variable (const char *name, unsigned int length); struct variable *lookup_variable_in_set (const char *name, unsigned int length, const struct variable_set *set); @@ -172,7 +177,7 @@ struct variable *define_variable_in_set (const char *name, unsigned int length, enum variable_origin origin, int recursive, struct variable_set *set, - const struct floc *flocp); + const gmk_floc *flocp); /* Define a variable in the current variable set. */ @@ -216,7 +221,7 @@ void undefine_variable_in_set (const char *name, unsigned int length, #define warn_undefined(n,l) do{\ if (warn_undefined_variables_flag) \ error (reading_file, \ - _("warning: undefined variable `%.*s'"), \ + _("warning: undefined variable '%.*s'"), \ (int)(l), (n)); \ }while(0) @@ -228,4 +233,4 @@ struct pattern_var *create_pattern_var (const char *target, extern int export_all_variables; #define MAKELEVEL_NAME "MAKELEVEL" -#define MAKELEVEL_LENGTH (sizeof (MAKELEVEL_NAME) - 1) +#define MAKELEVEL_LENGTH (CSTRLEN (MAKELEVEL_NAME)) |