# The format of function-specific variables:
# @VARIABLE: foo
+# [@USER_VARIABLE] (set in make.conf, not ebuilds)
+# [@INTERNAL] (internal eclass use variable)
# [@DEFAULT_UNSET]
-# [@INTERNAL]
# [@REQUIRED]
# @DESCRIPTION:
# <required; blurb about this variable>
# The format of eclass variables:
# @ECLASS-VARIABLE: foo
+# [@PRE_INHERIT] (the variable must be set before inheriting the eclass)
+# [@USER_VARIABLE] (set in make.conf, not ebuilds)
+# [@OUTPUT_VARIABLE] (set by eclass, to be read in ebuilds)
+# [@INTERNAL] (internal eclass use variable)
# [@DEFAULT_UNSET]
-# [@INTERNAL]
# [@REQUIRED]
# @DESCRIPTION:
# <required; blurb about this variable>
internal = 0
required = 0
+ # additional variable classes
+ pre_inherit = 0
+ user_variable = 0
+ output_variable = 0
+
# make sure people haven't specified this before (copy & paste error)
if (all_vars[var_name])
fail(eclass ": duplicate definition found for variable: " var_name)
internal = 1
else if ($2 == "@REQUIRED")
required = 1
+ else if ($2 == "@PRE_INHERIT")
+ pre_inherit = 1
+ else if ($2 == "@USER_VARIABLE")
+ user_variable = 1
+ else if ($2 == "@OUTPUT_VARIABLE")
+ output_variable = 1
else
opts = 0
}
regex = "^[[:space:]]*:[[:space:]]*[$]{" var_name ":?=(.*)}"
val = gensub(regex, "\\1", 1, $0)
if (val == $0) {
- if (default_unset + required + internal == 0)
+ if (default_unset + required + internal + output_variable == 0)
warn(var_name ": unable to extract default variable content: " $0)
val = ""
} else if (val !~ /^["']/ && val ~ / /) {
val = " " op " \\fI" val "\\fR"
if (required == 1)
val = val " (REQUIRED)"
+ # TODO: group variables using those classes
+ if (pre_inherit == 1)
+ val = val " (SET BEFORE INHERIT)"
+ if (user_variable == 1)
+ val = val " (USER VARIABLE)"
+ if (output_variable == 1)
+ val = val " (GENERATED BY ECLASS)"
+
+ # check for invalid combos
+ if (internal + pre_inherit + user_variable + output_variable > 1)
+ fail(var_name ": multiple variable classes specified")
if (internal == 1)
return ""