-define stage1_variables
-$(1).spec = $(notdir $($(1)-SPEC))
-$(1).specpath = SPECS/$(1).spec
-$(1).module = $(firstword $($(1)-MODULES))
-$(1)-SVNPATH = $(strip $($(1)-SVNPATH))
+define stage1_package_vars
+$(1).module := $(firstword $($(1)-MODULES))
+$(1).specpath := SPECS/$(notdir $($(1)-SPEC))
+$(1).moduledir := MODULES/$$($(1).module)
+$(1).codespec := MODULES/$$($(1).module)/$($(1)-SPEC)
+endef
+
+$(foreach package, $(ALL), $(eval $(call stage1_package_vars,$(package))))
+
+# compute all modules
+ALL.modules := build tests
+$(foreach package,$(ALL), $(eval ALL.modules+=$($(package)-MODULES)))
+ALL.modules:=$(sort $(ALL.modules))
+
+# extract revision from -SVNPATH or tag from -GITPATH
+define stage1_module_vars
+ifneq "$($(1)-SVNPATH)" ""
+$(1)-SVNPATH := $(strip $($(1)-SVNPATH))
+else
+$(1)-GITPATH := $(strip $($(1)-GITPATH))
+$(1).gitrepo := $(firstword $(subst @, ,$($(1)-GITPATH)))
+$(1).gittag := $(word 2,$(subst @, ,$($(1)-GITPATH)))
+$(1).gittag := $(if $($(1).gittag),$($(1).gittag),master)
+endif