[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
re: a function that calls a function eval'ing an immediate variable
From: |
Sandy Currier |
Subject: |
re: a function that calls a function eval'ing an immediate variable |
Date: |
Tue, 2 Mar 2004 10:22:03 -0500 |
First, thanks so much for the answer to my previous question.
We are continuing to prototype a potential gmake application.
It is rather large (+1000 leaf makefiles) and over 8G of
derived objects. The project currently is using a non-
recursive design and leverages a bunch of 3.81 features.
To simplify the leaf makefiles, we are trying to use some
templates that are eval-call'ed by the leaf makefiles. The
leaf makefiles will hopefully be fully generated. The
problem is that we want to embed eval-call constructs inside
the initial 'function' definition called by the leaf
makefile. When we try this, I for one cannot get the macros
defined by the outer (first) function to be correctly eval'ed by
the second (inner) function. I have read the secton on macro
expansion several times, and the code looks right, but
non-the-less, it does not appear to work.
What fails is that an immediate variable, defined in the first (outer)
function, does not appear to be accessable by the second
(inner) macro/function call. I have attached a make snippet
below that reproduces the error. The error is that the
"_TEST2_glnx86" printout should be printing "../do_glnx86/ZZZ",
but is being evaled as "../do_glnx86/" instead. This looks like the
$(_THIS_DIR) variable is not being properly eval'ed by the inner
(second) function call.
Any thoughts or reviews or comments would be much appreciated.
Thanks!
-sandy
########
# make snippet to reproduce the above issue
# define some platforms
PLATFORMS := glnx86 sol2 hpux mac windows
DO_COMMON := ../do_common
DO_FLAVOR_glnx86 := ../do_glnx86
DO_FLAVOR_hpux := ../do_hpux
DO_FLAVOR_mac := ../do_mac
DO_FLAVOR_sol2 := ../do_sol2
DO_FLAVOR_windows := ../do_windows
# define a function
TEST2_TEMPLATE = _TEST2_$(1) := $$(DO_FLAVOR_$(1))/$$(_THIS_DIR)
# define a function that calls the above
define SECTION_1_MODULE_BLOCK
# $(1) =
# $(2) =
_THIS_DIR := $(1)
_DO_THIS_DIR := $(DO_COMMON)/$$(_THIS_DIR)
_TEST1 := $$(_DO_THIS_DIR)/EXPORTS/$(2).exports
# call DO_THIS_DIR_TEMPLATE function
$(foreach platform, $(PLATFORMS),$(eval $(call TEST2_TEMPLATE,$(platform))))
endef
# now call the macro
$(eval $(call SECTION_1_MODULE_BLOCK,ZZZ,AAA))
# now print some diagnostics
.PHONY: print2
print2:
@echo "PLATFORMS = $(PLATFORMS)"
@echo "_THIS_DIR = $(_THIS_DIR)"
@echo "_DO_THIS_DIR = $(_DO_THIS_DIR)"
@echo "_TEST2_glnx86 = $(_TEST2_glnx86)"
@echo "_TEST1 = $(_TEST1)"
- re: a function that calls a function eval'ing an immediate variable,
Sandy Currier <=