[oe] [meta-oe][PATCH] smem: use python 3

Max Krummenacher max.oss.09 at gmail.com
Wed Feb 5 16:57:41 UTC 2020


Hi André

Thanks for your patch. This seems more complete and should go in in favour
of this one.

No I didn't test with --source, I only tested using smem directly on the
embedded target
which worked well for all but the charting options.
I'm aware that the charting option gracefully declines to work when the
plugins you now
added with RRECOMMEND are missing.

Max

Am Mi., 5. Feb. 2020 um 17:39 Uhr schrieb André Draszik <git at andred.net>:

> Hi,
>
> Interestingly I had been looking at this today as well...
>
> On Wed, 2020-02-05 at 00:40 +0100, Max Krummenacher wrote:
> > There seems to be no user of python-textutils python-shell python-codecs
> > in the script, so these rdepends are dropped.
> >
> > On a i.MX6 based machine smem runs with just python3-compression and
> > its dependencies installed.
>
> Upstream has released v1.5 with almost complete python3 support.
> I'd say any patches should go on top of that.
>
> Also, I don't think smem --source= will work with your version? Did you
> test that?
>
> >
> > Signed-off-by: Max Krummenacher <max.krummenacher at toradex.com>
> > ---
> >  .../smem/0001-smem-convert-to-python-3.patch  | 161 ++++++++++++++++++
> >  meta-oe/recipes-support/smem/smem_1.4.bb      |   7 +-
> >  2 files changed, 166 insertions(+), 2 deletions(-)
> >  create mode 100644
> meta-oe/recipes-support/smem/smem/0001-smem-convert-to-python-3.patch
> >
> > diff --git
> a/meta-oe/recipes-support/smem/smem/0001-smem-convert-to-python-3.patch
> b/meta-oe/recipes-
> > support/smem/smem/0001-smem-convert-to-python-3.patch
> > new file mode 100644
> > index 000000000..85f35be44
> > --- /dev/null
> > +++
> b/meta-oe/recipes-support/smem/smem/0001-smem-convert-to-python-3.patch
> > @@ -0,0 +1,161 @@
> > +From 5535a524f6db57c0b2e4a539db733fd9e840c97e Mon Sep 17 00:00:00 2001
> > +From: Max Krummenacher <max.krummenacher at toradex.com>
> > +Date: Mon, 3 Feb 2020 21:04:42 +0000
> > +Subject: [PATCH] smem: convert to python 3
> > +
> > +Upstream-Status: Pending
> > +
> > +Signed-off-by: Max Krummenacher <max.krummenacher at toradex.com>
> > +---
> > + smem | 41 ++++++++++++++++++++++-------------------
> > + 1 file changed, 22 insertions(+), 19 deletions(-)
> > +
> > +diff --git a/smem b/smem
> > +index 0cbd925..577d27b 100755
> > +--- a/smem
> > ++++ b/smem
> > +@@ -1,4 +1,4 @@
> > +-#!/usr/bin/env python
> > ++#!/usr/bin/env python3
> > + #
> > + # smem - a tool for meaningful memory reporting
> > + #
> > +@@ -21,7 +21,10 @@ class procdata(object):
> > +     def _list(self):
> > +         return os.listdir(self.source + "/proc")
> > +     def _read(self, f):
> > +-        return file(self.source + '/proc/' + f).read()
> > ++        afile = open(self.source + '/proc/' + f)
> > ++        ret = afile.read()
> > ++        afile.close()
> > ++        return ret
> > +     def _readlines(self, f):
> > +         return self._read(f).splitlines(True)
> > +     def _stat(self, f):
> > +@@ -209,7 +212,7 @@ def fromunits(x):
> > +     s = dict(k=2**10, K=2**10, kB=2**10, KB=2**10,
> > +              M=2**20, MB=2**20, G=2**30, GB=2**30,
> > +              T=2**40, TB=2**40)
> > +-    for k,v in s.items():
> > ++    for k,v in list(s.items()):
> > +         if x.endswith(k):
> > +             return int(float(x[:-len(k)])*v)
> > +     sys.stderr.write("Memory size should be written with units, for
> example 1024M\n")
> > +@@ -240,7 +243,7 @@ def pidtotals(pid):
> > +     maps = pidmaps(pid)
> > +     t = dict(size=0, rss=0, pss=0, shared_clean=0, shared_dirty=0,
> > +              private_clean=0, private_dirty=0, referenced=0, swap=0)
> > +-    for m in maps.iterkeys():
> > ++    for m in maps.keys():
> > +         for k in t:
> > +             t[k] += maps[m].get(k, 0)
> > +
> > +@@ -296,7 +299,7 @@ def showpids():
> > +         )
> > +     columns = options.columns or 'pid user command swap uss pss rss'
> > +
> > +-    showtable(pt.keys(), fields, columns.split(), options.sort or
> 'pss')
> > ++    showtable(list(pt.keys()), fields, columns.split(), options.sort
> or 'pss')
> > +
> > + def maptotals(pids):
> > +     totals = {}
> > +@@ -307,7 +310,7 @@ def maptotals(pids):
> > +         try:
> > +             maps = pidmaps(pid)
> > +             seen = {}
> > +-            for m in maps.iterkeys():
> > ++            for m in maps.keys():
> > +                 name = maps[m]['name']
> > +                 if name not in totals:
> > +                     t = dict(size=0, rss=0, pss=0, shared_clean=0,
> > +@@ -361,7 +364,7 @@ def showmaps():
> > +         )
> > +     columns = options.columns or 'map pids avgpss pss'
> > +
> > +-    showtable(pt.keys(), fields, columns.split(), options.sort or
> 'pss')
> > ++    showtable(list(pt.keys()), fields, columns.split(), options.sort
> or 'pss')
> > +
> > + def usertotals(pids):
> > +     totals = {}
> > +@@ -383,7 +386,7 @@ def usertotals(pids):
> > +         else:
> > +             t = totals[user]
> > +
> > +-        for m in maps.iterkeys():
> > ++        for m in maps.keys():
> > +             for k in t:
> > +                 t[k] += maps[m].get(k, 0)
> > +
> > +@@ -419,7 +422,7 @@ def showusers():
> > +         )
> > +     columns = options.columns or 'user count swap uss pss rss'
> > +
> > +-    showtable(pt.keys(), fields, columns.split(), options.sort or
> 'pss')
> > ++    showtable(list(pt.keys()), fields, columns.split(), options.sort
> or 'pss')
> > +
> > + def showsystem():
> > +     t = totalmem()
> > +@@ -460,14 +463,14 @@ def showsystem():
> > +               'area not reclaimable'))
> > +
> > +     columns = options.columns or 'area used cache noncache'
> > +-    showtable(range(len(l)), fields, columns.split(), options.sort or
> 'order')
> > ++    showtable(list(range(len(l))), fields, columns.split(),
> options.sort or 'order')
> > +
> > + def showfields(fields, f):
> > +     if f != list:
> > +-        print "unknown field", f
> > +-    print "known fields:"
> > ++        print("unknown field", f)
> > ++    print("known fields:")
> > +     for l in sorted(fields.keys()):
> > +-        print "%-8s %s" % (l, fields[l][-1])
> > ++        print("%-8s %s" % (l, fields[l][-1]))
> > +
> > + def showtable(rows, fields, columns, sort):
> > +     header = ""
> > +@@ -518,10 +521,10 @@ def showtable(rows, fields, columns, sort):
> > +         return
> > +
> > +     if not options.no_header:
> > +-        print header
> > ++        print(header)
> > +
> > +     for k,r in l:
> > +-        print format % tuple([f(v) for f,v in zip(formatter, r)])
> > ++        print(format % tuple([f(v) for f,v in zip(formatter, r)]))
> > +
> > +     if options.totals:
> > +         # totals
> > +@@ -533,8 +536,8 @@ def showtable(rows, fields, columns, sort):
> > +             else:
> > +                 t.append("")
> > +
> > +-        print "-" * len(header)
> > +-        print format % tuple([f(v) for f,v in zip(formatter, t)])
> > ++        print("-" * len(header))
> > ++        print(format % tuple([f(v) for f,v in zip(formatter, t)]))
> > +
> > + def showpie(l, sort):
> > +     try:
> > +@@ -605,7 +608,7 @@ def showbar(l, columns, sort):
> > +
> > +     pl = []
> > +     ind = numpy.arange(len(l))
> > +-    for n in xrange(len(rc)):
> > ++    for n in range(len(rc)):
> > +         pl.append(pylab.bar(ind + offset + width * n,
> > +                              [x[1][rc[n]] for x in l], width,
> color=gc(n)))
> > +
> > +@@ -682,7 +685,7 @@ try:
> > +         showsystem()
> > +     else:
> > +         showpids()
> > +-except IOError, e:
> > ++except IOError as e:
> > +     if e.errno == errno.EPIPE:
> > +         pass
> > + except KeyboardInterrupt:
> > +--
> > +2.20.1
> > +
> > diff --git a/meta-oe/recipes-support/smem/smem_1.4.bb
> b/meta-oe/recipes-support/smem/smem_1.4.bb
> > index 947c47b0f..4728e6b79 100644
> > --- a/meta-oe/recipes-support/smem/smem_1.4.bb
> > +++ b/meta-oe/recipes-support/smem/smem_1.4.bb
> > @@ -9,7 +9,10 @@ SECTION = "Applications/System"
> >  LICENSE = "GPLv2+"
> >  LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
> >
> > -SRC_URI = "http://www.selenic.com/${BPN}/download/${BP}.tar.gz"
> > +SRC_URI = " \
> > +    http://www.selenic.com/${BPN}/download/${BP}.tar.gz \
> > +    file://0001-smem-convert-to-python-3.patch \
> > +"
> >  SRC_URI[md5sum] = "fe79435c3930389bfdb560255c802162"
> >  SRC_URI[sha256sum] =
> "2ea9f878f4cf3c276774c3f7e2a41977a1f2d64f98d2dcb6a15f1f3d84df61ec"
> >
> > @@ -24,7 +27,7 @@ do_install() {
> >          install -m 0755 ${S}/smemcap ${D}${bindir}/
> >          install -m 0644 ${S}/smem.8 ${D}/${mandir}/man8/
> >  }
> > -RDEPENDS_${PN} += "python-textutils python-compression python-shell
> python-codecs"
> > +RDEPENDS_${PN} += "python3-compression"
>
> smem also imports numpy and matplotlib (for graphs etc.)
>
> I've posted a different patch addressing all issues (I think).
>
>
> Cheers,
> Andre'
>
> >
> >  PACKAGES =+ "smemcap"
> >
> > --
> > 2.20.1
> >
>
> --
> _______________________________________________
> Openembedded-devel mailing list
> Openembedded-devel at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-devel
>


More information about the Openembedded-devel mailing list