# Copyright 2024-2025 The Khronos Group Inc.
# SPDX-License-Identifier: Apache-2.0

# Makefile.release - update external files generated in Vulkan spec
# repository when a public specification update is done.

# Needed to get the right version of test, apparently
SHELL  = /bin/bash

REVISION = 999

# Location of other repository clones
GIT	 = ..
SPEC	 = $(GIT)/Vulkan-Docs
# As of 1.4.322 spec update, the build process has been changed to use a
# Vulkan-Hpp located underneath Vulkan-Docs (not a submodule).
# If you are using one located elsewhere then override HPP.
HPP	 = $(SPEC)/Vulkan-Hpp
REGISTRY = $(GIT)/registry/vulkan

update: revision-check create-branch update-files push-branch
	echo "Verify that Vulkan-Headers is on a branch with the new header updates."
	echo "Then push them to github and create an MR there with:"
	echo "    make -f Makefile.release REVISION=$(REVISION) push-branch"

# Working branch for the update, and a test if it exists
BRANCH = update-$(REVISION)

# Switch to new branch which will contain the update
create-branch: revision-check
	git switch -q main
	git pull -q
	# If branch already exists, do nothing
	@if test `git branch -l $(BRANCH) | wc -l` == 1 ; then \
	    echo "Branch $(BRANCH) already exists" ; \
	    git switch $(BRANCH) ; \
	else \
	    echo "Creating branch $(BRANCH)" ; \
	    git switch -c $(BRANCH) ; \
	fi

# Update headers and scripts in the new branch
update-files: remove-files update-headers update-scripts

# To ensure updates are caught, old versions of installed files are
# removed.
# Files in include/ to keep
HEADERS_KEEP = \
    include/vulkan/vk_icd.h \
    include/vulkan/vk_layer.h

remove-files:
	rm -rf $(filter-out $(HEADERS_KEEP), $(wildcard include/vulkan/*))
	rm -rf include/vk_video
	rm -rf registry
	mkdir include/vk_video registry registry/profiles registry/spec_tools

# Vulkan SC Vulkan-Hpp headers not published in the Vulkan-Headers repository
SCHPPFILES = \
    include/vulkan/vulkansc.hpp \
    include/vulkan/vulkansc.cppm \
    include/vulkan/vulkansc_*.hpp

update-headers:
	if test ! -d $(SPEC)/gen/include/ ; then \
	    echo "No C header file source directory $(SPEC)/gen/include" ; \
	    exit 1 ; \
	fi
	if test ! -d $(HPP)/vulkan ; then \
	    echo "No C++ header file source directory $(HPP)/vulkan" ; \
	    exit 1 ; \
	fi
	cp -r $(SPEC)/gen/include/* include/
	cp -r $(HPP)/vulkan/* include/vulkan/
	rm -f $(SCHPPFILES)

# Top-level scripts / XML to install
SCRIPTS = \
    $(SPEC)/scripts/base_generator.py \
    $(SPEC)/scripts/cgenerator.py \
    $(SPEC)/scripts/generator.py \
    $(SPEC)/scripts/parse_dependency.py \
    $(SPEC)/scripts/reg.py \
    $(SPEC)/scripts/stripAPI.py \
    $(SPEC)/scripts/apiconventions.py \
    $(SPEC)/scripts/vkconventions.py \
    $(SPEC)/scripts/vulkan_object.py \
    $(SPEC)/xml/vk.xml \
    $(SPEC)/xml/video.xml \
    $(REGISTRY)/specs/latest/validation/validusage.json

# Scripts in registry/spec_tools to install
SCRIPT_TOOLS = \
    $(SPEC)/scripts/spec_tools/conventions.py \
    $(SPEC)/scripts/spec_tools/util.py

# Profiles to install
PROFILES = \
    $(wildcard $(SPEC)/xml/profiles/*)

update-scripts:
	cp $(SCRIPTS) registry/
	cp $(PROFILES) registry/profiles/
	cp $(SCRIPT_TOOLS) registry/spec_tools/

# Once the branch is updated, push it to upstream and create an MR
# This should be used cautiously after verifying the branch contents are
# indeed correct and updates.
#
# Ideally we could automatically create the github PR.
# This will require additional software, see e.g.
#   https://medium.com/@ravipatel.it/creating-a-git-pull-request-using-the-command-line-a-detailed-guide-4ef1ea017fe2
#   https://gist.github.com/devinschumacher/bc66c162d9c6c167952f1943d0e6419c
# Gitlab supports this via 'git push' options e.g.
#   -o merge_request.create -o merge_request.target=main -o merge_request.remove_source_branch \
#   -o merge_request.title="Update for Vulkan-Docs 1.4.$(REVISION)" \
#   -o merge_request.assign=oddhack
# But for github we must manually create a PR after pushing
push-branch: revision-check
	git switch $(BRANCH)
	git add -u
	echo "Detect new files and add them. This may not always succeed."
	echo "Adding new files:" `git diff --name-only main`
	git add `git diff --name-only main`
	git commit -m "Update for Vulkan-Docs 1.4.$(REVISION)"
	git push --set-upstream origin $(BRANCH)
	git switch main
	git branch -d $(BRANCH)
	echo "Now create a pull request by going to the URL:"
	echo "  https://github.com/KhronosGroup/Vulkan-Headers/pull/new/$(BRANCH)"
	echo "After accepting this PR, continue with:"
	echo "    make -f Makefile.release REVISION=$(REVISION) tag-branch"

# Tag main for the update after accepting the update PR
TAG = v1.4.$(REVISION)
tag-branch:
	git switch main
	git pull
	git tag -a $(TAG) -m "Update for Vulkan-Docs 1.4.$(REVISION)"
	git push origin $(TAG)
	echo "Now continue with Step 12 of the process (update public registry) from the wiki, until more scripting is done"

revision-check:
	@if test $(REVISION) = 999 ; then echo "Must specify explicit REVISION= in make invocation" ; exit 1 ; fi
