# -*- makefile -*-
# -----------------------------------------------------------------------
# Copyright 2017-2024 Open Networking Foundation (ONF) and the 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 (ONF) and the ONF Contributors
# SPDX-License-Identifier: Apache-2.0
# -----------------------------------------------------------------------

$(if $(DEBUG),$(warning ENTER))

##-------------------##
##---]  GLOBALS  [---##
##-------------------##
# DEBUG := 1
# DEBUG-onf-mk-paths := 1

## -----------------------------------------------------------------------
## [LOADER] Define path vars based on library include directory
## -----------------------------------------------------------------------
sandbox-root := $(dir $(abspath $(firstword $(MAKEFILE_LIST))))
sandbox-root := $(patsubst %/,%,$(sandbox-root))

$(foreach makefile,$(lastword $(MAKEFILE_LIST)),\
  $(foreach makedir,$(abspath $(dir $(makefile))),\
    $(eval include $(makedir)/library-makefiles.mk)\
))

$(call gen-mk-paths,onf-mk) # [ALSO] $(call gen-mk-include,onf-mk)

## Missing required vars are fatal
onf-mk-dir ?= $(error onf-mk-dir= is required)
onf-mk-top ?= $(error onf-mk-top= is required)
onf-mk-tmp := $(onf-mk-top)/tmp#  # TODO: Replace with lf-mk-tmp

# per-repository paths: mirror repo:onf-make
local-mk-top  := $(onf-mk-top)
local-mk-dir  := $(dir $(onf-mk-dir))local

ONF_MAKEDIR   := $(onf-mk-dir)#   # TODO: Deprecate ONF_MAKEDIR and MAKEDIR

#--------------------##
##---]  INCLUDES  [---##
##--------------------##
include $(onf-mk-dir)/lint/make/warn-undef-vars.mk  # target lint-make helper

include $(onf-mk-dir)/consts.mk
include $(onf-mk-dir)/help/include.mk       # render target help
include $(onf-mk-dir)/utils/include.mk      # dependency-less helper macros
include $(onf-mk-dir)/etc/include.mk        # banner macros
include $(onf-mk-dir)/main/include.mk       # tempdir

include $(onf-mk-dir)/virtualenv/include.mk#  # python, lint, JJB dependency
# include $(onf-mk-dir)/patches/include.mk#   # Patch when python 3.10+ in use

include $(onf-mk-dir)/commands/include.mk   # Tools and local installers
include $(onf-mk-dir)/npm/include.mk
include $(onf-mk-dir)/lint/include.mk

include $(onf-mk-dir)/gerrit/include.mk
include $(onf-mk-dir)/git/include.mk
include $(onf-mk-dir)/jjb/include.mk

$(if $(USE-VOLTHA-RELEASE-MK),\
  $(eval include $(onf-mk-dir)/release/include.mk))

include $(onf-mk-dir)/todo.mk
include $(onf-mk-dir)/help/variables.mk

##------------------------------------##
##---]  Languages & Interpreters  [---##
##------------------------------------##
# [TODO] $(if $(golang-mode),$(eval include))
include $(onf-mk-dir)/golang/include.mk

##---------------------##
##---]  ON_DEMAND  [---##
##---------------------##
$(if $(USE-ONF-GERRIT-MK),$(eval include $(onf-mk-dir)/gerrit/include.mk))
$(if $(USE-ONF-DOCKER-MK),$(eval include $(onf-mk-dir)/docker/include.mk))

##-------------------##
##---]  TARGETS  [---##
##-------------------##
include $(onf-mk-dir)/targets/include.mk # clean, sterile

## Display make help text late
include $(onf-mk-dir)/help/trailer.mk

$(if $(DEBUG),$(warning LEAVE))

## -----------------------------------------------------------------------
## [VARS]
##   sandbox-root     Path to top level directory containing [mM]akefile
##
##   onf-mk-top       Path to makefiles/ containing onf-make/ and local/
##   onf-mk-tmp       Limited scratch area for repo:onf-make use
##
## [DEPRECATE]
##   ONF_MAKEDIR      Replace with onf-mk-top/ {onf-mk}
##   MAKEDIR          Replace with onf-mk-top/ {local}
## -----------------------------------------------------------------------
# [EOF]
