Products
and Services Support
and Docs Training Partner Programs About Red
Hat
  download storecart
red hat logo
redhat.comredhat network

Red Hat Documentation

The origin Function Contents|Index|Previous|Next
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 its origin. Its syntax is:

    $(origin variable)
        Note:
        variable is the name of a variable to inquire about; it is 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 as the following descriptions discuss.
 

    ‘undefined’
      Used if variable was never defined.

    ‘default’

     
        Note:
        If you have redefined a default variable, the origin function will return the origin of the later definition.

    ‘environment’

      Used if variable was defined as an environment variable and the ‘-e’ option is not turned on (see Summary of options).

    ‘environment override’

      Used if variable was defined as an environment variable and the ‘-e’ option is turned on (see Summary of options).

    ‘file’

      Used if variable was defined in a makefile.

    ‘command line’

      Used if variable was defined on the command line.

    ‘override’

    ‘automatic’

      Used if variable is an automatic variable defined for the execution of the commands for each rule (see 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 the following.
     
        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 the following.
     
        ifneq "$(findstring environment,$(origin bletch))" ""
        bletch = barf, gag, etc.
        endif
     

Top|Contents|Index|Previous|Next

 

 


 
© 2001 Red Hat, Inc. All rights reserved.
About Red Hat  :  Legal statement  :  Privacy statement  :  Y2K statement  :  Contact Red Hat