Commit graph jw-pkg/make/py-mod.mk
Author SHA1 Message Date
c42f5f98ab
test-guard.mk: Add file
All checks were successful
CI / Packaging - Kali Linux (pull_request) Successful in 4m3s
CI / Packaging - OpenSUSE Tumbleweed (pull_request) Successful in 4m2s
CI / Packaging test (pull_request) Successful in 0s
CI / Packaging - Kali Linux (push) Successful in 4m16s
CI / Packaging - OpenSUSE Tumbleweed (push) Successful in 3m51s
CI / Packaging test (push) Successful in 0s
Running "make clean" in some directories can break "make test" in
others. That notably happens by running clean somewhere in or below
$(TOPDIR)/src/python, which removes __init__.py files potentially needed
by unit and integration tests in $(TOPDIR)/test.

This commit makes the failure easily visible by introducing the notion
of "testabiltity" - if the tree is not testable, "make test" logs
exactly that in a clear error message and gives up.

Makefiles which need to check "testability" can use it as a
prerequisite. This commit does that with py-run.mk and jw-py-test.mk.

Testability is asserted by running "make", "make all" or "make test"
from $(TOPDIR). A successful toplevel build coincides with testability,
and leaves a $(TOPDIR)/dirs-all.done behind, which is why that file is
the perfect testability marker.

It is automatically created by a toplevel build and cleared by using the
"invalidate-testability" prerequisite. This commit makes target "clean"
depend on it in py-mod.mk. To be extended to other use cases / makefile
snippets as needed.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-08-18 14:05:30 +02:00
d42040cb7b
py-mod.mk: Support PY_INIT_SUBMODULES
All checks were successful
CI / Packaging - Kali Linux (pull_request) Successful in 3m3s
CI / Packaging - OpenSUSE Tumbleweed (pull_request) Successful in 3m12s
CI / Packaging test (pull_request) Successful in 0s
CI / Packaging - Kali Linux (push) Successful in 3m2s
CI / Packaging - OpenSUSE Tumbleweed (push) Successful in 3m21s
CI / Packaging test (push) Successful in 0s
Add support for PY_INIT_SUBMODULES to py-mod.mk. If it is defined in
a Makefile including py-mod.mk, the listed submodules will be added
to __init__.py and thus included in the list of things that can be
imported from a module.

This commit also adds support for --submodules to python-tools.sh for
that to happen.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-06-17 19:32:40 +02:00
8f1154892f
py-mod.mk: Extract symbols in __all__
All checks were successful
CI / Packaging - Kali Linux (pull_request) Successful in 3m1s
CI / Packaging - OpenSUSE Tumbleweed (pull_request) Successful in 3m6s
CI / Packaging test (pull_request) Successful in 0s
CI / Packaging - Kali Linux (push) Successful in 3m6s
CI / Packaging - OpenSUSE Tumbleweed (push) Successful in 3m1s
CI / Packaging test (push) Successful in 0s
Symbols in the __all__ list of a module marked with "# export"
arent't currently added to __init__.py. Fix that.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-06-17 19:24:49 +02:00
9039dc7e40
python-tools.sh, py-mod.mk: Use --symbol-filter
All checks were successful
CI / Packaging - Kali Linux (pull_request) Successful in 3m8s
CI / Packaging - OpenSUSE Tumbleweed (pull_request) Successful in 3m22s
CI / Packaging test (pull_request) Successful in 0s
CI / Packaging - Kali Linux (push) Successful in 3m9s
CI / Packaging - OpenSUSE Tumbleweed (push) Successful in 3m14s
CI / Packaging test (push) Successful in 0s
Letting python-tools.sh rewrite symbols is more robust than rewriting
an entire __init__.py with PY_INIT_FILTER in the including Makefile.
The latter can break in non-obvious ways if python-tools.sh changes
__init__.py's format.

Make python-tools.sh support --symbol-filter to remedy that. The
option takes an sed script which should expect a string of two
non-whitespace tokens: The module from which the symbol is imported,
and the name of the symbol in that module. It's output will then be
used as the symbol to be exported from __init__.py.

Also, support the PY_SYMBOL_FILTER variable in py-mod.mk. If it's
defined, it is used for --symbol-filter.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-06-12 07:33:07 +02:00
fc6f2fbb65
python-tools.sh: Fix __init__.py linter complaints
The __init__.py files as gnerated by python-tools.sh contain multiple
issues, fix them:

  - Make the machinery fail if the same type name is imported from
    different modules

  - Support relative imports from .Module import Module instead of
    having to use the entire module path as import source

  - Import types explicitly re-exported with "as":

      from .Module import Module as Module

    Otherwise ruff will regard the type as "imported but not used"

  - Add "# ruff: noqa: E501" near the top. The import lines can get
    long and are beyond manual control (except for renaming the
    modules themselves, that is). This can cause ruff to fail, so get
    it to accept long lines in __init__.py. The style violation
    doesn't make much of a difference in generated code, anyway,
    because nobody reads that. Plus what's happening in the code
    isn't rocket science, so good style wouldn't help much with
    understanding, either.

This promptly digs up two symbol name conflicts lib.pm.dpkg and
lib.pm.rpm. Fix them along with this commit to keep it from breaking the build.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-05-31 17:51:51 +02:00
d0c1eac1a9 py-defs.mk, py-mod.mk: Support PY_UPDATE_INIT_PY
Allow to disable auto-updating of __init__.py in a directory via
PY_UPDATE_INIT_PY = true | false.

Signed-off-by: Jan Lindemann <jan@janware.com>
2025-11-16 18:42:58 +01:00
0a9340af49 make: Re-add files necessary for building jw-python
Re-add everything necessary for building and packaging jw-python.

ldlibpath.mk is not strictly necessary, but might be with other
Python packages backed by compiled C-code, so leave it in.

Signed-off-by: Jan Lindemann <jan@janware.com>
2025-11-13 17:27:14 +01:00
bc883deed4 Everywhere: Remove everything non-essential for "make clean all"
This commit removes everything not strictly necessary for running
"make clean all" inside jw-build.

packaging jw-devtest. This cuts the repo down from 24077 to 4725
lines of code.

The idea is to

1) Further remove bloat from the remaining bits

2) Re-add what's necessary to build and package other essential repos.

   The decision should be based on whether or not jw-build can also be
   useful in a non-janware context.

Signed-off-by: Jan Lindemann <jan@janware.com>
2025-11-14 15:02:56 +01:00
07d9eeea42 py-mod.mk: Support PY_INIT_FILTER
Signed-off-by: Jan Lindemann <jan@janware.com>
2025-01-27 15:00:40 +00:00
de893a0fe5 py-mod.mk: Fix bogus # export match in commented line
Signed-off-by: Jan Lindemann <jan@janware.com>
2024-12-22 14:06:09 +00:00
90ce1b5196 py-mod.mk: Fix bogus # export match on class {variable}
Signed-off-by: Jan Lindemann <jan@janware.com>
2024-12-18 17:14:23 +00:00
4e405a5d1a py-mod.mk: Add support to # extract variables
Signed-off-by: Jan Lindemann <jan@janware.com>
2024-12-03 12:27:39 +00:00
35def547bf py-mod.mk: Add support to async function definitions
The async keyword confused python-tools.sh, this commit fixes that.

Signed-off-by: Jan Lindemann <jan@janware.com>
2019-10-28 12:20:51 +00:00
bdd66dbc26 Everywhere: Rename MOD_SCRIPT_DIR -> JWB_SCRIPT_DIR
Follow name change of MODDIR -> JWBDIR.

Signed-off-by: Jan Lindemann <jan@janware.com>
2019-06-29 21:45:24 +00:00
b2d6e6f554 Everywhere: Rename MODDIR -> JWBDIR
Rename the omnipresent MODDIR variable to JWBDIR, since that's more to the
point.

Signed-off-by: Jan Lindemann <jan@janware.com>
2019-06-29 21:34:18 +00:00
fb2f57b7b9 py-mod.mk, py-rules.mk: Split up py-mod.mk in py-mod.mk and py-rules.mk
py-rules.mk is meant to be usable outside of a jw Python module
context, just for generating .pyc, for example

Signed-off-by: Jan Lindemann <jan@janware.com>
2019-06-22 10:11:44 +00:00
42e01d9dd8 py-mod.mk: Fix python version conditional
Signed-off-by: Jan Lindemann <jan@janware.com>
2019-06-11 07:41:45 +00:00
c67ce9fa1b py-mod.mk: Make python compilation errors fatal
Pass doraise=True to py_compile.compile()

Signed-off-by: Jan Lindemann <jan@janware.com>
2019-06-04 10:38:07 +00:00
956aea82eb py-*.mk: Fix python version detection
Signed-off-by: Jan Lindemann <jan@janware.com>
2019-06-03 08:00:39 +00:00
fe161ff4d6 py-defs.mk, py-mod.mk: Add support for Python3's __pycache__
Signed-off-by: Jan Lindemann <jan@janware.com>
2019-03-12 11:35:49 +00:00
0eaef0c326 conf/jcs, make, tmpl/doxygen: Align equal signs in makefiles to column 30
Signed-off-by: Jan Lindemann <jan@janware.com>
2019-03-03 18:12:28 +00:00
d684f198b2 make: Add dev-utils.mk for convenience targets
dev-utils.mk is meant to provide targets like install-to-system,
which will be invoked during development

Signed-off-by: Jan Lindemann <jan@janware.com>
2018-11-27 15:10:18 +00:00
e68d4eb83b make, scripts: Now excplicitly calling python2 executable instead of python
Signed-off-by: Jan Lindemann <jan@janware.com>
2018-01-02 13:12:00 +00:00
0e5a2ef46e py-mod.mk, qt-rules.mk, yapp.mk: Add HDRDIR_SCOPE_SUFFIX to ytools include files
Change ytools header location from #include <header.h> to
#include <ytools/header.h>.

Signed-off-by: Jan Lindemann <jan@janware.com>
2017-12-18 18:31:37 +00:00
f5c43f706a make: Replace some executables by absolute paths to improve performance
Signed-off-by: Jan Lindemann <jan@janware.com>
2017-09-02 19:26:52 +00:00
92040c66e7 make, scripts: Preserve modification time on installation
Implemented -p switch on pkg.sh log-install and used it on standard
installation rules.

Signed-off-by: Jan Lindemann <jan@janware.com>
2017-08-31 19:40:39 +00:00
3f782d3f3f py-defs/py-mod.mk: Fix __init__.py generation
Signed-off-by: Jan Lindemann <jan@janware.com>
2017-07-25 15:04:44 +00:00
55f9b50562 py-defs.mk, py-mod.mk, python-tools.sh: Improve python module handling
- Fix superflous dots in module names
- Generate PYTHONPATH in projects.py
- Add support for __init__.py.tmpl

Signed-off-by: Jan Lindemann <jan@janware.com>
2017-07-24 10:59:08 +00:00
cdabaad7ef py-*.mk: Fill PYTHONPATH from build dependencies
Signed-off-by: Jan Lindemann <jan@janware.com>
2017-07-22 18:16:08 +00:00
f8747fcdbd py-defs.mk, py-mod.mk: Add exports to __init__.py
Signed-off-by: Jan Lindemann <jan@janware.com>
2017-07-22 14:34:23 +00:00
d49340917b make: Add py-defs.mk py-mod.mk py-run.mk
Signed-off-by: Jan Lindemann <jan@janware.com>
2017-07-21 15:34:16 +00:00