* [PATCH v3 0/4] tools: ynl: add install target
@ 2024-12-16 10:41 Jan Stancek
2024-12-16 10:41 ` [PATCH v3 1/4] tools: ynl: move python code to separate sub-directory Jan Stancek
` (3 more replies)
0 siblings, 4 replies; 12+ messages in thread
From: Jan Stancek @ 2024-12-16 10:41 UTC (permalink / raw)
To: donald.hunter, stfomichev, kuba, jdamato
Cc: pabeni, davem, edumazet, horms, netdev, linux-kernel, jstancek
This series adds an install target for ynl. The python code
is moved to a subdirectory, so it can be used as a package
with flat layout, as well as directly from the tree.
To try the install as a non-root user you can run:
$ mkdir /tmp/myroot
$ make DESTDIR=/tmp/myroot install
$ PATH="/tmp/myroot/usr/bin:$PATH" PYTHONPATH="$(ls -1d /tmp/myroot/usr/lib/python*/site-packages)" ynl --help
Proposed install layout is described in last patch.
Changes in v3:
- dropped symlinks
- added install-headers install-rsts install-specs to PHONY target in generated/Makefile
- install headers from lib and generated directories to /usr/include/ynl
Changes in v2:
- squashed 1st and 2nd patch together
- added symlinks for original user-facing scripts for backwards compatibility
- updated also Documentation and selftests references
(tested Doc build and selftests ping.py test)
Jan Stancek (4):
tools: ynl: move python code to separate sub-directory
tools: ynl: add initial pyproject.toml for packaging
tools: ynl: add install target for generated content
tools: ynl: add main install target
Documentation/Makefile | 2 +-
Documentation/networking/multi-pf-netdev.rst | 4 +-
Documentation/networking/napi.rst | 4 +-
.../networking/netlink_spec/readme.txt | 2 +-
.../userspace-api/netlink/intro-specs.rst | 8 ++--
tools/net/ynl/Makefile | 29 ++++++++++++-
tools/net/ynl/generated/.gitignore | 1 +
tools/net/ynl/generated/Makefile | 42 +++++++++++++++++--
tools/net/ynl/lib/.gitignore | 1 -
tools/net/ynl/lib/Makefile | 1 -
tools/net/ynl/pyproject.toml | 26 ++++++++++++
tools/net/ynl/pyynl/.gitignore | 2 +
tools/net/ynl/pyynl/__init__.py | 0
tools/net/ynl/{ => pyynl}/cli.py | 0
tools/net/ynl/{ => pyynl}/ethtool.py | 0
tools/net/ynl/{ => pyynl}/lib/__init__.py | 0
tools/net/ynl/{ => pyynl}/lib/nlspec.py | 0
tools/net/ynl/{ => pyynl}/lib/ynl.py | 0
.../ynl/{ynl-gen-c.py => pyynl/ynl_gen_c.py} | 0
.../{ynl-gen-rst.py => pyynl/ynl_gen_rst.py} | 0
tools/net/ynl/ynl-regen.sh | 2 +-
tools/testing/selftests/net/lib/py/ynl.py | 4 +-
tools/testing/selftests/net/ynl.mk | 3 +-
23 files changed, 110 insertions(+), 21 deletions(-)
create mode 100644 tools/net/ynl/pyproject.toml
create mode 100644 tools/net/ynl/pyynl/.gitignore
create mode 100644 tools/net/ynl/pyynl/__init__.py
rename tools/net/ynl/{ => pyynl}/cli.py (100%)
rename tools/net/ynl/{ => pyynl}/ethtool.py (100%)
rename tools/net/ynl/{ => pyynl}/lib/__init__.py (100%)
rename tools/net/ynl/{ => pyynl}/lib/nlspec.py (100%)
rename tools/net/ynl/{ => pyynl}/lib/ynl.py (100%)
rename tools/net/ynl/{ynl-gen-c.py => pyynl/ynl_gen_c.py} (100%)
rename tools/net/ynl/{ynl-gen-rst.py => pyynl/ynl_gen_rst.py} (100%)
--
2.43.0
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v3 1/4] tools: ynl: move python code to separate sub-directory
2024-12-16 10:41 [PATCH v3 0/4] tools: ynl: add install target Jan Stancek
@ 2024-12-16 10:41 ` Jan Stancek
2024-12-16 13:45 ` Donald Hunter
2024-12-16 10:41 ` [PATCH v3 2/4] tools: ynl: add initial pyproject.toml for packaging Jan Stancek
` (2 subsequent siblings)
3 siblings, 1 reply; 12+ messages in thread
From: Jan Stancek @ 2024-12-16 10:41 UTC (permalink / raw)
To: donald.hunter, stfomichev, kuba, jdamato
Cc: pabeni, davem, edumazet, horms, netdev, linux-kernel, jstancek
Move python code to a separate directory so it can be
packaged as a python module. Updates existing references
in selftests and docs.
Also rename ynl-gen-[c|rst] to ynl_gen_[c|rst], avoid
dashes as these prevent easy imports for entrypoints.
Signed-off-by: Jan Stancek <jstancek@redhat.com>
---
Documentation/Makefile | 2 +-
Documentation/networking/multi-pf-netdev.rst | 4 ++--
Documentation/networking/napi.rst | 4 ++--
Documentation/networking/netlink_spec/readme.txt | 2 +-
Documentation/userspace-api/netlink/intro-specs.rst | 8 ++++----
tools/net/ynl/Makefile | 2 ++
tools/net/ynl/generated/Makefile | 2 +-
tools/net/ynl/lib/.gitignore | 1 -
tools/net/ynl/lib/Makefile | 1 -
tools/net/ynl/pyynl/.gitignore | 2 ++
tools/net/ynl/pyynl/__init__.py | 0
tools/net/ynl/{ => pyynl}/cli.py | 0
tools/net/ynl/{ => pyynl}/ethtool.py | 0
tools/net/ynl/{ => pyynl}/lib/__init__.py | 0
tools/net/ynl/{ => pyynl}/lib/nlspec.py | 0
tools/net/ynl/{ => pyynl}/lib/ynl.py | 0
tools/net/ynl/{ynl-gen-c.py => pyynl/ynl_gen_c.py} | 0
tools/net/ynl/{ynl-gen-rst.py => pyynl/ynl_gen_rst.py} | 0
tools/net/ynl/ynl-regen.sh | 2 +-
tools/testing/selftests/net/lib/py/ynl.py | 4 ++--
tools/testing/selftests/net/ynl.mk | 3 ++-
21 files changed, 20 insertions(+), 17 deletions(-)
create mode 100644 tools/net/ynl/pyynl/.gitignore
create mode 100644 tools/net/ynl/pyynl/__init__.py
rename tools/net/ynl/{ => pyynl}/cli.py (100%)
rename tools/net/ynl/{ => pyynl}/ethtool.py (100%)
rename tools/net/ynl/{ => pyynl}/lib/__init__.py (100%)
rename tools/net/ynl/{ => pyynl}/lib/nlspec.py (100%)
rename tools/net/ynl/{ => pyynl}/lib/ynl.py (100%)
rename tools/net/ynl/{ynl-gen-c.py => pyynl/ynl_gen_c.py} (100%)
rename tools/net/ynl/{ynl-gen-rst.py => pyynl/ynl_gen_rst.py} (100%)
diff --git a/Documentation/Makefile b/Documentation/Makefile
index fa71602ec961..52c6c5a3efa9 100644
--- a/Documentation/Makefile
+++ b/Documentation/Makefile
@@ -104,7 +104,7 @@ quiet_cmd_sphinx = SPHINX $@ --> file://$(abspath $(BUILDDIR)/$3/$4)
YNL_INDEX:=$(srctree)/Documentation/networking/netlink_spec/index.rst
YNL_RST_DIR:=$(srctree)/Documentation/networking/netlink_spec
YNL_YAML_DIR:=$(srctree)/Documentation/netlink/specs
-YNL_TOOL:=$(srctree)/tools/net/ynl/ynl-gen-rst.py
+YNL_TOOL:=$(srctree)/tools/net/ynl/pyynl/ynl_gen_rst.py
YNL_RST_FILES_TMP := $(patsubst %.yaml,%.rst,$(wildcard $(YNL_YAML_DIR)/*.yaml))
YNL_RST_FILES := $(patsubst $(YNL_YAML_DIR)%,$(YNL_RST_DIR)%, $(YNL_RST_FILES_TMP))
diff --git a/Documentation/networking/multi-pf-netdev.rst b/Documentation/networking/multi-pf-netdev.rst
index 2cd25d81aaa7..2f5a5bb3ca9a 100644
--- a/Documentation/networking/multi-pf-netdev.rst
+++ b/Documentation/networking/multi-pf-netdev.rst
@@ -89,7 +89,7 @@ Observability
=============
The relation between PF, irq, napi, and queue can be observed via netlink spec::
- $ ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml --dump queue-get --json='{"ifindex": 13}'
+ $ ./tools/net/ynl/pyynl/cli.py --spec Documentation/netlink/specs/netdev.yaml --dump queue-get --json='{"ifindex": 13}'
[{'id': 0, 'ifindex': 13, 'napi-id': 539, 'type': 'rx'},
{'id': 1, 'ifindex': 13, 'napi-id': 540, 'type': 'rx'},
{'id': 2, 'ifindex': 13, 'napi-id': 541, 'type': 'rx'},
@@ -101,7 +101,7 @@ The relation between PF, irq, napi, and queue can be observed via netlink spec::
{'id': 3, 'ifindex': 13, 'napi-id': 542, 'type': 'tx'},
{'id': 4, 'ifindex': 13, 'napi-id': 543, 'type': 'tx'}]
- $ ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml --dump napi-get --json='{"ifindex": 13}'
+ $ ./tools/net/ynl/pyynl/cli.py --spec Documentation/netlink/specs/netdev.yaml --dump napi-get --json='{"ifindex": 13}'
[{'id': 543, 'ifindex': 13, 'irq': 42},
{'id': 542, 'ifindex': 13, 'irq': 41},
{'id': 541, 'ifindex': 13, 'irq': 40},
diff --git a/Documentation/networking/napi.rst b/Documentation/networking/napi.rst
index 02720dd71a76..6083210ab2a4 100644
--- a/Documentation/networking/napi.rst
+++ b/Documentation/networking/napi.rst
@@ -199,13 +199,13 @@ parameters mentioned above use hyphens instead of underscores:
Per-NAPI configuration can be done programmatically in a user application
or by using a script included in the kernel source tree:
-``tools/net/ynl/cli.py``.
+``tools/net/ynl/pyynl/cli.py``.
For example, using the script:
.. code-block:: bash
- $ kernel-source/tools/net/ynl/cli.py \
+ $ kernel-source/tools/net/ynl/pyynl/cli.py \
--spec Documentation/netlink/specs/netdev.yaml \
--do napi-set \
--json='{"id": 345,
diff --git a/Documentation/networking/netlink_spec/readme.txt b/Documentation/networking/netlink_spec/readme.txt
index 6763f99d216c..030b44aca4e6 100644
--- a/Documentation/networking/netlink_spec/readme.txt
+++ b/Documentation/networking/netlink_spec/readme.txt
@@ -1,4 +1,4 @@
SPDX-License-Identifier: GPL-2.0
This file is populated during the build of the documentation (htmldocs) by the
-tools/net/ynl/ynl-gen-rst.py script.
+tools/net/ynl/pyynl/ynl_gen_rst.py script.
diff --git a/Documentation/userspace-api/netlink/intro-specs.rst b/Documentation/userspace-api/netlink/intro-specs.rst
index bada89699455..a4435ae4628d 100644
--- a/Documentation/userspace-api/netlink/intro-specs.rst
+++ b/Documentation/userspace-api/netlink/intro-specs.rst
@@ -15,7 +15,7 @@ developing Netlink related code. The tool is implemented in Python
and can use a YAML specification to issue Netlink requests
to the kernel. Only Generic Netlink is supported.
-The tool is located at ``tools/net/ynl/cli.py``. It accepts
+The tool is located at ``tools/net/ynl/pyynl/cli.py``. It accepts
a handul of arguments, the most important ones are:
- ``--spec`` - point to the spec file
@@ -27,7 +27,7 @@ YAML specs can be found under ``Documentation/netlink/specs/``.
Example use::
- $ ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/ethtool.yaml \
+ $ ./tools/net/ynl/pyynl/cli.py --spec Documentation/netlink/specs/ethtool.yaml \
--do rings-get \
--json '{"header":{"dev-index": 18}}'
{'header': {'dev-index': 18, 'dev-name': 'eni1np1'},
@@ -75,7 +75,7 @@ the two marker lines like above to a file, add that file to git,
and run the regeneration tool. Grep the tree for ``YNL-GEN``
to see other examples.
-The code generation itself is performed by ``tools/net/ynl/ynl-gen-c.py``
+The code generation itself is performed by ``tools/net/ynl/pyynl/ynl_gen_c.py``
but it takes a few arguments so calling it directly for each file
quickly becomes tedious.
@@ -84,7 +84,7 @@ YNL lib
``tools/net/ynl/lib/`` contains an implementation of a C library
(based on libmnl) which integrates with code generated by
-``tools/net/ynl/ynl-gen-c.py`` to create easy to use netlink wrappers.
+``tools/net/ynl/pyynl/ynl_gen_c.py`` to create easy to use netlink wrappers.
YNL basics
----------
diff --git a/tools/net/ynl/Makefile b/tools/net/ynl/Makefile
index d1cdf2a8f826..5268b91bf7ed 100644
--- a/tools/net/ynl/Makefile
+++ b/tools/net/ynl/Makefile
@@ -21,5 +21,7 @@ clean distclean:
fi \
done
rm -f libynl.a
+ rm -rf pyynl/__pycache__
+ rm -rf pyynl/lib/__pycache__
.PHONY: all clean distclean $(SUBDIRS)
diff --git a/tools/net/ynl/generated/Makefile b/tools/net/ynl/generated/Makefile
index 7db5240de58a..00af721b1571 100644
--- a/tools/net/ynl/generated/Makefile
+++ b/tools/net/ynl/generated/Makefile
@@ -12,7 +12,7 @@ include ../Makefile.deps
YNL_GEN_ARG_ethtool:=--user-header linux/ethtool_netlink.h \
--exclude-op stats-get
-TOOL:=../ynl-gen-c.py
+TOOL:=../pyynl/ynl_gen_c.py
GENS_PATHS=$(shell grep -nrI --files-without-match \
'protocol: netlink' \
diff --git a/tools/net/ynl/lib/.gitignore b/tools/net/ynl/lib/.gitignore
index 296c4035dbf2..a4383358ec72 100644
--- a/tools/net/ynl/lib/.gitignore
+++ b/tools/net/ynl/lib/.gitignore
@@ -1,2 +1 @@
-__pycache__/
*.d
diff --git a/tools/net/ynl/lib/Makefile b/tools/net/ynl/lib/Makefile
index 94c49cca3dca..4b2b98704ff9 100644
--- a/tools/net/ynl/lib/Makefile
+++ b/tools/net/ynl/lib/Makefile
@@ -19,7 +19,6 @@ ynl.a: $(OBJS)
clean:
rm -f *.o *.d *~
- rm -rf __pycache__
distclean: clean
rm -f *.a
diff --git a/tools/net/ynl/pyynl/.gitignore b/tools/net/ynl/pyynl/.gitignore
new file mode 100644
index 000000000000..b801cd2d016e
--- /dev/null
+++ b/tools/net/ynl/pyynl/.gitignore
@@ -0,0 +1,2 @@
+__pycache__/
+lib/__pycache__/
diff --git a/tools/net/ynl/pyynl/__init__.py b/tools/net/ynl/pyynl/__init__.py
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/tools/net/ynl/cli.py b/tools/net/ynl/pyynl/cli.py
similarity index 100%
rename from tools/net/ynl/cli.py
rename to tools/net/ynl/pyynl/cli.py
diff --git a/tools/net/ynl/ethtool.py b/tools/net/ynl/pyynl/ethtool.py
similarity index 100%
rename from tools/net/ynl/ethtool.py
rename to tools/net/ynl/pyynl/ethtool.py
diff --git a/tools/net/ynl/lib/__init__.py b/tools/net/ynl/pyynl/lib/__init__.py
similarity index 100%
rename from tools/net/ynl/lib/__init__.py
rename to tools/net/ynl/pyynl/lib/__init__.py
diff --git a/tools/net/ynl/lib/nlspec.py b/tools/net/ynl/pyynl/lib/nlspec.py
similarity index 100%
rename from tools/net/ynl/lib/nlspec.py
rename to tools/net/ynl/pyynl/lib/nlspec.py
diff --git a/tools/net/ynl/lib/ynl.py b/tools/net/ynl/pyynl/lib/ynl.py
similarity index 100%
rename from tools/net/ynl/lib/ynl.py
rename to tools/net/ynl/pyynl/lib/ynl.py
diff --git a/tools/net/ynl/ynl-gen-c.py b/tools/net/ynl/pyynl/ynl_gen_c.py
similarity index 100%
rename from tools/net/ynl/ynl-gen-c.py
rename to tools/net/ynl/pyynl/ynl_gen_c.py
diff --git a/tools/net/ynl/ynl-gen-rst.py b/tools/net/ynl/pyynl/ynl_gen_rst.py
similarity index 100%
rename from tools/net/ynl/ynl-gen-rst.py
rename to tools/net/ynl/pyynl/ynl_gen_rst.py
diff --git a/tools/net/ynl/ynl-regen.sh b/tools/net/ynl/ynl-regen.sh
index a37304dcc88e..81b4ecd89100 100755
--- a/tools/net/ynl/ynl-regen.sh
+++ b/tools/net/ynl/ynl-regen.sh
@@ -1,7 +1,7 @@
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
-TOOL=$(dirname $(realpath $0))/ynl-gen-c.py
+TOOL=$(dirname $(realpath $0))/pyynl/ynl_gen_c.py
force=
search=
diff --git a/tools/testing/selftests/net/lib/py/ynl.py b/tools/testing/selftests/net/lib/py/ynl.py
index a0d689d58c57..9c0e5a89eb12 100644
--- a/tools/testing/selftests/net/lib/py/ynl.py
+++ b/tools/testing/selftests/net/lib/py/ynl.py
@@ -13,14 +13,14 @@ try:
SPEC_PATH = KSFT_DIR / "net/lib/specs"
sys.path.append(tools_full_path.as_posix())
- from net.lib.ynl.lib import YnlFamily, NlError
+ from net.lib.ynl.pyynl.lib import YnlFamily, NlError
else:
# Running in tree
tools_full_path = KSRC / "tools"
SPEC_PATH = KSRC / "Documentation/netlink/specs"
sys.path.append(tools_full_path.as_posix())
- from net.ynl.lib import YnlFamily, NlError
+ from net.ynl.pyynl.lib import YnlFamily, NlError
except ModuleNotFoundError as e:
ksft_pr("Failed importing `ynl` library from kernel sources")
ksft_pr(str(e))
diff --git a/tools/testing/selftests/net/ynl.mk b/tools/testing/selftests/net/ynl.mk
index d43afe243779..12e7cae251be 100644
--- a/tools/testing/selftests/net/ynl.mk
+++ b/tools/testing/selftests/net/ynl.mk
@@ -31,7 +31,8 @@ $(OUTPUT)/libynl.a: $(YNL_SPECS) $(OUTPUT)/.libynl-$(YNL_GENS_HASH).sig
$(Q)cp $(top_srcdir)/tools/net/ynl/libynl.a $(OUTPUT)/libynl.a
EXTRA_CLEAN += \
- $(top_srcdir)/tools/net/ynl/lib/__pycache__ \
+ $(top_srcdir)/tools/net/ynl/pyynl/__pycache__ \
+ $(top_srcdir)/tools/net/ynl/pyynl/lib/__pycache__ \
$(top_srcdir)/tools/net/ynl/lib/*.[ado] \
$(OUTPUT)/.libynl-*.sig \
$(OUTPUT)/libynl.a
--
2.43.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v3 2/4] tools: ynl: add initial pyproject.toml for packaging
2024-12-16 10:41 [PATCH v3 0/4] tools: ynl: add install target Jan Stancek
2024-12-16 10:41 ` [PATCH v3 1/4] tools: ynl: move python code to separate sub-directory Jan Stancek
@ 2024-12-16 10:41 ` Jan Stancek
2024-12-16 13:52 ` Donald Hunter
2024-12-16 10:41 ` [PATCH v3 3/4] tools: ynl: add install target for generated content Jan Stancek
2024-12-16 10:41 ` [PATCH v3 4/4] tools: ynl: add main install target Jan Stancek
3 siblings, 1 reply; 12+ messages in thread
From: Jan Stancek @ 2024-12-16 10:41 UTC (permalink / raw)
To: donald.hunter, stfomichev, kuba, jdamato
Cc: pabeni, davem, edumazet, horms, netdev, linux-kernel, jstancek
Signed-off-by: Jan Stancek <jstancek@redhat.com>
---
tools/net/ynl/pyproject.toml | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
create mode 100644 tools/net/ynl/pyproject.toml
diff --git a/tools/net/ynl/pyproject.toml b/tools/net/ynl/pyproject.toml
new file mode 100644
index 000000000000..677ea8f4c185
--- /dev/null
+++ b/tools/net/ynl/pyproject.toml
@@ -0,0 +1,26 @@
+[build-system]
+requires = ["setuptools>=61.0"]
+build-backend = "setuptools.build_meta"
+
+[project]
+name = "pyynl"
+authors = [
+ {name = "Donald Hunter", email = "donald.hunter@gmail.com"},
+ {name = "Jakub Kicinski", email = "kuba@kernel.org"},
+]
+description = "yaml netlink (ynl)"
+version = "0.0.1"
+requires-python = ">=3.9"
+dependencies = [
+ "pyyaml==6.*",
+ "jsonschema==4.*"
+]
+
+[tool.setuptools.packages.find]
+include = ["pyynl", "pyynl.lib"]
+
+[project.scripts]
+ynl = "pyynl.cli:main"
+ynl-ethtool = "pyynl.ethtool:main"
+ynl-gen-c = "pyynl.ynl_gen_c:main"
+ynl-gen-rst = "pyynl.ynl_gen_rst:main"
--
2.43.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v3 3/4] tools: ynl: add install target for generated content
2024-12-16 10:41 [PATCH v3 0/4] tools: ynl: add install target Jan Stancek
2024-12-16 10:41 ` [PATCH v3 1/4] tools: ynl: move python code to separate sub-directory Jan Stancek
2024-12-16 10:41 ` [PATCH v3 2/4] tools: ynl: add initial pyproject.toml for packaging Jan Stancek
@ 2024-12-16 10:41 ` Jan Stancek
2024-12-16 14:01 ` Donald Hunter
2024-12-16 10:41 ` [PATCH v3 4/4] tools: ynl: add main install target Jan Stancek
3 siblings, 1 reply; 12+ messages in thread
From: Jan Stancek @ 2024-12-16 10:41 UTC (permalink / raw)
To: donald.hunter, stfomichev, kuba, jdamato
Cc: pabeni, davem, edumazet, horms, netdev, linux-kernel, jstancek
Generate docs using ynl_gen_rst and add install target for
headers, specs and generates rst files.
Signed-off-by: Jan Stancek <jstancek@redhat.com>
---
tools/net/ynl/generated/.gitignore | 1 +
tools/net/ynl/generated/Makefile | 40 +++++++++++++++++++++++++++---
2 files changed, 38 insertions(+), 3 deletions(-)
diff --git a/tools/net/ynl/generated/.gitignore b/tools/net/ynl/generated/.gitignore
index ade488626d26..859a6fb446e1 100644
--- a/tools/net/ynl/generated/.gitignore
+++ b/tools/net/ynl/generated/.gitignore
@@ -1,2 +1,3 @@
*-user.c
*-user.h
+*.rst
diff --git a/tools/net/ynl/generated/Makefile b/tools/net/ynl/generated/Makefile
index 00af721b1571..208f7fead784 100644
--- a/tools/net/ynl/generated/Makefile
+++ b/tools/net/ynl/generated/Makefile
@@ -7,12 +7,19 @@ ifeq ("$(DEBUG)","1")
CFLAGS += -g -fsanitize=address -fsanitize=leak -static-libasan
endif
+INSTALL ?= install
+prefix ?= /usr
+datarootdir ?= $(prefix)/share
+docdir ?= $(datarootdir)/doc
+includedir ?= $(prefix)/include
+
include ../Makefile.deps
YNL_GEN_ARG_ethtool:=--user-header linux/ethtool_netlink.h \
--exclude-op stats-get
TOOL:=../pyynl/ynl_gen_c.py
+TOOL_RST:=../pyynl/ynl_gen_rst.py
GENS_PATHS=$(shell grep -nrI --files-without-match \
'protocol: netlink' \
@@ -22,7 +29,11 @@ SRCS=$(patsubst %,%-user.c,${GENS})
HDRS=$(patsubst %,%-user.h,${GENS})
OBJS=$(patsubst %,%-user.o,${GENS})
-all: protos.a $(HDRS) $(SRCS) $(KHDRS) $(KSRCS) $(UAPI)
+SPECS_PATHS=$(wildcard ../../../../Documentation/netlink/specs/*.yaml)
+SPECS=$(patsubst ../../../../Documentation/netlink/specs/%.yaml,%,${SPECS_PATHS})
+RSTS=$(patsubst %,%.rst,${SPECS})
+
+all: protos.a $(HDRS) $(SRCS) $(KHDRS) $(KSRCS) $(UAPI) $(RSTS)
protos.a: $(OBJS)
@echo -e "\tAR $@"
@@ -40,8 +51,12 @@ protos.a: $(OBJS)
@echo -e "\tCC $@"
@$(COMPILE.c) $(CFLAGS_$*) -o $@ $<
+%.rst: ../../../../Documentation/netlink/specs/%.yaml $(TOOL2)
+ @echo -e "\tGEN_RST $@"
+ @$(TOOL_RST) -o $@ -i $<
+
clean:
- rm -f *.o
+ rm -f *.o *.rst
distclean: clean
rm -f *.c *.h *.a
@@ -49,5 +64,24 @@ distclean: clean
regen:
@../ynl-regen.sh
-.PHONY: all clean distclean regen
+install-headers: $(HDRS)
+ @echo -e "\tINSTALL generated headers"
+ @$(INSTALL) -d $(DESTDIR)$(includedir)/ynl
+ @$(INSTALL) -m 0644 *.h $(DESTDIR)$(includedir)/ynl/
+
+install-rsts: $(RSTS)
+ @echo -e "\tINSTALL generated docs"
+ @$(INSTALL) -d $(DESTDIR)$(docdir)/ynl
+ @$(INSTALL) -m 0644 $(RSTS) $(DESTDIR)$(docdir)/ynl/
+
+install-specs:
+ @echo -e "\tINSTALL specs"
+ @$(INSTALL) -d $(DESTDIR)$(datarootdir)/ynl
+ @$(INSTALL) -m 0644 ../../../../Documentation/netlink/*.yaml $(DESTDIR)$(datarootdir)/ynl/
+ @$(INSTALL) -d $(DESTDIR)$(datarootdir)/ynl/specs
+ @$(INSTALL) -m 0644 ../../../../Documentation/netlink/specs/*.yaml $(DESTDIR)$(datarootdir)/ynl/specs/
+
+install: install-headers install-rsts install-specs
+
+.PHONY: all clean distclean regen install install-headers install-rsts install-specs
.DEFAULT_GOAL: all
--
2.43.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v3 4/4] tools: ynl: add main install target
2024-12-16 10:41 [PATCH v3 0/4] tools: ynl: add install target Jan Stancek
` (2 preceding siblings ...)
2024-12-16 10:41 ` [PATCH v3 3/4] tools: ynl: add install target for generated content Jan Stancek
@ 2024-12-16 10:41 ` Jan Stancek
2024-12-16 14:09 ` Donald Hunter
2024-12-16 22:58 ` Joe Damato
3 siblings, 2 replies; 12+ messages in thread
From: Jan Stancek @ 2024-12-16 10:41 UTC (permalink / raw)
To: donald.hunter, stfomichev, kuba, jdamato
Cc: pabeni, davem, edumazet, horms, netdev, linux-kernel, jstancek
This will install C library, specs, rsts and pyynl. The initial
structure is:
$ mkdir /tmp/myroot
$ make DESTDIR=/tmp/myroot install
/usr
/usr/lib64
/usr/lib64/libynl.a
/usr/lib/python3.XX/site-packages/pyynl/*
/usr/lib/python3.XX/site-packages/pyynl-0.0.1.dist-info/*
/usr/bin
/usr/bin/ynl
/usr/bin/ynl-ethtool
/usr/bin/ynl-gen-c
/usr/bin/ynl-gen-rst
/usr/include/ynl/*.h
/usr/share
/usr/share/doc
/usr/share/doc/ynl
/usr/share/doc/ynl/*.rst
/usr/share/ynl
/usr/share/ynl/genetlink-c.yaml
/usr/share/ynl/genetlink-legacy.yaml
/usr/share/ynl/genetlink.yaml
/usr/share/ynl/netlink-raw.yaml
/usr/share/ynl/specs
/usr/share/ynl/specs/devlink.yaml
/usr/share/ynl/specs/dpll.yaml
/usr/share/ynl/specs/ethtool.yaml
/usr/share/ynl/specs/fou.yaml
/usr/share/ynl/specs/handshake.yaml
/usr/share/ynl/specs/mptcp_pm.yaml
/usr/share/ynl/specs/netdev.yaml
/usr/share/ynl/specs/net_shaper.yaml
/usr/share/ynl/specs/nfsd.yaml
/usr/share/ynl/specs/nftables.yaml
/usr/share/ynl/specs/nlctrl.yaml
/usr/share/ynl/specs/ovs_datapath.yaml
/usr/share/ynl/specs/ovs_flow.yaml
/usr/share/ynl/specs/ovs_vport.yaml
/usr/share/ynl/specs/rt_addr.yaml
/usr/share/ynl/specs/rt_link.yaml
/usr/share/ynl/specs/rt_neigh.yaml
/usr/share/ynl/specs/rt_route.yaml
/usr/share/ynl/specs/rt_rule.yaml
/usr/share/ynl/specs/tcp_metrics.yaml
/usr/share/ynl/specs/tc.yaml
/usr/share/ynl/specs/team.yaml
Signed-off-by: Jan Stancek <jstancek@redhat.com>
---
tools/net/ynl/Makefile | 27 ++++++++++++++++++++++++++-
1 file changed, 26 insertions(+), 1 deletion(-)
diff --git a/tools/net/ynl/Makefile b/tools/net/ynl/Makefile
index 5268b91bf7ed..211df5a93ad9 100644
--- a/tools/net/ynl/Makefile
+++ b/tools/net/ynl/Makefile
@@ -1,5 +1,17 @@
# SPDX-License-Identifier: GPL-2.0
+include ../../scripts/Makefile.arch
+
+INSTALL ?= install
+prefix ?= /usr
+ifeq ($(LP64), 1)
+ libdir_relative = lib64
+else
+ libdir_relative = lib
+endif
+libdir ?= $(prefix)/$(libdir_relative)
+includedir ?= $(prefix)/include
+
SUBDIRS = lib generated samples
all: $(SUBDIRS) libynl.a
@@ -23,5 +35,18 @@ clean distclean:
rm -f libynl.a
rm -rf pyynl/__pycache__
rm -rf pyynl/lib/__pycache__
+ rm -rf pyynl.egg-info
+ rm -rf build
+
+install: libynl.a lib/*.h
+ @echo -e "\tINSTALL libynl.a"
+ @$(INSTALL) -d $(DESTDIR)$(libdir)
+ @$(INSTALL) -m 0644 libynl.a $(DESTDIR)$(libdir)/libynl.a
+ @echo -e "\tINSTALL libynl headers"
+ @$(INSTALL) -d $(DESTDIR)$(includedir)/ynl
+ @$(INSTALL) -m 0644 lib/*.h $(DESTDIR)$(includedir)/ynl/
+ @echo -e "\tINSTALL pyynl"
+ @pip install --prefix=$(DESTDIR)$(prefix) .
+ @make -C generated install
-.PHONY: all clean distclean $(SUBDIRS)
+.PHONY: all clean distclean install $(SUBDIRS)
--
2.43.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v3 1/4] tools: ynl: move python code to separate sub-directory
2024-12-16 10:41 ` [PATCH v3 1/4] tools: ynl: move python code to separate sub-directory Jan Stancek
@ 2024-12-16 13:45 ` Donald Hunter
0 siblings, 0 replies; 12+ messages in thread
From: Donald Hunter @ 2024-12-16 13:45 UTC (permalink / raw)
To: Jan Stancek
Cc: stfomichev, kuba, jdamato, pabeni, davem, edumazet, horms, netdev,
linux-kernel
On Mon, 16 Dec 2024 at 10:42, Jan Stancek <jstancek@redhat.com> wrote:
>
> Move python code to a separate directory so it can be
> packaged as a python module. Updates existing references
> in selftests and docs.
>
> Also rename ynl-gen-[c|rst] to ynl_gen_[c|rst], avoid
> dashes as these prevent easy imports for entrypoints.
>
> Signed-off-by: Jan Stancek <jstancek@redhat.com>
Reviewed-by: Donald Hunter <donald.hunter@gmail.com>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 2/4] tools: ynl: add initial pyproject.toml for packaging
2024-12-16 10:41 ` [PATCH v3 2/4] tools: ynl: add initial pyproject.toml for packaging Jan Stancek
@ 2024-12-16 13:52 ` Donald Hunter
2025-01-06 11:57 ` Jan Stancek
0 siblings, 1 reply; 12+ messages in thread
From: Donald Hunter @ 2024-12-16 13:52 UTC (permalink / raw)
To: Jan Stancek
Cc: stfomichev, kuba, jdamato, pabeni, davem, edumazet, horms, netdev,
linux-kernel
Jan Stancek <jstancek@redhat.com> writes:
> Signed-off-by: Jan Stancek <jstancek@redhat.com>
nit: missing patch description
> ---
> tools/net/ynl/pyproject.toml | 26 ++++++++++++++++++++++++++
> 1 file changed, 26 insertions(+)
> create mode 100644 tools/net/ynl/pyproject.toml
>
> diff --git a/tools/net/ynl/pyproject.toml b/tools/net/ynl/pyproject.toml
> new file mode 100644
> index 000000000000..677ea8f4c185
> --- /dev/null
> +++ b/tools/net/ynl/pyproject.toml
> @@ -0,0 +1,26 @@
> +[build-system]
> +requires = ["setuptools>=61.0"]
> +build-backend = "setuptools.build_meta"
> +
> +[project]
> +name = "pyynl"
> +authors = [
> + {name = "Donald Hunter", email = "donald.hunter@gmail.com"},
> + {name = "Jakub Kicinski", email = "kuba@kernel.org"},
> +]
> +description = "yaml netlink (ynl)"
> +version = "0.0.1"
> +requires-python = ">=3.9"
> +dependencies = [
> + "pyyaml==6.*",
> + "jsonschema==4.*"
> +]
> +
> +[tool.setuptools.packages.find]
> +include = ["pyynl", "pyynl.lib"]
> +
> +[project.scripts]
> +ynl = "pyynl.cli:main"
> +ynl-ethtool = "pyynl.ethtool:main"
> +ynl-gen-c = "pyynl.ynl_gen_c:main"
> +ynl-gen-rst = "pyynl.ynl_gen_rst:main"
I'm not sure if we want to install ynl-gen-c or ynl-gen-rst since they
are for in-tree use.
Thoughts?
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 3/4] tools: ynl: add install target for generated content
2024-12-16 10:41 ` [PATCH v3 3/4] tools: ynl: add install target for generated content Jan Stancek
@ 2024-12-16 14:01 ` Donald Hunter
2025-01-06 11:35 ` Jan Stancek
0 siblings, 1 reply; 12+ messages in thread
From: Donald Hunter @ 2024-12-16 14:01 UTC (permalink / raw)
To: Jan Stancek
Cc: stfomichev, kuba, jdamato, pabeni, davem, edumazet, horms, netdev,
linux-kernel
Jan Stancek <jstancek@redhat.com> writes:
> Generate docs using ynl_gen_rst and add install target for
> headers, specs and generates rst files.
>
> Signed-off-by: Jan Stancek <jstancek@redhat.com>
> ---
> tools/net/ynl/generated/.gitignore | 1 +
> tools/net/ynl/generated/Makefile | 40 +++++++++++++++++++++++++++---
> 2 files changed, 38 insertions(+), 3 deletions(-)
>
> diff --git a/tools/net/ynl/generated/.gitignore b/tools/net/ynl/generated/.gitignore
> index ade488626d26..859a6fb446e1 100644
> --- a/tools/net/ynl/generated/.gitignore
> +++ b/tools/net/ynl/generated/.gitignore
> @@ -1,2 +1,3 @@
> *-user.c
> *-user.h
> +*.rst
> diff --git a/tools/net/ynl/generated/Makefile b/tools/net/ynl/generated/Makefile
> index 00af721b1571..208f7fead784 100644
> --- a/tools/net/ynl/generated/Makefile
> +++ b/tools/net/ynl/generated/Makefile
> @@ -7,12 +7,19 @@ ifeq ("$(DEBUG)","1")
> CFLAGS += -g -fsanitize=address -fsanitize=leak -static-libasan
> endif
>
> +INSTALL ?= install
nit: mix of tabs and spaces here
> +prefix ?= /usr
> +datarootdir ?= $(prefix)/share
> +docdir ?= $(datarootdir)/doc
> +includedir ?= $(prefix)/include
> +
> include ../Makefile.deps
>
> YNL_GEN_ARG_ethtool:=--user-header linux/ethtool_netlink.h \
> --exclude-op stats-get
>
> TOOL:=../pyynl/ynl_gen_c.py
> +TOOL_RST:=../pyynl/ynl_gen_rst.py
>
> GENS_PATHS=$(shell grep -nrI --files-without-match \
> 'protocol: netlink' \
> @@ -22,7 +29,11 @@ SRCS=$(patsubst %,%-user.c,${GENS})
> HDRS=$(patsubst %,%-user.h,${GENS})
> OBJS=$(patsubst %,%-user.o,${GENS})
>
> -all: protos.a $(HDRS) $(SRCS) $(KHDRS) $(KSRCS) $(UAPI)
> +SPECS_PATHS=$(wildcard ../../../../Documentation/netlink/specs/*.yaml)
You missed Jakub's request to factor out SPECS_DIR:
Maybe factor out:
SPECS_DIR := ../../../../Documentation/netlink/specs
? It's pretty long and we repeat it all over the place.
> +SPECS=$(patsubst ../../../../Documentation/netlink/specs/%.yaml,%,${SPECS_PATHS})
> +RSTS=$(patsubst %,%.rst,${SPECS})
> +
> +all: protos.a $(HDRS) $(SRCS) $(KHDRS) $(KSRCS) $(UAPI) $(RSTS)
>
> protos.a: $(OBJS)
> @echo -e "\tAR $@"
> @@ -40,8 +51,12 @@ protos.a: $(OBJS)
> @echo -e "\tCC $@"
> @$(COMPILE.c) $(CFLAGS_$*) -o $@ $<
>
> +%.rst: ../../../../Documentation/netlink/specs/%.yaml $(TOOL2)
Did you miss Jakub's review comment: TOOL2 -> TOOL_RST ?
> + @echo -e "\tGEN_RST $@"
> + @$(TOOL_RST) -o $@ -i $<
> +
> clean:
> - rm -f *.o
> + rm -f *.o *.rst
Also Jakub's comment:
No strong preference but I'd count .rst as final artifacts so I'd clean
them up in distclean target only, not the clean target. The distinction
itself may be a local custom..
> distclean: clean
> rm -f *.c *.h *.a
> @@ -49,5 +64,24 @@ distclean: clean
> regen:
> @../ynl-regen.sh
>
> -.PHONY: all clean distclean regen
> +install-headers: $(HDRS)
> + @echo -e "\tINSTALL generated headers"
> + @$(INSTALL) -d $(DESTDIR)$(includedir)/ynl
> + @$(INSTALL) -m 0644 *.h $(DESTDIR)$(includedir)/ynl/
> +
> +install-rsts: $(RSTS)
> + @echo -e "\tINSTALL generated docs"
> + @$(INSTALL) -d $(DESTDIR)$(docdir)/ynl
> + @$(INSTALL) -m 0644 $(RSTS) $(DESTDIR)$(docdir)/ynl/
> +
> +install-specs:
> + @echo -e "\tINSTALL specs"
> + @$(INSTALL) -d $(DESTDIR)$(datarootdir)/ynl
> + @$(INSTALL) -m 0644 ../../../../Documentation/netlink/*.yaml $(DESTDIR)$(datarootdir)/ynl/
> + @$(INSTALL) -d $(DESTDIR)$(datarootdir)/ynl/specs
> + @$(INSTALL) -m 0644 ../../../../Documentation/netlink/specs/*.yaml $(DESTDIR)$(datarootdir)/ynl/specs/
> +
> +install: install-headers install-rsts install-specs
> +
> +.PHONY: all clean distclean regen install install-headers install-rsts install-specs
> .DEFAULT_GOAL: all
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 4/4] tools: ynl: add main install target
2024-12-16 10:41 ` [PATCH v3 4/4] tools: ynl: add main install target Jan Stancek
@ 2024-12-16 14:09 ` Donald Hunter
2024-12-16 22:58 ` Joe Damato
1 sibling, 0 replies; 12+ messages in thread
From: Donald Hunter @ 2024-12-16 14:09 UTC (permalink / raw)
To: Jan Stancek
Cc: stfomichev, kuba, jdamato, pabeni, davem, edumazet, horms, netdev,
linux-kernel
Jan Stancek <jstancek@redhat.com> writes:
> This will install C library, specs, rsts and pyynl. The initial
> structure is:
>
> $ mkdir /tmp/myroot
> $ make DESTDIR=/tmp/myroot install
>
> /usr
> /usr/lib64
> /usr/lib64/libynl.a
> /usr/lib/python3.XX/site-packages/pyynl/*
> /usr/lib/python3.XX/site-packages/pyynl-0.0.1.dist-info/*
> /usr/bin
> /usr/bin/ynl
> /usr/bin/ynl-ethtool
> /usr/bin/ynl-gen-c
> /usr/bin/ynl-gen-rst
> /usr/include/ynl/*.h
> /usr/share
> /usr/share/doc
> /usr/share/doc/ynl
> /usr/share/doc/ynl/*.rst
> /usr/share/ynl
> /usr/share/ynl/genetlink-c.yaml
> /usr/share/ynl/genetlink-legacy.yaml
> /usr/share/ynl/genetlink.yaml
> /usr/share/ynl/netlink-raw.yaml
> /usr/share/ynl/specs
> /usr/share/ynl/specs/devlink.yaml
> /usr/share/ynl/specs/dpll.yaml
> /usr/share/ynl/specs/ethtool.yaml
> /usr/share/ynl/specs/fou.yaml
> /usr/share/ynl/specs/handshake.yaml
> /usr/share/ynl/specs/mptcp_pm.yaml
> /usr/share/ynl/specs/netdev.yaml
> /usr/share/ynl/specs/net_shaper.yaml
> /usr/share/ynl/specs/nfsd.yaml
> /usr/share/ynl/specs/nftables.yaml
> /usr/share/ynl/specs/nlctrl.yaml
> /usr/share/ynl/specs/ovs_datapath.yaml
> /usr/share/ynl/specs/ovs_flow.yaml
> /usr/share/ynl/specs/ovs_vport.yaml
> /usr/share/ynl/specs/rt_addr.yaml
> /usr/share/ynl/specs/rt_link.yaml
> /usr/share/ynl/specs/rt_neigh.yaml
> /usr/share/ynl/specs/rt_route.yaml
> /usr/share/ynl/specs/rt_rule.yaml
> /usr/share/ynl/specs/tcp_metrics.yaml
> /usr/share/ynl/specs/tc.yaml
> /usr/share/ynl/specs/team.yaml
>
> Signed-off-by: Jan Stancek <jstancek@redhat.com>
Reviewed-by: Donald Hunter <donald.hunter@gmail.com>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 4/4] tools: ynl: add main install target
2024-12-16 10:41 ` [PATCH v3 4/4] tools: ynl: add main install target Jan Stancek
2024-12-16 14:09 ` Donald Hunter
@ 2024-12-16 22:58 ` Joe Damato
1 sibling, 0 replies; 12+ messages in thread
From: Joe Damato @ 2024-12-16 22:58 UTC (permalink / raw)
To: Jan Stancek
Cc: donald.hunter, stfomichev, kuba, pabeni, davem, edumazet, horms,
netdev, linux-kernel
On Mon, Dec 16, 2024 at 11:41:44AM +0100, Jan Stancek wrote:
> This will install C library, specs, rsts and pyynl. The initial
> structure is:
>
> $ mkdir /tmp/myroot
> $ make DESTDIR=/tmp/myroot install
>
> /usr
> /usr/lib64
> /usr/lib64/libynl.a
> /usr/lib/python3.XX/site-packages/pyynl/*
> /usr/lib/python3.XX/site-packages/pyynl-0.0.1.dist-info/*
> /usr/bin
> /usr/bin/ynl
> /usr/bin/ynl-ethtool
> /usr/bin/ynl-gen-c
> /usr/bin/ynl-gen-rst
> /usr/include/ynl/*.h
[...]
Thanks for including the headers and doing all of this work.
I tested this on my machine using one of the sample C files and it
seemed to work:
mkdir -p /tmp/myroot/local-inc/linux
make DESTDIR=/tmp/myroot -C tools/net/ynl/ install
cp /usr/src/linux-headers-`uname -r`/include/uapi/linux/netdev.h \
/tmp/myroot/local-inc/linux
cp tools/net/ynl/samples/netdev.c /tmp/
cd /tmp
gcc -I./myroot/local-inc/ -I myroot/usr/include/ynl/ -o netdev netdev.c -L/tmp/myroot/usr/lib64/ -lynl
./netdev
Select ifc ($ifindex; or 0 = dump; or -2 ntf check):
Reviewed-by: Joe Damato <jdamato@fastly.com>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 3/4] tools: ynl: add install target for generated content
2024-12-16 14:01 ` Donald Hunter
@ 2025-01-06 11:35 ` Jan Stancek
0 siblings, 0 replies; 12+ messages in thread
From: Jan Stancek @ 2025-01-06 11:35 UTC (permalink / raw)
To: Donald Hunter
Cc: stfomichev, kuba, jdamato, pabeni, davem, edumazet, horms, netdev,
linux-kernel
On Mon, Dec 16, 2024 at 3:10 PM Donald Hunter <donald.hunter@gmail.com> wrote:
>
> Jan Stancek <jstancek@redhat.com> writes:
>
> > Generate docs using ynl_gen_rst and add install target for
> > headers, specs and generates rst files.
> >
> > Signed-off-by: Jan Stancek <jstancek@redhat.com>
> > ---
> > tools/net/ynl/generated/.gitignore | 1 +
> > tools/net/ynl/generated/Makefile | 40 +++++++++++++++++++++++++++---
> > 2 files changed, 38 insertions(+), 3 deletions(-)
> >
> > diff --git a/tools/net/ynl/generated/.gitignore b/tools/net/ynl/generated/.gitignore
> > index ade488626d26..859a6fb446e1 100644
> > --- a/tools/net/ynl/generated/.gitignore
> > +++ b/tools/net/ynl/generated/.gitignore
> > @@ -1,2 +1,3 @@
> > *-user.c
> > *-user.h
> > +*.rst
> > diff --git a/tools/net/ynl/generated/Makefile b/tools/net/ynl/generated/Makefile
> > index 00af721b1571..208f7fead784 100644
> > --- a/tools/net/ynl/generated/Makefile
> > +++ b/tools/net/ynl/generated/Makefile
> > @@ -7,12 +7,19 @@ ifeq ("$(DEBUG)","1")
> > CFLAGS += -g -fsanitize=address -fsanitize=leak -static-libasan
> > endif
> >
> > +INSTALL ?= install
>
> nit: mix of tabs and spaces here
>
> > +prefix ?= /usr
> > +datarootdir ?= $(prefix)/share
> > +docdir ?= $(datarootdir)/doc
> > +includedir ?= $(prefix)/include
> > +
> > include ../Makefile.deps
> >
> > YNL_GEN_ARG_ethtool:=--user-header linux/ethtool_netlink.h \
> > --exclude-op stats-get
> >
> > TOOL:=../pyynl/ynl_gen_c.py
> > +TOOL_RST:=../pyynl/ynl_gen_rst.py
> >
> > GENS_PATHS=$(shell grep -nrI --files-without-match \
> > 'protocol: netlink' \
> > @@ -22,7 +29,11 @@ SRCS=$(patsubst %,%-user.c,${GENS})
> > HDRS=$(patsubst %,%-user.h,${GENS})
> > OBJS=$(patsubst %,%-user.o,${GENS})
> >
> > -all: protos.a $(HDRS) $(SRCS) $(KHDRS) $(KSRCS) $(UAPI)
> > +SPECS_PATHS=$(wildcard ../../../../Documentation/netlink/specs/*.yaml)
>
> You missed Jakub's request to factor out SPECS_DIR:
>
> Maybe factor out:
>
> SPECS_DIR := ../../../../Documentation/netlink/specs
>
> ? It's pretty long and we repeat it all over the place.
>
> > +SPECS=$(patsubst ../../../../Documentation/netlink/specs/%.yaml,%,${SPECS_PATHS})
> > +RSTS=$(patsubst %,%.rst,${SPECS})
> > +
> > +all: protos.a $(HDRS) $(SRCS) $(KHDRS) $(KSRCS) $(UAPI) $(RSTS)
> >
> > protos.a: $(OBJS)
> > @echo -e "\tAR $@"
> > @@ -40,8 +51,12 @@ protos.a: $(OBJS)
> > @echo -e "\tCC $@"
> > @$(COMPILE.c) $(CFLAGS_$*) -o $@ $<
> >
> > +%.rst: ../../../../Documentation/netlink/specs/%.yaml $(TOOL2)
>
> Did you miss Jakub's review comment: TOOL2 -> TOOL_RST ?
It seems I did miss his entire email. I'll double check with lore
archives before sending out v4.
Jan
>
> > + @echo -e "\tGEN_RST $@"
> > + @$(TOOL_RST) -o $@ -i $<
> > +
> > clean:
> > - rm -f *.o
> > + rm -f *.o *.rst
>
> Also Jakub's comment:
>
> No strong preference but I'd count .rst as final artifacts so I'd clean
> them up in distclean target only, not the clean target. The distinction
> itself may be a local custom..
>
> > distclean: clean
> > rm -f *.c *.h *.a
> > @@ -49,5 +64,24 @@ distclean: clean
> > regen:
> > @../ynl-regen.sh
> >
> > -.PHONY: all clean distclean regen
> > +install-headers: $(HDRS)
> > + @echo -e "\tINSTALL generated headers"
> > + @$(INSTALL) -d $(DESTDIR)$(includedir)/ynl
> > + @$(INSTALL) -m 0644 *.h $(DESTDIR)$(includedir)/ynl/
> > +
> > +install-rsts: $(RSTS)
> > + @echo -e "\tINSTALL generated docs"
> > + @$(INSTALL) -d $(DESTDIR)$(docdir)/ynl
> > + @$(INSTALL) -m 0644 $(RSTS) $(DESTDIR)$(docdir)/ynl/
> > +
> > +install-specs:
> > + @echo -e "\tINSTALL specs"
> > + @$(INSTALL) -d $(DESTDIR)$(datarootdir)/ynl
> > + @$(INSTALL) -m 0644 ../../../../Documentation/netlink/*.yaml $(DESTDIR)$(datarootdir)/ynl/
> > + @$(INSTALL) -d $(DESTDIR)$(datarootdir)/ynl/specs
> > + @$(INSTALL) -m 0644 ../../../../Documentation/netlink/specs/*.yaml $(DESTDIR)$(datarootdir)/ynl/specs/
> > +
> > +install: install-headers install-rsts install-specs
> > +
> > +.PHONY: all clean distclean regen install install-headers install-rsts install-specs
> > .DEFAULT_GOAL: all
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 2/4] tools: ynl: add initial pyproject.toml for packaging
2024-12-16 13:52 ` Donald Hunter
@ 2025-01-06 11:57 ` Jan Stancek
0 siblings, 0 replies; 12+ messages in thread
From: Jan Stancek @ 2025-01-06 11:57 UTC (permalink / raw)
To: Donald Hunter
Cc: stfomichev, kuba, jdamato, pabeni, davem, edumazet, horms, netdev,
linux-kernel
On Mon, Dec 16, 2024 at 3:10 PM Donald Hunter <donald.hunter@gmail.com> wrote:
>
> Jan Stancek <jstancek@redhat.com> writes:
>
> > Signed-off-by: Jan Stancek <jstancek@redhat.com>
>
> nit: missing patch description
>
> > ---
> > tools/net/ynl/pyproject.toml | 26 ++++++++++++++++++++++++++
> > 1 file changed, 26 insertions(+)
> > create mode 100644 tools/net/ynl/pyproject.toml
> >
> > diff --git a/tools/net/ynl/pyproject.toml b/tools/net/ynl/pyproject.toml
> > new file mode 100644
> > index 000000000000..677ea8f4c185
> > --- /dev/null
> > +++ b/tools/net/ynl/pyproject.toml
> > @@ -0,0 +1,26 @@
> > +[build-system]
> > +requires = ["setuptools>=61.0"]
> > +build-backend = "setuptools.build_meta"
> > +
> > +[project]
> > +name = "pyynl"
> > +authors = [
> > + {name = "Donald Hunter", email = "donald.hunter@gmail.com"},
> > + {name = "Jakub Kicinski", email = "kuba@kernel.org"},
> > +]
> > +description = "yaml netlink (ynl)"
> > +version = "0.0.1"
> > +requires-python = ">=3.9"
> > +dependencies = [
> > + "pyyaml==6.*",
> > + "jsonschema==4.*"
> > +]
> > +
> > +[tool.setuptools.packages.find]
> > +include = ["pyynl", "pyynl.lib"]
> > +
> > +[project.scripts]
> > +ynl = "pyynl.cli:main"
> > +ynl-ethtool = "pyynl.ethtool:main"
> > +ynl-gen-c = "pyynl.ynl_gen_c:main"
> > +ynl-gen-rst = "pyynl.ynl_gen_rst:main"
>
> I'm not sure if we want to install ynl-gen-c or ynl-gen-rst since they
> are for in-tree use.
>
> Thoughts?
I haven't seen any downside and thought it might be useful for somebody,
but I'm happy to drop it.
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2025-01-06 11:57 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-16 10:41 [PATCH v3 0/4] tools: ynl: add install target Jan Stancek
2024-12-16 10:41 ` [PATCH v3 1/4] tools: ynl: move python code to separate sub-directory Jan Stancek
2024-12-16 13:45 ` Donald Hunter
2024-12-16 10:41 ` [PATCH v3 2/4] tools: ynl: add initial pyproject.toml for packaging Jan Stancek
2024-12-16 13:52 ` Donald Hunter
2025-01-06 11:57 ` Jan Stancek
2024-12-16 10:41 ` [PATCH v3 3/4] tools: ynl: add install target for generated content Jan Stancek
2024-12-16 14:01 ` Donald Hunter
2025-01-06 11:35 ` Jan Stancek
2024-12-16 10:41 ` [PATCH v3 4/4] tools: ynl: add main install target Jan Stancek
2024-12-16 14:09 ` Donald Hunter
2024-12-16 22:58 ` Joe Damato
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).