############################################################################### ## FUNCTIONS ############################################################################### ############################################################################### ## Colored output ############################################################################### # Enable colored output ifeq ($(SONIC_CONFIG_ENABLE_COLORS),y) ifeq ($(MAKE_TERMOUT),) RED=\033[1;31m PURPLE=\033[1;35m CYAN=\033[1;36m GREEN=\033[1;32m GRAY=\033[0m endif endif # Print red colored output # call: # log_red message log_red = echo -e "$(RED)$(1)$(GRAY)" # Print purple colored output # call: # log_purple message log_purple = echo -e "$(PURPLE)$(1)$(GRAY)" # Print blue colored output # call: # log_blue message log_blue = echo -e "$(CYAN)$(1)$(GRAY)" # Print green colored output # call: # log_green message log_green = echo -e "$(GREEN)$(1)$(GRAY)" ############################################################################### ## Logging ############################################################################### FLUSH_LOG = rm -f $@.log LOG = &>> $(PROJECT_ROOT)/$@.log || { [ $$? -eq 0 ] || pushd $(PROJECT_ROOT) > /dev/null ; ./update_screen.sh -e $@ ; popd > /dev/null ; false ; } ############################################################################### ## Header and footer for each target ############################################################################### # Dump targets taht current depends on ifeq ($(SONIC_CONFIG_PRINT_DEPENDENCIES),y) PRINT_DEPENDENCIES = echo Dependencies for $@ are $^ $(LOG) endif # header for each rule define HEADER @ $(PRINT_DEPENDENCIES) $(FLUSH_LOG) ./update_screen.sh -a $@ endef # footer for each rule define FOOTER ./update_screen.sh -d $@ endef ############################################################################### ## Definition of derived target ############################################################################### # call: # add_derived_package some_deb.deb, some_derived_deb define add_derived_package $(2)_DEPENDS += $(1) $(2)_RDEPENDS += $($(1)_RDEPENDS) $(2)_MAIN_DEB = $(1) $(1)_DERIVED_DEBS += $(2) $(2)_URL = $($(1)_URL) $(2)_SRC_PATH = $($(1)_SRC_PATH) SONIC_DERIVED_DEBS += $(2) endef # call: # add_extra_package some_deb.deb, some_extra_deb define add_extra_package $(2)_MAIN_DEB = $(1) $(1)_EXTRA_DEBS += $(2) SONIC_EXTRA_DEBS += $(2) endef ############################################################################### ## Definition of conflict packages ############################################################################### # call: # add_conflict_package some_deb.deb, conflict_deb define add_conflict_package $(1)_CONFLICT_DEBS += $(2) $(2)_CONFLICT_DEBS += $(1) endef ############################################################################### ## Utility functions ############################################################################### expand = $(foreach d,$(1),$(call expand,$($(d)_$(2)),$(2))) $(1) ############################################################################### ## Setup overlay fs for dpkg admin directory /var/lib/dpkg ############################################################################### define SETUP_OVERLAYFS_FOR_DPKG_ADMINDIR upperdir=$(shell mktemp -d -p $(DPKG_ADMINDIR_PATH)) workdir=$(shell mktemp -d -p $(DPKG_ADMINDIR_PATH)) mergedir=$(shell mktemp -d -p $(DPKG_ADMINDIR_PATH)) sudo mount -t overlay overlay -olowerdir=/var/lib/dpkg,upperdir=$$upperdir,workdir=$$workdir $$mergedir export SONIC_DPKG_ADMINDIR=$$mergedir trap "sudo umount $$mergedir && rm -rf $$mergedir $$upperdir $$workdir" EXIT endef ############################################################################### ## Uninstall debs ############################################################################### define UNINSTALL_DEBS $(info $(1)) $(foreach deb,$(1), \ { while true; do \ if mkdir $(DEBS_PATH)/dpkg_lock &> /dev/null; then \ { sudo DEBIAN_FRONTEND=noninteractive dpkg -P $(firstword $(subst _, ,$(basename $(deb)))) $(LOG) && rm -d $(DEBS_PATH)/dpkg_lock && break; } || { rm -d $(DEBS_PATH)/dpkg_lock && exit 1 ; } \ fi; \ done; } ) endef