#*************************************************************************
# Copyright (c) 2011 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.
#*************************************************************************

include $(CONFIG)/RULES_DIRS

distclean: realclean cvsclean realuninstall

CVSCLEAN = $(call FIND_TOOL,cvsclean.pl)
cvsclean:
	$(PERL) $(CVSCLEAN)

realuninstall: uninstallDirs
	$(RMDIR) $(INSTALL_LOCATION_BIN) $(INSTALL_LOCATION_LIB)

UNINSTALL_DIRS += $(INSTALL_DBD) $(INSTALL_INCLUDE) $(INSTALL_DOC) \
    $(INSTALL_HTML) $(INSTALL_TEMPLATES) $(INSTALL_DB) $(DIRECTORY_TARGETS)
uninstallDirs:
	$(RMDIR) $(UNINSTALL_DIRS)

EMPTY_INSTALL_DIRS = \
    $(if $(wildcard $(INSTALL_LOCATION_BIN)/*),,$(INSTALL_LOCATION_BIN)) \
    $(if $(wildcard $(INSTALL_LOCATION_LIB)/*),,$(INSTALL_LOCATION_LIB))
uninstall: archuninstall uninstallDirs
	$(RMDIR) $(EMPTY_INSTALL_DIRS)

archuninstall: $(addprefix uninstall$(DIVIDER),$(BUILD_ARCHS))

uninstall$(DIVIDER)%:
	$(RMDIR) $(addsuffix /$(subst uninstall$(DIVIDER),,$@), \
	    $(INSTALL_LOCATION_BIN) $(INSTALL_LOCATION_LIB))

before-runtests before-test-results: rm-failure-file
rm-failure-file:
	@$(RM) $(TESTS_FAILED_PATH)
runtests test-results:
	$(SHOWTESTFAILURES)

help:
	@echo "Usage: gnumake [options] [target] ..."
	@echo "Targets supported by all Makefiles:"
	@echo "     all            - Same as install (default rule)"
	@echo "     inc            - Installs header, dbd and html files"
	@echo "     build          - Builds and installs all targets"
	@echo "     install        - Builds and installs all targets"
	@echo "     buildInstall   - Same as install (deprecated)"
	@echo "     clean          - Removes the O.<arch> dirs created by running make"
	@echo "                      In O.<arch> dir, clean removes build created files"
	@echo "     realclean      - Removes ALL O.<arch> dirs"
	@echo "                      Cannot be used within an O.<arch> dir"
	@echo "     rebuild        - Same as clean install"
	@echo "     archclean      - Removes O.<arch> dirs but not O.Common dir"
	@echo "     runtests       - Run self-tests, summarize results"
	@echo "\"Partial\" build targets supported by Makefiles:"
	@echo "     host           - Builds and installs $(EPICS_HOST_ARCH) only."
	@echo "     inc$(DIVIDER)<arch>     - Installs <arch> only header files."
	@echo "     build$(DIVIDER)<arch>   - Builds and installs <arch> only."
	@echo "     install$(DIVIDER)<arch> - Builds and installs <arch> only."
	@echo "     clean$(DIVIDER)<arch>   - Cleans <arch> binaries in O.<arch> dirs only."
	@echo "     uninstall$(DIVIDER)<arch> - Remove bin & lib directories for <arch> only."
	@echo "Targets supported by top level Makefile:"
	@echo "     archuninstall  - Remove bin & lib directories created by this hostarch."
	@echo "     uninstall      - Remove install directories created by this hostarch."
	@echo "     realuninstall  - Removes ALL install dirs"
	@echo "     distclean      - Same as realclean cvsclean realuninstall."
	@echo "     cvsclean       - Removes cvs .#* files in all dirs of directory tree"
	@echo "     help           - Prints this list of valid make targets "
	@echo "Indiv. object targets are supported by O.<arch> level Makefile .e.g"
	@echo "     xxxRecord.o"

.PHONY: distclean cvsclean realuninstall archuninstall uninstallDirs
.PHONY: uninstall rm-failure-file help

# Include <top>/cfg/TOP_RULES* files from tops defined in RELEASE* files
#
RELEASE_CFG_TOP_RULES = $(foreach top, $(RELEASE_TOPS), \
    $(wildcard $($(top))/cfg/TOP_RULES*))
ifneq ($(RELEASE_CFG_TOP_RULES),)
  include $(RELEASE_CFG_TOP_RULES)
endif
