#*************************************************************************
# Copyright (c) 2006 UChicago Argonne LLC, as Operator of Argonne
#     National Laboratory.
# Copyright (c) 2002 The Regents of the University of California, as
#     Operator of Los Alamos National Laboratory.
# EPICS BASE is distributed subject to a Software License Agreement found
# in the file LICENSE that is included with this distribution. 
#*************************************************************************
#
# $Revision-Id$
#

all: install

ACTIONS = inc
ACTIONS += build
ACTIONS += install
ACTIONS += buildInstall
ACTIONS += browse
ACTIONS += runtests
#ACTIONS += rebuild

actionPart = $(word 1, $(subst $(DIVIDER), ,$@))
archPart = $(word 2, $(subst $(DIVIDER), ,$@))

actionArchTargets = $(foreach x, $(ACTIONS),\
		$(foreach arch,$(BUILD_ARCHS), $(x)$(DIVIDER)$(arch)))

cleanArchTargets = $(foreach arch,$(BUILD_ARCHS), clean$(DIVIDER)$(arch))

buildDirs = $(addprefix O.,$(BUILD_ARCHS))

#*************************************************************************
# Create epics_host_arch dependancies for GNU make -j option
# Only works with GNU make 3.81 or later (uses eval function)
# Needed in dirs where EPICS_HOST_ARCH build creates a tool used in 
# cross arch builds

CROSS_ARCHS += $(CROSS1) $(CROSS2)

# j is NOT found in MAKEFLAGS when using make 3.81
# Hope to uncomment this for GNU make 3.82
#ifeq ($(findstring j,$(MAKEFLAGS)),j)

define DEP_template
$(2): $$(EPICS_HOST_ARCH)
$(1)$$(DIVIDER)$(2): $(1)$$(DIVIDER)$$(EPICS_HOST_ARCH) O.$(2)
endef

$(foreach action, $(ACTIONS), $(foreach arch,\
      $(CROSS_ARCHS),$(eval $(call DEP_template,$(action),$(arch)))))

#endif
#*************************************************************************

# Allows rebuild to work with parallel builds option, -j.
ifeq (rebuild,$(filter rebuild,$(MAKECMDGOALS)))
$(buildDirs) O.Common : clean
rebuild: install
endif

$(actionArchTargets) : $(buildDirs) O.Common
	$(MAKE) -C O.$(archPart) -f ../Makefile TOP=$(TOP)/.. T_A=$(archPart) $(actionPart)

$(BUILD_ARCHS) : % : O.% O.Common
	$(MAKE) -C O.$@ -f ../Makefile TOP=$(TOP)/.. T_A=$@

$(ACTIONS):%: $(foreach arch, $(BUILD_ARCHS), %$(DIVIDER)$(arch))

$(buildDirs):
	$(PERL) $(TOOLS)/makeMakefile.pl $@ $(TOP)/..

O.Common:
	$(MKDIR) O.Common

#
# special clean rule
#
clean ::
	$(RMDIR) $(addprefix O.,$(BUILD_ARCHS)) O.Common

archclean ::
	$(RMDIR) $(addprefix O.,$(BUILD_ARCHS))

$(cleanArchTargets) ::
	$(RMDIR) O.$(archPart)

realclean ::
	$(RMDIR) O.*

.PHONY : $(actionArchTargets)
.PHONY : $(cleanArchTargets)
.PHONY : $(BUILD_ARCHS) rebuild
.PHONY : $(ACTIONS) clean realclean archclean all
