2 # This file and its contents are supplied under the terms of the
3 # Common Development and Distribution License ("CDDL"), version 1.0.
4 # You may only use this file in accordance with the terms of version
7 # A full copy of the text of the CDDL should have accompanied this
8 # source. A copy of the CDDL is also available via the Internet at
9 # http://www.illumos.org/license/CDDL.
13 # Copyright 2022 Marcel Telka
16 include $(WS_MAKE_RULES
)/setup.py.mk
18 ifeq ($(strip $(PYTHON_BOOTSTRAP
)),yes
)
19 # To bootstrap the bootstrapper we need to make sure it finds its own modules
20 ifeq ($(strip $(COMPONENT_NAME
)),pyproject_installer
)
21 PYTHON_ENV
+= PYTHONPATH
=$(@D
)/src
24 COMPONENT_BUILD_CMD
= $(PYTHON
) -m pyproject_installer build
25 COMPONENT_BUILD_ARGS
=
27 COMPONENT_INSTALL_CMD
= $(PYTHON
) -m pyproject_installer
install
28 COMPONENT_INSTALL_ARGS
=
29 COMPONENT_INSTALL_ARGS
+= --destdir
$(PROTO_DIR
)
31 # pyproject_installer does not bytecompile after the install. Since we need
32 # pyc files we need to force that.
33 COMPONENT_POST_INSTALL_ACTION
+= \
34 $(PYTHON
) -m compileall
$(PROTO_DIR
)/$(PYTHON_DIR
)/site-packages
$(PROTO_DIR
)/$(PYTHON_LIB
) ;
36 COMPONENT_BUILD_CMD
= $(PYTHON
) -m build
37 COMPONENT_BUILD_ARGS
=
38 COMPONENT_BUILD_ARGS
+= --wheel
39 COMPONENT_BUILD_ARGS
+= --no-isolation
41 COMPONENT_INSTALL_CMD
= $(PYTHON
) -m installer
42 COMPONENT_INSTALL_ARGS
=
43 COMPONENT_INSTALL_ARGS
+= --destdir
$(PROTO_DIR
)
44 COMPONENT_INSTALL_ARGS
+= $(@D
)/dist/*.whl
46 USERLAND_REQUIRED_PACKAGES.python
+= library
/python
/build
47 USERLAND_REQUIRED_PACKAGES.python
+= library
/python
/installer
50 # Move all modules from default site-packages directory to vendor-packages
51 # directory where we place modules shipped by the OS but not included in the
52 # core Python distribution.
53 COMPONENT_POST_INSTALL_ACTION
+= \
54 if
[ -d
$(PROTO_DIR
)/$(PYTHON_DIR
)/site-packages
] ; then \
55 $(RM
) -r
$(PROTO_DIR
)/$(PYTHON_LIB
) ; \
56 $(MV
) $(PROTO_DIR
)/$(PYTHON_DIR
)/site-packages
$(PROTO_DIR
)/$(PYTHON_LIB
) ; \
59 # Generate raw list of hatch, pdm, pep735, pipenv, and poetry test dependencies
62 # Please note we set PATH below for tox to workaround
63 # https://github.com/tox-dev/tox/issues/2538
64 COMPONENT_POST_INSTALL_ACTION
+= \
65 cd
$(@D
)$(COMPONENT_SUBDIR
:%=/%) ; \
66 cfg
=$(BUILD_DIR
)/pyproject_deps-
$(PYTHON_VERSION
).json
; \
68 for p in
$(TEST_REQUIREMENTS_HATCH
) ; do \
69 $(PYTHON
) -m pyproject_installer deps
--depsconfig
$$cfg add hatch_
$$p hatch pyproject.toml
$$p ; \
71 for p in
$(TEST_REQUIREMENTS_PDM
) ; do \
72 $(PYTHON
) -m pyproject_installer deps
--depsconfig
$$cfg add pdm_
$$p pdm
$$p ; \
74 for p in
$(TEST_REQUIREMENTS_PEP735
) ; do \
75 $(PYTHON
) -m pyproject_installer deps
--depsconfig
$$cfg add pep735_
$$p pep735
$$p ; \
77 if
[ "$(strip $(TEST_STYLE))" == "tox" -a
-x
"$(TOX)" ] ; then \
78 for p in
$$(PATH
=$(PATH
) PYTHONPATH
=$(PROTO_DIR
)/$(PYTHON_DIR
)/site-packages
:$(PROTO_DIR
)/$(PYTHON_LIB
) \
79 $(TOX
) -qq
--no-provision
--print-dependency-groups-to
=- $(TOX_TESTENV
)) ; do \
80 $(PYTHON
) -m pyproject_installer deps
--depsconfig
$$cfg add pep735_
$$p pep735
$$p ; \
83 for p in
$(TEST_REQUIREMENTS_PIPENV
) ; do \
84 $(PYTHON
) -m pyproject_installer deps
--depsconfig
$$cfg add pipenv_
$$p pipenv Pipfile
$$p ; \
86 for p in
$(TEST_REQUIREMENTS_POETRY
) ; do \
87 $(PYTHON
) -m pyproject_installer deps
--depsconfig
$$cfg add poetry_
$$p poetry
$$p ; \
89 if
[ -f
$$cfg ] ; then \
90 $(PYTHON
) -m pyproject_installer deps
--depsconfig
$$cfg sync
; \
91 $(PYTHON
) -m pyproject_installer deps
--depsconfig
$$cfg eval \
92 |
$(PYTHON
) $(WS_TOOLS
)/python-requires
- >> $(@D
)/.depend-test
; \
95 # Add build dependencies from project metadata to REQUIRED_PACKAGES
96 REQUIRED_PACKAGES_RESOLVED
+= $(BUILD_DIR
)/META.depend.res
97 $(BUILD_DIR
)/META.depend.res
: $(SOURCE_DIR
)/.prep
99 # PYTHON_ENV is needed four times here to have the PYTHONPATH set
100 # properly when we bootstrap the pyproject_installer bootstrapper.
101 $(PYTHON_ENV
) $(PYTHON
) -m pyproject_installer deps
--depsconfig
$(BUILD_DIR
)/pyproject_deps.json add build_pep517 pep517
102 $(PYTHON_ENV
) $(PYTHON
) -m pyproject_installer deps
--depsconfig
$(BUILD_DIR
)/pyproject_deps.json add build_pep518 pep518
103 cd
$(SOURCE_DIR
) ; $(PYTHON_ENV
) $(PYTHON
) -m pyproject_installer deps
--depsconfig
$(BUILD_DIR
)/pyproject_deps.json sync
104 $(PYTHON_ENV
) $(PYTHON
) -m pyproject_installer deps
--depsconfig
$(BUILD_DIR
)/pyproject_deps.json eval
--depformat
'$$nname' \
105 |
$(GSED
) -e
's/.*/depend type=require fmri=pkg:\/library\/python\/&-$$(PYV)/' \
107 # PYTHON_ENV (see above) needs BITS
108 $(BUILD_DIR
)/META.depend.res
: BITS
= $(PREFERRED_BITS
)
110 # We need pyproject_installer for two purposes:
111 # - to detect build dependencies for all Python projects, and
112 # - to bootstrap some other Python projects.
113 # The pyproject_installer is not needed (and cannot be needed) for its own
115 ifneq ($(strip $(COMPONENT_NAME
)),pyproject_installer
)
116 USERLAND_REQUIRED_PACKAGES.python
+= library
/python
/pyproject-installer