jw-pkg/make/projects-dir-minimal.mk
Jan Lindemann fc02dad92c projects-dir-minimal.mk: Default PROJECTS_DIR_REMOTE_BASE to jw-build's remote
If jw-build is already cloned, infect all other repositories with its
remote via PROJECTS_DIR_REMOTE_BASE.

Signed-off-by: Jan Lindemann <jan@janware.com>
2025-11-20 16:54:04 +01:00

76 lines
2.6 KiB
Makefile

#
# SPDX-License-Identifier: LGPL-2.0-only
#
# Makefile for managing multiple software repositories in one tree
# (C) Copyright 2001-2025, Jan Lindemann <jan@janware.com>
#
# This is the top-level Makefile for a software build tree organized by
# jw-build. It is provided under the terms of the GNU Lesser Public License,
# Version 2.
#
# Current documentation on how this Makefile is meant to be used can be found
# under https://janware.com/wiki/pub/en/sw/build/. Running "make help" might
# take you there semi-automatically.
#
PROJECTS_MAKEFILE_NAME := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
-include local.mk
JWBDIR ?= jw-build
ifeq ($(origin PROJECTS_DIR_REMOTE_BASE),undefined)
ifneq ($(wildcard $(JWBDIR)),)
PROJECTS_DIR_REMOTE_BASE := $(shell /usr/bin/python3 $(JWBDIR)/scripts/jw-projects.py -p . get-auth-info --remote-base --only-values)
endif
ifeq ($(PROJECTS_DIR_REMOTE_BASE),)
PROJECTS_DIR_REMOTE_BASE := https://janware.com/code
endif
endif
ifneq ($(findstring ssh://git.janware.com/srv/git,$(PROJECTS_DIR_REMOTE_BASE)),)
$(info Using janware private SSH: $(PROJECTS_DIR_REMOTE_BASE))
PROJECTS_DIR_REMOTE_USER_SUBPATH ?= /proj
else ifneq ($(findstring ssh://git.janware.com,$(PROJECTS_DIR_REMOTE_BASE)),)
$(info Using janware SSH: $(PROJECTS_DIR_REMOTE_BASE))
else ifneq ($(findstring https://,$(PROJECTS_DIR_REMOTE_BASE)),)
$(info Using HTTPS: $(PROJECTS_DIR_REMOTE_BASE))
else
$(error Unsupported PROJECTS_DIR_REMOTE_BASE="$(PROJECTS_DIR_REMOTE_BASE)")
endif
ifeq ($(JANWARE_USER),)
ifneq ($(wildcard $(JWBDIR)),)
JANWARE_USER := $(shell /usr/bin/python3 $(JWBDIR)/scripts/jw-projects.py -p . get-auth-info --username --only-values)
endif
endif
ifneq ($(JANWARE_USER),)
CLONE_FROM_USER ?= $(JANWARE_USER)
else
CLONE_FROM_USER ?= janware
endif
JWBDIR_GIT_REMOTE ?= $(PROJECTS_DIR_REMOTE_BASE)/$(CLONE_FROM_USER)$(PROJECTS_DIR_REMOTE_USER_SUBPATH)/$(notdir $(JWBDIR))
PROJECTS_DIR_INCLUDE_MK = $(JWBDIR)/make/projects-dir-include.mk
all:
include $(PROJECTS_DIR_INCLUDE_MK)
$(PROJECTS_DIR_INCLUDE_MK): | $(JWBDIR)
$(JWBDIR):
git -c http.proactiveAuth=basic clone $(addprefix -b ,$(JW_BUILD_BRANCH)) $(JWBDIR_GIT_REMOTE) $(JWBDIR)
git -C $(JWBDIR) config set http.proactiveAuth basic
make $(MAKECMDGOALS)
all: link-makefile.done
link-makefile.done: | $(JWBDIR)
[ -L $(PROJECTS_MAKEFILE_NAME) ] || \
ln -sf `git -C $(JWBDIR) ls-files | sed '/\.mk$$/ !d; s|^|$(JWBDIR)/|' | xargs grep -l some-random-string-to-id-this-makefile` \
$(PROJECTS_MAKEFILE_NAME)
touch $@
clean: clean.link-makefile
clean.link-makefile:
rm -f link-makefile.done