1 /* Internals of variables for GNU Make.
2 Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
3 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software
5 This file is part of GNU Make.
7 GNU Make is free software; you can redistribute it and/or modify it under the
8 terms of the GNU General Public License as published by the Free Software
9 Foundation; either version 2, or (at your option) any later version.
11 GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
13 A PARTICULAR PURPOSE. See the GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License along with
16 GNU Make; see the file COPYING. If not, write to the Free Software
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. */
30 #include "pathstuff.h"
34 /* Chain of all pattern-specific variables. */
36 static struct pattern_var
*pattern_vars
;
38 /* Pointer to last struct in the chain, so we can add onto the end. */
40 static struct pattern_var
*last_pattern_var
;
42 /* Create a new pattern-specific variable struct. */
45 create_pattern_var (char *target
, char *suffix
)
47 register struct pattern_var
*p
48 = (struct pattern_var
*) xmalloc (sizeof (struct pattern_var
));
50 if (last_pattern_var
!= 0)
51 last_pattern_var
->next
= p
;
58 p
->len
= strlen (target
);
59 p
->suffix
= suffix
+ 1;
64 /* Look up a target in the pattern-specific variable list. */
66 static struct pattern_var
*
67 lookup_pattern_var (struct pattern_var
*start
, char *target
)
69 struct pattern_var
*p
;
70 unsigned int targlen
= strlen(target
);
72 for (p
= start
? start
->next
: pattern_vars
; p
!= 0; p
= p
->next
)
78 /* It can't possibly match. */
81 /* From the lengths of the filename and the pattern parts,
82 find the stem: the part of the filename that matches the %. */
83 stem
= target
+ (p
->suffix
- p
->target
- 1);
84 stemlen
= targlen
- p
->len
+ 1;
86 /* Compare the text in the pattern before the stem, if any. */
87 if (stem
> target
&& !strneq (p
->target
, target
, stem
- target
))
90 /* Compare the text in the pattern after the stem, if any.
91 We could test simply using streq, but this way we compare the
92 first two characters immediately. This saves time in the very
93 common case where the first character matches because it is a
95 if (*p
->suffix
== stem
[stemlen
]
96 && (*p
->suffix
== '\0' || streq (&p
->suffix
[1], &stem
[stemlen
+1])))
103 /* Hash table of all global variable definitions. */
106 variable_hash_1 (const void *keyv
)
108 struct variable
const *key
= (struct variable
const *) keyv
;
109 return_STRING_N_HASH_1 (key
->name
, key
->length
);
113 variable_hash_2 (const void *keyv
)
115 struct variable
const *key
= (struct variable
const *) keyv
;
116 return_STRING_N_HASH_2 (key
->name
, key
->length
);
120 variable_hash_cmp (const void *xv
, const void *yv
)
122 struct variable
const *x
= (struct variable
const *) xv
;
123 struct variable
const *y
= (struct variable
const *) yv
;
124 int result
= x
->length
- y
->length
;
127 return_STRING_N_COMPARE (x
->name
, y
->name
, x
->length
);
130 #ifndef VARIABLE_BUCKETS
131 #define VARIABLE_BUCKETS 523
133 #ifndef PERFILE_VARIABLE_BUCKETS
134 #define PERFILE_VARIABLE_BUCKETS 23
136 #ifndef SMALL_SCOPE_VARIABLE_BUCKETS
137 #define SMALL_SCOPE_VARIABLE_BUCKETS 13
140 static struct variable_set global_variable_set
;
141 static struct variable_set_list global_setlist
142 = { 0, &global_variable_set
};
143 struct variable_set_list
*current_variable_set_list
= &global_setlist
;
145 /* Implement variables. */
148 init_hash_global_variable_set (void)
150 hash_init (&global_variable_set
.table
, VARIABLE_BUCKETS
,
151 variable_hash_1
, variable_hash_2
, variable_hash_cmp
);
154 /* Define variable named NAME with value VALUE in SET. VALUE is copied.
155 LENGTH is the length of NAME, which does not need to be null-terminated.
156 ORIGIN specifies the origin of the variable (makefile, command line
158 If RECURSIVE is nonzero a flag is set in the variable saying
159 that it should be recursively re-expanded. */
162 define_variable_in_set (const char *name
, unsigned int length
,
163 char *value
, enum variable_origin origin
,
164 int recursive
, struct variable_set
*set
,
165 const struct floc
*flocp
)
168 struct variable
**var_slot
;
169 struct variable var_key
;
172 set
= &global_variable_set
;
174 var_key
.name
= (char *) name
;
175 var_key
.length
= length
;
176 var_slot
= (struct variable
**) hash_find_slot (&set
->table
, &var_key
);
178 if (env_overrides
&& origin
== o_env
)
179 origin
= o_env_override
;
182 if (! HASH_VACANT (v
))
184 if (env_overrides
&& v
->origin
== o_env
)
185 /* V came from in the environment. Since it was defined
186 before the switches were parsed, it wasn't affected by -e. */
187 v
->origin
= o_env_override
;
189 /* A variable of this name is already defined.
190 If the old definition is from a stronger source
191 than this one, don't redefine it. */
192 if ((int) origin
>= (int) v
->origin
)
196 v
->value
= xstrdup (value
);
198 v
->fileinfo
= *flocp
;
200 v
->fileinfo
.filenm
= 0;
202 v
->recursive
= recursive
;
207 /* Create a new variable definition and add it to the hash table. */
209 v
= (struct variable
*) xmalloc (sizeof (struct variable
));
210 v
->name
= savestring (name
, length
);
212 hash_insert_at (&set
->table
, v
, var_slot
);
213 v
->value
= xstrdup (value
);
215 v
->fileinfo
= *flocp
;
217 v
->fileinfo
.filenm
= 0;
219 v
->recursive
= recursive
;
225 v
->export
= v_default
;
228 if (*name
!= '_' && (*name
< 'A' || *name
> 'Z')
229 && (*name
< 'a' || *name
> 'z'))
233 for (++name
; *name
!= '\0'; ++name
)
234 if (*name
!= '_' && (*name
< 'a' || *name
> 'z')
235 && (*name
< 'A' || *name
> 'Z') && !ISDIGIT(*name
))
245 /* If the variable passed in is "special", handle its special nature.
246 Currently there are two such variables, both used for introspection:
247 .VARIABLES expands to a list of all the variables defined in this instance
249 .TARGETS expands to a list of all the targets defined in this
251 Returns the variable reference passed in. */
253 #define EXPANSION_INCREMENT(_l) ((((_l) / 500) + 1) * 500)
255 static struct variable
*
256 handle_special_var (struct variable
*var
)
258 static unsigned long last_var_count
= 0;
261 /* This one actually turns out to be very hard, due to the way the parser
262 records targets. The way it works is that target information is collected
263 internally until make knows the target is completely specified. It unitl
264 it sees that some new construct (a new target or variable) is defined that
265 it knows the previous one is done. In short, this means that if you do
272 then $(TARGS) won't contain "all", because it's not until after the
273 variable is created that the previous target is completed.
275 Changing this would be a major pain. I think a less complex way to do it
276 would be to pre-define the target files as soon as the first line is
277 parsed, then come back and do the rest of the definition as now. That
278 would allow $(.TARGETS) to be correct without a major change to the way
281 if (streq (var->name, ".TARGETS"))
282 var->value = build_target_list (var->value);
286 if (streq (var
->name
, ".VARIABLES")
287 && global_variable_set
.table
.ht_fill
!= last_var_count
)
289 unsigned long max
= EXPANSION_INCREMENT (strlen (var
->value
));
292 struct variable
**vp
= (struct variable
**) global_variable_set
.table
.ht_vec
;
293 struct variable
**end
= &vp
[global_variable_set
.table
.ht_size
];
295 /* Make sure we have at least MAX bytes in the allocated buffer. */
296 var
->value
= xrealloc (var
->value
, max
);
298 /* Walk through the hash of variables, constructing a list of names. */
301 for (; vp
< end
; ++vp
)
302 if (!HASH_VACANT (*vp
))
304 struct variable
*v
= *vp
;
310 unsigned long off
= p
- var
->value
;
312 max
+= EXPANSION_INCREMENT (l
+ 1);
313 var
->value
= xrealloc (var
->value
, max
);
314 p
= &var
->value
[off
];
317 bcopy (v
->name
, p
, l
);
323 /* Remember how many variables are in our current count. Since we never
324 remove variables from the list, this is a reliable way to know whether
325 the list is up to date or needs to be recomputed. */
327 last_var_count
= global_variable_set
.table
.ht_fill
;
334 /* Lookup a variable whose name is a string starting at NAME
335 and with LENGTH chars. NAME need not be null-terminated.
336 Returns address of the `struct variable' containing all info
337 on the variable, or nil if no such variable is defined. */
340 lookup_variable (const char *name
, unsigned int length
)
342 const struct variable_set_list
*setlist
;
343 struct variable var_key
;
345 var_key
.name
= (char *) name
;
346 var_key
.length
= length
;
348 for (setlist
= current_variable_set_list
;
349 setlist
!= 0; setlist
= setlist
->next
)
351 const struct variable_set
*set
= setlist
->set
;
354 v
= (struct variable
*) hash_find_item ((struct hash_table
*) &set
->table
, &var_key
);
356 return v
->special
? handle_special_var (v
) : v
;
360 /* since we don't read envp[] on startup, try to get the
361 variable via getenv() here. */
363 char *vname
= alloca (length
+ 1);
365 strncpy (vname
, name
, length
);
367 value
= getenv (vname
);
376 while ((sptr
= strchr (sptr
, '$')))
387 nvalue
= alloca (strlen (value
) + scnt
+ 1);
406 return define_variable (vname
, length
, nvalue
, o_env
, 1);
410 return define_variable (vname
, length
, value
, o_env
, 1);
418 /* Lookup a variable whose name is a string starting at NAME
419 and with LENGTH chars in set SET. NAME need not be null-terminated.
420 Returns address of the `struct variable' containing all info
421 on the variable, or nil if no such variable is defined. */
424 lookup_variable_in_set (const char *name
, unsigned int length
,
425 const struct variable_set
*set
)
427 struct variable var_key
;
429 var_key
.name
= (char *) name
;
430 var_key
.length
= length
;
432 return (struct variable
*) hash_find_item ((struct hash_table
*) &set
->table
, &var_key
);
435 /* Initialize FILE's variable set list. If FILE already has a variable set
436 list, the topmost variable set is left intact, but the the rest of the
437 chain is replaced with FILE->parent's setlist. If FILE is a double-colon
438 rule, then we will use the "root" double-colon target's variable set as the
439 parent of FILE's variable set.
441 If we're READing a makefile, don't do the pattern variable search now,
442 since the pattern variable might not have been defined yet. */
445 initialize_file_variables (struct file
*file
, int reading
)
447 struct variable_set_list
*l
= file
->variables
;
451 l
= (struct variable_set_list
*)
452 xmalloc (sizeof (struct variable_set_list
));
453 l
->set
= (struct variable_set
*) xmalloc (sizeof (struct variable_set
));
454 hash_init (&l
->set
->table
, PERFILE_VARIABLE_BUCKETS
,
455 variable_hash_1
, variable_hash_2
, variable_hash_cmp
);
459 /* If this is a double-colon, then our "parent" is the "root" target for
460 this double-colon rule. Since that rule has the same name, parent,
461 etc. we can just use its variables as the "next" for ours. */
463 if (file
->double_colon
&& file
->double_colon
!= file
)
465 initialize_file_variables (file
->double_colon
, reading
);
466 l
->next
= file
->double_colon
->variables
;
470 if (file
->parent
== 0)
471 l
->next
= &global_setlist
;
474 initialize_file_variables (file
->parent
, reading
);
475 l
->next
= file
->parent
->variables
;
478 /* If we're not reading makefiles and we haven't looked yet, see if
479 we can find pattern variables for this target. */
481 if (!reading
&& !file
->pat_searched
)
483 struct pattern_var
*p
;
485 p
= lookup_pattern_var (0, file
->name
);
488 struct variable_set_list
*global
= current_variable_set_list
;
490 /* We found at least one. Set up a new variable set to accumulate
491 all the pattern variables that match this target. */
493 file
->pat_variables
= create_new_variable_set ();
494 current_variable_set_list
= file
->pat_variables
;
498 /* We found one, so insert it into the set. */
502 if (p
->variable
.flavor
== f_simple
)
504 v
= define_variable_loc (
505 p
->variable
.name
, strlen (p
->variable
.name
),
506 p
->variable
.value
, p
->variable
.origin
,
507 0, &p
->variable
.fileinfo
);
509 v
->flavor
= f_simple
;
513 v
= do_variable_definition (
514 &p
->variable
.fileinfo
, p
->variable
.name
,
515 p
->variable
.value
, p
->variable
.origin
,
516 p
->variable
.flavor
, 1);
519 /* Also mark it as a per-target and copy export status. */
520 v
->per_target
= p
->variable
.per_target
;
521 v
->export
= p
->variable
.export
;
523 while ((p
= lookup_pattern_var (p
, file
->name
)) != 0);
525 current_variable_set_list
= global
;
527 file
->pat_searched
= 1;
530 /* If we have a pattern variable match, set it up. */
532 if (file
->pat_variables
!= 0)
534 file
->pat_variables
->next
= l
->next
;
535 l
->next
= file
->pat_variables
;
539 /* Pop the top set off the current variable set list,
540 and free all its storage. */
542 struct variable_set_list
*
543 create_new_variable_set (void)
545 register struct variable_set_list
*setlist
;
546 register struct variable_set
*set
;
548 set
= (struct variable_set
*) xmalloc (sizeof (struct variable_set
));
549 hash_init (&set
->table
, SMALL_SCOPE_VARIABLE_BUCKETS
,
550 variable_hash_1
, variable_hash_2
, variable_hash_cmp
);
552 setlist
= (struct variable_set_list
*)
553 xmalloc (sizeof (struct variable_set_list
));
555 setlist
->next
= current_variable_set_list
;
561 free_variable_name_and_value (const void *item
)
563 struct variable
*v
= (struct variable
*) item
;
569 free_variable_set (struct variable_set_list
*list
)
571 hash_map (&list
->set
->table
, free_variable_name_and_value
);
572 hash_free (&list
->set
->table
, 1);
573 free ((char *) list
->set
);
574 free ((char *) list
);
577 /* Create a new variable set and push it on the current setlist.
578 If we're pushing a global scope (that is, the current scope is the global
579 scope) then we need to "push" it the other way: file variable sets point
580 directly to the global_setlist so we need to replace that with the new one.
583 struct variable_set_list
*
584 push_new_variable_scope (void)
586 current_variable_set_list
= create_new_variable_set();
587 if (current_variable_set_list
->next
== &global_setlist
)
589 /* It was the global, so instead of new -> &global we want to replace
590 &global with the new one and have &global -> new, with current still
591 pointing to &global */
592 struct variable_set
*set
= current_variable_set_list
->set
;
593 current_variable_set_list
->set
= global_setlist
.set
;
594 global_setlist
.set
= set
;
595 current_variable_set_list
->next
= global_setlist
.next
;
596 global_setlist
.next
= current_variable_set_list
;
597 current_variable_set_list
= &global_setlist
;
599 return (current_variable_set_list
);
603 pop_variable_scope (void)
605 struct variable_set_list
*setlist
;
606 struct variable_set
*set
;
608 /* Can't call this if there's no scope to pop! */
609 assert(current_variable_set_list
->next
!= NULL
);
611 if (current_variable_set_list
!= &global_setlist
)
613 /* We're not pointing to the global setlist, so pop this one. */
614 setlist
= current_variable_set_list
;
616 current_variable_set_list
= setlist
->next
;
620 /* This set is the one in the global_setlist, but there is another global
621 set beyond that. We want to copy that set to global_setlist, then
622 delete what used to be in global_setlist. */
623 setlist
= global_setlist
.next
;
624 set
= global_setlist
.set
;
625 global_setlist
.set
= setlist
->set
;
626 global_setlist
.next
= setlist
->next
;
629 /* Free the one we no longer need. */
630 free ((char *) setlist
);
631 hash_map (&set
->table
, free_variable_name_and_value
);
632 hash_free (&set
->table
, 1);
636 /* Merge FROM_SET into TO_SET, freeing unused storage in FROM_SET. */
639 merge_variable_sets (struct variable_set
*to_set
,
640 struct variable_set
*from_set
)
642 struct variable
**from_var_slot
= (struct variable
**) from_set
->table
.ht_vec
;
643 struct variable
**from_var_end
= from_var_slot
+ from_set
->table
.ht_size
;
645 for ( ; from_var_slot
< from_var_end
; from_var_slot
++)
646 if (! HASH_VACANT (*from_var_slot
))
648 struct variable
*from_var
= *from_var_slot
;
649 struct variable
**to_var_slot
650 = (struct variable
**) hash_find_slot (&to_set
->table
, *from_var_slot
);
651 if (HASH_VACANT (*to_var_slot
))
652 hash_insert_at (&to_set
->table
, from_var
, to_var_slot
);
655 /* GKM FIXME: delete in from_set->table */
656 free (from_var
->value
);
662 /* Merge SETLIST1 into SETLIST0, freeing unused storage in SETLIST1. */
665 merge_variable_set_lists (struct variable_set_list
**setlist0
,
666 struct variable_set_list
*setlist1
)
668 struct variable_set_list
*to
= *setlist0
;
669 struct variable_set_list
*last0
= 0;
671 /* If there's nothing to merge, stop now. */
675 /* This loop relies on the fact that all setlists terminate with the global
676 setlist (before NULL). If that's not true, arguably we SHOULD die. */
678 while (setlist1
!= &global_setlist
&& to
!= &global_setlist
)
680 struct variable_set_list
*from
= setlist1
;
681 setlist1
= setlist1
->next
;
683 merge_variable_sets (to
->set
, from
->set
);
689 if (setlist1
!= &global_setlist
)
692 *setlist0
= setlist1
;
694 last0
->next
= setlist1
;
698 /* Define the automatic variables, and record the addresses
699 of their structures so we can change their values quickly. */
702 define_automatic_variables (void)
704 #if defined(WINDOWS32) || defined(__EMX__)
705 extern char* default_shell
;
707 extern char default_shell
[];
709 register struct variable
*v
;
712 sprintf (buf
, "%u", makelevel
);
713 (void) define_variable (MAKELEVEL_NAME
, MAKELEVEL_LENGTH
, buf
, o_env
, 0);
715 sprintf (buf
, "%s%s%s",
717 (remote_description
== 0 || remote_description
[0] == '\0')
719 (remote_description
== 0 || remote_description
[0] == '\0')
720 ? "" : remote_description
);
721 (void) define_variable ("MAKE_VERSION", 12, buf
, o_default
, 0);
724 /* Allow to specify a special shell just for Make,
725 and use $COMSPEC as the default $SHELL when appropriate. */
727 static char shell_str
[] = "SHELL";
728 const int shlen
= sizeof (shell_str
) - 1;
729 struct variable
*mshp
= lookup_variable ("MAKESHELL", 9);
730 struct variable
*comp
= lookup_variable ("COMSPEC", 7);
732 /* Make $MAKESHELL override $SHELL even if -e is in effect. */
734 (void) define_variable (shell_str
, shlen
,
735 mshp
->value
, o_env_override
, 0);
738 /* $COMSPEC shouldn't override $SHELL. */
739 struct variable
*shp
= lookup_variable (shell_str
, shlen
);
742 (void) define_variable (shell_str
, shlen
, comp
->value
, o_env
, 0);
745 #elif defined(__EMX__)
747 static char shell_str
[] = "SHELL";
748 const int shlen
= sizeof (shell_str
) - 1;
749 struct variable
*shell
= lookup_variable (shell_str
, shlen
);
750 struct variable
*replace
= lookup_variable ("MAKESHELL", 9);
752 /* if $MAKESHELL is defined in the environment assume o_env_override */
753 if (replace
&& *replace
->value
&& replace
->origin
== o_env
)
754 replace
->origin
= o_env_override
;
756 /* if $MAKESHELL is not defined use $SHELL but only if the variable
757 did not come from the environment */
758 if (!replace
|| !*replace
->value
)
759 if (shell
&& *shell
->value
&& (shell
->origin
== o_env
760 || shell
->origin
== o_env_override
))
762 /* overwrite whatever we got from the environment */
764 shell
->value
= xstrdup (default_shell
);
765 shell
->origin
= o_default
;
768 /* Some people do not like cmd to be used as the default
769 if $SHELL is not defined in the Makefile.
770 With -DNO_CMD_DEFAULT you can turn off this behaviour */
771 # ifndef NO_CMD_DEFAULT
772 /* otherwise use $COMSPEC */
773 if (!replace
|| !*replace
->value
)
774 replace
= lookup_variable ("COMSPEC", 7);
776 /* otherwise use $OS2_SHELL */
777 if (!replace
|| !*replace
->value
)
778 replace
= lookup_variable ("OS2_SHELL", 9);
780 # warning NO_CMD_DEFAULT: GNU make will not use CMD.EXE as default shell
783 if (replace
&& *replace
->value
)
784 /* overwrite $SHELL */
785 (void) define_variable (shell_str
, shlen
, replace
->value
,
788 /* provide a definition if there is none */
789 (void) define_variable (shell_str
, shlen
, default_shell
,
795 /* This won't override any definition, but it will provide one if there
797 v
= define_variable ("SHELL", 5, default_shell
, o_default
, 0);
799 /* On MSDOS we do use SHELL from environment, since it isn't a standard
800 environment variable on MSDOS, so whoever sets it, does that on purpose.
801 On OS/2 we do not use SHELL from environment but we have already handled
802 that problem above. */
803 #if !defined(__MSDOS__) && !defined(__EMX__)
804 /* Don't let SHELL come from the environment. */
805 if (*v
->value
== '\0' || v
->origin
== o_env
|| v
->origin
== o_env_override
)
809 v
->value
= xstrdup (default_shell
);
813 /* Make sure MAKEFILES gets exported if it is set. */
814 v
= define_variable ("MAKEFILES", 9, "", o_default
, 0);
817 /* Define the magic D and F variables in terms of
818 the automatic variables they are variations of. */
821 define_variable ("@D", 2, "$(dir $@)", o_automatic
, 1);
822 define_variable ("%D", 2, "$(dir $%)", o_automatic
, 1);
823 define_variable ("*D", 2, "$(dir $*)", o_automatic
, 1);
824 define_variable ("<D", 2, "$(dir $<)", o_automatic
, 1);
825 define_variable ("?D", 2, "$(dir $?)", o_automatic
, 1);
826 define_variable ("^D", 2, "$(dir $^)", o_automatic
, 1);
827 define_variable ("+D", 2, "$(dir $+)", o_automatic
, 1);
829 define_variable ("@D", 2, "$(patsubst %/,%,$(dir $@))", o_automatic
, 1);
830 define_variable ("%D", 2, "$(patsubst %/,%,$(dir $%))", o_automatic
, 1);
831 define_variable ("*D", 2, "$(patsubst %/,%,$(dir $*))", o_automatic
, 1);
832 define_variable ("<D", 2, "$(patsubst %/,%,$(dir $<))", o_automatic
, 1);
833 define_variable ("?D", 2, "$(patsubst %/,%,$(dir $?))", o_automatic
, 1);
834 define_variable ("^D", 2, "$(patsubst %/,%,$(dir $^))", o_automatic
, 1);
835 define_variable ("+D", 2, "$(patsubst %/,%,$(dir $+))", o_automatic
, 1);
837 define_variable ("@F", 2, "$(notdir $@)", o_automatic
, 1);
838 define_variable ("%F", 2, "$(notdir $%)", o_automatic
, 1);
839 define_variable ("*F", 2, "$(notdir $*)", o_automatic
, 1);
840 define_variable ("<F", 2, "$(notdir $<)", o_automatic
, 1);
841 define_variable ("?F", 2, "$(notdir $?)", o_automatic
, 1);
842 define_variable ("^F", 2, "$(notdir $^)", o_automatic
, 1);
843 define_variable ("+F", 2, "$(notdir $+)", o_automatic
, 1);
846 int export_all_variables
;
848 /* Create a new environment for FILE's commands.
849 If FILE is nil, this is for the `shell' function.
850 The child's MAKELEVEL variable is incremented. */
853 target_environment (struct file
*file
)
855 struct variable_set_list
*set_list
;
856 register struct variable_set_list
*s
;
857 struct hash_table table
;
858 struct variable
**v_slot
;
859 struct variable
**v_end
;
860 struct variable makelevel_key
;
865 set_list
= current_variable_set_list
;
867 set_list
= file
->variables
;
869 hash_init (&table
, VARIABLE_BUCKETS
,
870 variable_hash_1
, variable_hash_2
, variable_hash_cmp
);
872 /* Run through all the variable sets in the list,
873 accumulating variables in TABLE. */
874 for (s
= set_list
; s
!= 0; s
= s
->next
)
876 struct variable_set
*set
= s
->set
;
877 v_slot
= (struct variable
**) set
->table
.ht_vec
;
878 v_end
= v_slot
+ set
->table
.ht_size
;
879 for ( ; v_slot
< v_end
; v_slot
++)
880 if (! HASH_VACANT (*v_slot
))
882 struct variable
**new_slot
;
883 struct variable
*v
= *v_slot
;
885 /* If this is a per-target variable and it hasn't been touched
886 already then look up the global version and take its export
888 if (v
->per_target
&& v
->export
== v_default
)
892 gv
= lookup_variable_in_set (v
->name
, strlen(v
->name
),
893 &global_variable_set
);
895 v
->export
= gv
->export
;
901 if (v
->origin
== o_default
|| v
->origin
== o_automatic
)
902 /* Only export default variables by explicit request. */
905 /* The variable doesn't have a name that can be exported. */
909 if (! export_all_variables
910 && v
->origin
!= o_command
911 && v
->origin
!= o_env
&& v
->origin
!= o_env_override
)
919 /* If this is the SHELL variable and it's not exported, then
920 add the value from our original environment. */
921 if (streq (v
->name
, "SHELL"))
923 extern struct variable shell_var
;
930 if (v
->origin
== o_default
)
935 new_slot
= (struct variable
**) hash_find_slot (&table
, v
);
936 if (HASH_VACANT (*new_slot
))
937 hash_insert_at (&table
, v
, new_slot
);
941 makelevel_key
.name
= MAKELEVEL_NAME
;
942 makelevel_key
.length
= MAKELEVEL_LENGTH
;
943 hash_delete (&table
, &makelevel_key
);
945 result
= result_0
= (char **) xmalloc ((table
.ht_fill
+ 2) * sizeof (char *));
947 v_slot
= (struct variable
**) table
.ht_vec
;
948 v_end
= v_slot
+ table
.ht_size
;
949 for ( ; v_slot
< v_end
; v_slot
++)
950 if (! HASH_VACANT (*v_slot
))
952 struct variable
*v
= *v_slot
;
954 /* If V is recursively expanded and didn't come from the environment,
955 expand its value. If it came from the environment, it should
956 go back into the environment unchanged. */
958 && v
->origin
!= o_env
&& v
->origin
!= o_env_override
)
960 char *value
= recursively_expand_for_file (v
, file
);
962 if (strcmp(v
->name
, "Path") == 0 ||
963 strcmp(v
->name
, "PATH") == 0)
964 convert_Path_to_windows32(value
, ';');
966 *result
++ = concat (v
->name
, "=", value
);
972 if (strcmp(v
->name
, "Path") == 0 ||
973 strcmp(v
->name
, "PATH") == 0)
974 convert_Path_to_windows32(v
->value
, ';');
976 *result
++ = concat (v
->name
, "=", v
->value
);
980 *result
= (char *) xmalloc (100);
981 (void) sprintf (*result
, "%s=%u", MAKELEVEL_NAME
, makelevel
+ 1);
984 hash_free (&table
, 0);
989 /* Given a variable, a value, and a flavor, define the variable.
990 See the try_variable_definition() function for details on the parameters. */
993 do_variable_definition (const struct floc
*flocp
, const char *varname
,
994 char *value
, enum variable_origin origin
,
995 enum variable_flavor flavor
, int target_var
)
997 char *p
, *alloc_value
= NULL
;
1000 int conditional
= 0;
1002 /* Calculate the variable's new value in VALUE. */
1008 /* Should not be possible. */
1011 /* A simple variable definition "var := value". Expand the value.
1012 We have to allocate memory since otherwise it'll clobber the
1013 variable buffer, and we may still need that if we're looking at a
1014 target-specific variable. */
1015 p
= alloc_value
= allocated_variable_expand (value
);
1018 /* A conditional variable definition "var ?= value".
1019 The value is set IFF the variable is not defined yet. */
1020 v
= lookup_variable (varname
, strlen (varname
));
1025 flavor
= f_recursive
;
1028 /* A recursive variable definition "var = value".
1029 The value is used verbatim. */
1034 /* If we have += but we're in a target variable context, we want to
1035 append only with other variables in the context of this target. */
1039 v
= lookup_variable_in_set (varname
, strlen (varname
),
1040 current_variable_set_list
->set
);
1042 /* Don't append from the global set if a previous non-appending
1043 target-specific variable definition exists. */
1044 if (v
&& !v
->append
)
1048 v
= lookup_variable (varname
, strlen (varname
));
1052 /* There was no old value.
1053 This becomes a normal recursive definition. */
1055 flavor
= f_recursive
;
1059 /* Paste the old and new values together in VALUE. */
1061 unsigned int oldlen
, vallen
;
1066 /* The previous definition of the variable was recursive.
1067 The new value is the unexpanded old and new values. */
1068 flavor
= f_recursive
;
1070 /* The previous definition of the variable was simple.
1071 The new value comes from the old value, which was expanded
1072 when it was set; and from the expanded new value. Allocate
1073 memory for the expansion as we may still need the rest of the
1074 buffer if we're looking at a target-specific variable. */
1075 val
= alloc_value
= allocated_variable_expand (val
);
1077 oldlen
= strlen (v
->value
);
1078 vallen
= strlen (val
);
1079 p
= (char *) alloca (oldlen
+ 1 + vallen
+ 1);
1080 bcopy (v
->value
, p
, oldlen
);
1082 bcopy (val
, &p
[oldlen
+ 1], vallen
+ 1);
1088 /* Many Unix Makefiles include a line saying "SHELL=/bin/sh", but
1089 non-Unix systems don't conform to this default configuration (in
1090 fact, most of them don't even have `/bin'). On the other hand,
1091 $SHELL in the environment, if set, points to the real pathname of
1093 Therefore, we generally won't let lines like "SHELL=/bin/sh" from
1094 the Makefile override $SHELL from the environment. But first, we
1095 look for the basename of the shell in the directory where SHELL=
1096 points, and along the $PATH; if it is found in any of these places,
1097 we define $SHELL to be the actual pathname of the shell. Thus, if
1098 you have bash.exe installed as d:/unix/bash.exe, and d:/unix is on
1099 your $PATH, then SHELL=/usr/local/bin/bash will have the effect of
1100 defining SHELL to be "d:/unix/bash.exe". */
1101 if ((origin
== o_file
|| origin
== o_override
)
1102 && strcmp (varname
, "SHELL") == 0)
1104 PATH_VAR (shellpath
);
1105 extern char * __dosexec_find_on_path (const char *, char *[], char *);
1107 /* See if we can find "/bin/sh.exe", "/bin/sh.com", etc. */
1108 if (__dosexec_find_on_path (p
, (char **)0, shellpath
))
1112 for (p
= shellpath
; *p
; p
++)
1117 v
= define_variable_loc (varname
, strlen (varname
),
1118 shellpath
, origin
, flavor
== f_recursive
,
1123 char *shellbase
, *bslash
;
1124 struct variable
*pathv
= lookup_variable ("PATH", 4);
1129 shellbase
= strrchr (p
, '/');
1130 bslash
= strrchr (p
, '\\');
1131 if (!shellbase
|| bslash
> shellbase
)
1133 if (!shellbase
&& p
[1] == ':')
1140 /* Search for the basename of the shell (with standard
1141 executable extensions) along the $PATH. */
1143 pathlen
= strlen (pathv
->value
);
1144 path_string
= (char *)xmalloc (5 + pathlen
+ 2 + 1);
1145 /* On MSDOS, current directory is considered as part of $PATH. */
1146 sprintf (path_string
, "PATH=.;%s", pathv
? pathv
->value
: "");
1147 fake_env
[0] = path_string
;
1148 fake_env
[1] = (char *)0;
1149 if (__dosexec_find_on_path (shellbase
, fake_env
, shellpath
))
1153 for (p
= shellpath
; *p
; p
++)
1158 v
= define_variable_loc (varname
, strlen (varname
),
1160 flavor
== f_recursive
, flocp
);
1163 v
= lookup_variable (varname
, strlen (varname
));
1169 #endif /* __MSDOS__ */
1171 if ((origin
== o_file
|| origin
== o_override
|| origin
== o_command
)
1172 && streq (varname
, "SHELL"))
1174 extern char *default_shell
;
1176 /* Call shell locator function. If it returns TRUE, then
1177 set no_default_sh_exe to indicate sh was found and
1178 set new value for SHELL variable. */
1180 if (find_and_set_default_shell (p
))
1182 v
= define_variable_in_set (varname
, strlen (varname
), default_shell
,
1183 origin
, flavor
== f_recursive
,
1185 ? current_variable_set_list
->set
1188 no_default_sh_exe
= 0;
1191 v
= lookup_variable (varname
, strlen (varname
));
1196 /* If we are defining variables inside an $(eval ...), we might have a
1197 different variable context pushed, not the global context (maybe we're
1198 inside a $(call ...) or something. Since this function is only ever
1199 invoked in places where we want to define globally visible variables,
1200 make sure we define this variable in the global set. */
1202 v
= define_variable_in_set (varname
, strlen (varname
), p
,
1203 origin
, flavor
== f_recursive
,
1205 ? current_variable_set_list
->set
: NULL
),
1208 v
->conditional
= conditional
;
1216 /* Try to interpret LINE (a null-terminated string) as a variable definition.
1218 ORIGIN may be o_file, o_override, o_env, o_env_override,
1219 or o_command specifying that the variable definition comes
1220 from a makefile, an override directive, the environment with
1221 or without the -e switch, or the command line.
1223 See the comments for parse_variable_definition().
1225 If LINE was recognized as a variable definition, a pointer to its `struct
1226 variable' is returned. If LINE is not a variable definition, NULL is
1230 parse_variable_definition (struct variable
*v
, char *line
)
1233 register char *p
= line
;
1236 enum variable_flavor flavor
= f_bogus
;
1242 if (c
== '\0' || c
== '#')
1247 flavor
= f_recursive
;
1258 /* A colon other than := is a rule line, not a variable defn. */
1260 else if (c
== '+' && *p
== '=')
1266 else if (c
== '?' && *p
== '=')
1269 flavor
= f_conditional
;
1274 /* This might begin a variable expansion reference. Make sure we
1275 don't misrecognize chars inside the reference as =, := or +=. */
1284 continue; /* Nope. */
1286 /* P now points past the opening paren or brace.
1287 Count parens or braces until it is matched. */
1289 for (; *p
!= '\0'; ++p
)
1293 else if (*p
== closeparen
&& --count
< 0)
1303 beg
= next_token (line
);
1304 while (end
> beg
&& isblank ((unsigned char)end
[-1]))
1309 /* Expand the name, so "$(foo)bar = baz" works. */
1310 name
= (char *) alloca (end
- beg
+ 1);
1311 bcopy (beg
, name
, end
- beg
);
1312 name
[end
- beg
] = '\0';
1313 v
->name
= allocated_variable_expand (name
);
1315 if (v
->name
[0] == '\0')
1316 fatal (&v
->fileinfo
, _("empty variable name"));
1321 /* Try to interpret LINE (a null-terminated string) as a variable definition.
1323 ORIGIN may be o_file, o_override, o_env, o_env_override,
1324 or o_command specifying that the variable definition comes
1325 from a makefile, an override directive, the environment with
1326 or without the -e switch, or the command line.
1328 See the comments for parse_variable_definition().
1330 If LINE was recognized as a variable definition, a pointer to its `struct
1331 variable' is returned. If LINE is not a variable definition, NULL is
1335 try_variable_definition (const struct floc
*flocp
, char *line
,
1336 enum variable_origin origin
, int target_var
)
1339 struct variable
*vp
;
1342 v
.fileinfo
= *flocp
;
1344 v
.fileinfo
.filenm
= 0;
1346 if (!parse_variable_definition (&v
, line
))
1349 vp
= do_variable_definition (flocp
, v
.name
, v
.value
,
1350 origin
, v
.flavor
, target_var
);
1357 /* Print information for variable V, prefixing it with PREFIX. */
1360 print_variable (const void *item
, void *arg
)
1362 const struct variable
*v
= (struct variable
*) item
;
1363 const char *prefix
= (char *) arg
;
1369 origin
= _("default");
1372 origin
= _("environment");
1375 origin
= _("makefile");
1377 case o_env_override
:
1378 origin
= _("environment under -e");
1381 origin
= _("command line");
1384 origin
= _("`override' directive");
1387 origin
= _("automatic");
1393 fputs ("# ", stdout
);
1394 fputs (origin
, stdout
);
1395 if (v
->fileinfo
.filenm
)
1396 printf (_(" (from `%s', line %lu)"),
1397 v
->fileinfo
.filenm
, v
->fileinfo
.lineno
);
1399 fputs (prefix
, stdout
);
1401 /* Is this a `define'? */
1402 if (v
->recursive
&& strchr (v
->value
, '\n') != 0)
1403 printf ("define %s\n%s\nendef\n", v
->name
, v
->value
);
1408 printf ("%s %s= ", v
->name
, v
->recursive
? v
->append
? "+" : "" : ":");
1410 /* Check if the value is just whitespace. */
1411 p
= next_token (v
->value
);
1412 if (p
!= v
->value
&& *p
== '\0')
1413 /* All whitespace. */
1414 printf ("$(subst ,,%s)", v
->value
);
1415 else if (v
->recursive
)
1416 fputs (v
->value
, stdout
);
1418 /* Double up dollar signs. */
1419 for (p
= v
->value
; *p
!= '\0'; ++p
)
1430 /* Print all the variables in SET. PREFIX is printed before
1431 the actual variable definitions (everything else is comments). */
1434 print_variable_set (struct variable_set
*set
, char *prefix
)
1436 hash_map_arg (&set
->table
, print_variable
, prefix
);
1438 fputs (_("# variable set hash-table stats:\n"), stdout
);
1439 fputs ("# ", stdout
);
1440 hash_print_stats (&set
->table
, stdout
);
1441 putc ('\n', stdout
);
1444 /* Print the data base of variables. */
1447 print_variable_data_base (void)
1449 puts (_("\n# Variables\n"));
1451 print_variable_set (&global_variable_set
, "");
1453 puts (_("\n# Pattern-specific Variable Values"));
1456 struct pattern_var
*p
;
1459 for (p
= pattern_vars
; p
!= 0; p
= p
->next
)
1462 printf ("\n%s :\n", p
->target
);
1463 print_variable (&p
->variable
, "# ");
1467 puts (_("\n# No pattern-specific variable values."));
1469 printf (_("\n# %u pattern-specific variable values"), rules
);
1474 /* Print all the local variables of FILE. */
1477 print_file_variables (struct file
*file
)
1479 if (file
->variables
!= 0)
1480 print_variable_set (file
->variables
->set
, "# ");
1485 sync_Path_environment (void)
1487 char *path
= allocated_variable_expand ("$(PATH)");
1488 static char *environ_path
= NULL
;
1494 * If done this before, don't leak memory unnecessarily.
1495 * Free the previous entry before allocating new one.
1498 free (environ_path
);
1501 * Create something WINDOWS32 world can grok
1503 convert_Path_to_windows32 (path
, ';');
1504 environ_path
= concat ("PATH", "=", path
);
1505 putenv (environ_path
);