207 lines
5.4 KiB
Makefile
207 lines
5.4 KiB
Makefile
# SPDX-FileCopyrightText: 2011-2023 Blender Authors
|
|
#
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
# note: this isn't needed for building,
|
|
# its just for some convenience targets.
|
|
|
|
define HELP_TEXT
|
|
Checkers:
|
|
|
|
- check_mypy, watch_check_mypy
|
|
Runs the mypy checker, optionally watching files & re-running.
|
|
|
|
- check_ruff, watch_check_ruff
|
|
Runs the ruff checker, optionally watching files & re-running.
|
|
|
|
- check_pylint, watch_check_pylint
|
|
Runs the pylint checker, optionally watching files & re-running.
|
|
|
|
- check_flake8, watch_check_flake8
|
|
|
|
|
|
Tests:
|
|
|
|
- test, watch_test
|
|
Runs all tests listed below.
|
|
|
|
- test_cli
|
|
Test the command line program, "blender_ext.py" Blender is not used.
|
|
|
|
- test_blender
|
|
Test blender (currenlty only some limited tests).
|
|
|
|
- test_cli_blender
|
|
Runs tests that access & manipulate extensions via the command line.
|
|
|
|
|
|
Environment Variables:
|
|
|
|
- BLENDER_BIN
|
|
The command used to run Blender, defaults to "blender"
|
|
|
|
- PYTHON_BIN
|
|
The command used to run PYthon, defaults to "python3"
|
|
|
|
endef
|
|
# HELP_TEXT (end)
|
|
|
|
# Needed for when tests are run from another directory: `make -C ./scripts/addons_core`
|
|
BASE_DIR := ${CURDIR}
|
|
|
|
PY_FILES=$(shell find ./ -type f -name '*.py')
|
|
# Filter out files which use `bpy`.
|
|
PY_FILES_MYPY=$(filter-out \
|
|
./__init__.py \
|
|
./bl_extension_cli.py \
|
|
./bl_extension_monkeypatch.py \
|
|
./bl_extension_notify.py \
|
|
./bl_extension_ops.py \
|
|
./bl_extension_ui.py \
|
|
./bl_extension_utils.py \
|
|
./extensions_map_from_legacy_addons.py \
|
|
./example_extension/__init__.py \
|
|
,$(PY_FILES))
|
|
|
|
PY_FILES_MYPY_STANDALONE= \
|
|
./bl_extension_utils.py \
|
|
./bl_extension_cli.py
|
|
|
|
EXTRA_WATCH_FILES=Makefile
|
|
|
|
# For tests that launch Blender directly.
|
|
BLENDER_BIN?=$(shell which blender)
|
|
PYTHON_BIN?=$(shell which python3)
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Help for build targets
|
|
|
|
export HELP_TEXT
|
|
help: FORCE
|
|
@echo "$$HELP_TEXT"
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Checking Utilities
|
|
|
|
# `--no-namespace-packages` is needed otherwise `./cli/blender_ext.py` loads in parent modules
|
|
# (the Blender add-on which imports `bpy`).
|
|
check_mypy: FORCE
|
|
@mypy --no-namespace-packages --strict $(PY_FILES_MYPY)
|
|
@mypy --strict --follow-imports=skip $(PY_FILES_MYPY_STANDALONE)
|
|
watch_check_mypy:
|
|
@cd "$(BASE_DIR)" && \
|
|
while true; do \
|
|
$(MAKE) check_mypy; \
|
|
inotifywait -q -e close_write $(EXTRA_WATCH_FILES) \
|
|
$(PY_FILES_MYPY) \
|
|
./bl_extension_utils.py ; \
|
|
tput clear; \
|
|
done
|
|
|
|
check_ruff: FORCE
|
|
@cd "$(BASE_DIR)" && ruff check $(PY_FILES_MYPY)
|
|
@cd "$(BASE_DIR)" && ruff check $(PY_FILES_MYPY_STANDALONE)
|
|
watch_check_ruff:
|
|
@cd "$(BASE_DIR)" && \
|
|
while true; do \
|
|
$(MAKE) check_ruff; \
|
|
inotifywait -q -e close_write $(EXTRA_WATCH_FILES) \
|
|
$(PY_FILES_MYPY) \
|
|
./bl_extension_utils.py ; \
|
|
tput clear; \
|
|
done
|
|
|
|
check_pylint:
|
|
@cd "$(BASE_DIR)" && \
|
|
pylint $(PY_FILES) \
|
|
--enable=useless-suppression \
|
|
--disable=C0103,C0111,C0201,C0301,C0302,C0415,R0401,R1702,R1705,R0902,R0903,R0913,E0611,E0401,I1101,R0801,C0209,W0511,W0718,W0719,C0413,R0911,R0912,R0914,R0915 \
|
|
--msg-template='{abspath}:{line}:{column}: {msg_id}: {msg} ({symbol})'
|
|
watch_check_pylint:
|
|
@cd "$(BASE_DIR)" && \
|
|
while true; do \
|
|
$(MAKE) check_pylint; \
|
|
inotifywait -q -e close_write $(EXTRA_WATCH_FILES) $(PY_FILES) ; \
|
|
tput clear; \
|
|
done
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Tests (All)
|
|
|
|
test: FORCE
|
|
@$(MAKE) -C "$(BASE_DIR)" test_cli;
|
|
@$(MAKE) -C "$(BASE_DIR)" test_blender;
|
|
@$(MAKE) -C "$(BASE_DIR)" test_cli_blender;
|
|
watch_test: FORCE
|
|
@cd "$(BASE_DIR)" && \
|
|
while true; do \
|
|
$(MAKE) test; \
|
|
inotifywait -q -e close_write $(EXTRA_WATCH_FILES) $(PY_FILES) ; \
|
|
tput clear; \
|
|
done
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Tests (Individual)
|
|
|
|
# python3 ./tests/test_cli.py
|
|
test_cli: FORCE
|
|
@cd "$(BASE_DIR)" && \
|
|
USE_HTTP=0 \
|
|
$(PYTHON_BIN) ./tests/test_cli.py
|
|
@cd "$(BASE_DIR)" && \
|
|
USE_HTTP=1 \
|
|
$(PYTHON_BIN) ./tests/test_cli.py
|
|
watch_test_cli: FORCE
|
|
@cd "$(BASE_DIR)" && \
|
|
while true; do \
|
|
$(MAKE) test_cli; \
|
|
inotifywait -q -e close_write $(EXTRA_WATCH_FILES) $(PY_FILES) ; \
|
|
tput clear; \
|
|
done
|
|
|
|
|
|
# NOTE: these rely on the blender binary.
|
|
test_blender: FORCE
|
|
@cd "$(BASE_DIR)" && \
|
|
ASAN_OPTIONS=check_initialization_order=0:leak_check_at_exit=0 \
|
|
$(BLENDER_BIN) \
|
|
--background --factory-startup --online-mode -noaudio \
|
|
--python ./tests/test_blender.py -- --verbose
|
|
watch_test_blender: FORCE
|
|
@cd "$(BASE_DIR)" && \
|
|
while true; do \
|
|
$(MAKE) test_blender; \
|
|
inotifywait -q -e close_write $(EXTRA_WATCH_FILES) $(PY_FILES) ; \
|
|
tput clear; \
|
|
done
|
|
|
|
test_cli_blender: FORCE
|
|
@cd "$(BASE_DIR)" && \
|
|
env BLENDER_BIN=$(BLENDER_BIN) \
|
|
$(PYTHON_BIN) ./tests/test_cli_blender.py
|
|
watch_test_cli_blender: FORCE
|
|
@cd "$(BASE_DIR)" && \
|
|
while true; do \
|
|
env BLENDER_BIN=$(BLENDER_BIN) \
|
|
$(MAKE) test_cli_blender; \
|
|
inotifywait -q -e close_write $(EXTRA_WATCH_FILES) $(PY_FILES) ; \
|
|
tput clear; \
|
|
done
|
|
|
|
test_path_pattern_match: FORCE
|
|
@cd "$(BASE_DIR)" && \
|
|
$(PYTHON_BIN) ./tests/test_path_pattern_match.py
|
|
watch_test_path_pattern_match: FORCE
|
|
@cd "$(BASE_DIR)" && \
|
|
while true; do \
|
|
$(MAKE) test_path_pattern_match; \
|
|
inotifywait -q -e close_write $(EXTRA_WATCH_FILES) $(PY_FILES) ; \
|
|
tput clear; \
|
|
done
|
|
|
|
FORCE:
|