(make.info.gz) Origin Function
Info Catalog
(make.info.gz) Eval Function
(make.info.gz) Functions
(make.info.gz) Flavor Function
8.9 The `origin' Function
=========================
The `origin' function is unlike most other functions in that it does
not operate on the values of variables; it tells you something _about_
a variable. Specifically, it tells you where it came from.
The syntax of the `origin' function is:
$(origin VARIABLE)
Note that VARIABLE is the _name_ of a variable to inquire about; not
a _reference_ to that variable. Therefore you would not normally use a
`$' or parentheses when writing it. (You can, however, use a variable
reference in the name if you want the name not to be a constant.)
The result of this function is a string telling you how the variable
VARIABLE was defined:
`undefined'
if VARIABLE was never defined.
`default'
if VARIABLE has a default definition, as is usual with `CC' and so
on. Variables Used by Implicit Rules Implicit Variables.
Note that if you have redefined a default variable, the `origin'
function will return the origin of the later definition.
`environment'
if VARIABLE was defined as an environment variable and the `-e'
option is _not_ turned on ( Summary of Options Options
Summary.).
`environment override'
if VARIABLE was defined as an environment variable and the `-e'
option _is_ turned on ( Summary of Options Options Summary.).
`file'
if VARIABLE was defined in a makefile.
`command line'
if VARIABLE was defined on the command line.
`override'
if VARIABLE was defined with an `override' directive in a makefile
( The `override' Directive Override Directive.).
`automatic'
if VARIABLE is an automatic variable defined for the execution of
the commands for each rule ( Automatic Variables).
This information is primarily useful (other than for your curiosity)
to determine if you want to believe the value of a variable. For
example, suppose you have a makefile `foo' that includes another
makefile `bar'. You want a variable `bletch' to be defined in `bar' if
you run the command `make -f bar', even if the environment contains a
definition of `bletch'. However, if `foo' defined `bletch' before
including `bar', you do not want to override that definition. This
could be done by using an `override' directive in `foo', giving that
definition precedence over the later definition in `bar';
unfortunately, the `override' directive would also override any command
line definitions. So, `bar' could include:
ifdef bletch
ifeq "$(origin bletch)" "environment"
bletch = barf, gag, etc.
endif
endif
If `bletch' has been defined from the environment, this will redefine
it.
If you want to override a previous definition of `bletch' if it came
from the environment, even under `-e', you could instead write:
ifneq "$(findstring environment,$(origin bletch))" ""
bletch = barf, gag, etc.
endif
Here the redefinition takes place if `$(origin bletch)' returns
either `environment' or `environment override'. Functions for
String Substitution and Analysis Text Functions.
Info Catalog
(make.info.gz) Eval Function
(make.info.gz) Functions
(make.info.gz) Flavor Function
automatically generated byinfo2html