Files
harbour-core/config/dir.mk
vszakats a4a357a18b 2013-03-15 11:12 UTC+0100 Viktor Szakats (harbour syenar.net)
* /harbour/* -> /*
    * moved whole Harbour source tree one level up to
      avoid single 'harbour' top dir
2013-03-15 11:13:30 +01:00

81 lines
1.7 KiB
Makefile

#
# $Id$
#
include $(TOP)$(ROOT)config/global.mk
ifneq ($(HB_PLATFORM),)
ifneq ($(HB_COMPILER),)
ifeq ($(HB_HOST_PLAT),dos)
# do not use rules for parallel processing in MS-DOS
JOB_SRV := NO
else
# these make versions does not work correctly with
# parallel execution rules below
JOB_SRV := $(MAKE_VERSION:3.7%=NO)
JOB_SRV := $(JOB_SRV:3.80%=NO)
endif
ifeq ($(JOB_SRV),NO)
DIRS := $(filter-out {%},$(subst {, {,$(DIRS)))
include $(TOP)$(ROOT)config/dirsh.mk
else
# NOTE: The empty line directly before 'endef' HAVE TO exist!
# It causes that every command will be separated by LF
define dir_mk
@$(MK) $(MKFLAGS) -C $(dir) $@
endef
DIRS_PURE := $(filter-out {%},$(subst {, {,$(DIRS)))
DIRS_DEP := $(filter-out $(DIRS_PURE),$(DIRS))
DIRS_MK := $(foreach d, $(DIRS_PURE), $(if $(wildcard $(d)/Makefile),$(d),))
DIR_RULE = $(foreach dir, $(DIRS_MK), $(dir_mk))
endif
all : first
ifeq ($(JOB_SRV),NO)
first clean install::
+$(DIR_RULE)
else
DIRS_CLEAN := $(foreach dir, $(DIRS_MK), $(dir).clean)
DIRS_INST := $(foreach dir, $(DIRS_MK), $(dir).inst)
ifneq ($(_HB_BLD),yes)
first :: $(DIRS_MK)
endif
install :: $(DIRS_INST)
clean :: $(DIRS_CLEAN)
comma := ,
define dep_rule
$(subst $(comma),$(2) ,$(subst },$(2),$(subst {,$(2)::|,$(1))))
endef
$(foreach dep, $(DIRS_DEP), $(eval $(call dep_rule,$(dep),.clean)))
$(foreach dep, $(DIRS_DEP), $(eval $(call dep_rule,$(dep),.inst)))
$(foreach dep, $(DIRS_DEP), $(eval $(call dep_rule,$(dep),)))
$(DIRS_CLEAN) ::
+@$(MK) $(MKFLAGS) -C $(@:.clean=) clean
$(DIRS_INST) ::
+@$(MK) $(MKFLAGS) -C $(@:.inst=) install _HB_BLD=yes
$(DIRS_MK) ::
+@$(MK) $(MKFLAGS) -C $(@)
endif
endif
endif