| # -*- makefile -*- |
| # ----------------------------------------------------------------------- |
| # Copyright 2017-2024 Open Networking Foundation (ONF) Contributors |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # ----------------------------------------------------------------------- |
| # SPDX-FileCopyrightText: 2017-2024 Open Networking Foundation Contributors |
| # SPDX-License-Identifier: Apache-2.0 |
| # ----------------------------------------------------------------------- |
| # Intent: This makefile is intended for extremely limited use: |
| # o A temp directory is created for internal makefile use. |
| # o Installers, downloads, etc. |
| # o Allowing garbage to persist in /tmp is not desirable behavior. |
| # o Create breadcrumbs for the sterile target to find and remove later. |
| # ----------------------------------------------------------------------- |
| |
| ##-------------------## |
| ##---] GLOBALS [---## |
| ##-------------------## |
| lf-mk-tmp := $(shell mktemp --directory -t 'repo-LF-make.XXXXXXXXXX') |
| lf-mk-tmp-name := $(notdir $(lf-mk-tmp)) |
| |
| lf-mk-user-meta ?= $(dir $(lf-mk-tmp)/)$(USER).mk.meta |
| lf-mk-user-mktemp ?= $(lf-mk-user-meta)/mktemp |
| |
| lf-mk-tmp-create := $(lf-mk-tmp)/.exists |
| lf-mk-meta-create := $(lf-mk-user-mktemp)/$(lf-mk-tmp-name) |
| |
| ## ----------------------------------------------------------------------- |
| ## ----------------------------------------------------------------------- |
| .PHONY: lf-tempdir |
| lf-tempdir : lf-mk-meta-create |
| |
| ## ----------------------------------------------------------------------- |
| ## Intent: Create tempdir |
| ## o Create a temp directory |
| ## o Create a timestamp file to record time of creation |
| ## ----------------------------------------------------------------------- |
| .PHONY: lf-mk-tmp-create |
| lf-mk-tmp-create : $(lf-mk-tmp-create) |
| $(lf-mk-tmp-create) : |
| |
| $(if $(DEBUG),$(call banner-enter,$@)) |
| @mkdir -p $(dir $@) |
| @touch $@ |
| $(if $(DEBUG),$(call banner-leave,$@)) |
| |
| ## ----------------------------------------------------------------------- |
| ## Intent: Create a timestamp file for temp directory cleanup: |
| ## o Create a storage directory |
| ## o Record timestamp file used by temp directory creation |
| ## ----------------------------------------------------------------------- |
| .PHONY: lf-mk-meta-create |
| lf-mk-meta-create : lf-mk-tmp-create $(lf-mk-meta-create) |
| $(lf-mk-meta-create) : |
| |
| $(if $(DEBUG),$(call banner-enter,$@)) |
| @mkdir -p $(dir $@) |
| @printf "$(lf-mk-tmp-create)" >> "$(lf-mk-user-mktemp)/$(lf-mk-tmp-name)" |
| $(if $(DEBUG),$(call banner-leave,$@)) |
| |
| ## ----------------------------------------------------------------------- |
| ## Intent: Remove temp directories created by a makefile run. |
| ## o Automated directory cleanup is not easily supported by make. |
| ## o Use breadcrumbs dropped during tempdir creation for removal. |
| ## o Only consider subdirs older than the current makefile run. |
| ## o Only consider subdirs older than +n days (persistent cron jobs). |
| ## ----------------------------------------------------------------------- |
| sterile-timestamp = $(shell date '+%Y-%m-%d' -d '3 days ago') |
| sterile :: |
| |
| # Create a reference file to remove lingering stale directories |
| $(HIDE)touch --date "$(sterile-timestamp)" "$(lf-mk-tmp-create)-stale" |
| |
| $(HIDE)find '$(dir $(lf-mk-tmp))' -maxdepth 1 -name 'repo-LF-make*' -type d -print0 \ |
| | $(xargs-cmd0) -I'{}' find {} -name '.exists' -not -newer "$(lf-mk-tmp-create)-stale" -print0 \ |
| | $(xargs-n1-clean) dirname --zero \ |
| | $(xargs-n1-clean) $(RM) -vr |
| |
| # Remove late: target dep (sterile : clean) would remove breadcrumbs |
| @$(MAKE) --no-print-directory clean |
| |
| ## ----------------------------------------------------------------------- |
| ## Intent : Remove mktemp for the current invocation |
| ## ----------------------------------------------------------------------- |
| clean :: |
| $(RM) -r "$(lf-mk-tmp)" |
| |
| # [EOF] |