@@ -39,6 +39,13 @@ INCLUDE_MAKEFILE?=include.mk
3939# No default value.
4040EXTRA_PATH? =
4141
42+ # Path to Python project relative to Makefile (repository root).
43+ # Leave empty if Python project is in the same directory as Makefile.
44+ # For monorepo setups, set to subdirectory name (e.g., `backend`).
45+ # Future-proofed for multi-language monorepos (e.g., PROJECT_PATH_NODEJS).
46+ # No default value.
47+ PROJECT_PATH_PYTHON? =
48+
4249# # core.mxenv
4350
4451# Primary Python interpreter to use. It is used to create the
@@ -156,6 +163,9 @@ FORMAT_TARGETS?=
156163
157164export PATH: =$(if $(EXTRA_PATH ) ,$(EXTRA_PATH ) :,)$(PATH )
158165
166+ # Helper variable: adds trailing slash to PROJECT_PATH_PYTHON only if non-empty
167+ PYTHON_PROJECT_PREFIX =$(if $(PROJECT_PATH_PYTHON ) ,$(PROJECT_PATH_PYTHON ) /,)
168+
159169# Defensive settings for make: https://tech.davis-hansson.com/p/make/
160170SHELL: =bash
161171.ONESHELL :
@@ -299,6 +309,11 @@ CLEAN_TARGETS+=mxenv-clean
299309# ruff
300310# #############################################################################
301311
312+ # Adjust RUFF_SRC to respect PROJECT_PATH_PYTHON if still at default
313+ ifeq ($(RUFF_SRC ) ,src)
314+ RUFF_SRC: =$(PYTHON_PROJECT_PREFIX ) src
315+ endif
316+
302317RUFF_TARGET: =$(SENTINEL_FOLDER ) /ruff.sentinel
303318$(RUFF_TARGET ) : $(MXENV_TARGET )
304319 @echo " Install Ruff"
@@ -334,6 +349,11 @@ CLEAN_TARGETS+=ruff-clean
334349# isort
335350# #############################################################################
336351
352+ # Adjust ISORT_SRC to respect PROJECT_PATH_PYTHON if still at default
353+ ifeq ($(ISORT_SRC ) ,src)
354+ ISORT_SRC: =$(PYTHON_PROJECT_PREFIX ) src
355+ endif
356+
337357ISORT_TARGET: =$(SENTINEL_FOLDER ) /isort.sentinel
338358$(ISORT_TARGET ) : $(MXENV_TARGET )
339359 @echo " Install isort"
391411 @echo "[settings]" > $(PROJECT_CONFIG)
392412endif
393413
394- LOCAL_PACKAGE_FILES: =$(wildcard pyproject.toml setup.cfg setup.py requirements.txt constraints.txt)
414+ LOCAL_PACKAGE_FILES: =$(wildcard $( PYTHON_PROJECT_PREFIX ) pyproject.toml $( PYTHON_PROJECT_PREFIX ) setup.cfg $( PYTHON_PROJECT_PREFIX ) setup.py $( PYTHON_PROJECT_PREFIX ) requirements.txt $( PYTHON_PROJECT_PREFIX ) constraints.txt)
395415
396416FILES_TARGET: =requirements-mxdev.txt
397417$(FILES_TARGET ) : $(PROJECT_CONFIG ) $(MXENV_TARGET ) $(SOURCES_TARGET ) $(LOCAL_PACKAGE_FILES )
0 commit comments