Files
test/scripts/addons_core/bl_pkg/Makefile
Campbell Barton a3a3dda563 Extensions: support for filtering based on Python versions
Support multiple extensions with different Python versions in a similar
way to how "platforms" are handled now.

This will be needed when Blender upgrades to a newer version of Python
so extensions which have a binary dependency on Python 3.11 don't
attempt to install in a Blender built with a newer Python version.

Details:

- Extensions from incompatible Python versions are not listed.
- Python versions are extracted from wheel names.
- An extension may include wheels for multiple Python versions,
  only the compatible wheels will be installed.
- Links may include a "python_versions" field which is checked
  when dropping into Blender.
- JSON generated by the "server-generate" command include the:
  "python_versions" field for extensions that include wheels.
- The "python_versions" field is optional, when omitted no version
  checks are performed.

Also correct watch_test make target.

Ref #128750.
2024-11-07 18:16:11 +11:00

163 lines
4.5 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.
# 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 \
./wheel_manager.py \
./example_extension/__init__.py \
./example_extension/foo.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)
# -----------------------------------------------------------------------------
# Checking Utilities
pep8: FORCE
@flake8 $(PY_FILES) --ignore=E501,E302,E123,E126,E128,E129,E124,E122,W504
# `--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: