561 lines
25 KiB
Makefile
561 lines
25 KiB
Makefile
#
|
|
# author: Mamadou Babaei <mamadou@senseglove.com>
|
|
#
|
|
# (The MIT License)
|
|
#
|
|
# Copyright (c) 2020 - 2024 SenseGlove
|
|
#
|
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
# of this software and associated documentation files (the "Software"), to deal
|
|
# in the Software without restriction, including without limitation the rights
|
|
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
# copies of the Software, and to permit persons to whom the Software is
|
|
# furnished to do so, subject to the following conditions:
|
|
#
|
|
# The above copyright notice and this permission notice shall be included in all
|
|
# copies or substantial portions of the Software.
|
|
#
|
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
# SOFTWARE.
|
|
#
|
|
|
|
################################################################################
|
|
# Generic Settings
|
|
################################################################################
|
|
|
|
SG_PROJECT_NAME := The SenseGlove Unreal Engine Handbook
|
|
|
|
SG_HANDBOOK_ESCAPED_NAME := $(shell echo $(SG_PROJECT_NAME) | tr '[:upper:]' '[:lower:]' | sed 's/ /-/g')
|
|
|
|
SG_HANDBOOK_DIR := $(CURDIR)
|
|
SG_HANDBOOK_SRC_DIR := $(SG_HANDBOOK_DIR)/src
|
|
SG_HANDBOOK_TOML_FILE := $(realpath $(SG_HANDBOOK_DIR)/book.toml)
|
|
SG_HANDBOOK_CONFIG_HOME_DIR := SenseGlove/ue-handbook
|
|
SG_HANDBOOK_DEPLOY_CONFIG_FILENAME := deploy.conf
|
|
SG_HANDBOOK_DEPLOY_TEMP_DIR_NAME := unreal-docs-senseglove-com-deploy-XXXXXXXXXX
|
|
|
|
SG_PLUGIN_DIR := $(realpath $(SG_HANDBOOK_DIR)/..)
|
|
SG_PLUGIN_RESOURCES_DIR := $(SG_PLUGIN_DIR)/Resources
|
|
SG_PLUGIN_FILE := $(SG_PLUGIN_DIR)/SenseGlove.uplugin
|
|
|
|
SG_DOCUMENTATION_URL := https://unreal.docs.senseglove.com
|
|
SG_DOCUMENTATION_DIR := $(SG_PLUGIN_DIR)/Documentation
|
|
SG_DOCUMENTATION_EPUB_DIR := $(SG_DOCUMENTATION_DIR)/epub
|
|
SG_DOCUMENTATION_HTML_DIR_NAME := html
|
|
SG_DOCUMENTATION_HTML_DIR := $(SG_DOCUMENTATION_DIR)/$(SG_DOCUMENTATION_HTML_DIR_NAME)
|
|
SG_DOCUMENTATION_PDF_DIR := $(SG_DOCUMENTATION_DIR)/pdf-outline
|
|
SG_DOCUMENTATION_PDF_FILE := $(SG_DOCUMENTATION_PDF_DIR)/output.pdf
|
|
SG_DOCUMENTATION_PACK_DIR_NAME := pack
|
|
SG_DOCUMENTATION_PACK_DIR := $(SG_DOCUMENTATION_DIR)/$(SG_DOCUMENTATION_PACK_DIR_NAME)
|
|
|
|
SG_HANDBOOK_PACKED_HTML_DIR := $(SG_DOCUMENTATION_PACK_DIR)/$(SG_HANDBOOK_ESCAPED_NAME)
|
|
SG_HANDBOOK_PACKED_HTML_FILE := $(SG_DOCUMENTATION_PACK_DIR)/$(SG_HANDBOOK_ESCAPED_NAME).zip
|
|
SG_HANDBOOK_PACKED_PDF_FILE := $(SG_DOCUMENTATION_PACK_DIR)/$(SG_HANDBOOK_ESCAPED_NAME).pdf
|
|
|
|
SG_BROWSER_BINARY_PATH_LINUX := $(shell which brave-bin 2>/dev/null)
|
|
SG_BROWSER_BINARY_PATH_WINDOWS := C:\Program Files\BraveSoftware\Brave-Browser\Application\brave.exe
|
|
|
|
SG_RSYNC_BIN_PATH_WINDOWS := C:\Program Files\cwrsync\bin
|
|
SG_RSYNC_BINARY_PATH_WINDOWS := $(SG_RSYNC_BIN_PATH_WINDOWS)\rsync.exe
|
|
SG_RSYNC_SSH_BINARY_PATH_WINDOWS := $(SG_RSYNC_BIN_PATH_WINDOWS)\ssh.exe
|
|
|
|
################################################################################
|
|
# Platform Detection
|
|
################################################################################
|
|
|
|
SG_BUILD_ARCH_AMD64 := amd64
|
|
SG_BUILD_PLATFORM_LINUX := linux
|
|
SG_BUILD_PLATFORM_WINDOWS := windows
|
|
|
|
ifeq ($(OS),Windows_NT)
|
|
SG_BUILD_PLATFORM := $(SG_BUILD_PLATFORM_WINDOWS)
|
|
# Running a 32-bit (x86) Command Prompt sets PROCESSOR_ARCHITECTURE to x86,
|
|
# and instead defines PROCESSOR_ARCHITEW6432 for 64-bit Windows detection.
|
|
ifeq ($(PROCESSOR_ARCHITEW6432),AMD64)
|
|
SG_BUILD_ARCH := $(SG_BUILD_ARCH_AMD64)
|
|
else # ($(PROCESSOR_ARCHITEW6432),AMD64)
|
|
ifeq ($(PROCESSOR_ARCHITECTURE),AMD64)
|
|
SG_BUILD_ARCH := $(SG_BUILD_ARCH_AMD64)
|
|
endif # ($(PROCESSOR_ARCHITECTURE),AMD64)
|
|
endif # ($(PROCESSOR_ARCHITEW6432),AMD64)
|
|
else # ($(OS),Windows_NT)
|
|
SG_PLATFORM_UNAME := $(shell uname -s)
|
|
ifeq ($(SG_PLATFORM_UNAME),Linux)
|
|
SG_BUILD_PLATFORM := $(SG_BUILD_PLATFORM_LINUX)
|
|
SG_PLATFORM_UNAME_ARCH := $(shell uname -m)
|
|
endif # ($(SG_PLATFORM_UNAME),Linux)
|
|
ifeq ($(SG_PLATFORM_UNAME_ARCH),x86_64)
|
|
SG_BUILD_ARCH := $(SG_BUILD_ARCH_AMD64)
|
|
endif # ($(SG_PLATFORM_UNAME_ARCH),x86_64)
|
|
endif # ($(OS),Windows_NT)
|
|
|
|
################################################################################
|
|
# Target Settings - mdbook
|
|
################################################################################
|
|
|
|
SG_MDBOOK_HOST := "localhost"
|
|
SG_MDBOOK_PORT := "8000"
|
|
SG_MDBOOK_SRC_DIR := "${SG_HANDBOOK_DIR}/src"
|
|
SG_MDBOOK_DEST_DIR := "${SG_DOCUMENTATION_DIR}"
|
|
SG_MDBOOK_WATCHER := "poll"
|
|
|
|
SG_PLUGIN_CHANGELOG_FILE := $(SG_PLUGIN_DIR)/CHANGELOG.md
|
|
SG_PLUGIN_DIRECTORY_STRUCTURE_FILE := $(SG_PLUGIN_DIR)/DIRECTORY_STRUCTURE.md
|
|
SG_PLUGIN_LICENSE_FILE := $(SG_PLUGIN_DIR)/LICENSE.md
|
|
SG_PLUGIN_LICENSE_THIRD_PARTY_FILE := $(SG_PLUGIN_DIR)/LICENSE_THIRD_PARTY.md
|
|
SG_PLUGIN_PLANNED_FEATURES_COMPLETION_STATUS_FILE := $(SG_PLUGIN_DIR)/PLANNED_FEATURES_COMPLETION_STATUS.md
|
|
SG_PLUGIN_PLATFORM_SUPPORT_MATRIX_FILE := $(SG_PLUGIN_DIR)/PLATFORM_SUPPORT_MATRIX.md
|
|
|
|
################################################################################
|
|
# Version and Build Information
|
|
################################################################################
|
|
|
|
SG_GIT_TREE_STATE_DIRTY := dirty
|
|
|
|
SG_GIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD 2>/dev/null)
|
|
SG_GIT_TAG := $(shell git describe --tags --abbrev=0 2>/dev/null)
|
|
SG_GIT_COMMIT := $(shell git rev-parse --short HEAD 2>/dev/null)
|
|
SG_GIT_COMMIT_NUMS_SINCE_TAG := $(shell git rev-list --count HEAD ^`git describe --tags --abbrev=0 2>/dev/null` 2>/dev/null)
|
|
SG_GIT_TREE_STATE := $(shell test -n "`git status --porcelain 2>/dev/null`" && echo "dirty" || echo "clean")
|
|
|
|
SG_PLUGIN_VERSION := $(shell grep -o '"VersionName": "[^"]*"' ${SG_PLUGIN_FILE} | awk -F'"' '{print "v" $$4}')
|
|
SG_HANDBOOK_SITE_URL := $(shell grep '^site-url' $(SG_HANDBOOK_TOML_FILE) | sed -n 's|^site-url = "/\(.*\)/"|\1|p')
|
|
|
|
ifeq ($(strip $(SG_GIT_COMMIT_NUMS_SINCE_TAG)),)
|
|
SG_GIT_COMMIT_NUMS_SINCE_TAG := 0
|
|
endif # ($(strip $(SG_GIT_COMMIT_NUMS_SINCE_TAG)),)
|
|
|
|
ifneq ($(strip $(SG_GIT_TAG)),)
|
|
SG_GIT_VERSION := $(SG_GIT_TAG)
|
|
endif # ($(strip $(SG_GIT_TAG)),)
|
|
|
|
SG_GIT_VERSION_MAJOR := $(shell echo $(SG_GIT_TAG) | cut -d '.' -f 1 | tr -d -c 0-9)
|
|
ifeq ($(SG_GIT_VERSION_MAJOR),)
|
|
SG_GIT_VERSION_MAJOR := 0
|
|
endif # ($(SG_GIT_VERSION_MAJOR),)
|
|
|
|
SG_GIT_VERSION_MINOR := $(shell echo $(SG_GIT_TAG) | cut -d '.' -f 2 | tr -d -c 0-9)
|
|
ifeq ($(SG_GIT_VERSION_MINOR),)
|
|
SG_GIT_VERSION_MINOR := 0
|
|
endif # ($(SG_GIT_VERSION_MINOR),)
|
|
|
|
SG_GIT_VERSION_PATCH := $(shell echo $(SG_GIT_TAG) | cut -d '.' -f 3 | tr -d -c 0-9)
|
|
ifeq ($(SG_GIT_VERSION_PATCH),)
|
|
SG_GIT_VERSION_PATCH := 0
|
|
endif # ($(SG_GIT_VERSION_PATCH),)
|
|
|
|
SG_PLUGIN_VERSION_MAJOR := $(shell echo $(SG_PLUGIN_VERSION) | cut -d '.' -f 1 | tr -d -c 0-9)
|
|
ifeq ($(SG_PLUGIN_VERSION_MAJOR),)
|
|
SG_PLUGIN_VERSION_MAJOR := 0
|
|
endif
|
|
|
|
SG_PLUGIN_VERSION_MINOR := $(shell echo $(SG_PLUGIN_VERSION) | cut -d '.' -f 2 | tr -d -c 0-9)
|
|
ifeq ($(SG_PLUGIN_VERSION_MINOR),)
|
|
SG_PLUGIN_VERSION_MINOR := 0
|
|
endif # ($(SG_PLUGIN_VERSION_MINOR),)
|
|
|
|
SG_PLUGIN_VERSION_PATCH := $(shell echo $(SG_PLUGIN_VERSION) | cut -d '.' -f 3 | tr -d -c 0-9)
|
|
ifeq ($(SG_PLUGIN_VERSION_PATCH),)
|
|
SG_PLUGIN_VERSION_PATCH := 0
|
|
endif # ($(SG_PLUGIN_VERSION_PATCH),)
|
|
|
|
SG_BUILD_HOST := $(shell hostname)
|
|
SG_BUILD_TIME := $(shell date '+%a %b %d, %Y %H:%M %Z %z')
|
|
|
|
ifeq ($(strip $(SG_GIT_BRANCH)),dev)
|
|
ifeq ($(strip $(SG_GIT_VERSION)),)
|
|
ifeq ($(strip $(SG_HANDBOOK_SITE_URL)),next)
|
|
SG_HANDBOOK_REVISION := next
|
|
endif # ($(strip $(SG_HANDBOOK_SITE_URL)),next)
|
|
endif # ($(strip $(SG_GIT_VERSION)),)
|
|
endif # ($(strip $(SG_GIT_BRANCH)),dev)
|
|
|
|
SG_IS_GIT_BRANCH_HEAD_OR_MASTER := $(or $(filter HEAD,$(strip $(SG_GIT_BRANCH))),$(filter master,$(strip $(SG_GIT_BRANCH))))
|
|
|
|
ifeq ($(SG_IS_GIT_BRANCH_HEAD_OR_MASTER),1)
|
|
ifeq ($(strip $(SG_GIT_COMMIT_NUMS_SINCE_TAG)),0)
|
|
ifeq ($(strip $(SG_GIT_TREE_STATE)),clean)
|
|
ifeq ($(strip $(SG_GIT_VERSION)),$(strip $(SG_PLUGIN_VERSION)))
|
|
ifeq ($(strip $(SG_HANDBOOK_SITE_URL)),$(strip $(SG_PLUGIN_VERSION_MAJOR).$(SG_PLUGIN_VERSION_MINOR)))
|
|
SG_HANDBOOK_REVISION := SG_PLUGIN_VERSION_MAJOR.SG_PLUGIN_VERSION_MINOR
|
|
endif # ($(strip $(SG_HANDBOOK_SITE_URL)),$(strip $(SG_PLUGIN_VERSION_MAJOR).$(SG_PLUGIN_VERSION_MINOR)))
|
|
endif # ($(strip $(SG_GIT_VERSION)),$(strip $(SG_PLUGIN_VERSION)))
|
|
endif # ($(strip $(SG_GIT_TREE_STATE)),clean)
|
|
endif # ($(strip $(SG_GIT_COMMIT_NUMS_SINCE_TAG)),0)
|
|
endif # ($(SG_IS_GIT_BRANCH_HEAD_OR_MASTER),1)
|
|
|
|
ifeq ($(strip $(SG_HANDBOOK_REVISION)),)
|
|
SG_HANDBOOK_REVISION := mismatched
|
|
endif # ($(strip $(SG_HANDBOOK_REVISION)),)
|
|
|
|
ifneq ($(strip $(SG_HANDBOOK_REVISION)),mismatched)
|
|
SG_HANDBOOK_REVISION_URL := $(SG_DOCUMENTATION_URL)/$(SG_HANDBOOK_REVISION)
|
|
SG_HANDBOOK_RELEASE_NAME := $(shell echo $(SG_PROJECT_NAME)-$(SG_HANDBOOK_REVISION) | tr '[:upper:]' '[:lower:]' | sed 's/ /-/g')
|
|
SG_HANDBOOK_PDF_URL := $(SG_HANDBOOK_REVISION_URL)/$(SG_HANDBOOK_RELEASE_NAME).pdf
|
|
endif
|
|
|
|
################################################################################
|
|
# mdbook-pdf Configuration
|
|
################################################################################
|
|
|
|
ifeq ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
|
|
SG_MDBOOK_PDF_BROWSER_BINARY_PATH := $(SG_BROWSER_BINARY_PATH_LINUX)
|
|
else ifeq ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_WINDOWS))
|
|
SG_MDBOOK_PDF_BROWSER_BINARY_PATH := $(SG_BROWSER_BINARY_PATH_WINDOWS)
|
|
else # ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
|
|
$(error The target operating system is not supported!)
|
|
endif # ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
|
|
|
|
ifeq ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
|
|
SG_LINUX_PYTHON_VENV_DIR := $(shell mktemp -d)/sg-ue-handbook-venv
|
|
SG_LINUX_PYTHON_VENV_BIN_DIR := $(SG_LINUX_PYTHON_VENV_DIR)/bin
|
|
export PATH := $(SG_LINUX_PYTHON_VENV_BIN_DIR):$(PATH)
|
|
export PWD := $(SG_LINUX_PYTHON_VENV_BIN_DIR)
|
|
export VIRTUAL_ENV := $(SG_LINUX_PYTHON_VENV_DIR)
|
|
else ifeq ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_WINDOWS))
|
|
SG_DIST_DIR := $(SG_HANDBOOK_DIR)/dist
|
|
SG_WINPYTHON_DIR := $(SG_DIST_DIR)/winpython
|
|
SG_WINPYTHON_BIN_DIR := $(SG_WINPYTHON_DIR)//python-3.12.4.amd64
|
|
SG_WINPYTHON_BIN_SCRIPTS_DIR := $(SG_WINPYTHON_BIN_DIR)/Scripts
|
|
SG_WINPYTHON_SCRIPTS_DIR := $(SG_WINPYTHON_DIR)/scripts
|
|
export PATH := $(SG_WINPYTHON_SCRIPTS_DIR);$(PATH)
|
|
export PATH := $(SG_WINPYTHON_BIN_SCRIPTS_DIR);$(PATH)
|
|
export PATH := $(SG_WINPYTHON_BIN_DIR);$(PATH)
|
|
export PATH := $(SG_RSYNC_BIN_PATH_WINDOWS);$(PATH)
|
|
else # ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
|
|
$(error The target operating system is not supported!)
|
|
endif # ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
|
|
|
|
################################################################################
|
|
# Deployment Configuration
|
|
################################################################################
|
|
|
|
ifeq ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
|
|
SG_HANDBOOK_DEPLOY_CONFIG_FILE := $(shell echo ~/.config/$(SG_HANDBOOK_CONFIG_HOME_DIR)/$(SG_HANDBOOK_DEPLOY_CONFIG_FILENAME))
|
|
else ifeq ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_WINDOWS))
|
|
SG_HANDBOOK_DEPLOY_CONFIG_FILE := $(shell cygpath -u $(LOCALAPPDATA)/$(SG_HANDBOOK_CONFIG_HOME_DIR)/$(SG_HANDBOOK_DEPLOY_CONFIG_FILENAME))
|
|
else # ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
|
|
$(error The target operating system is not supported!)
|
|
endif # ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
|
|
|
|
################################################################################
|
|
# Deployment Temporary Directory Setup
|
|
################################################################################
|
|
|
|
$(info Setting up a deployment temporary directory '$(SG_HANDBOOK_DEPLOY_TEMP_DIR_NAME)')
|
|
SG_HANDBOOK_DEPLOY_TEMP_DIR := $(shell mktemp -d -t $(SG_HANDBOOK_DEPLOY_TEMP_DIR_NAME))
|
|
$(info Temporary directory has been set up at '$(SG_HANDBOOK_DEPLOY_TEMP_DIR)')
|
|
|
|
SG_HANDBOOK_DEPLOY_GENERATED_PDF_FILE := $(SG_HANDBOOK_DEPLOY_TEMP_DIR)/$(SG_HANDBOOK_RELEASE_NAME).pdf
|
|
|
|
SG_HANDBOOK_DEPLOY_REVISION_LIST_FILE := $(SG_HANDBOOK_DEPLOY_TEMP_DIR)/revisions.txt
|
|
|
|
SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE := $(SG_HANDBOOK_DEPLOY_TEMP_DIR)/index.html
|
|
|
|
################################################################################
|
|
# Env Configuration Functions
|
|
################################################################################
|
|
|
|
define load_env
|
|
$(eval ENV_FILE := $(1))
|
|
@echo "Loading configuration file '$(ENV_FILE)'..."
|
|
$(eval include $(ENV_FILE))
|
|
$(eval export)
|
|
endef
|
|
|
|
################################################################################
|
|
# Make Targets - All
|
|
################################################################################
|
|
|
|
.PHONY: all
|
|
all: help
|
|
|
|
################################################################################
|
|
# Make Targets - Misc
|
|
################################################################################
|
|
|
|
.PHONY: help
|
|
help:
|
|
@echo ""
|
|
@echo "Available make targets:"
|
|
@echo ""
|
|
@echo " - make build"
|
|
@echo " - make clean"
|
|
@echo " - make deploy"
|
|
@echo " - make help"
|
|
@echo " - make info"
|
|
@echo " - make serve"
|
|
@echo ""
|
|
|
|
.PHONY: info
|
|
info:
|
|
@echo ""
|
|
@echo "$(SG_PROJECT_NAME) build information:"
|
|
@echo ""
|
|
@echo " - Handbook Revision : $(SG_HANDBOOK_REVISION)"
|
|
@echo " - Handbook Revision URL : $(SG_HANDBOOK_REVISION_URL)"
|
|
@echo " - Handbook PDF URL : $(SG_HANDBOOK_PDF_URL)"
|
|
@echo " - Git Branch : $(SG_GIT_BRANCH)"
|
|
@echo " - Git Tag : $(SG_GIT_TAG)"
|
|
@echo " - Git Commit : $(SG_GIT_COMMIT)"
|
|
@echo " - Git Commits Since Tag : $(SG_GIT_COMMIT_NUMS_SINCE_TAG)"
|
|
@echo " - Git Tree State : $(SG_GIT_TREE_STATE)"
|
|
@echo " - Git Version : $(SG_GIT_VERSION)"
|
|
@echo " - Git Version Major : $(SG_GIT_VERSION_MAJOR)"
|
|
@echo " - Git Version Minor : $(SG_GIT_VERSION_MINOR)"
|
|
@echo " - Git Version Patch : $(SG_GIT_VERSION_PATCH)"
|
|
@echo " - Plugin Version : $(SG_PLUGIN_VERSION)"
|
|
@echo " - Plugin Version Major : $(SG_PLUGIN_VERSION_MAJOR)"
|
|
@echo " - Plugin Version Minor : $(SG_PLUGIN_VERSION_MINOR)"
|
|
@echo " - Plugin Version Patch : $(SG_PLUGIN_VERSION_PATCH)"
|
|
@echo " - Build Host : $(SG_BUILD_HOST)"
|
|
@echo " - Build Time : $(SG_BUILD_TIME)"
|
|
@echo ""
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
@echo "Cleaning up $(SG_PROJECT_NAME)..."
|
|
@rm -rf "$(SG_MDBOOK_DEST_DIR)"
|
|
@echo "$(SG_PROJECT_NAME) has been cleaned up successfully!"
|
|
|
|
.PHONY: install-build-deps
|
|
install-build-deps:
|
|
@echo "Installing build dependencies if they have not already been installed..."
|
|
@cargo install mdbook --vers "^0.4" --locked
|
|
@cargo install xq --locked
|
|
@cargo install mdbook-alerts --locked
|
|
@cargo install mdbook-pdf --locked
|
|
ifeq ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
|
|
@echo "Installing mdbook-pdf-outline..."
|
|
@python -m venv $(VIRTUAL_ENV) \
|
|
&& . $(SG_LINUX_PYTHON_VENV_BIN_DIR)/activate \
|
|
&& pip install mdbook-pdf-outline 2>/dev/null
|
|
endif # ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
|
|
|
|
################################################################################
|
|
# Make Targets - mdBook
|
|
################################################################################
|
|
|
|
.PHONY: prepare
|
|
prepare:
|
|
@echo "Preparing the handbook $(SG_HANDBOOK_DIR)..."
|
|
prepare: prepare-src
|
|
prepare: prepare-dest
|
|
|
|
.PHONY: prepare-dest
|
|
prepare-dest:
|
|
@echo "Preparing the handbook target dir $(SG_MDBOOK_DEST_DIR)..."
|
|
|
|
.PHONY: prepare-src
|
|
prepare-src:
|
|
@echo "Preparing the handbook source dir $(SG_MDBOOK_SRC_DIR)..."
|
|
|
|
.PHONY: verify-handbook-revision
|
|
verify-handbook-revision:
|
|
ifeq ($(SG_HANDBOOK_REVISION), next)
|
|
@echo "Building an unstable handbook for the next release..."
|
|
else # ($(SG_HANDBOOK_REVISION), next)
|
|
ifeq ($(SG_HANDBOOK_REVISION), mismatched)
|
|
@echo ""
|
|
@echo "Failed to verify the handbook build due to some discrepancies. Please verify the following:"
|
|
@echo ""
|
|
@echo "If you're building a release handbook:"
|
|
@echo " - You are either on a release tag, e.g. v2.1.0, or on the master branch."
|
|
@echo " - No commit has been made since the targeted tag."
|
|
@echo " - The Git tree state is clean."
|
|
@echo " - The Git version and plugin version match each other."
|
|
@echo ""
|
|
@echo "If you're building an unstable handbook for the next release:"
|
|
@echo " - You're building from the dev branch."
|
|
@echo " - The Git version value evaluates to empty."
|
|
@echo ""
|
|
@exit 1
|
|
else # ($(SG_HANDBOOK_REVISION), mismatched)
|
|
@echo "Building a release handbook: $(SG_HANDBOOK_REVISION)..."
|
|
endif # ($(SG_HANDBOOK_REVISION), mismatched)
|
|
endif # ($(SG_HANDBOOK_REVISION), next)
|
|
|
|
.PHONY: serve
|
|
serve: info
|
|
serve: install-build-deps
|
|
serve: prepare
|
|
serve: _mdbook_serve
|
|
|
|
.PHONY: build
|
|
build: info
|
|
build: install-build-deps
|
|
build: prepare
|
|
build: verify-handbook-revision
|
|
build: _mdbook_build
|
|
|
|
.PHONY: pack
|
|
pack: info
|
|
pack: install-build-deps
|
|
pack: prepare
|
|
pack: verify-handbook-revision
|
|
pack: _mdbook_build
|
|
pack: _pack
|
|
|
|
.PHONY: deploy
|
|
deploy: info
|
|
deploy: install-build-deps
|
|
deploy: clean
|
|
deploy: prepare
|
|
deploy: verify-handbook-revision
|
|
deploy: _mdbook_build
|
|
deploy: _deploy
|
|
|
|
.PHONY: _mdbook_serve
|
|
_mdbook_serve:
|
|
@echo "Serving $(SG_HANDBOOK_DIR)..."
|
|
@env SG_PROJECT_NAME='$(SG_PROJECT_NAME)' \
|
|
SG_HANDBOOK_REVISION='$(SG_HANDBOOK_REVISION)' \
|
|
SG_HANDBOOK_REVISION_URL='$(SG_HANDBOOK_REVISION_URL)' \
|
|
SG_HANDBOOK_PDF_URL='$(SG_HANDBOOK_PDF_URL)' \
|
|
SG_GIT_BRANCH='$(SG_GIT_BRANCH)' \
|
|
SG_GIT_TAG='$(SG_GIT_TAG)' \
|
|
SG_GIT_COMMIT='$(SG_GIT_COMMIT)' \
|
|
SG_GIT_COMMIT_NUMS_SINCE_TAG='$(SG_GIT_COMMIT_NUMS_SINCE_TAG)' \
|
|
SG_GIT_TREE_STATE='$(SG_GIT_TREE_STATE)' \
|
|
SG_GIT_VERSION='$(SG_GIT_VERSION)' \
|
|
SG_GIT_VERSION_MAJOR='$(SG_GIT_VERSION_MAJOR)' \
|
|
SG_GIT_VERSION_MINOR='$(SG_GIT_VERSION_MINOR)' \
|
|
SG_GIT_VERSION_PATCH='$(SG_GIT_VERSION_PATCH)' \
|
|
SG_PLUGIN_VERSION='$(SG_PLUGIN_VERSION)' \
|
|
SG_PLUGIN_VERSION_MAJOR='$(SG_PLUGIN_VERSION_MAJOR)' \
|
|
SG_PLUGIN_VERSION_MINOR='$(SG_PLUGIN_VERSION_MINOR)' \
|
|
SG_PLUGIN_VERSION_PATCH='$(SG_PLUGIN_VERSION_PATCH)' \
|
|
SG_BUILD_HOST='$(SG_BUILD_HOST)' \
|
|
SG_BUILD_TIME='$(SG_BUILD_TIME)' \
|
|
MDBOOK_output__pdf__browser_binary_path='$(SG_MDBOOK_PDF_BROWSER_BINARY_PATH)' \
|
|
mdbook serve \
|
|
-n $(SG_MDBOOK_HOST) \
|
|
-p $(SG_MDBOOK_PORT) \
|
|
--watcher $(SG_MDBOOK_WATCHER) \
|
|
--dest-dir $(SG_MDBOOK_DEST_DIR)
|
|
|
|
.PHONY: _mdbook_build
|
|
_mdbook_build:
|
|
@echo "Building $(SG_HANDBOOK_DIR)..."
|
|
@env SG_PROJECT_NAME='$(SG_PROJECT_NAME)' \
|
|
SG_HANDBOOK_REVISION='$(SG_HANDBOOK_REVISION)' \
|
|
SG_HANDBOOK_REVISION_URL='$(SG_HANDBOOK_REVISION_URL)' \
|
|
SG_HANDBOOK_PDF_URL='$(SG_HANDBOOK_PDF_URL)' \
|
|
SG_GIT_BRANCH='$(SG_GIT_BRANCH)' \
|
|
SG_GIT_TAG='$(SG_GIT_TAG)' \
|
|
SG_GIT_COMMIT='$(SG_GIT_COMMIT)' \
|
|
SG_GIT_COMMIT_NUMS_SINCE_TAG='$(SG_GIT_COMMIT_NUMS_SINCE_TAG)' \
|
|
SG_GIT_TREE_STATE='$(SG_GIT_TREE_STATE)' \
|
|
SG_GIT_VERSION='$(SG_GIT_VERSION)' \
|
|
SG_GIT_VERSION_MAJOR='$(SG_GIT_VERSION_MAJOR)' \
|
|
SG_GIT_VERSION_MINOR='$(SG_GIT_VERSION_MINOR)' \
|
|
SG_GIT_VERSION_PATCH='$(SG_GIT_VERSION_PATCH)' \
|
|
SG_PLUGIN_VERSION='$(SG_PLUGIN_VERSION)' \
|
|
SG_PLUGIN_VERSION_MAJOR='$(SG_PLUGIN_VERSION_MAJOR)' \
|
|
SG_PLUGIN_VERSION_MINOR='$(SG_PLUGIN_VERSION_MINOR)' \
|
|
SG_PLUGIN_VERSION_PATCH='$(SG_PLUGIN_VERSION_PATCH)' \
|
|
SG_BUILD_HOST='$(SG_BUILD_HOST)' \
|
|
SG_BUILD_TIME='$(SG_BUILD_TIME)' \
|
|
MDBOOK_output__pdf__browser_binary_path='$(SG_MDBOOK_PDF_BROWSER_BINARY_PATH)' \
|
|
mdbook build \
|
|
--dest-dir $(SG_MDBOOK_DEST_DIR)
|
|
|
|
.PHONY: _pack
|
|
_pack:
|
|
@echo "Packing '$(SG_HANDBOOK_DIR)'..."
|
|
@echo "Cleaning up the pack directory '$(SG_DOCUMENTATION_PACK_DIR)'..."
|
|
@rm -rf "$(SG_DOCUMENTATION_PACK_DIR)"
|
|
@echo "Creating the pack directory '$(SG_DOCUMENTATION_PACK_DIR)'..."
|
|
@mkdir -p "$(SG_DOCUMENTATION_PACK_DIR)"
|
|
@echo "Moving '$(SG_DOCUMENTATION_HTML_DIR)' to '$(SG_HANDBOOK_PACKED_HTML_DIR)'..."
|
|
ifeq ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
|
|
@mv $(SG_DOCUMENTATION_HTML_DIR) $(SG_HANDBOOK_PACKED_HTML_DIR)
|
|
else # ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
|
|
@powershell -Command "Move-Item '$(SG_DOCUMENTATION_HTML_DIR)' '$(SG_HANDBOOK_PACKED_HTML_DIR)'"
|
|
endif # ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
|
|
@echo "Compressing '$(SG_HANDBOOK_PACKED_HTML_DIR)' to '$(SG_HANDBOOK_PACKED_HTML_FILE)'..."
|
|
ifeq ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
|
|
@cd $(SG_DOCUMENTATION_PACK_DIR) \
|
|
&& zip $(SG_HANDBOOK_PACKED_HTML_FILE) -r $(SG_HANDBOOK_ESCAPED_NAME)
|
|
else # ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
|
|
@cd $(SG_DOCUMENTATION_PACK_DIR) \
|
|
&& powershell Compress-Archive $(SG_HANDBOOK_ESCAPED_NAME) $(SG_HANDBOOK_PACKED_HTML_FILE)
|
|
endif # ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
|
|
@echo "Moving '$(SG_DOCUMENTATION_PDF_FILE)' to '$(SG_HANDBOOK_PACKED_PDF_FILE)'..."
|
|
ifeq ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
|
|
@mv $(SG_DOCUMENTATION_PDF_FILE) $(SG_HANDBOOK_PACKED_PDF_FILE)
|
|
else # ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
|
|
@powershell -Command "Move-Item '$(SG_DOCUMENTATION_PDF_FILE)' '$(SG_HANDBOOK_PACKED_PDF_FILE)'"
|
|
endif # ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
|
|
|
|
.PHONY: _deploy
|
|
_deploy:
|
|
@echo "Deploying '$(SG_HANDBOOK_DIR)'..."
|
|
@echo "Loading the Handbook deployment configuration file..."
|
|
@$(call load_env, $(SG_HANDBOOK_DEPLOY_CONFIG_FILE))
|
|
@echo "Deploying '$(SG_HANDBOOK_DIR)' to '$(SG_HANDBOOK_SSH_USER)@$(SG_HANDBOOK_SSH_HOST):$(SG_HANDBOOK_SSH_REMOTE_DIR)/$(SG_HANDBOOK_REVISION)'..."
|
|
ifeq ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
|
|
@rsync \
|
|
-avze "ssh -p $(SG_HANDBOOK_SSH_PORT)" \
|
|
--perms \
|
|
--chmod=u+rwx,g+rx,o+rx,g-w,o-wx \
|
|
--delete $(SG_DOCUMENTATION_HTML_DIR)/ \
|
|
$(SG_HANDBOOK_SSH_USER)@$(SG_HANDBOOK_SSH_HOST):$(SG_HANDBOOK_SSH_REMOTE_DIR)/$(SG_HANDBOOK_REVISION)
|
|
else # ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
|
|
@cd $(SG_DOCUMENTATION_DIR) \
|
|
&& "$(SG_RSYNC_BINARY_PATH_WINDOWS)" \
|
|
-avze "\"$(SG_RSYNC_SSH_BINARY_PATH_WINDOWS)\" -p $(SG_HANDBOOK_SSH_PORT)" \
|
|
--perms \
|
|
--chmod=u+rwx,g+rx,o+rx,g-w,o-wx \
|
|
--delete $(SG_DOCUMENTATION_HTML_DIR_NAME)/ \
|
|
$(SG_HANDBOOK_SSH_USER)@$(SG_HANDBOOK_SSH_HOST):$(SG_HANDBOOK_SSH_REMOTE_DIR)/$(SG_HANDBOOK_REVISION)
|
|
endif # ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
|
|
@echo "Copying '$(SG_DOCUMENTATION_PDF_FILE)' to '$(SG_HANDBOOK_DEPLOY_GENERATED_PDF_FILE)'..."
|
|
@cp -vr $(SG_DOCUMENTATION_PDF_FILE) $(SG_HANDBOOK_DEPLOY_GENERATED_PDF_FILE)
|
|
@echo "Uploading '$(SG_HANDBOOK_DEPLOY_GENERATED_PDF_FILE)' to '$(SG_HANDBOOK_SSH_USER)@$(SG_HANDBOOK_SSH_HOST):$(SG_HANDBOOK_SSH_REMOTE_DIR)/$(SG_HANDBOOK_REVISION)'..."
|
|
@scp \
|
|
-P $(SG_HANDBOOK_SSH_PORT) \
|
|
$(SG_HANDBOOK_DEPLOY_GENERATED_PDF_FILE) \
|
|
$(SG_HANDBOOK_SSH_USER)@$(SG_HANDBOOK_SSH_HOST):$(SG_HANDBOOK_SSH_REMOTE_DIR)/$(SG_HANDBOOK_REVISION)
|
|
@cp -vr $(SG_DOCUMENTATION_PDF_FILE) $(SG_HANDBOOK_DEPLOY_GENERATED_PDF_FILE)
|
|
@echo "Retrieving the list of deployed handbook revisions from '$(SG_HANDBOOK_SSH_USER)@$(SG_HANDBOOK_SSH_HOST):$(SG_HANDBOOK_SSH_PORT)/$(SG_HANDBOOK_SSH_REMOTE_DIR)'..."
|
|
@ssh \
|
|
-p $(SG_HANDBOOK_SSH_PORT) $(SG_HANDBOOK_SSH_USER)@$(SG_HANDBOOK_SSH_HOST) \
|
|
"mkdir -p $(SG_HANDBOOK_SSH_REMOTE_DIR)"
|
|
@ssh \
|
|
-p $(SG_HANDBOOK_SSH_PORT) $(SG_HANDBOOK_SSH_USER)@$(SG_HANDBOOK_SSH_HOST) \
|
|
"find $(SG_HANDBOOK_SSH_REMOTE_DIR) -maxdepth 1 -type d ! -path $(SG_HANDBOOK_SSH_REMOTE_DIR) -exec basename {} \; | sort -r" \
|
|
> $(SG_HANDBOOK_DEPLOY_REVISION_LIST_FILE)
|
|
@{ \
|
|
grep -i 'next' $(SG_HANDBOOK_DEPLOY_REVISION_LIST_FILE); \
|
|
grep -vi 'next' $(SG_HANDBOOK_DEPLOY_REVISION_LIST_FILE) \
|
|
| sort -r; \
|
|
} > $(SG_HANDBOOK_DEPLOY_REVISION_LIST_FILE).tmp
|
|
@mv $(SG_HANDBOOK_DEPLOY_REVISION_LIST_FILE).tmp $(SG_HANDBOOK_DEPLOY_REVISION_LIST_FILE)
|
|
@echo "Revisions list saved to '$(SG_HANDBOOK_DEPLOY_REVISION_LIST_FILE)'!"
|
|
@echo "Current revisions:"
|
|
@sed 's/^/ - /' $(SG_HANDBOOK_DEPLOY_REVISION_LIST_FILE)
|
|
@echo "Generating '$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)'..."
|
|
@echo "<html><head><style>" > $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
|
|
@echo "body { font-family: Arial, sans-serif; background-color: #003070; color: #fff; margin: 0; padding: 0; }" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
|
|
@echo ".container { display: table; width: 300px; margin: 0 auto; padding: 20px; }" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
|
|
@echo ".row { display: table-row; }" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
|
|
@echo ".cell { display: table-cell; background-color: #004890; border-radius: 5px; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); margin: 10px 100px; padding: 20px; text-align: center; transition: transform 0.2s; }" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
|
|
@echo ".cell:hover { transform: scale(1.05); }" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
|
|
@echo ".cell a { text-decoration: none; color: #fff; font-weight: bold; }" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
|
|
@echo "</style></head><body><div style='padding: 2.0em; text-align:center;'><h1>Welcome to the SenseGlove Unreal Engine Handbook</h1><h3>Please choose a revision to continue!</h3><h5>* Please note that the next revision is the documentation for the unstable next release of the plugin and subject to change!</h5></div><div class='container'>" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
|
|
@while read dir; \
|
|
do \
|
|
echo "<div class='row'><div class='cell'><a href=\"$$dir\">$$dir</a></div></div>"; \
|
|
done < $(SG_HANDBOOK_DEPLOY_REVISION_LIST_FILE) >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
|
|
@echo "</div></body></html>" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
|
|
@echo "Uploading '$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)' to '$(SG_HANDBOOK_SSH_USER)@$(SG_HANDBOOK_SSH_HOST):$(SG_HANDBOOK_SSH_REMOTE_DIR)'"
|
|
@scp \
|
|
-P $(SG_HANDBOOK_SSH_PORT) \
|
|
$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE) \
|
|
$(SG_HANDBOOK_SSH_USER)@$(SG_HANDBOOK_SSH_HOST):$(SG_HANDBOOK_SSH_REMOTE_DIR)
|