diff --git a/.gitmodules b/.gitmodules index bb8e23c..8ee6811 100644 --- a/.gitmodules +++ b/.gitmodules @@ -13,3 +13,6 @@ [submodule "pylibs/rspec"] path = pylibs/rspec url = https://git.mount-mockery.de/pylib/rspec.git +[submodule "pylibs/pydocs"] + path = pylibs/pydocs + url = https://git.mount-mockery.de/pylib/pydocs.git diff --git a/Makefile b/Makefile index 9f48de2..1503a9f 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -# git helper Makefile: Version 2.4 (2025-08-11) +# git helper Makefile: Version 2.5 (2025-08-11) default: help .ONESHELL: @@ -64,7 +64,7 @@ init: print_head # Install modules # echo -e "\033[1;33mInstalling modules to venv in $$BASEPATH...\e[0m" - for req_file in $$(find $$BASEPATH -name requirements.txt); do + for req_file in $$(find -L $$BASEPATH -name requirements.txt 2> /dev/null); do # echo " $$req_file" while read req_mod; do if [[ $$req_mod = *[![:space:]]* ]]; then diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000..aee4812 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,6 @@ +_static +_build +conf.py +index.rst +venv + diff --git a/docs/.venv_required b/docs/.venv_required new file mode 100644 index 0000000..e69de29 diff --git a/docs/Makefile b/docs/Makefile index a431150..1503a9f 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -1,40 +1,133 @@ -# You can set these variables from the command line. +# git helper Makefile: Version 2.5 (2025-08-11) +default: help + .ONESHELL: SHELL = /usr/bin/bash +MAKEFLAGS += --no-print-directory .SILENT: -SPHINXOPTS = -SPHINXBUILD = venv/bin/sphinx-build -SPHINXPRJ = $(shell basename `dirname \`pwd\``) -SOURCEDIR = . -BUILDDIR = _build +-include __make.d__/*.mk +GIT_FLAG = ./.git +VENV_FLAG = ./.venv_required +VENV_FOLDER = ./venv -html: venv $(SPHINXPRJ) - $(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) +localhelp: -$(SPHINXPRJ): - make --no-print-directory -C $@/_examples_ all +help: + echo "Possible common options are:" + echo " - init - Initialise the repository and all folders below with a Makefile" + echo " - giti - Get the git status of all submodules including their submodules" + echo " - update_submodules - Set all submodules to remote master" + echo " - venv_flag - Set the venev flag for the base folder. A venv will be generated" + echo " - clean - clean up" + echo " - deepclean - clean up this and all Makefiles below" + $(MAKE) localhelp + echo "You are able to create files make.d/*.mk and add local rules there. " + echo " - localinit: print_head - Will be executed as last step in the init process." + echo " - localhelp: print_head - Will be executed in th middle of the help text generation" + echo " - localclean:print_head - Will be executed before the clean rule" -init: venv -venv: - echo -e "\033[1;33mCreating venv...\033[00m" - if [[ ! -e venv ]]; then - virtualenv -p /usr/bin/python3 venv +localinit: + +init: print_head + # Init git repo + if [[ -e $(GIT_FLAG) ]]; then + echo -e "\033[1;33mInitialising git submodules...\e[0m" + git submodule init + git submodule update + echo fi - venv/bin/pip install --upgrade pip - venv/bin/pip install -r requirements.txt + # Init submodules + SUBDIRS=$$(find . -maxdepth 2 -mindepth 2 -name Makefile | sort) + for subdir in $$SUBDIRS; do + $(MAKE) --no-print-directory -C $$(dirname $$subdir) init + done + if [[ $$SUBDIRS = *[![:space:]]* ]]; then + $(MAKE) print_head + fi + # Create venv if needed + if [[ -e $(VENV_FLAG) ]]; then + BASEPATH=$$(pwd -P) + # + # Create venv + # + if [ ! -e venv ];then + echo -e "\033[1;33mCreating venv in $$BASEPATH...\e[0m" + python3 -m venv $$BASEPATH/venv > /dev/null 2>&1 + else + echo -e "\033[1;33mVirtualenv already exists in $$BASEPATH...\e[0m" + fi + echo -clean: - echo -e "\033[1;33mCleanung up docs...\033[00m" - echo -e "\e[1m * Sphix build directory...\e[0m" - rm -rf $(BUILDDIR)/* - make --no-print-directory -kC $(SPHINXPRJ)/_examples_ clean + # + # Install modules + # + echo -e "\033[1;33mInstalling modules to venv in $$BASEPATH...\e[0m" + for req_file in $$(find -L $$BASEPATH -name requirements.txt 2> /dev/null); do + # echo " $$req_file" + while read req_mod; do + if [[ $$req_mod = *[![:space:]]* ]]; then + # req_mod is not empty + OUT=$$($$BASEPATH/venv/bin/pip install -U $$req_mod 2>&1 ) + if [[ $$OUT =~ "Successfully installed" ]]; then + echo -e " * \033[1;32m$$req_mod installed.\e[0m" + elif [[ $$OUT =~ "already satisfied" ]]; then + echo -e " * \033[1;36m$$req_mod already installed.\e[0m" + else + echo -e " * \033[1;31m$$req_mod installation FAILED!\e[0m" + #echo $$OUT + fi + fi + done < $$req_file + done + echo + fi + # Start local init + echo -e "\033[1;33mDoing localinit...\e[0m" + $(MAKE) localinit -release: html - rm -rf $(SPHINXPRJ)/_docs_ - mv $(BUILDDIR)/html $(SPHINXPRJ)/_docs_ +update_submodules: + git submodule foreach "git fetch && git checkout master && git pull && git submodule init && git submodule update" -view: html - xdg-open $(BUILDDIR)/html/index.html +giti_this: print_head + giti + echo " Submodules:" + git submodule --quiet foreach "echo -n ' ' && giti" +giti: + git submodule --quiet foreach "[ -e Makefile ] && make --no-print-directory giti_this || :" + +localclean: + +clean: localclean + if [[ ! -e $(VENV_FLAG) ]]; then + if [[ -d $(VENV_FOLDER) ]]; then + rm -rf $(VENV_FOLDER) + fi + fi + +cleanall: clean + for subdir in $$(find . -maxdepth 2 -mindepth 2 -name Makefile | sort); do + $(MAKE) --no-print-directory -C $$(dirname $$subdir) cleanall + done + + +venv_flag: + if [[ ! -e $(VENV_FLAG) ]]; then + touch $(VENV_FLAG) + if [[ -e $(GIT_FLAG) ]]; then + git add $(VENV_FLAG) + fi + fi + +print_head: + DIRNAME=$$(basename $$(pwd)) + DIRLENGTH=$${#DIRNAME} + echo -ne "\n\n\033[1;34m╔═" + for i in $$(seq 1 $$DIRLENGTH); do echo -n "═"; done + echo -e "═╗" + echo -e "║ $$DIRNAME ║" + echo -ne "╚═" + for i in $$(seq 1 $$DIRLENGTH); do echo -n "═"; done + echo -e "═╝\033[00m" diff --git a/docs/__make.d__/sphinx.mk b/docs/__make.d__/sphinx.mk new file mode 120000 index 0000000..5d32f2f --- /dev/null +++ b/docs/__make.d__/sphinx.mk @@ -0,0 +1 @@ +../pydocs/sphinx.mk \ No newline at end of file diff --git a/docs/pydocs b/docs/pydocs new file mode 120000 index 0000000..170e71c --- /dev/null +++ b/docs/pydocs @@ -0,0 +1 @@ +../pylibs/pydocs \ No newline at end of file diff --git a/pylibs/pydocs b/pylibs/pydocs new file mode 160000 index 0000000..a8341df --- /dev/null +++ b/pylibs/pydocs @@ -0,0 +1 @@ +Subproject commit a8341df13ed60a0fd9db25a4ed511cbc54b44d91 diff --git a/pylibs/rspec b/pylibs/rspec index f8d1170..779a6d0 160000 --- a/pylibs/rspec +++ b/pylibs/rspec @@ -1 +1 @@ -Subproject commit f8d11701c887775a764adf3e75fd7be5758d0621 +Subproject commit 779a6d0a1c4e8b5bbdd4a54c4c509212cf2334a3