diff --git a/doc/make.texi b/doc/make.texi
index 8505e8d6..e635d5a8 100644
--- a/doc/make.texi
+++ b/doc/make.texi
@@ -8301,6 +8301,15 @@ evaluating other variables and functions.  The argument to the
 are parsed as makefile syntax.  The expanded results can define new
 @code{make} variables, targets, implicit or explicit rules, etc.
 
+@menu
+* Using eval:: Using the eval function.
+* Delayed expansion with eval:: Delayed expansion for the eval function.
+* Troubleshooting eval:: How to trace @code{eval} with @code{info}.
+@end menu
+
+@node Using eval
+@subsection Using the eval function
+
 The result of the @code{eval} function is always the empty string;
 thus, it can be placed virtually anywhere in a makefile without
 causing syntax errors.
@@ -8353,6 +8362,174 @@ clean:
 @end group
 @end example
 
+
+@node Delayed expansion with eval
+@subsection Delayed expansion for the eval function
+
+Here is another simpler and standalone example to explain the delayed expansion.
+
+@example
+@group
+WORD_1:=GNUmake
+WORD_2:=is fun
+INDICES:=1 2
+SENTENCE:=#
+
+define ADD_WORD
+WORD:=$(WORD_$(1))
+SENTENCE:=$(SENTENCE) $$(WORD)
+endef
+
+$(foreach INDEX,$(INDICES),$(eval $(call ADD_WORD,$(INDEX))))
+
+.PHONY: all
+all:
+	@@echo "$(SENTENCE)"
+@end group
+@end example
+
+Running the example will output:
+
+@example
+GNUmake is fun
+@end example
+
+This is because the first expansion of @samp{$(call ADD_WORD,$(INDEX))}
+has @samp{INDEX = 1} and thus gives before evaluation:
+
+@example
+WORD:=GNUmake
+SENTENCE:= $(WORD)
+@end example
+
+@noindent
+and the second expansion has @samp{INDEX = 2} and gives:
+@example
+WORD:=is fun
+SENTENCE:=GNUmake $(WORD)
+@end example
+
+If now you had used a single @samp{$} instead of doubled ones
+(@samp{$$}), that is to say if macro @code{ADD_WORD} had been defined
+as:
+
+@example
+define ADD_WORD
+WORD:=$(WORD_$(1))
+SENTENCE:=$(SENTENCE) $(WORD)
+endef
+@end example
+
+@noindent
+then the output would have just been:
+
+@example
+GNUmake
+@end example
+
+@noindent
+which was not the intention of the example.
+
+This is because the first expansion of @samp{$(call ADD_WORD,$(INDEX))}
+has @samp{INDEX = 1} and thus gives before evaluation:
+
+@example
+WORD:=GNUmake
+SENTENCE:=
+@end example
+
+@noindent
+and the second expansion has @samp{INDEX = 2} and gives:
+
+@example
+WORD:=is fun
+SENTENCE:= GNUmake
+@end example
+
+If now you had used doubled dollars @samp{$$} also for @code{WORD}
+definition, that is to say if macro @code{ADD_WORD} had been defined as:
+
+@example
+define ADD_WORD
+WORD:=$$(WORD_$(1))
+SENTENCE:=$(SENTENCE) $$(WORD)
+endef
+@end example
+
+@noindent
+then the output would have also been:
+
+@example
+GNUmake is fun
+@end example
+
+However, under the hood this would have worked slightly differently than
+in the first case. The first expansion of @samp{$(call
+ADD_WORD,$(INDEX))} has @samp{INDEX = 1} and thus gives before
+evaluation:
+
+@example
+WORD:=$(WORD_1)
+SENTENCE:= $(WORD)
+@end example
+
+@noindent
+and the second expansion has @samp{INDEX = 2} and gives:
+
+@example
+WORD:=$(WORD_2)
+SENTENCE:=GNUmake $(WORD)
+@end example
+
+
+@node Troubleshooting eval
+@subsection How to trace @code{eval} with @code{info}
+
+It can be useful to use @code{$(info@dots{})} to debug calls to
+@code{$(eval@dots{})}. For instance define a macro @code{trace_eval} as follows:
+
+@example
+trace_eval=$(info $(1))$(eval $(1))
+@end example
+
+and then replace the troublesome @code{$(eval @var{something})} piece of
+code by @code{$(call trace_eval,@var{something})}.
+
+Rewriting this way the example of @ref{Delayed expansion with eval} will give:
+
+@example
+@group
+WORD_1:=GNUmake
+WORD_2:=is fun
+INDICES:=1 2
+SENTENCE:=#
+
+define ADD_WORD
+WORD:=$(WORD_$(1))
+SENTENCE:=$(SENTENCE) $$(WORD)
+endef
+
+trace_eval=$(info $(1))$(eval $(1))
+
+$(foreach INDEX,$(INDICES),$(call trace_eval,$(call ADD_WORD,$(INDEX))))
+
+.PHONY: all
+all:
+	@@echo "$(SENTENCE)"
+@end group
+@end example
+
+Running the example will output:
+
+@example
+WORD=GNUmake
+SENTENCE:= $(WORD)
+WORD=is fun
+SENTENCE:=GNUmake $(WORD)
+GNUmake is fun
+@end example
+
+
 @node Origin Function, Flavor Function, Eval Function, Functions
 @section The @code{origin} Function
 @findex origin
