# -*- makefile -*-
# -----------------------------------------------------------------------
# Copyright 2024 Open Networking Foundation 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: 2024 Open Networking Foundation Contributors
# SPDX-License-Identifier: Apache-2.0
# -----------------------------------------------------------------------

export .DEFAULT_GOAL := help

## Usage: make install repo=voltha-lib-go
version		?= $(error ERROR version=[3.13|3.12|3.10] is required)
repo		?= $(error ERROR repo=[voltha-lib-go|voltha-system-tests] is required)


## -----------------------------------------------------------------------
## -----------------------------------------------------------------------
all:

# -----------------------------------------------------------------------
# Intent: This target will checkout a sandbox configured to use
#   an upgraded python interpreter version.
# -----------------------------------------------------------------------
.PHONY: install
u-s-p--args += ./upgrade-sandbox-python.sh
u-s-p--args += --clean
# u-s-p--args += --version 3.12
u-s-p--args += --upgrade-packages
# u-s-p--args += --repo $(repo) # defer for target based error checking

# u-s-p--args += --repo voltha-system-tests
# u-s-p--args += --repo voltha-lib-go
# u-s-p--args += --no-quiet

install :
	$(u-s-p--args) --version "$(version)" --repo "$(repo)" 2>&1 | tee log

## -----------------------------------------------------------------------
## -----------------------------------------------------------------------
version :
	@printf 'System python:\n'
	/usr/bin/python3 --version

	@echo
	@printf 'Sandbox python:\n'
	source .venv/bin/activate && python --version

clean ::
	@ /bin/true

sterile :: clean
	$(RM) -r sandbox

## -----------------------------------------------------------------------
## -----------------------------------------------------------------------
help ::
	@echo
	@echo 'Usage: make [options] [target] ...'
	@printf '  %-33.33s %s\n' 'install' \
  'Clone a repository and install a python virtualenv'
	@echo "    $(u-s-p--args) --version '3.12' --repo 'voltha-lib-go'"

	@printf '\n[CLEAN]\n'
	@printf '  %-33.33s %s\n' 'clean'   'Remove derived content'
	@printf '  %-33.33s %s\n' 'sterile' 'Remove cloned sandboxes'

# [EOF]
