From: David Gibson <david-xT8FGy+AXnRB3Ne2BGzF6laj5H9X9Tb+@public.gmane.org>
To: Simon Glass <sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
Cc: Devicetree Compiler
<devicetree-compiler-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
Benjamin Bimmermann <b.bimmermann-LWAfsSFWpa4@public.gmane.org>,
Ulrich Langenbach
<ulrich.langenbach-srmvecZYGfHobmly5n/iKBvVK+yQ3ZXh@public.gmane.org>
Subject: Re: [PATCH v11 0/5] Introduce Python bindings for libfdt
Date: Tue, 21 Mar 2017 16:35:31 +1100 [thread overview]
Message-ID: <20170321053531.GA19078@umbus.fritz.box> (raw)
In-Reply-To: <20170317221434.15390-1-sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
[-- Attachment #1: Type: text/plain, Size: 6219 bytes --]
On Fri, Mar 17, 2017 at 04:14:29PM -0600, Simon Glass wrote:
> At present libfdt consists of only a C implementation. Many scripts are
> written using Python so it useful to have Python bindings for libfdt.
> Apparently this has never been attempted before, or if so I cannot find a
> reference.
>
> This series starts the process of adding this support, with just a
> bare-bones set of methods.
>
> The v11 series provides binding that can be used like this:
>
> fdt = libfdt.Fdt(open(fname).read())
> node = fdt.path_offset('/subnode@1')
> print fdt.get_prop(node, 'compatible')
> subnode = fdt.first_subnode(node, quiet=[libfdt.NOTFOUND])
> while subnode > 0:
> print fdt.get_name(subnode)
> subnode = fdt.next_subnode(subnode, quiet=[libfdt.NOTFOUND])
>
> This version includes a simple class for properties.
Applied to master. I made a small change in the last patch, so that
the error message when the python packages aren't installed is less
scary looking.
>
> Changes in v11:
> - Show test output always
>
> Changes in v10:
> - Show test output when there are failures
>
> Changes in v9:
> - Drop PYLIBFDT_CLEANFILES
> - Add _libfdt.so to PYLIBFDT_cleanfiles
> - Support 'make clean' properly with pylibfdt
> - Move run_tests.sh updates to this patch
> - Only run the pylibfdt tests automatically if we can build pylibfdt
> - Update commit message to reflect swig/Python.h detection
> - Update Makefile shell command to support dash shell
>
> Changes in v8:
> - Fix up setup.py name and author
> - Move QUITE_ALL into a single assignment
> - Drop fdt32_to_cpu()
> - Adjust fdt_get_property_by_offset() to rely on the typemap more
> - Move pylibfdt_copy_value(() functionality into a typemap
> - Add an fdt parameter to the [const] void * typemaps
> - Create an output typemap for struct fdt_property *
> - Drop the arg4 TODO comment
> - Avoid using hard-coded offsets (ROOT_PROPS)
> - Use types.ModuleType instead of type(str)
> - Compare exception number instead of using a regex
> - Avoid using hard-coded size
> - Drop testEndian()
> - Move the changes to run_tests.sh to a later commit
> - Add comments to testPropertyOffsetExceptions()
> - Drop all the namelen functions from the Python bindings
> - Only build pylibfdt if we have swig and Python.h
>
> Changes in v7:
> - Add QUIET_ALL to silence all exceptions
> - Add a test for QUIET_ALL
>
> Changes in v6:
> - Use a tuple instead of list for the default quiet parameter
> - Use a tuple instead of list for QUIET_NOTFOUND
> - Use 'list' instead of 'tuple' for the comment in check_err_null()
> - Return a bytearray from getprop()
> - Adjust the Property constructor to accept the name and value
> - Use uint8_t for pylibfdt_copy_value
> - Adjust tests to avoid checking a hard-coded offset
> - Use 0 instead of self.fdt.path_offset('/')
> - Adjust the totalsize() test to compare against the file size
> - Adjust test result processing to avoid using awk
> - Update example to print the node value as an integer
> - Update example to print the bytestring as well as the string
>
> Changes in v5:
> - Use a 'quiet' parameter instead of quiet versions of functions
> - Add a Property object to hold a property's name and value
> - Drop the data() and string() functions which are not needed now
> - Rename pylibfdt_copy_data() tp pylibfdt_copy_value()
> - Change order of libfdt.h inclusion to avoid #ifdef around libfdt macros
> - Drop fdt_offset_ptr() and fdt_getprop_namelen() from the swig interface
> - Use $(SWIG) to call swig from the Makefile
> - Review function comments
> - Adjust tests to match new swig bindings
> - Use an interactive session to demonstrate pylibfdt
> - Mention that more work remains
> - Update commit message
> - Drop #ifdef around fdt_get_header() macros
> - Fix 'possible' typo
>
> Changes in v4:
> - Make the library less pythonic to avoid a shaky illusion
> - Drop classes for Node and Prop, along with associated methods
> - Include libfdt.h instead of repeating it
> - Add support for fdt_getprop()
> - Bring in all libfdt functions (but Python support is missing for many)
> - Add full comments for Python methods
> - Drop tests that are no-longer applicable
> - Add a get for getprop()
> - Add new patch to adjust libfdt.h to work with swig
>
> Changes in v3:
> - Make the library more pythonic
> - Add classes for Node and Prop along with methods
> - Add an exception class
> - Use Python to generate exeptions instead of SWIG
> - Add some more tests
>
> Changes in v2:
> - Add exceptions when functions return an error
> - Correct Python naming to following PEP8
> - Use a class to encapsulate the various methods
> - Include fdt.h instead of redefining struct fdt_property
> - Use bytearray to avoid the SWIG warning 454
> - Add comments
> - Update tests for new pylibfdt
> - Add a few more tests to increase coverage
> - Add details on how to obtain full help and code coverage
>
> Simon Glass (5):
> Add an initial Python library for libfdt
> Add tests for pylibfdt
> Mention pylibfdt in the documentation
> Adjust libfdt.h to work with swig
> Build pylibfdt as part of the normal build process
>
> Makefile | 35 +++-
> README | 47 +++++
> libfdt/libfdt.h | 21 ++-
> pylibfdt/.gitignore | 3 +
> pylibfdt/Makefile.pylibfdt | 17 ++
> pylibfdt/libfdt.swig | 433 +++++++++++++++++++++++++++++++++++++++++++++
> pylibfdt/setup.py | 34 ++++
> tests/pylibfdt_tests.py | 288 ++++++++++++++++++++++++++++++
> tests/run_tests.sh | 28 +++
> 9 files changed, 903 insertions(+), 3 deletions(-)
> create mode 100644 pylibfdt/.gitignore
> create mode 100644 pylibfdt/Makefile.pylibfdt
> create mode 100644 pylibfdt/libfdt.swig
> create mode 100644 pylibfdt/setup.py
> create mode 100644 tests/pylibfdt_tests.py
>
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
next prev parent reply other threads:[~2017-03-21 5:35 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-17 22:14 [PATCH v11 0/5] Introduce Python bindings for libfdt Simon Glass
[not found] ` <20170317221434.15390-1-sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
2017-03-17 22:14 ` [PATCH v11 1/5] Add an initial Python library " Simon Glass
2017-03-17 22:14 ` [PATCH v11 2/5] Add tests for pylibfdt Simon Glass
2017-03-17 22:14 ` [PATCH v11 3/5] Mention pylibfdt in the documentation Simon Glass
2017-03-17 22:14 ` [PATCH v11 4/5] Adjust libfdt.h to work with swig Simon Glass
2017-03-17 22:14 ` [PATCH v11 5/5] Build pylibfdt as part of the normal build process Simon Glass
2017-03-21 5:35 ` David Gibson [this message]
[not found] ` <20170321053531.GA19078-K0bRW+63XPQe6aEkudXLsA@public.gmane.org>
2017-03-21 16:02 ` [PATCH v11 0/5] Introduce Python bindings for libfdt Simon Glass
[not found] ` <CAPnjgZ0WkRXRqQBx0W6QhMqROZtC=RTebdA0TBrEPidtxRV17A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-03-21 20:51 ` Simon Glass
2017-03-22 5:35 ` David Gibson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170321053531.GA19078@umbus.fritz.box \
--to=david-xt8fgy+axnrb3ne2bgzf6laj5h9x9tb+@public.gmane.org \
--cc=b.bimmermann-LWAfsSFWpa4@public.gmane.org \
--cc=devicetree-compiler-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org \
--cc=ulrich.langenbach-srmvecZYGfHobmly5n/iKBvVK+yQ3ZXh@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).