Avoid executing subproject rules for clean/distclean of instances with no

subprojects - quite a good speed up for clean/distclean


git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/tools/make/trunk@14788 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Nicola Pero 2002-10-16 03:30:58 +00:00
parent a163af30f3
commit 51bc66cf32
17 changed files with 141 additions and 31 deletions

View file

@ -38,7 +38,7 @@ internal-uninstall:: $(APP_NAME:=.uninstall.app.variables)
_PSWRAP_C_FILES = $(foreach app,$(APP_NAME),$($(app)_PSWRAP_FILES:.psw=.c))
_PSWRAP_H_FILES = $(foreach app,$(APP_NAME),$($(app)_PSWRAP_FILES:.psw=.h))
internal-clean:: $(APP_NAME:=.clean.app.subprojects)
internal-clean::
rm -rf $(GNUSTEP_OBJ_DIR) $(_PSWRAP_C_FILES) $(_PSWRAP_H_FILES)
ifeq ($(OBJC_COMPILER), NeXT)
rm -f *.iconheader
@ -53,11 +53,27 @@ else
endif
endif
internal-distclean:: $(APP_NAME:=.distclean.app.subprojects)
internal-distclean::
rm -rf shared_obj static_obj shared_debug_obj shared_profile_obj \
static_debug_obj static_profile_obj shared_profile_debug_obj \
static_profile_debug_obj *.app *.debug *.profile *.iconheader
# The following make trick extracts all tools in APP_NAME for which
# the xxx_SUBPROJECTS variable is set to something non-empty.
# For those apps (and only for them), we need to run 'clean' and
# 'distclean' in subprojects too.
#
# Please note that newer GNU make has a $(if condition,then,else)
# function, which would be so handy here! But unfortunately it's not
# available in older GNU makes, so we must not use it. This trick
# works around this problem.
APPS_WITH_SUBPROJECTS = $(strip $(foreach app,$(APP_NAME),$(patsubst %,$(app),$($(app)_SUBPROJECTS))))
ifneq ($(APPS_WITH_SUBPROJECTS),)
internal-clean:: $(APPS_WITH_SUBPROJECTS:=.clean.app.subprojects)
internal-distclean:: $(APPS_WITH_SUBPROJECTS:=.distclean.app.subprojects)
endif
$(APP_NAME):
@$(MAKE) -f $(MAKEFILE_NAME) --no-print-directory $@.all.app.variables

View file

@ -36,15 +36,22 @@ internal-uninstall:: $(BUNDLE_NAME:=.uninstall.bundle.variables)
_PSWRAP_C_FILES = $(foreach bundle,$(BUNDLE_NAME),$($(bundle)_PSWRAP_FILES:.psw=.c))
_PSWRAP_H_FILES = $(foreach bundle,$(BUNDLE_NAME),$($(bundle)_PSWRAP_FILES:.psw=.h))
internal-clean:: $(BUNDLE_NAME:=.clean.bundle.subprojects)
internal-clean::
rm -rf $(GNUSTEP_OBJ_DIR) $(_PSWRAP_C_FILES) $(_PSWRAP_H_FILES) \
$(addsuffix $(BUNDLE_EXTENSION),$(BUNDLE_NAME))
internal-distclean:: $(BUNDLE_NAME:=.distclean.bundle.subprojects)
internal-distclean::
rm -rf shared_obj static_obj shared_debug_obj shared_profile_obj \
static_debug_obj static_profile_obj shared_profile_debug_obj \
static_profile_debug_obj
BUNDLES_WITH_SUBPROJECTS = $(strip $(foreach bundle,$(BUNDLE_NAME),$(patsubst %,$(bundle),$($(bundle)_SUBPROJECTS))))
ifneq ($(BUNDLES_WITH_SUBPROJECTS),)
internal-clean:: $(BUNDLES_WITH_SUBPROJECTS:=.clean.bundle.subprojects)
internal-distclean:: $(BUNDLES_WITH_SUBPROJECTS:=.distclean.bundle.subprojects)
endif
$(BUNDLE_NAME):
@$(MAKE) -f $(MAKEFILE_NAME) --no-print-directory \
$@.all.bundle.variables

View file

@ -36,14 +36,20 @@ internal-uninstall:: $(CLIBRARY_NAME:=.uninstall.clibrary.variables)
_PSWRAP_C_FILES = $(foreach lib,$(CLIBRARY_NAME),$($(lib)_PSWRAP_FILES:.psw=.c))
_PSWRAP_H_FILES = $(foreach lib,$(CLIBRARY_NAME),$($(lib)_PSWRAP_FILES:.psw=.h))
internal-clean:: $(CLIBRARY_NAME:=.clean.clibrary.subprojects)
internal-clean::
rm -rf $(GNUSTEP_OBJ_DIR) $(_PSWRAP_C_FILES) $(_PSWRAP_H_FILES)
internal-distclean:: $(CLIBRARY_NAME:=.distclean.clibrary.subprojects)
internal-distclean::
rm -rf shared_obj static_obj shared_debug_obj shared_profile_obj \
static_debug_obj static_profile_obj shared_profile_debug_obj \
static_profile_debug_obj
CLIBRARIES_WITH_SUBPROJECTS = $(strip $(foreach clibrary,$(CLIBRARY_NAME),$(patsubst %,$(clibrary),$($(clibrary)_SUBPROJECTS))))
ifneq ($(CLIBRARIES_WITH_SUBPROJECTS),)
internal-clean:: $(CLIBRARIES_WITH_SUBPROJECTS:=.clean.clibrary.subprojects)
internal-distclean:: $(CLIBRARIES_WITH_SUBPROJECTS:=.distclean.clibrary.subprojects)
endif
$(CLIBRARY_NAME):
@$(MAKE) -f $(MAKEFILE_NAME) --no-print-directory \
$@.all.clibrary.variables

View file

@ -32,14 +32,20 @@ internal-install:: $(CTOOL_NAME:=.install.ctool.variables)
internal-uninstall:: $(CTOOL_NAME:=.uninstall.ctool.variables)
internal-clean:: $(CTOOL_NAME:=.clean.ctool.subprojects)
internal-clean::
rm -rf $(GNUSTEP_OBJ_DIR)
internal-distclean:: $(CTOOL_NAME:=.distclean.ctool.subprojects)
internal-distclean::
rm -rf shared_obj static_obj shared_debug_obj shared_profile_obj \
static_debug_obj static_profile_obj shared_profile_debug_obj \
static_profile_debug_obj
CTOOLS_WITH_SUBPROJECTS = $(strip $(foreach ctool,$(CTOOL_NAME),$(patsubst %,$(ctool),$($(ctool)_SUBPROJECTS))))
ifneq ($(CTOOLS_WITH_SUBPROJECTS),)
internal-clean:: $(CTOOLS_WITH_SUBPROJECTS:=.clean.ctool.subprojects)
internal-distclean:: $(CTOOLS_WITH_SUBPROJECTS:=.distclean.ctool.subprojects)
endif
$(CTOOL_NAME):
@$(MAKE) -f $(MAKEFILE_NAME) --no-print-directory \
$@.all.ctool.variables

View file

@ -45,7 +45,7 @@ internal-install:: $(GSWAPP_NAME:=.install.gswapp.variables)
internal-uninstall:: $(GSWAPP_NAME:=.uninstall.gswapp.variables)
internal-clean:: $(GSWAPP_NAME:=.clean.gswapp.subprojects)
internal-clean::
rm -rf $(GNUSTEP_OBJ_DIR)
ifeq ($(OBJC_COMPILER), NeXT)
rm -f *.iconheader
@ -60,11 +60,17 @@ else
endif
endif
internal-distclean:: $(GSWAPP_NAME:=.distclean.gswapp.subprojects)
internal-distclean::
rm -rf shared_obj static_obj shared_debug_obj shared_profile_obj \
static_debug_obj static_profile_obj shared_profile_debug_obj \
static_profile_debug_obj *.gswa *.debug *.profile *.iconheader
GSWAPPS_WITH_SUBPROJECTS = $(strip $(foreach gswapp,$(GSWAPP_NAME),$(patsubst %,$(gswapp),$($(gswapp)_SUBPROJECTS))))
ifneq ($(GSWAPPS_WITH_SUBPROJECTS),)
internal-clean:: $(GSWAPPS_WITH_SUBPROJECTS:=.clean.gswapp.subprojects)
internal-distclean:: $(GSWAPPS_WITH_SUBPROJECTS:=.distclean.gswapp.subprojects)
endif
$(GSWAPP_NAME):
@$(MAKE) -f $(MAKEFILE_NAME) --no-print-directory \
$@.all.gswapp.variables

View file

@ -37,15 +37,21 @@ internal-install:: $(GSWBUNDLE_NAME:=.install.gswbundle.variables)
internal-uninstall:: $(GSWBUNDLE_NAME:=.uninstall.gswbundle.variables)
internal-clean:: $(GSWBUNDLE_NAME:=.clean.gswbundle.subprojects)
internal-clean::
rm -rf $(GNUSTEP_OBJ_DIR) \
$(addsuffix $(GSWBUNDLE_EXTENSION),$(GSWBUNDLE_NAME))
internal-distclean:: $(GSWBUNDLE_NAME:=.distclean.gswbundle.subprojects)
internal-distclean::
rm -rf shared_obj static_obj shared_debug_obj shared_profile_obj \
static_debug_obj static_profile_obj shared_profile_debug_obj \
static_profile_debug_obj
GSWBUNDLES_WITH_SUBPROJECTS = $(strip $(foreach gswbundle,$(GSWBUNDLE_NAME),$(patsubst %,$(gswbundle),$($(gswbundle)_SUBPROJECTS))))
ifneq ($(GSWBUNDLES_WITH_SUBPROJECTS),)
internal-clean:: $(GSWBUNDLES_WITH_SUBPROJECTS:=.clean.gswbundle.subprojects)
internal-distclean:: $(GSWBUNDLES_WITH_SUBPROJECTS:=.distclean.gswbundle.subprojects)
endif
$(GSWBUNDLE_NAME):
@$(MAKE) -f $(MAKEFILE_NAME) --no-print-directory \
$@.all.gswbundle.variables

View file

@ -42,7 +42,12 @@ internal-uninstall:: $(JAVA_TOOL_NAME:=.uninstall.java_tool.variables)
internal-clean:: $(JAVA_TOOL_NAME:=.clean.java_tool.variables)
internal-distclean:: $(JAVA_TOOL_NAME:=.distclean.java_tool.subprojects)
internal-distclean::
JAVA_TOOLS_WITH_SUBPROJECTS = $(strip $(foreach java_tool,$(JAVA_TOOL_NAME),$(patsubst %,$(java_tool),$($(java_tool)_SUBPROJECTS))))
ifneq ($(JAVA_TOOLS_WITH_SUBPROJECTS),)
internal-distclean:: $(JAVA_TOOLS_WITH_SUBPROJECTS:=.distclean.java_tool.subprojects)
endif
$(JAVA_TOOL_NAME):
@$(MAKE) -f $(MAKEFILE_NAME) --no-print-directory \

View file

@ -34,7 +34,12 @@ internal-uninstall:: $(JAVA_PACKAGE_NAME:=.uninstall.java-package.variables)
internal-clean:: $(JAVA_PACKAGE_NAME:=.clean.java-package.variables)
internal-distclean:: $(JAVA_PACKAGE_NAME:=.distclean.java-package.subprojects)
internal-distclean::
JAVA_PACKAGES_WITH_SUBPROJECTS = $(strip $(foreach java-package,$(JAVA_PACKAGE_NAME),$(patsubst %,$(java-package),$($(java-package)_SUBPROJECTS))))
ifneq ($(JAVA_PACKAGES_WITH_SUBPROJECTS),)
internal-distclean:: $(JAVA_PACKAGES_WITH_SUBPROJECTS:=.distclean.java-package.subprojects)
endif
$(JAVA_PACKAGE_NAME):
@$(MAKE) -f $(MAKEFILE_NAME) --no-print-directory \

View file

@ -36,14 +36,20 @@ internal-uninstall:: $(LIBRARY_NAME:=.uninstall.library.variables)
_PSWRAP_C_FILES = $(foreach lib,$(LIBRARY_NAME),$($(lib)_PSWRAP_FILES:.psw=.c))
_PSWRAP_H_FILES = $(foreach lib,$(LIBRARY_NAME),$($(lib)_PSWRAP_FILES:.psw=.h))
internal-clean:: $(LIBRARY_NAME:=.clean.library.subprojects)
internal-clean::
rm -rf $(GNUSTEP_OBJ_DIR) $(_PSWRAP_C_FILES) $(_PSWRAP_H_FILES)
internal-distclean:: $(LIBRARY_NAME:=.distclean.library.subprojects)
internal-distclean::
rm -rf shared_obj static_obj shared_debug_obj shared_profile_obj \
static_debug_obj static_profile_obj shared_profile_debug_obj \
static_profile_debug_obj
LIBRARIES_WITH_SUBPROJECTS = $(strip $(foreach library,$(LIBRARY_NAME),$(patsubst %,$(library),$($(library)_SUBPROJECTS))))
ifneq ($(LIBRARIES_WITH_SUBPROJECTS),)
internal-clean:: $(LIBRARIES_WITH_SUBPROJECTS:=.clean.library.subprojects)
internal-distclean:: $(LIBRARIES_WITH_SUBPROJECTS:=.distclean.library.subprojects)
endif
$(LIBRARY_NAME):
@$(MAKE) -f $(MAKEFILE_NAME) --no-print-directory \
$@.all.library.variables

View file

@ -32,14 +32,20 @@ internal-install:: $(OBJC_PROGRAM_NAME:=.install.objc-program.variables)
internal-uninstall:: $(OBJC_PROGRAM_NAME:=.uninstall.objc-program.variables)
internal-clean:: $(OBJC_PROGRAM_NAME:=.clean.objc-program.subprojects)
internal-clean::
rm -rf $(GNUSTEP_OBJ_DIR)
internal-distclean:: $(OBJC_PROGRAM_NAME:=.distclean.objc-program.subprojects)
internal-distclean::
rm -rf shared_obj static_obj shared_debug_obj shared_profile_obj \
static_debug_obj static_profile_obj shared_profile_debug_obj \
static_profile_debug_obj
OBJC_PROGRAMS_WITH_SUBPROJECTS = $(strip $(foreach objc_program,$(OBJC_PROGRAM_NAME),$(patsubst %,$(objc_program),$($(objc_program)_SUBPROJECTS))))
ifneq ($(OBJC_PROGRAMS_WITH_SUBPROJECTS),)
internal-clean:: $(OBJC_PROGRAMS_WITH_SUBPROJECTS:=.clean.objc_program.subprojects)
internal-distclean:: $(OBJC_PROGRAMS_WITH_SUBPROJECTS:=.distclean.objc_program.subprojects)
endif
$(OBJC_PROGRAM_NAME):
@$(MAKE) -f $(MAKEFILE_NAME) --no-print-directory \
$@.all.objc-program.variables

View file

@ -37,11 +37,16 @@ internal-uninstall:: $(PALETTE_NAME:=.uninstall.palette.variables)
_PSWRAP_C_FILES = $(foreach palette,$(PALETTE_NAME),$($(palette)_PSWRAP_FILES:.psw=.c))
_PSWRAP_H_FILES = $(foreach palette,$(PALETTE_NAME),$($(palette)_PSWRAP_FILES:.psw=.h))
internal-clean:: $(PALETTE_NAME:=.clean.palette.subprojects)
internal-clean::
rm -rf $(GNUSTEP_OBJ_DIR) $(_PSWRAP_C_FILES) $(_PSWRAP_H_FILES)
internal-distclean:: $(PALETTE_NAME:=.distclean.palette.variables)
PALETTES_WITH_SUBPROJECTS = $(strip $(foreach palette,$(PALETTE_NAME),$(patsubst %,$(palette),$($(palette)_SUBPROJECTS))))
ifneq ($(PALETTES_WITH_SUBPROJECTS),)
internal-clean:: $(PALETTES_WITH_SUBPROJECTS:=.clean.palette.subprojects)
endif
$(PALETTE_NAME):
@$(MAKE) -f $(MAKEFILE_NAME) --no-print-directory \
$@.all.palette.variables

View file

@ -36,7 +36,7 @@ internal-uninstall:: $(SERVICE_NAME:=.uninstall.service.variables)
_PSWRAP_C_FILES = $(foreach service,$(SERVICE_NAME),$($(service)_PSWRAP_FILES:.psw=.c))
_PSWRAP_H_FILES = $(foreach service,$(SERVICE_NAME),$($(service)_PSWRAP_FILES:.psw=.h))
internal-clean:: $(SERVICE_NAME:=.clean.service.subprojects)
internal-clean::
rm -rf $(GNUSTEP_OBJ_DIR) $(_PSWRAP_C_FILES) $(_PSWRAP_H_FILES)
ifeq ($(OBJC_COMPILER), NeXT)
rm -f *.iconheader
@ -51,7 +51,13 @@ else
endif
endif
internal-distclean:: $(SERVICE_NAME:=.distclean.service.variables)
internal-distclean::
SERVICES_WITH_SUBPROJECTS = $(strip $(foreach service,$(SERVICE_NAME),$(patsubst %,$(service),$($(service)_SUBPROJECTS))))
ifneq ($(SERVICES_WITH_SUBPROJECTS),)
internal-clean:: $(SERVICES_WITH_SUBPROJECTS:=.clean.service.subprojects)
internal-distclean:: $(SERVICES_WITH_SUBPROJECTS:=.distclean.service.subprojects)
endif
$(SERVICE_NAME):
@$(MAKE) -f $(MAKEFILE_NAME) --no-print-directory \

View file

@ -64,14 +64,20 @@ endif
_PSWRAP_C_FILES = $($(SUBPROJECT_NAME)_PSWRAP_FILES:.psw=.c)
_PSWRAP_H_FILES = $($(SUBPROJECT_NAME)_PSWRAP_FILES:.psw=.h)
internal-clean:: $(SUBPROJECT_NAME:=.clean.subproject.subprojects)
internal-clean::
rm -rf $(GNUSTEP_OBJ_DIR) $(_PSWRAP_C_FILES) $(_PSWRAP_H_FILES)
internal-distclean:: $(SUBPROJECT_NAME:=.distclean.subproject.subprojects)
internal-distclean::
rm -rf shared_obj static_obj shared_debug_obj shared_profile_obj \
static_debug_obj static_profile_obj shared_profile_debug_obj \
static_profile_debug_obj
SUBPROJECTS_WITH_SUBPROJECTS = $(strip $(patsubst %,$(SUBPROJECT_NAME),$($(SUBPROJECT_NAME)_SUBPROJECTS)))
ifneq ($(SUBPROJECTS_WITH_SUBPROJECTS),)
internal-clean:: $(SUBPROJECTS_WITH_SUBPROJECTS:=.clean.subproject.subprojects)
internal-distclean:: $(SUBPROJECTS_WITH_SUBPROJECTS:=.distclean.subproject.subprojects)
endif
# If the subproject has a resource bundle, destroy it on distclean
ifeq ($($(SUBPROJECT_NAME)_HAS_RESOURCE_BUNDLE), yes)
internal-distclean::

View file

@ -32,7 +32,7 @@ internal-all:: $(TEST_APP_NAME:=.all.test-app.variables)
_PSWRAP_C_FILES = $(foreach app,$(TEST_APP_NAME),$($(app)_PSWRAP_FILES:.psw=.c))
_PSWRAP_H_FILES = $(foreach app,$(TEST_APP_NAME),$($(app)_PSWRAP_FILES:.psw=.h))
internal-clean:: $(TEST_APP_NAME:=.clean.test-app.subprojects)
internal-clean::
rm -rf $(GNUSTEP_OBJ_DIR) $(_PSWRAP_C_FILES) $(_PSWRAP_H_FILES)
ifeq ($(OBJC_COMPILER), NeXT)
rm -f *.iconheader
@ -47,11 +47,17 @@ else
endif
endif
internal-distclean:: $(TEST_APP_NAME:=.distclean.test-app.subprojects)
internal-distclean::
rm -rf shared_obj static_obj shared_debug_obj shared_profile_obj \
static_debug_obj static_profile_obj shared_profile_debug_obj \
static_profile_debug_obj *.app *.debug *.profile *.iconheader
TEST_APPS_WITH_SUBPROJECTS = $(strip $(foreach test-app,$(TEST_APP_NAME),$(patsubst %,$(test-app),$($(test-app)_SUBPROJECTS))))
ifneq ($(TEST_APPS_WITH_SUBPROJECTS),)
internal-clean:: $(TEST_APPS_WITH_SUBPROJECTS:=.clean.test-app.subprojects)
internal-distclean:: $(TEST_APPS_WITH_SUBPROJECTS:=.distclean.test-app.subprojects)
endif
$(TEST_APP_NAME)::
@$(MAKE) -f $(MAKEFILE_NAME) --no-print-directory \
$@.all.test-app.variables

View file

@ -36,14 +36,20 @@ internal-uninstall:: $(TEST_LIBRARY_NAME:=.uninstall.test-lib.variables)
_PSWRAP_C_FILES = $(foreach lib,$(TEST_LIBRARY_NAME),$($(lib)_PSWRAP_FILES:.psw=.c))
_PSWRAP_H_FILES = $(foreach lib,$(TEST_LIBRARY_NAME),$($(lib)_PSWRAP_FILES:.psw=.h))
internal-clean:: $(TEST_LIBRARY_NAME:=.clean.test-lib.subprojects)
internal-clean::
rm -rf $(GNUSTEP_OBJ_DIR) $(_PSWRAP_C_FILES) $(_PSWRAP_H_FILES)
internal-distclean:: $(TEST_LIBRARY_NAME:=.distclean.test-lib.subprojects)
internal-distclean::
rm -rf shared_obj static_obj shared_debug_obj shared_profile_obj \
static_debug_obj static_profile_obj shared_profile_debug_obj \
static_profile_debug_obj
TEST_LIBRARIES_WITH_SUBPROJECTS = $(strip $(foreach test-library,$(TEST_LIBRARY_NAME),$(patsubst %,$(test-library),$($(test-library)_SUBPROJECTS))))
ifneq ($(TEST_LIBRARIES_WITH_SUBPROJECTS),)
internal-clean:: $(TEST_LIBRARIES_WITH_SUBPROJECTS:=.clean.test-library.subprojects)
internal-distclean:: $(TEST_LIBRARIES_WITH_SUBPROJECTS:=.distclean.test-library.subprojects)
endif
internal-check:: $(TEST_LIBRARY_NAME:=.check.test-lib.variables)
$(TEST_LIBRARY_NAME)::

View file

@ -28,14 +28,20 @@ endif
internal-all:: $(TEST_TOOL_NAME:=.all.test-tool.variables)
internal-clean:: $(TEST_TOOL_NAME:=.clean.test-tool.subprojects)
internal-clean::
rm -rf $(GNUSTEP_OBJ_DIR)
internal-distclean:: $(TEST_TOOL_NAME:=.distclean.test-tool.subprojects)
internal-distclean::
rm -rf shared_obj static_obj shared_debug_obj shared_profile_obj \
static_debug_obj static_profile_obj shared_profile_debug_obj \
static_profile_debug_obj
TEST_TOOLS_WITH_SUBPROJECTS = $(strip $(foreach test-tool,$(TEST_TOOL_NAME),$(patsubst %,$(test-tool),$($(test-tool)_SUBPROJECTS))))
ifneq ($(TEST_TOOLS_WITH_SUBPROJECTS),)
internal-clean:: $(TEST_TOOLS_WITH_SUBPROJECTS:=.clean.test-tool.subprojects)
internal-distclean:: $(TEST_TOOLS_WITH_SUBPROJECTS:=.distclean.test-tool.subprojects)
endif
$(TEST_TOOL_NAME)::
@$(MAKE) -f $(MAKEFILE_NAME) --no-print-directory \
$@.all.test-tool.variables

View file

@ -32,14 +32,20 @@ internal-install:: $(TOOL_NAME:=.install.tool.variables)
internal-uninstall:: $(TOOL_NAME:=.uninstall.tool.variables)
internal-clean:: $(TOOL_NAME:=.clean.tool.subprojects)
internal-clean::
rm -rf $(GNUSTEP_OBJ_DIR)
internal-distclean:: $(TOOL_NAME:=.distclean.tool.subprojects)
internal-distclean::
rm -rf shared_obj static_obj shared_debug_obj shared_profile_obj \
static_debug_obj static_profile_obj shared_profile_debug_obj \
static_profile_debug_obj
TOOLS_WITH_SUBPROJECTS = $(strip $(foreach tool,$(TOOL_NAME),$(patsubst %,$(tool),$($(tool)_SUBPROJECTS))))
ifneq ($(TOOLS_WITH_SUBPROJECTS),)
internal-clean:: $(TOOLS_WITH_SUBPROJECTS:=.clean.tool.subprojects)
internal-distclean:: $(TOOLS_WITH_SUBPROJECTS:=.distclean.tool.subprojects)
endif
# On distclean, we also want to efficiently wipe out the Resources/
# directory if (and only if) there are tools for which
# xxx_HAS_RESOURCE_BUNDLE=yes