mirror of
git://git.yoctoproject.org/meta-virtualization.git
synced 2025-07-19 12:50:22 +02:00
xen, xen-tools: update recipes for python3
Adds patches for packaged scripts to enable deployment with python3 where they have been ported to python 3 upstream. setuptools3 inherits distutils3 which modifies ${B}, so cd ${S} is needed in the do_configure, do_compile and do_install steps. Remove python 2 dependency from the Xen recipes by adding a new separate recipe, xen-python2, for packaging the remaining optional scripts which are yet to be ported to python 3. Package naming in the separate recipe is chosen to support transition back into the xen-tools recipe if the scripts are ported later. Use RSUGGESTS to support inclusion of the xen-python2 scripts in images that include python 2. Drop the remus package python dependency since the script was removed in 2014: commit 5b66f84e37a45038f9e5dae7a5768a5525d1e6ba Add python3 RDEPENDS needed to run xenmon. Signed-off-by: Christopher Clark <christopher.clark6@baesystems.com> Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
This commit is contained in:
parent
593df044c6
commit
f4eec68635
|
@ -13,11 +13,14 @@ Signed-off-by: Maciej Pijanowski <maciej.pijanowski@3mdeb.com>
|
|||
Forward-ported to Xen 4.12.0
|
||||
Signed-off-by: Christopher Clark <christopher.clark6@baesystems.com>
|
||||
|
||||
Modified to support pygrub installation with python 3
|
||||
Signed-off-by: Christopher Clark <christopher.clark6@baesystems.com>
|
||||
|
||||
diff --git a/tools/pygrub/Makefile b/tools/pygrub/Makefile
|
||||
index 3063c49..513314b 100644
|
||||
--- a/tools/pygrub/Makefile
|
||||
+++ b/tools/pygrub/Makefile
|
||||
@@ -10,14 +10,15 @@ INSTALL_LOG = build/installed_files.txt
|
||||
@@ -10,14 +10,17 @@ INSTALL_LOG = build/installed_files.txt
|
||||
all: build
|
||||
.PHONY: build
|
||||
build:
|
||||
|
@ -32,6 +35,8 @@ index 3063c49..513314b 100644
|
|||
- --root="$(DESTDIR)" --install-scripts=$(LIBEXEC_BIN) --force
|
||||
+ --root="$(DESTDIR)" --install-scripts=$(LIBEXEC_BIN) --force \
|
||||
+ $(DISTUTILS_INSTALL_ARGS)
|
||||
+ rm -f $(DESTDIR)/$(LIBEXEC_BIN)/pygrub
|
||||
+ $(INSTALL_PYTHON_PROG) src/pygrub $(DESTDIR)/$(LIBEXEC_BIN)/pygrub
|
||||
set -e; if [ $(bindir) != $(LIBEXEC_BIN) -a \
|
||||
"`readlink -f $(DESTDIR)/$(bindir)`" != \
|
||||
"`readlink -f $(LIBEXEC_BIN)`" ]; then \
|
||||
|
|
140
recipes-extended/xen/files/xen-tools-libxl-gentypes-py3.patch
Normal file
140
recipes-extended/xen/files/xen-tools-libxl-gentypes-py3.patch
Normal file
|
@ -0,0 +1,140 @@
|
|||
From 660d2dd863802ef464c90b32f187cb65861f8185 Mon Sep 17 00:00:00 2001
|
||||
From: Wei Liu <wei.liu2@citrix.com>
|
||||
Date: Thu, 7 Mar 2019 12:33:38 +0000
|
||||
Subject: [PATCH] libxl: make python scripts work with python 2.6 and up
|
||||
|
||||
Go through transformations suggested by 2to3 and pick the necessary
|
||||
ones.
|
||||
|
||||
Signed-off-by: Wei Liu <wei.liu2@citrix.com>
|
||||
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
||||
---
|
||||
tools/libxl/gentest.py | 4 +++-
|
||||
tools/libxl/gentypes.py | 12 +++++++-----
|
||||
tools/libxl/idl.py | 15 ++++++++-------
|
||||
3 files changed, 18 insertions(+), 13 deletions(-)
|
||||
|
||||
diff --git a/tools/libxl/gentest.py b/tools/libxl/gentest.py
|
||||
index 989959fc68..1cc7eebc82 100644
|
||||
--- a/tools/libxl/gentest.py
|
||||
+++ b/tools/libxl/gentest.py
|
||||
@@ -1,5 +1,7 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
+from __future__ import print_function
|
||||
+
|
||||
import os
|
||||
import sys
|
||||
import re
|
||||
@@ -86,7 +88,7 @@ def gen_rand_init(ty, v, indent = " ", parent = None):
|
||||
|
||||
if __name__ == '__main__':
|
||||
if len(sys.argv) < 3:
|
||||
- print >>sys.stderr, "Usage: gentest.py <idl> <implementation>"
|
||||
+ print("Usage: gentest.py <idl> <implementation>", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
random.seed(os.getenv('LIBXL_TESTIDL_SEED'))
|
||||
diff --git a/tools/libxl/gentypes.py b/tools/libxl/gentypes.py
|
||||
index 88e5c5f30e..6417c9dd8c 100644
|
||||
--- a/tools/libxl/gentypes.py
|
||||
+++ b/tools/libxl/gentypes.py
|
||||
@@ -1,5 +1,7 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
+from __future__ import print_function
|
||||
+
|
||||
import sys
|
||||
import re
|
||||
|
||||
@@ -576,14 +578,14 @@ def libxl_C_enum_from_string(ty, str, e, indent = " "):
|
||||
|
||||
if __name__ == '__main__':
|
||||
if len(sys.argv) != 6:
|
||||
- print >>sys.stderr, "Usage: gentypes.py <idl> <header> <header-private> <header-json> <implementation>"
|
||||
+ print("Usage: gentypes.py <idl> <header> <header-private> <header-json> <implementation>", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
(_, idlname, header, header_private, header_json, impl) = sys.argv
|
||||
|
||||
(builtins,types) = idl.parse(idlname)
|
||||
|
||||
- print "outputting libxl type definitions to %s" % header
|
||||
+ print("outputting libxl type definitions to %s" % header)
|
||||
|
||||
f = open(header, "w")
|
||||
|
||||
@@ -633,7 +635,7 @@ if __name__ == '__main__':
|
||||
f.write("""#endif /* %s */\n""" % (header_define))
|
||||
f.close()
|
||||
|
||||
- print "outputting libxl JSON definitions to %s" % header_json
|
||||
+ print("outputting libxl JSON definitions to %s" % header_json)
|
||||
|
||||
f = open(header_json, "w")
|
||||
|
||||
@@ -657,7 +659,7 @@ if __name__ == '__main__':
|
||||
f.write("""#endif /* %s */\n""" % header_json_define)
|
||||
f.close()
|
||||
|
||||
- print "outputting libxl type internal definitions to %s" % header_private
|
||||
+ print("outputting libxl type internal definitions to %s" % header_private)
|
||||
|
||||
f = open(header_private, "w")
|
||||
|
||||
@@ -683,7 +685,7 @@ if __name__ == '__main__':
|
||||
f.write("""#endif /* %s */\n""" % header_json_define)
|
||||
f.close()
|
||||
|
||||
- print "outputting libxl type implementations to %s" % impl
|
||||
+ print("outputting libxl type implementations to %s" % impl)
|
||||
|
||||
f = open(impl, "w")
|
||||
f.write("""
|
||||
diff --git a/tools/libxl/idl.py b/tools/libxl/idl.py
|
||||
index 2a7f3c44fe..d7367503b4 100644
|
||||
--- a/tools/libxl/idl.py
|
||||
+++ b/tools/libxl/idl.py
|
||||
@@ -1,3 +1,5 @@
|
||||
+from __future__ import print_function
|
||||
+
|
||||
import sys
|
||||
|
||||
PASS_BY_VALUE = 1
|
||||
@@ -11,7 +13,7 @@ DIR_BOTH = 3
|
||||
_default_namespace = ""
|
||||
def namespace(s):
|
||||
if type(s) != str:
|
||||
- raise TypeError, "Require a string for the default namespace."
|
||||
+ raise TypeError("Require a string for the default namespace.")
|
||||
global _default_namespace
|
||||
_default_namespace = s
|
||||
|
||||
@@ -346,7 +348,7 @@ class OrderedDict(dict):
|
||||
return [(x,self[x]) for x in self.__ordered]
|
||||
|
||||
def parse(f):
|
||||
- print >>sys.stderr, "Parsing %s" % f
|
||||
+ print("Parsing %s" % f, file=sys.stderr)
|
||||
|
||||
globs = {}
|
||||
locs = OrderedDict()
|
||||
@@ -362,11 +364,10 @@ def parse(f):
|
||||
globs[n] = t
|
||||
|
||||
try:
|
||||
- execfile(f, globs, locs)
|
||||
- except SyntaxError,e:
|
||||
- raise SyntaxError, \
|
||||
- "Errors were found at line %d while processing %s:\n\t%s"\
|
||||
- %(e.lineno,f,e.text)
|
||||
+ exec(compile(open(f).read(), f, 'exec'), globs, locs)
|
||||
+ except SyntaxError as e:
|
||||
+ raise SyntaxError("Errors were found at line %d while processing %s:\n\t%s"
|
||||
+ % (e.lineno, f, e.text))
|
||||
|
||||
types = [t for t in locs.ordered_values() if isinstance(t,Type)]
|
||||
|
||||
--
|
||||
2.17.1
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
From b9e1368af14ded6aee3bdf64e8329628b16291ff Mon Sep 17 00:00:00 2001
|
||||
From: Wei Liu <wei.liu2@citrix.com>
|
||||
Date: Mon, 11 Mar 2019 12:55:29 +0000
|
||||
Subject: [PATCH] pygrub: change tabs into spaces
|
||||
|
||||
Not sure why Python 2 never complained, but Python 3 does.
|
||||
|
||||
Change tabs to spaces.
|
||||
|
||||
Signed-off-by: Wei Liu <wei.liu2@citrix.com>
|
||||
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
||||
---
|
||||
tools/pygrub/src/pygrub | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/tools/pygrub/src/pygrub b/tools/pygrub/src/pygrub
|
||||
index 52a8965ad9..1189b1ca48 100755
|
||||
--- a/tools/pygrub/src/pygrub
|
||||
+++ b/tools/pygrub/src/pygrub
|
||||
@@ -858,7 +858,7 @@ if __name__ == "__main__":
|
||||
output_directory = a
|
||||
|
||||
if debug:
|
||||
- logging.basicConfig(level=logging.DEBUG)
|
||||
+ logging.basicConfig(level=logging.DEBUG)
|
||||
|
||||
|
||||
try:
|
||||
@@ -917,7 +917,7 @@ if __name__ == "__main__":
|
||||
# IOErrors raised by fsimage.open
|
||||
# RuntimeErrors raised by run_grub if no menu.lst present
|
||||
if debug:
|
||||
- traceback.print_exc()
|
||||
+ traceback.print_exc()
|
||||
fs = None
|
||||
continue
|
||||
|
||||
--
|
||||
2.17.1
|
||||
|
|
@ -0,0 +1,529 @@
|
|||
From 0aabd89dcfee9ee2a6caaa2ec7a475daf5cada53 Mon Sep 17 00:00:00 2001
|
||||
From: Wei Liu <wei.liu2@citrix.com>
|
||||
Date: Thu, 7 Mar 2019 12:45:47 +0000
|
||||
Subject: [PATCH] pygrub: make python scripts work with 2.6 and up
|
||||
|
||||
Run 2to3 and pick the sensible suggestions.
|
||||
|
||||
Import print_function and absolute_import so 2.6 can work.
|
||||
|
||||
There has never been a curses.wrapper module according to 2.x and 3.x
|
||||
doc, only a function, so "import curses.wrapper" is not correct. It
|
||||
happened to work because 2.x implemented a (undocumented) module.
|
||||
|
||||
We only need to import curses to make curses.wrapper available to
|
||||
pygrub.
|
||||
|
||||
Signed-off-by: Wei Liu <wei.liu2@citrix.com>
|
||||
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
||||
---
|
||||
tools/pygrub/src/ExtLinuxConf.py | 19 +++++----
|
||||
tools/pygrub/src/GrubConf.py | 39 ++++++++++--------
|
||||
tools/pygrub/src/LiloConf.py | 19 +++++----
|
||||
tools/pygrub/src/pygrub | 71 ++++++++++++++++----------------
|
||||
4 files changed, 78 insertions(+), 70 deletions(-)
|
||||
|
||||
diff --git a/tools/pygrub/src/ExtLinuxConf.py b/tools/pygrub/src/ExtLinuxConf.py
|
||||
index d1789bf020..9fd635b9cf 100644
|
||||
--- a/tools/pygrub/src/ExtLinuxConf.py
|
||||
+++ b/tools/pygrub/src/ExtLinuxConf.py
|
||||
@@ -10,9 +10,11 @@
|
||||
# along with this program; If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
+from __future__ import print_function, absolute_import
|
||||
+
|
||||
import sys, re, os
|
||||
import logging
|
||||
-import GrubConf
|
||||
+from . import GrubConf
|
||||
|
||||
class ExtLinuxImage(object):
|
||||
def __init__(self, lines, path):
|
||||
@@ -32,7 +34,8 @@ class ExtLinuxImage(object):
|
||||
self.lines = []
|
||||
self.path = path
|
||||
self.root = ""
|
||||
- map(self.set_from_line, lines)
|
||||
+ for line in lines:
|
||||
+ self.set_from_line(line)
|
||||
|
||||
def set_from_line(self, line, replace = None):
|
||||
(com, arg) = GrubConf.grub_exact_split(line, 2)
|
||||
@@ -67,7 +70,7 @@ class ExtLinuxImage(object):
|
||||
setattr(self, "initrd", a.replace("initrd=", ""))
|
||||
arg = arg.replace(a, "")
|
||||
|
||||
- if com is not None and self.commands.has_key(com):
|
||||
+ if com is not None and com in self.commands:
|
||||
if self.commands[com] is not None:
|
||||
setattr(self, self.commands[com], re.sub('^"(.+)"$', r"\1", arg.strip()))
|
||||
else:
|
||||
@@ -136,7 +139,7 @@ class ExtLinuxConfigFile(object):
|
||||
def parse(self, buf = None):
|
||||
if buf is None:
|
||||
if self.filename is None:
|
||||
- raise ValueError, "No config file defined to parse!"
|
||||
+ raise ValueError("No config file defined to parse!")
|
||||
|
||||
f = open(self.filename, 'r')
|
||||
lines = f.readlines()
|
||||
@@ -167,7 +170,7 @@ class ExtLinuxConfigFile(object):
|
||||
|
||||
(com, arg) = GrubConf.grub_exact_split(l, 2)
|
||||
com = com.lower()
|
||||
- if self.commands.has_key(com):
|
||||
+ if com in self.commands:
|
||||
if self.commands[com] is not None:
|
||||
setattr(self, self.commands[com], arg.strip())
|
||||
else:
|
||||
@@ -207,8 +210,8 @@ class ExtLinuxConfigFile(object):
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) < 2:
|
||||
- raise RuntimeError, "Need a configuration file to read"
|
||||
+ raise RuntimeError("Need a configuration file to read")
|
||||
g = ExtLinuxConfigFile(sys.argv[1])
|
||||
for i in g.images:
|
||||
- print i
|
||||
- print g.default
|
||||
+ print(i)
|
||||
+ print(g.default)
|
||||
diff --git a/tools/pygrub/src/GrubConf.py b/tools/pygrub/src/GrubConf.py
|
||||
index dc810d55cb..f8d3799dc0 100644
|
||||
--- a/tools/pygrub/src/GrubConf.py
|
||||
+++ b/tools/pygrub/src/GrubConf.py
|
||||
@@ -12,6 +12,8 @@
|
||||
# along with this program; If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
+from __future__ import print_function, absolute_import
|
||||
+
|
||||
import os, sys
|
||||
import logging
|
||||
import re
|
||||
@@ -44,7 +46,7 @@ def get_path(s):
|
||||
return (None, s)
|
||||
idx = s.find(')')
|
||||
if idx == -1:
|
||||
- raise ValueError, "Unable to find matching ')'"
|
||||
+ raise ValueError("Unable to find matching ')'")
|
||||
d = s[:idx]
|
||||
return (GrubDiskPart(d), s[idx + 1:])
|
||||
|
||||
@@ -100,7 +102,8 @@ class _GrubImage(object):
|
||||
" initrd: %s\n" %(self.title, self.root, self.kernel,
|
||||
self.args, self.initrd))
|
||||
def _parse(self, lines):
|
||||
- map(self.set_from_line, lines)
|
||||
+ for line in lines:
|
||||
+ self.set_from_line(line)
|
||||
|
||||
def reset(self, lines):
|
||||
self._root = self._initrd = self._kernel = self._args = None
|
||||
@@ -141,7 +144,7 @@ class GrubImage(_GrubImage):
|
||||
def set_from_line(self, line, replace = None):
|
||||
(com, arg) = grub_exact_split(line, 2)
|
||||
|
||||
- if self.commands.has_key(com):
|
||||
+ if com in self.commands:
|
||||
if self.commands[com] is not None:
|
||||
setattr(self, self.commands[com], arg.strip())
|
||||
else:
|
||||
@@ -177,7 +180,7 @@ class _GrubConfigFile(object):
|
||||
self.parse()
|
||||
|
||||
def parse(self, buf = None):
|
||||
- raise RuntimeError, "unimplemented parse function"
|
||||
+ raise RuntimeError("unimplemented parse function")
|
||||
|
||||
def hasPasswordAccess(self):
|
||||
return self.passwordAccess
|
||||
@@ -201,7 +204,7 @@ class _GrubConfigFile(object):
|
||||
import crypt
|
||||
if crypt.crypt(password, pwd[1]) == pwd[1]:
|
||||
return True
|
||||
- except Exception, e:
|
||||
+ except Exception as e:
|
||||
self.passExc = "Can't verify password: %s" % str(e)
|
||||
return False
|
||||
|
||||
@@ -213,7 +216,7 @@ class _GrubConfigFile(object):
|
||||
|
||||
def set(self, line):
|
||||
(com, arg) = grub_exact_split(line, 2)
|
||||
- if self.commands.has_key(com):
|
||||
+ if com in self.commands:
|
||||
if self.commands[com] is not None:
|
||||
setattr(self, self.commands[com], arg.strip())
|
||||
else:
|
||||
@@ -233,7 +236,7 @@ class _GrubConfigFile(object):
|
||||
self._default = val
|
||||
|
||||
if self._default < 0:
|
||||
- raise ValueError, "default must be positive number"
|
||||
+ raise ValueError("default must be positive number")
|
||||
default = property(_get_default, _set_default)
|
||||
|
||||
def set_splash(self, val):
|
||||
@@ -265,7 +268,7 @@ class GrubConfigFile(_GrubConfigFile):
|
||||
def parse(self, buf = None):
|
||||
if buf is None:
|
||||
if self.filename is None:
|
||||
- raise ValueError, "No config file defined to parse!"
|
||||
+ raise ValueError("No config file defined to parse!")
|
||||
|
||||
f = open(self.filename, 'r')
|
||||
lines = f.readlines()
|
||||
@@ -296,7 +299,7 @@ class GrubConfigFile(_GrubConfigFile):
|
||||
continue
|
||||
|
||||
(com, arg) = grub_exact_split(l, 2)
|
||||
- if self.commands.has_key(com):
|
||||
+ if com in self.commands:
|
||||
if self.commands[com] is not None:
|
||||
setattr(self, self.commands[com], arg.strip())
|
||||
else:
|
||||
@@ -328,7 +331,7 @@ class Grub2Image(_GrubImage):
|
||||
if com == "set":
|
||||
(com,arg) = grub2_handle_set(arg)
|
||||
|
||||
- if self.commands.has_key(com):
|
||||
+ if com in self.commands:
|
||||
if self.commands[com] is not None:
|
||||
setattr(self, self.commands[com], arg.strip())
|
||||
else:
|
||||
@@ -364,7 +367,7 @@ class Grub2ConfigFile(_GrubConfigFile):
|
||||
def parse(self, buf = None):
|
||||
if buf is None:
|
||||
if self.filename is None:
|
||||
- raise ValueError, "No config file defined to parse!"
|
||||
+ raise ValueError("No config file defined to parse!")
|
||||
|
||||
f = open(self.filename, 'r')
|
||||
lines = f.readlines()
|
||||
@@ -398,7 +401,7 @@ class Grub2ConfigFile(_GrubConfigFile):
|
||||
title_match = re.match('^menuentry ["\'](.*?)["\'] (.*){', l)
|
||||
if title_match:
|
||||
if img is not None:
|
||||
- raise RuntimeError, "syntax error: cannot nest menuentry (%d %s)" % (len(img),img)
|
||||
+ raise RuntimeError("syntax error: cannot nest menuentry (%d %s)" % (len(img),img))
|
||||
img = []
|
||||
title = title_match.group(1)
|
||||
continue
|
||||
@@ -413,7 +416,7 @@ class Grub2ConfigFile(_GrubConfigFile):
|
||||
menu_level -= 1
|
||||
continue
|
||||
else:
|
||||
- raise RuntimeError, "syntax error: closing brace without menuentry"
|
||||
+ raise RuntimeError("syntax error: closing brace without menuentry")
|
||||
|
||||
self.add_image(Grub2Image(title, img))
|
||||
img = None
|
||||
@@ -428,7 +431,7 @@ class Grub2ConfigFile(_GrubConfigFile):
|
||||
if com == "set":
|
||||
(com,arg) = grub2_handle_set(arg)
|
||||
|
||||
- if self.commands.has_key(com):
|
||||
+ if com in self.commands:
|
||||
if self.commands[com] is not None:
|
||||
arg_strip = arg.strip()
|
||||
if arg_strip == "${saved_entry}" or arg_strip == "${next_entry}":
|
||||
@@ -443,7 +446,7 @@ class Grub2ConfigFile(_GrubConfigFile):
|
||||
logging.warning("Unknown directive %s" %(com,))
|
||||
|
||||
if img is not None:
|
||||
- raise RuntimeError, "syntax error: end of file with open menuentry(%d %s)" % (len(img),img)
|
||||
+ raise RuntimeError("syntax error: end of file with open menuentry(%d %s)" % (len(img),img))
|
||||
|
||||
if self.hasPassword():
|
||||
self.setPasswordAccess(False)
|
||||
@@ -462,12 +465,12 @@ class Grub2ConfigFile(_GrubConfigFile):
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) < 3:
|
||||
- raise RuntimeError, "Need a grub version (\"grub\" or \"grub2\") and a grub.conf or grub.cfg to read"
|
||||
+ raise RuntimeError('Need a grub version ("grub" or "grub2") and a grub.conf or grub.cfg to read')
|
||||
if sys.argv[1] == "grub":
|
||||
g = GrubConfigFile(sys.argv[2])
|
||||
elif sys.argv[1] == "grub2":
|
||||
g = Grub2ConfigFile(sys.argv[2])
|
||||
else:
|
||||
- raise RuntimeError, "Unknown config type %s" % sys.argv[1]
|
||||
+ raise RuntimeError("Unknown config type %s" % sys.argv[1])
|
||||
for i in g.images:
|
||||
- print i #, i.title, i.root, i.kernel, i.args, i.initrd
|
||||
+ print(i) #, i.title, i.root, i.kernel, i.args, i.initrd
|
||||
diff --git a/tools/pygrub/src/LiloConf.py b/tools/pygrub/src/LiloConf.py
|
||||
index 2cb649f115..e3bfcb5244 100644
|
||||
--- a/tools/pygrub/src/LiloConf.py
|
||||
+++ b/tools/pygrub/src/LiloConf.py
|
||||
@@ -2,9 +2,11 @@
|
||||
#LiloConf.py
|
||||
#
|
||||
|
||||
+from __future__ import print_function, absolute_import
|
||||
+
|
||||
import sys, re, os
|
||||
import logging
|
||||
-import GrubConf
|
||||
+from . import GrubConf
|
||||
|
||||
class LiloImage(object):
|
||||
def __init__(self, lines, path):
|
||||
@@ -24,12 +26,13 @@ class LiloImage(object):
|
||||
self.lines = []
|
||||
self.path = path
|
||||
self.root = ""
|
||||
- map(self.set_from_line, lines)
|
||||
+ for line in lines:
|
||||
+ self.set_from_line(line)
|
||||
|
||||
def set_from_line(self, line, replace = None):
|
||||
(com, arg) = GrubConf.grub_exact_split(line, 2)
|
||||
|
||||
- if self.commands.has_key(com):
|
||||
+ if com in self.commands:
|
||||
if self.commands[com] is not None:
|
||||
setattr(self, self.commands[com], re.sub('^"(.+)"$', r"\1", arg.strip()))
|
||||
else:
|
||||
@@ -97,7 +100,7 @@ class LiloConfigFile(object):
|
||||
def parse(self, buf = None):
|
||||
if buf is None:
|
||||
if self.filename is None:
|
||||
- raise ValueError, "No config file defined to parse!"
|
||||
+ raise ValueError("No config file defined to parse!")
|
||||
|
||||
f = open(self.filename, 'r')
|
||||
lines = f.readlines()
|
||||
@@ -127,7 +130,7 @@ class LiloConfigFile(object):
|
||||
continue
|
||||
|
||||
(com, arg) = GrubConf.grub_exact_split(l, 2)
|
||||
- if self.commands.has_key(com):
|
||||
+ if com in self.commands:
|
||||
if self.commands[com] is not None:
|
||||
setattr(self, self.commands[com], arg.strip())
|
||||
else:
|
||||
@@ -170,8 +173,8 @@ class LiloConfigFile(object):
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) < 2:
|
||||
- raise RuntimeError, "Need a lilo.conf to read"
|
||||
+ raise RuntimeError("Need a lilo.conf to read")
|
||||
g = LiloConfigFile(sys.argv[1])
|
||||
for i in g.images:
|
||||
- print i #, i.title, i.root, i.kernel, i.args, i.initrd
|
||||
- print g.default
|
||||
+ print(i) #, i.title, i.root, i.kernel, i.args, i.initrd
|
||||
+ print(g.default)
|
||||
diff --git a/tools/pygrub/src/pygrub b/tools/pygrub/src/pygrub
|
||||
index 1189b1ca48..dbdce315c6 100755
|
||||
--- a/tools/pygrub/src/pygrub
|
||||
+++ b/tools/pygrub/src/pygrub
|
||||
@@ -12,13 +12,15 @@
|
||||
# along with this program; If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
+from __future__ import print_function
|
||||
+
|
||||
import os, sys, string, struct, tempfile, re, traceback, stat, errno
|
||||
import copy
|
||||
import logging
|
||||
import platform
|
||||
import xen.lowlevel.xc
|
||||
|
||||
-import curses, _curses, curses.wrapper, curses.textpad, curses.ascii
|
||||
+import curses, _curses, curses.textpad, curses.ascii
|
||||
import getopt
|
||||
|
||||
import xenfsimage
|
||||
@@ -77,7 +79,7 @@ def get_solaris_slice(file, offset):
|
||||
buf = os.read(fd, 512)
|
||||
os.close(fd)
|
||||
if struct.unpack("<H", buf[508:510])[0] != DKL_MAGIC:
|
||||
- raise RuntimeError, "Invalid disklabel magic"
|
||||
+ raise RuntimeError("Invalid disklabel magic")
|
||||
|
||||
nslices = struct.unpack("<H", buf[30:32])[0]
|
||||
|
||||
@@ -88,7 +90,7 @@ def get_solaris_slice(file, offset):
|
||||
if slicetag == V_ROOT:
|
||||
return slicesect * SECTOR_SIZE
|
||||
|
||||
- raise RuntimeError, "No root slice found"
|
||||
+ raise RuntimeError("No root slice found")
|
||||
|
||||
def get_fs_offset_gpt(file):
|
||||
fd = os.open(file, os.O_RDONLY)
|
||||
@@ -423,20 +425,17 @@ class Grub:
|
||||
we're being given a raw config file rather than a disk image."""
|
||||
|
||||
if not os.access(fn, os.R_OK):
|
||||
- raise RuntimeError, "Unable to access %s" %(fn,)
|
||||
+ raise RuntimeError("Unable to access %s" %(fn,))
|
||||
|
||||
- cfg_list = map(lambda x: (x,grub.GrubConf.Grub2ConfigFile),
|
||||
- ["/boot/grub/grub.cfg", "/grub/grub.cfg",
|
||||
- "/boot/grub2/grub.cfg", "/grub2/grub.cfg"]) + \
|
||||
- map(lambda x: (x,grub.ExtLinuxConf.ExtLinuxConfigFile),
|
||||
- ["/boot/isolinux/isolinux.cfg",
|
||||
+ cfg_list = [(x,grub.GrubConf.Grub2ConfigFile) for x in ["/boot/grub/grub.cfg", "/grub/grub.cfg",
|
||||
+ "/boot/grub2/grub.cfg", "/grub2/grub.cfg"]] + \
|
||||
+ [(x,grub.ExtLinuxConf.ExtLinuxConfigFile) for x in ["/boot/isolinux/isolinux.cfg",
|
||||
"/boot/extlinux/extlinux.conf",
|
||||
"/boot/extlinux.conf",
|
||||
"/extlinux/extlinux.conf",
|
||||
- "/extlinux.conf"]) + \
|
||||
- map(lambda x: (x,grub.GrubConf.GrubConfigFile),
|
||||
- ["/boot/grub/menu.lst", "/boot/grub/grub.conf",
|
||||
- "/grub/menu.lst", "/grub/grub.conf"])
|
||||
+ "/extlinux.conf"]] + \
|
||||
+ [(x,grub.GrubConf.GrubConfigFile) for x in ["/boot/grub/menu.lst", "/boot/grub/grub.conf",
|
||||
+ "/grub/menu.lst", "/grub/grub.conf"]]
|
||||
|
||||
if not fs:
|
||||
# set the config file and parse it
|
||||
@@ -448,12 +447,12 @@ class Grub:
|
||||
|
||||
for f,parser in cfg_list:
|
||||
if fs.file_exists(f):
|
||||
- print >>sys.stderr, "Using %s to parse %s" % (parser,f)
|
||||
+ print("Using %s to parse %s" % (parser,f), file=sys.stderr)
|
||||
self.cf = parser()
|
||||
self.cf.filename = f
|
||||
break
|
||||
if self.__dict__.get('cf', None) is None:
|
||||
- raise RuntimeError, "couldn't find bootloader config file in the image provided."
|
||||
+ raise RuntimeError("couldn't find bootloader config file in the image provided.")
|
||||
f = fs.open_file(self.cf.filename)
|
||||
# limit read size to avoid pathological cases
|
||||
buf = f.read(FS_READ_MAX)
|
||||
@@ -628,11 +627,11 @@ def run_grub(file, entry, fs, cfg_args):
|
||||
if list_entries:
|
||||
for i in range(len(g.cf.images)):
|
||||
img = g.cf.images[i]
|
||||
- print "title: %s" % img.title
|
||||
- print " root: %s" % img.root
|
||||
- print " kernel: %s" % img.kernel[1]
|
||||
- print " args: %s" % img.args
|
||||
- print " initrd: %s" % img.initrd[1]
|
||||
+ print("title: %s" % img.title)
|
||||
+ print(" root: %s" % img.root)
|
||||
+ print(" kernel: %s" % img.kernel[1])
|
||||
+ print(" args: %s" % img.args)
|
||||
+ print(" initrd: %s" % img.initrd[1])
|
||||
|
||||
if interactive and not list_entries:
|
||||
curses.wrapper(run_main)
|
||||
@@ -646,7 +645,7 @@ def run_grub(file, entry, fs, cfg_args):
|
||||
sel = idx
|
||||
|
||||
if sel == -1:
|
||||
- print "No kernel image selected!"
|
||||
+ print("No kernel image selected!")
|
||||
sys.exit(1)
|
||||
|
||||
try:
|
||||
@@ -731,7 +730,7 @@ def format_sxp(kernel, ramdisk, args):
|
||||
def format_simple(kernel, ramdisk, args, sep):
|
||||
for check in (kernel, ramdisk, args):
|
||||
if check is not None and sep in check:
|
||||
- raise RuntimeError, "simple format cannot represent delimiter-containing value"
|
||||
+ raise RuntimeError("simple format cannot represent delimiter-containing value")
|
||||
s = ("kernel %s" % kernel) + sep
|
||||
if ramdisk:
|
||||
s += ("ramdisk %s" % ramdisk) + sep
|
||||
@@ -744,7 +743,7 @@ if __name__ == "__main__":
|
||||
sel = None
|
||||
|
||||
def usage():
|
||||
- print >> sys.stderr, "Usage: %s [-q|--quiet] [-i|--interactive] [-l|--list-entries] [-n|--not-really] [--output=] [--kernel=] [--ramdisk=] [--args=] [--entry=] [--output-directory=] [--output-format=sxp|simple|simple0] [--offset=] <image>" %(sys.argv[0],)
|
||||
+ print("Usage: %s [-q|--quiet] [-i|--interactive] [-l|--list-entries] [-n|--not-really] [--output=] [--kernel=] [--ramdisk=] [--args=] [--entry=] [--output-directory=] [--output-format=sxp|simple|simple0] [--offset=] <image>" %(sys.argv[0],), file=sys.stderr)
|
||||
|
||||
def copy_from_image(fs, file_to_read, file_type, output_directory,
|
||||
not_really):
|
||||
@@ -755,8 +754,8 @@ if __name__ == "__main__":
|
||||
sys.exit("The requested %s file does not exist" % file_type)
|
||||
try:
|
||||
datafile = fs.open_file(file_to_read)
|
||||
- except Exception, e:
|
||||
- print >>sys.stderr, e
|
||||
+ except Exception as e:
|
||||
+ print(e, file=sys.stderr)
|
||||
sys.exit("Error opening %s in guest" % file_to_read)
|
||||
(tfd, ret) = tempfile.mkstemp(prefix="boot_"+file_type+".",
|
||||
dir=output_directory)
|
||||
@@ -769,8 +768,8 @@ if __name__ == "__main__":
|
||||
return ret
|
||||
try:
|
||||
os.write(tfd, data)
|
||||
- except Exception, e:
|
||||
- print >>sys.stderr, e
|
||||
+ except Exception as e:
|
||||
+ print(e, file=sys.stderr)
|
||||
os.close(tfd)
|
||||
os.unlink(ret)
|
||||
del datafile
|
||||
@@ -834,7 +833,7 @@ if __name__ == "__main__":
|
||||
try:
|
||||
part_offs = [ int(a) ]
|
||||
except ValueError:
|
||||
- print "offset value must be an integer"
|
||||
+ print("offset value must be an integer")
|
||||
usage()
|
||||
sys.exit(1)
|
||||
elif o in ("--entry",):
|
||||
@@ -847,13 +846,13 @@ if __name__ == "__main__":
|
||||
debug = True
|
||||
elif o in ("--output-format",):
|
||||
if a not in ["sxp", "simple", "simple0"]:
|
||||
- print "unknown output format %s" % a
|
||||
+ print("unknown output format %s" % a)
|
||||
usage()
|
||||
sys.exit(1)
|
||||
output_format = a
|
||||
elif o in ("--output-directory",):
|
||||
if not os.path.isdir(a):
|
||||
- print "%s is not an existing directory" % a
|
||||
+ print("%s is not an existing directory" % a)
|
||||
sys.exit(1)
|
||||
output_directory = a
|
||||
|
||||
@@ -862,8 +861,8 @@ if __name__ == "__main__":
|
||||
|
||||
|
||||
try:
|
||||
- os.makedirs(output_directory, 0700)
|
||||
- except OSError,e:
|
||||
+ os.makedirs(output_directory, 0o700)
|
||||
+ except OSError as e:
|
||||
if (e.errno == errno.EEXIST) and os.path.isdir(output_directory):
|
||||
pass
|
||||
else:
|
||||
@@ -877,10 +876,10 @@ if __name__ == "__main__":
|
||||
# debug
|
||||
if isconfig:
|
||||
chosencfg = run_grub(file, entry, fs, incfg["args"])
|
||||
- print " kernel: %s" % chosencfg["kernel"]
|
||||
+ print(" kernel: %s" % chosencfg["kernel"])
|
||||
if chosencfg["ramdisk"]:
|
||||
- print " initrd: %s" % chosencfg["ramdisk"]
|
||||
- print " args: %s" % chosencfg["args"]
|
||||
+ print(" initrd: %s" % chosencfg["ramdisk"])
|
||||
+ print(" args: %s" % chosencfg["args"])
|
||||
sys.exit(0)
|
||||
|
||||
# if boot filesystem is set then pass to fsimage.open
|
||||
@@ -926,7 +925,7 @@ if __name__ == "__main__":
|
||||
|
||||
# Did looping through partitions find us a kernel?
|
||||
if fs is None:
|
||||
- raise RuntimeError, "Unable to find partition containing kernel"
|
||||
+ raise RuntimeError("Unable to find partition containing kernel")
|
||||
|
||||
bootcfg["kernel"] = copy_from_image(fs, chosencfg["kernel"], "kernel",
|
||||
output_directory, not_really)
|
||||
--
|
||||
2.17.1
|
||||
|
233
recipes-extended/xen/files/xen-tools-pygrub-py3.patch
Normal file
233
recipes-extended/xen/files/xen-tools-pygrub-py3.patch
Normal file
|
@ -0,0 +1,233 @@
|
|||
From 83a204e6951c6358f995da3b60dd61224e9d41ac Mon Sep 17 00:00:00 2001
|
||||
From: Wei Liu <wei.liu2@citrix.com>
|
||||
Date: Tue, 5 Mar 2019 14:13:17 +0000
|
||||
Subject: [PATCH] pygrub/fsimage: make it work with python 3
|
||||
|
||||
With the help of two porting guides and cpython source code:
|
||||
|
||||
1. Use PyBytes to replace PyString counterparts.
|
||||
2. Use PyVarObject_HEAD_INIT.
|
||||
3. Remove usage of Py_FindMethod.
|
||||
4. Use new module initialisation routine.
|
||||
|
||||
For #3, Py_FindMethod was removed, yet an alternative wasn't
|
||||
documented. The code is the result of reverse-engineering cpython
|
||||
commit 6116d4a1d1
|
||||
|
||||
https://docs.python.org/3/howto/cporting.html
|
||||
http://python3porting.com/cextensions.html
|
||||
|
||||
Signed-off-by: Wei Liu <wei.liu2@citrix.com>
|
||||
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
||||
---
|
||||
tools/pygrub/src/fsimage/fsimage.c | 123 ++++++++++++++++-------------
|
||||
1 file changed, 69 insertions(+), 54 deletions(-)
|
||||
|
||||
diff --git a/tools/pygrub/src/fsimage/fsimage.c b/tools/pygrub/src/fsimage/fsimage.c
|
||||
index 780207791c..2ebbbe35df 100644
|
||||
--- a/tools/pygrub/src/fsimage/fsimage.c
|
||||
+++ b/tools/pygrub/src/fsimage/fsimage.c
|
||||
@@ -26,12 +26,6 @@
|
||||
#include <xenfsimage.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
-#if (PYTHON_API_VERSION >= 1011)
|
||||
-#define PY_PAD 0L,0L,0L,0L,0L,0L,0L,0L,0L,0L,0L,0L,0L,0L,0L,0L,0L,0L,0L,0L,0L,0L,0L,0L
|
||||
-#else
|
||||
-#define PY_PAD 0L,0L,0L,0L
|
||||
-#endif
|
||||
-
|
||||
typedef struct fsimage_fs {
|
||||
PyObject_HEAD
|
||||
fsi_t *fs;
|
||||
@@ -59,12 +53,24 @@ fsimage_file_read(fsimage_file_t *file, PyObject *args, PyObject *kwargs)
|
||||
|
||||
bufsize = size ? size : 4096;
|
||||
|
||||
- if ((buffer = PyString_FromStringAndSize(NULL, bufsize)) == NULL)
|
||||
+ buffer =
|
||||
+#if PY_MAJOR_VERSION < 3
|
||||
+ PyString_FromStringAndSize(NULL, bufsize);
|
||||
+#else
|
||||
+ PyBytes_FromStringAndSize(NULL, bufsize);
|
||||
+#endif
|
||||
+
|
||||
+ if (buffer == NULL)
|
||||
return (NULL);
|
||||
|
||||
while (1) {
|
||||
int err;
|
||||
- void *buf = PyString_AS_STRING(buffer) + bytesread;
|
||||
+ void *buf =
|
||||
+#if PY_MAJOR_VERSION < 3
|
||||
+ PyString_AS_STRING(buffer) + bytesread;
|
||||
+#else
|
||||
+ PyBytes_AS_STRING(buffer) + bytesread;
|
||||
+#endif
|
||||
|
||||
err = fsi_pread_file(file->file, buf, bufsize,
|
||||
bytesread + offset);
|
||||
@@ -84,12 +90,20 @@ fsimage_file_read(fsimage_file_t *file, PyObject *args, PyObject *kwargs)
|
||||
if (bufsize == 0)
|
||||
break;
|
||||
} else {
|
||||
+#if PY_MAJOR_VERSION < 3
|
||||
if (_PyString_Resize(&buffer, bytesread + bufsize) < 0)
|
||||
+#else
|
||||
+ if (_PyBytes_Resize(&buffer, bytesread + bufsize) < 0)
|
||||
+#endif
|
||||
return (NULL);
|
||||
}
|
||||
}
|
||||
|
||||
+#if PY_MAJOR_VERSION < 3
|
||||
_PyString_Resize(&buffer, bytesread);
|
||||
+#else
|
||||
+ _PyBytes_Resize(&buffer, bytesread);
|
||||
+#endif
|
||||
return (buffer);
|
||||
}
|
||||
|
||||
@@ -106,11 +120,13 @@ static struct PyMethodDef fsimage_file_methods[] = {
|
||||
{ NULL, NULL, 0, NULL }
|
||||
};
|
||||
|
||||
+#if PY_MAJOR_VERSION < 3
|
||||
static PyObject *
|
||||
fsimage_file_getattr(fsimage_file_t *file, char *name)
|
||||
{
|
||||
return (Py_FindMethod(fsimage_file_methods, (PyObject *)file, name));
|
||||
}
|
||||
+#endif
|
||||
|
||||
static void
|
||||
fsimage_file_dealloc(fsimage_file_t *file)
|
||||
@@ -123,29 +139,18 @@ fsimage_file_dealloc(fsimage_file_t *file)
|
||||
|
||||
static char fsimage_file_type__doc__[] = "Filesystem image file";
|
||||
PyTypeObject fsimage_file_type = {
|
||||
- PyObject_HEAD_INIT(&PyType_Type)
|
||||
- 0, /* ob_size */
|
||||
- "xenfsimage.file", /* tp_name */
|
||||
- sizeof(fsimage_file_t), /* tp_size */
|
||||
- 0, /* tp_itemsize */
|
||||
- (destructor) fsimage_file_dealloc, /* tp_dealloc */
|
||||
- 0, /* tp_print */
|
||||
- (getattrfunc) fsimage_file_getattr, /* tp_getattr */
|
||||
- 0, /* tp_setattr */
|
||||
- 0, /* tp_compare */
|
||||
- 0, /* tp_repr */
|
||||
- 0, /* tp_as_number */
|
||||
- 0, /* tp_as_sequence */
|
||||
- 0, /* tp_as_mapping */
|
||||
- 0, /* tp_hash */
|
||||
- 0, /* tp_call */
|
||||
- 0, /* tp_str */
|
||||
- 0, /* tp_getattro */
|
||||
- 0, /* tp_setattro */
|
||||
- 0, /* tp_as_buffer */
|
||||
- Py_TPFLAGS_DEFAULT, /* tp_flags */
|
||||
- fsimage_file_type__doc__,
|
||||
- PY_PAD
|
||||
+ PyVarObject_HEAD_INIT(&PyType_Type, 0)
|
||||
+ .tp_name = "xenfsimage.file",
|
||||
+ .tp_basicsize = sizeof(fsimage_file_t),
|
||||
+ .tp_dealloc = (destructor) fsimage_file_dealloc,
|
||||
+#if PY_MAJOR_VERSION < 3
|
||||
+ .tp_getattr = (getattrfunc) fsimage_file_getattr,
|
||||
+#endif
|
||||
+ .tp_flags = Py_TPFLAGS_DEFAULT,
|
||||
+ .tp_doc = fsimage_file_type__doc__,
|
||||
+#if PY_MAJOR_VERSION >= 3
|
||||
+ .tp_methods = fsimage_file_methods,
|
||||
+#endif
|
||||
};
|
||||
|
||||
static PyObject *
|
||||
@@ -208,11 +213,13 @@ static struct PyMethodDef fsimage_fs_methods[] = {
|
||||
{ NULL, NULL, 0, NULL }
|
||||
};
|
||||
|
||||
+#if PY_MAJOR_VERSION < 3
|
||||
static PyObject *
|
||||
fsimage_fs_getattr(fsimage_fs_t *fs, char *name)
|
||||
{
|
||||
return (Py_FindMethod(fsimage_fs_methods, (PyObject *)fs, name));
|
||||
}
|
||||
+#endif
|
||||
|
||||
static void
|
||||
fsimage_fs_dealloc (fsimage_fs_t *fs)
|
||||
@@ -225,29 +232,18 @@ fsimage_fs_dealloc (fsimage_fs_t *fs)
|
||||
PyDoc_STRVAR(fsimage_fs_type__doc__, "Filesystem image");
|
||||
|
||||
PyTypeObject fsimage_fs_type = {
|
||||
- PyObject_HEAD_INIT(&PyType_Type)
|
||||
- 0, /* ob_size */
|
||||
- "xenfsimage.fs", /* tp_name */
|
||||
- sizeof(fsimage_fs_t), /* tp_size */
|
||||
- 0, /* tp_itemsize */
|
||||
- (destructor) fsimage_fs_dealloc, /* tp_dealloc */
|
||||
- 0, /* tp_print */
|
||||
- (getattrfunc) fsimage_fs_getattr, /* tp_getattr */
|
||||
- 0, /* tp_setattr */
|
||||
- 0, /* tp_compare */
|
||||
- 0, /* tp_repr */
|
||||
- 0, /* tp_as_number */
|
||||
- 0, /* tp_as_sequence */
|
||||
- 0, /* tp_as_mapping */
|
||||
- 0, /* tp_hash */
|
||||
- 0, /* tp_call */
|
||||
- 0, /* tp_str */
|
||||
- 0, /* tp_getattro */
|
||||
- 0, /* tp_setattro */
|
||||
- 0, /* tp_as_buffer */
|
||||
- Py_TPFLAGS_DEFAULT, /* tp_flags */
|
||||
- fsimage_fs_type__doc__,
|
||||
- PY_PAD
|
||||
+ PyVarObject_HEAD_INIT(&PyType_Type, 0)
|
||||
+ .tp_name = "xenfsimage.fs",
|
||||
+ .tp_basicsize = sizeof(fsimage_fs_t),
|
||||
+ .tp_dealloc = (destructor) fsimage_fs_dealloc,
|
||||
+#if PY_MAJOR_VERSION < 3
|
||||
+ .tp_getattr = (getattrfunc) fsimage_fs_getattr,
|
||||
+#endif
|
||||
+ .tp_flags = Py_TPFLAGS_DEFAULT,
|
||||
+ .tp_doc = fsimage_fs_type__doc__,
|
||||
+#if PY_MAJOR_VERSION >= 3
|
||||
+ .tp_methods = fsimage_fs_methods,
|
||||
+#endif
|
||||
};
|
||||
|
||||
static PyObject *
|
||||
@@ -309,8 +305,27 @@ static struct PyMethodDef fsimage_module_methods[] = {
|
||||
{ NULL, NULL, 0, NULL }
|
||||
};
|
||||
|
||||
+#if PY_MAJOR_VERSION >= 3
|
||||
+static struct PyModuleDef fsimage_module_def = {
|
||||
+ PyModuleDef_HEAD_INIT,
|
||||
+ .m_name = "xenfsimage",
|
||||
+ .m_size = -1,
|
||||
+ .m_methods = fsimage_module_methods,
|
||||
+};
|
||||
+#endif
|
||||
+
|
||||
PyMODINIT_FUNC
|
||||
+#if PY_MAJOR_VERSION >= 3
|
||||
+PyInit_xenfsimage(void)
|
||||
+#else
|
||||
initxenfsimage(void)
|
||||
+#endif
|
||||
{
|
||||
+#if PY_MAJOR_VERSION < 3
|
||||
Py_InitModule("xenfsimage", fsimage_module_methods);
|
||||
+#else
|
||||
+ if (PyType_Ready(&fsimage_fs_type) < 0 || PyType_Ready(&fsimage_file_type) < 0)
|
||||
+ return NULL;
|
||||
+ return PyModule_Create(&fsimage_module_def);
|
||||
+#endif
|
||||
}
|
||||
--
|
||||
2.17.1
|
||||
|
|
@ -0,0 +1,136 @@
|
|||
From 88d703a361d34d75f81fc6d30b31d0abc8aa17eb Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?=
|
||||
<marmarek@invisiblethingslab.com>
|
||||
Date: Fri, 9 Aug 2019 03:01:36 +0100
|
||||
Subject: [PATCH] python: fix -Wsign-compare warnings
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Specifically:
|
||||
xen/lowlevel/xc/xc.c: In function ‘pyxc_domain_create’:
|
||||
xen/lowlevel/xc/xc.c:147:24: error: comparison of integer expressions of different signedness: ‘int’ and ‘long unsigned int’ [-Werror=sign-compare]
|
||||
147 | for ( i = 0; i < sizeof(xen_domain_handle_t); i++ )
|
||||
| ^
|
||||
xen/lowlevel/xc/xc.c: In function ‘pyxc_domain_sethandle’:
|
||||
xen/lowlevel/xc/xc.c:312:20: error: comparison of integer expressions of different signedness: ‘int’ and ‘long unsigned int’ [-Werror=sign-compare]
|
||||
312 | for ( i = 0; i < sizeof(xen_domain_handle_t); i++ )
|
||||
| ^
|
||||
xen/lowlevel/xc/xc.c: In function ‘pyxc_domain_getinfo’:
|
||||
xen/lowlevel/xc/xc.c:391:24: error: comparison of integer expressions of different signedness: ‘int’ and ‘long unsigned int’ [-Werror=sign-compare]
|
||||
391 | for ( j = 0; j < sizeof(xen_domain_handle_t); j++ )
|
||||
| ^
|
||||
xen/lowlevel/xc/xc.c: In function ‘pyxc_get_device_group’:
|
||||
xen/lowlevel/xc/xc.c:677:20: error: comparison of integer expressions of different signedness: ‘int’ and ‘uint32_t’ {aka ‘unsigned int’} [-Werror=sign-compare]
|
||||
677 | for ( i = 0; i < num_sdevs; i++ )
|
||||
| ^
|
||||
xen/lowlevel/xc/xc.c: In function ‘pyxc_physinfo’:
|
||||
xen/lowlevel/xc/xc.c:988:20: error: comparison of integer expressions of different signedness: ‘int’ and ‘long unsigned int’ [-Werror=sign-compare]
|
||||
988 | for ( i = 0; i < sizeof(pinfo.hw_cap)/4; i++ )
|
||||
| ^
|
||||
xen/lowlevel/xc/xc.c:994:20: error: comparison of integer expressions of different signedness: ‘int’ and ‘long unsigned int’ [-Werror=sign-compare]
|
||||
994 | for ( i = 0; i < ARRAY_SIZE(virtcaps_bits); i++ )
|
||||
| ^
|
||||
xen/lowlevel/xc/xc.c:998:24: error: comparison of integer expressions of different signedness: ‘int’ and ‘long unsigned int’ [-Werror=sign-compare]
|
||||
998 | for ( i = 0; i < ARRAY_SIZE(virtcaps_bits); i++ )
|
||||
| ^
|
||||
xen/lowlevel/xs/xs.c: In function ‘xspy_ls’:
|
||||
xen/lowlevel/xs/xs.c:191:23: error: comparison of integer expressions of different signedness: ‘int’ and ‘unsigned int’ [-Werror=sign-compare]
|
||||
191 | for (i = 0; i < xsval_n; i++)
|
||||
| ^
|
||||
xen/lowlevel/xs/xs.c: In function ‘xspy_get_permissions’:
|
||||
xen/lowlevel/xs/xs.c:297:23: error: comparison of integer expressions of different signedness: ‘int’ and ‘unsigned int’ [-Werror=sign-compare]
|
||||
297 | for (i = 0; i < perms_n; i++) {
|
||||
| ^
|
||||
cc1: all warnings being treated as errors
|
||||
|
||||
Use size_t for loop iterators where it's compared with sizeof() or
|
||||
similar construct.
|
||||
|
||||
Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
|
||||
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
|
||||
Modified to apply to Xen 4.12.2 by Christopher Clark
|
||||
Signed-off-by: Christopher Clark <christopher.clark6@baesystems.com>
|
||||
---
|
||||
tools/python/xen/lowlevel/xc/xc.c | 13 ++++++++-----
|
||||
tools/python/xen/lowlevel/xs/xs.c | 4 ++--
|
||||
2 files changed, 10 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/tools/python/xen/lowlevel/xc/xc.c b/tools/python/xen/lowlevel/xc/xc.c
|
||||
index 522cbe3b9c..188bfa34da 100644
|
||||
--- a/tools/python/xen/lowlevel/xc/xc.c
|
||||
+++ b/tools/python/xen/lowlevel/xc/xc.c
|
||||
@@ -117,7 +117,8 @@ static PyObject *pyxc_domain_create(XcObject *self,
|
||||
PyObject *kwds)
|
||||
{
|
||||
uint32_t dom = 0, target = 0;
|
||||
- int ret, i;
|
||||
+ int ret;
|
||||
+ size_t i;
|
||||
PyObject *pyhandle = NULL;
|
||||
struct xen_domctl_createdomain config = {
|
||||
.handle = {
|
||||
@@ -295,7 +296,7 @@ static PyObject *pyxc_vcpu_setaffinity(XcObject *self,
|
||||
|
||||
static PyObject *pyxc_domain_sethandle(XcObject *self, PyObject *args)
|
||||
{
|
||||
- int i;
|
||||
+ size_t i;
|
||||
uint32_t dom;
|
||||
PyObject *pyhandle;
|
||||
xen_domain_handle_t handle;
|
||||
@@ -336,7 +337,8 @@ static PyObject *pyxc_domain_getinfo(XcObject *self,
|
||||
PyObject *list, *info_dict, *pyhandle;
|
||||
|
||||
uint32_t first_dom = 0;
|
||||
- int max_doms = 1024, nr_doms, i, j;
|
||||
+ int max_doms = 1024, nr_doms, i;
|
||||
+ size_t j;
|
||||
xc_dominfo_t *info;
|
||||
|
||||
static char *kwd_list[] = { "first_dom", "max_doms", NULL };
|
||||
@@ -631,7 +633,8 @@ static PyObject *pyxc_get_device_group(XcObject *self,
|
||||
{
|
||||
uint32_t sbdf;
|
||||
uint32_t max_sdevs, num_sdevs;
|
||||
- int domid, seg, bus, dev, func, rc, i;
|
||||
+ int domid, seg, bus, dev, func, rc;
|
||||
+ size_t i;
|
||||
PyObject *Pystr;
|
||||
char *group_str;
|
||||
char dev_str[9];
|
||||
@@ -971,7 +974,7 @@ static PyObject *pyxc_physinfo(XcObject *self)
|
||||
{
|
||||
xc_physinfo_t pinfo;
|
||||
char cpu_cap[128], virt_caps[128], *p;
|
||||
- int i;
|
||||
+ size_t i;
|
||||
const char *virtcap_names[] = { "hvm", "hvm_directio" };
|
||||
|
||||
if ( xc_physinfo(self->xc_handle, &pinfo) != 0 )
|
||||
diff --git a/tools/python/xen/lowlevel/xs/xs.c b/tools/python/xen/lowlevel/xs/xs.c
|
||||
index 9a0acfc25c..ea50f86bc3 100644
|
||||
--- a/tools/python/xen/lowlevel/xs/xs.c
|
||||
+++ b/tools/python/xen/lowlevel/xs/xs.c
|
||||
@@ -186,7 +186,7 @@ static PyObject *xspy_ls(XsHandle *self, PyObject *args)
|
||||
Py_END_ALLOW_THREADS
|
||||
|
||||
if (xsval) {
|
||||
- int i;
|
||||
+ size_t i;
|
||||
PyObject *val = PyList_New(xsval_n);
|
||||
for (i = 0; i < xsval_n; i++)
|
||||
#if PY_MAJOR_VERSION >= 3
|
||||
@@ -276,7 +276,7 @@ static PyObject *xspy_get_permissions(XsHandle *self, PyObject *args)
|
||||
struct xs_handle *xh = xshandle(self);
|
||||
struct xs_permissions *perms;
|
||||
unsigned int perms_n = 0;
|
||||
- int i;
|
||||
+ size_t i;
|
||||
|
||||
xs_transaction_t th;
|
||||
char *thstr;
|
||||
--
|
||||
2.17.1
|
||||
|
|
@ -0,0 +1,140 @@
|
|||
From a9047a722ba5de38e7c1d762ffcfb74c36725fe2 Mon Sep 17 00:00:00 2001
|
||||
From: Andrew Cooper <andrew.cooper3@citrix.com>
|
||||
Date: Mon, 11 Mar 2019 19:18:40 +0000
|
||||
Subject: [PATCH] tools/xen-foreign: Update python scripts to be Py3 compatible
|
||||
|
||||
The issues are:
|
||||
* dict.has_key() was completely removed in Py3
|
||||
* dict.keys() is an iterable rather than list in Py3, so .sort() doesn't work.
|
||||
* list.sort(cmp=) was deprecated in Py2.4 and removed in Py3.
|
||||
|
||||
The has_key() issue is trivially fixed by switching to using the in keyword.
|
||||
The sorting issue could be trivially fixed, but take the opportunity to
|
||||
improve the code.
|
||||
|
||||
The reason for the sorting is to ensure that "unsigned long" gets replaced
|
||||
before "long", and the only reason sorting is necessary is because
|
||||
inttypes[arch] is needlessly a dictionary. Update inttypes[arch] to be a list
|
||||
of tuples rather than a dictionary, and process them in list order.
|
||||
|
||||
Reported-by: George Dunlap <george.dunlap@eu.citrix.com>
|
||||
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
||||
Acked-by: Wei Liu <wei.liu2@citrix.com>
|
||||
---
|
||||
tools/include/xen-foreign/mkchecker.py | 2 +-
|
||||
tools/include/xen-foreign/mkheader.py | 58 +++++++++++++-------------
|
||||
2 files changed, 29 insertions(+), 31 deletions(-)
|
||||
|
||||
diff --git a/tools/include/xen-foreign/mkchecker.py b/tools/include/xen-foreign/mkchecker.py
|
||||
index fdad869a91..199b0eebbc 100644
|
||||
--- a/tools/include/xen-foreign/mkchecker.py
|
||||
+++ b/tools/include/xen-foreign/mkchecker.py
|
||||
@@ -37,7 +37,7 @@ for struct in structs:
|
||||
f.write('\tprintf("%%-25s |", "%s");\n' % struct);
|
||||
for a in archs:
|
||||
s = struct + "_" + a;
|
||||
- if compat_arches.has_key(a):
|
||||
+ if a in compat_arches:
|
||||
compat = compat_arches[a]
|
||||
c = struct + "_" + compat;
|
||||
else:
|
||||
diff --git a/tools/include/xen-foreign/mkheader.py b/tools/include/xen-foreign/mkheader.py
|
||||
index 97e0c7a984..fb268f0dce 100644
|
||||
--- a/tools/include/xen-foreign/mkheader.py
|
||||
+++ b/tools/include/xen-foreign/mkheader.py
|
||||
@@ -17,13 +17,13 @@ header = {};
|
||||
footer = {};
|
||||
|
||||
#arm
|
||||
-inttypes["arm32"] = {
|
||||
- "unsigned long" : "__danger_unsigned_long_on_arm32",
|
||||
- "long" : "__danger_long_on_arm32",
|
||||
- "xen_pfn_t" : "uint64_t",
|
||||
- "xen_ulong_t" : "uint64_t",
|
||||
- "uint64_t" : "__align8__ uint64_t",
|
||||
-};
|
||||
+inttypes["arm32"] = [
|
||||
+ ("unsigned long", "__danger_unsigned_long_on_arm32"),
|
||||
+ ("long", "__danger_long_on_arm32"),
|
||||
+ ("xen_pfn_t", "uint64_t"),
|
||||
+ ("xen_ulong_t", "uint64_t"),
|
||||
+ ("uint64_t", "__align8__ uint64_t"),
|
||||
+]
|
||||
header["arm32"] = """
|
||||
#define __arm___ARM32 1
|
||||
#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
|
||||
@@ -38,13 +38,13 @@ footer["arm32"] = """
|
||||
#undef __DECL_REG
|
||||
"""
|
||||
|
||||
-inttypes["arm64"] = {
|
||||
- "unsigned long" : "__danger_unsigned_long_on_arm64",
|
||||
- "long" : "__danger_long_on_arm64",
|
||||
- "xen_pfn_t" : "uint64_t",
|
||||
- "xen_ulong_t" : "uint64_t",
|
||||
- "uint64_t" : "__align8__ uint64_t",
|
||||
-};
|
||||
+inttypes["arm64"] = [
|
||||
+ ("unsigned long", "__danger_unsigned_long_on_arm64"),
|
||||
+ ("long", "__danger_long_on_arm64"),
|
||||
+ ("xen_pfn_t", "uint64_t"),
|
||||
+ ("xen_ulong_t", "uint64_t"),
|
||||
+ ("uint64_t", "__align8__ uint64_t"),
|
||||
+]
|
||||
header["arm64"] = """
|
||||
#define __aarch64___ARM64 1
|
||||
#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
|
||||
@@ -60,12 +60,12 @@ footer["arm64"] = """
|
||||
"""
|
||||
|
||||
# x86_32
|
||||
-inttypes["x86_32"] = {
|
||||
- "unsigned long" : "uint32_t",
|
||||
- "long" : "uint32_t",
|
||||
- "xen_pfn_t" : "uint32_t",
|
||||
- "xen_ulong_t" : "uint32_t",
|
||||
-};
|
||||
+inttypes["x86_32"] = [
|
||||
+ ("unsigned long", "uint32_t"),
|
||||
+ ("long", "uint32_t"),
|
||||
+ ("xen_pfn_t", "uint32_t"),
|
||||
+ ("xen_ulong_t", "uint32_t"),
|
||||
+]
|
||||
header["x86_32"] = """
|
||||
#define __DECL_REG_LO8(which) uint32_t e ## which ## x
|
||||
#define __DECL_REG_LO16(name) uint32_t e ## name
|
||||
@@ -79,12 +79,12 @@ footer["x86_32"] = """
|
||||
""";
|
||||
|
||||
# x86_64
|
||||
-inttypes["x86_64"] = {
|
||||
- "unsigned long" : "__align8__ uint64_t",
|
||||
- "long" : "__align8__ uint64_t",
|
||||
- "xen_pfn_t" : "__align8__ uint64_t",
|
||||
- "xen_ulong_t" : "__align8__ uint64_t",
|
||||
-};
|
||||
+inttypes["x86_64"] = [
|
||||
+ ("unsigned long", "__align8__ uint64_t"),
|
||||
+ ("long", "__align8__ uint64_t"),
|
||||
+ ("xen_pfn_t", "__align8__ uint64_t"),
|
||||
+ ("xen_ulong_t", "__align8__ uint64_t"),
|
||||
+]
|
||||
header["x86_64"] = """
|
||||
#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
|
||||
# define __DECL_REG(name) union { uint64_t r ## name, e ## name; }
|
||||
@@ -205,10 +205,8 @@ for struct in structs:
|
||||
output = re.sub("\\b(%s)_t\\b" % struct, "\\1_%s_t" % arch, output);
|
||||
|
||||
# replace: integer types
|
||||
-integers = inttypes[arch].keys();
|
||||
-integers.sort(lambda a, b: cmp(len(b),len(a)));
|
||||
-for type in integers:
|
||||
- output = re.sub("\\b%s\\b" % type, inttypes[arch][type], output);
|
||||
+for old, new in inttypes[arch]:
|
||||
+ output = re.sub("\\b%s\\b" % old, new, output)
|
||||
|
||||
# print results
|
||||
f = open(outfile, "w");
|
||||
--
|
||||
2.17.1
|
||||
|
|
@ -6,7 +6,7 @@ DESCRIPTION = "The Xen hypervisor"
|
|||
# this allows for varying the target architecture or toolchain used
|
||||
# to build the different components. eg. 32-bit tools and a 64-bit hypervisor.
|
||||
|
||||
inherit deploy
|
||||
inherit deploy python3native
|
||||
|
||||
PACKAGES = " \
|
||||
${PN} \
|
||||
|
@ -34,7 +34,7 @@ do_configure() {
|
|||
}
|
||||
|
||||
do_compile() {
|
||||
oe_runmake xen
|
||||
oe_runmake xen PYTHON="${PYTHON}"
|
||||
}
|
||||
|
||||
do_install() {
|
||||
|
|
68
recipes-extended/xen/xen-python2.bb
Normal file
68
recipes-extended/xen/xen-python2.bb
Normal file
|
@ -0,0 +1,68 @@
|
|||
SUMMARY = "Xen hypervisor tools written in python 2"
|
||||
DESCRIPTION = "Unported utility scripts for the Xen hypervisor"
|
||||
HOMEPAGE = "http://xen.org"
|
||||
LICENSE = "GPLv2"
|
||||
SECTION = "console/tools"
|
||||
|
||||
SRCREV ?= "a5fcafbfbee55261853fba07149c1c795f2baf58"
|
||||
|
||||
XEN_REL ?= "4.12"
|
||||
XEN_BRANCH ?= "stable-4.12"
|
||||
|
||||
SRC_URI = "git://xenbits.xen.org/xen.git;branch=${XEN_BRANCH}"
|
||||
|
||||
LIC_FILES_CHKSUM ?= "file://COPYING;md5=bbb4b1bdc2c3b6743da3c39d03249095"
|
||||
|
||||
PV = "${XEN_REL}+git${SRCPV}"
|
||||
|
||||
S = "${WORKDIR}/git"
|
||||
|
||||
# Packages in this recipe do not use ${PN} to allow for simpler
|
||||
# movement of the package back into the xen-tools recipe if/when
|
||||
# the scripts are ported to python 3.
|
||||
|
||||
RDEPENDS_xen-tools-xencov-split ="python"
|
||||
RDEPENDS_xen-tools-xencons = "python"
|
||||
RDEPENDS_xen-tools-xenpvnetboot = "python"
|
||||
RDEPENDS_xen-tools-xentrace-format = "python"
|
||||
|
||||
RRECOMMENDS_xen-tools-xencov-trace = "xen-tools-xencov"
|
||||
RRECOMMENDS_xen-tools-xentrace-format = "xen-tools-xentrace"
|
||||
|
||||
PACKAGES = " \
|
||||
xen-tools-xencons \
|
||||
xen-tools-xencov-split \
|
||||
xen-tools-xenpvnetboot \
|
||||
xen-tools-xentrace-format \
|
||||
"
|
||||
|
||||
FILES_xen-tools-xencons = " \
|
||||
${bindir}/xencons \
|
||||
"
|
||||
|
||||
FILES_xen-tools-xencov-split = " \
|
||||
${bindir}/xencov_split \
|
||||
"
|
||||
|
||||
FILES_xen-tools-xenpvnetboot = " \
|
||||
${libdir}/xen/bin/xenpvnetboot \
|
||||
"
|
||||
|
||||
FILES_xen-tools-xentrace-format = " \
|
||||
${bindir}/xentrace_format \
|
||||
"
|
||||
|
||||
do_configure[noexec] = "1"
|
||||
do_compile[noexec] = "1"
|
||||
|
||||
do_install() {
|
||||
install -d ${D}${bindir}
|
||||
install -m 0755 ${S}/tools/xentrace/xentrace_format \
|
||||
${D}${bindir}/xentrace_format
|
||||
install -m 0755 ${S}/tools/misc/xencons ${D}${bindir}/xencons
|
||||
install -m 0755 ${S}/tools/misc/xencov_split ${D}${bindir}/xencov_split
|
||||
|
||||
install -d ${D}${libdir}/xen/bin
|
||||
install -m 0755 ${S}/tools/misc/xenpvnetboot \
|
||||
${D}${libdir}/xen/bin/xenpvnetboot
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
SUMMARY = "Xen hypervisor tools"
|
||||
DESCRIPTION = "Tools and utility software for the Xen hypervisor"
|
||||
|
||||
inherit setuptools update-rc.d systemd deploy
|
||||
inherit setuptools3 update-rc.d systemd deploy
|
||||
require xen-blktap.inc
|
||||
|
||||
RDEPENDS_${PN} = "\
|
||||
|
@ -47,21 +47,25 @@ RDEPENDS_${PN}-fsimage = " \
|
|||
|
||||
RDEPENDS_${PN}-misc = " \
|
||||
perl \
|
||||
python \
|
||||
python3 \
|
||||
${PN}-xencov \
|
||||
"
|
||||
|
||||
RSUGGESTS_${PN}-misc = " \
|
||||
${PN}-xencons \
|
||||
${PN}-xenpvnetboot \
|
||||
"
|
||||
|
||||
RDEPENDS_${PN}-python = " \
|
||||
python \
|
||||
python3 \
|
||||
"
|
||||
|
||||
RDEPENDS_${PN}-pygrub = " \
|
||||
python3 \
|
||||
${PN}-python \
|
||||
"
|
||||
|
||||
RDEPENDS_${PN}-remus = " \
|
||||
bash \
|
||||
python \
|
||||
"
|
||||
RDEPENDS_${PN}-remus = "bash"
|
||||
|
||||
RDEPENDS_${PN}-scripts-block = "\
|
||||
bash \
|
||||
|
@ -78,6 +82,8 @@ RDEPENDS_${PN}-scripts-network = "\
|
|||
${PN}-volatiles \
|
||||
"
|
||||
|
||||
RSUGGESTS_${PN}-xencov = "${PN}-xencov-split"
|
||||
|
||||
RDEPENDS_${PN}-xencommons = "\
|
||||
bash \
|
||||
${PN}-console \
|
||||
|
@ -97,7 +103,11 @@ RDEPENDS_${PN}-xendomains = "\
|
|||
|
||||
RDEPENDS_${PN}-xl = "libgcc"
|
||||
|
||||
RDEPENDS_${PN}-xentrace = "python"
|
||||
RDEPENDS_${PN}-xenmon = " \
|
||||
python3 \
|
||||
"
|
||||
|
||||
RSUGGESTS_${PN}-xentrace = "${PN}-xentrace-format"
|
||||
|
||||
RDEPENDS_${PN}-xen-watchdog = "bash"
|
||||
|
||||
|
@ -160,6 +170,7 @@ PACKAGES = " \
|
|||
${PN}-volatiles \
|
||||
${PN}-xcutils \
|
||||
${PN}-xencommons \
|
||||
${PN}-xencov \
|
||||
${PN}-xend \
|
||||
${PN}-xend-examples \
|
||||
${PN}-xendomains \
|
||||
|
@ -188,8 +199,8 @@ RPROVIDES_${PN}-xenstored = "virtual/xenstored"
|
|||
|
||||
FILES_${PN}-dbg += "\
|
||||
${libdir}/xen/bin/.debug \
|
||||
${libdir}/python2.7/site-packages/.debug \
|
||||
${libdir}/python2.7/site-packages/xen/lowlevel/.debug \
|
||||
${libdir}/${PYTHON_DIR}/site-packages/.debug \
|
||||
${libdir}/${PYTHON_DIR}/site-packages/xen/lowlevel/.debug \
|
||||
${libdir}/fs/xfs/.debug \
|
||||
${libdir}/fs/ufs/.debug \
|
||||
${libdir}/fs/ext2fs-lib/.debug \
|
||||
|
@ -202,8 +213,8 @@ FILES_${PN}-dbg += "\
|
|||
${libdir}exec/.debug \
|
||||
${libdir}/xen/libexec/.debug \
|
||||
${bindir}/.debug \
|
||||
${libdir}/python2.7/dist-packages/.debug \
|
||||
${libdir}/python2.7/dist-packages/xen/lowlevel/.debug \
|
||||
${libdir}/${PYTHON_DIR}/dist-packages/.debug \
|
||||
${libdir}/${PYTHON_DIR}/dist-packages/xen/lowlevel/.debug \
|
||||
"
|
||||
|
||||
FILES_${PN}-dev = "\
|
||||
|
@ -404,15 +415,11 @@ FILES_${PN}-livepatch += " \
|
|||
"
|
||||
|
||||
FILES_${PN}-misc = "\
|
||||
${bindir}/xencons \
|
||||
${bindir}/xencov_split \
|
||||
${bindir}/xen-detect \
|
||||
${libdir}/xen/bin/xenpvnetboot \
|
||||
${libdir}/xen/bin/depriv-fd-checker \
|
||||
${sbindir}/gtracestat \
|
||||
${sbindir}/gtraceview \
|
||||
${sbindir}/xen-bugtool \
|
||||
${sbindir}/xencov \
|
||||
${sbindir}/xenperf \
|
||||
${sbindir}/xenpm \
|
||||
${sbindir}/xsview \
|
||||
|
@ -436,11 +443,10 @@ FILES_${PN}-pygrub = "\
|
|||
"
|
||||
|
||||
FILES_${PN}-python = "\
|
||||
${libdir}/python2.7 \
|
||||
${libdir}/${PYTHON_DIR} \
|
||||
"
|
||||
|
||||
FILES_${PN}-remus = "\
|
||||
${bindir}/remus \
|
||||
${sysconfdir}/xen/scripts/remus-netbuf-setup \
|
||||
"
|
||||
|
||||
|
@ -500,6 +506,10 @@ FILES_${PN}-xcutils = "\
|
|||
${libdir}/xen/bin/xc_save \
|
||||
"
|
||||
|
||||
FILES_${PN}-xencov = "\
|
||||
${sbindir}/xencov \
|
||||
"
|
||||
|
||||
FILES_${PN}-xend-examples = "\
|
||||
${sysconfdir}/xen/xend-config.sxp \
|
||||
${sysconfdir}/xen/xend-pci-permissive.sxp \
|
||||
|
@ -539,7 +549,6 @@ FILES_${PN}-xenstored = "\
|
|||
|
||||
FILES_${PN}-xentrace = "\
|
||||
${bindir}/xentrace \
|
||||
${bindir}/xentrace_format \
|
||||
${bindir}/xentrace_setsize \
|
||||
${libdir}/xen/bin/xenctx \
|
||||
${bindir}/xenalyze \
|
||||
|
@ -665,12 +674,20 @@ do_stubs() {
|
|||
addtask stubs after do_configure before do_compile
|
||||
|
||||
do_compile() {
|
||||
oe_runmake tools
|
||||
cd ${S}
|
||||
oe_runmake tools PYTHON="${PYTHON}"
|
||||
}
|
||||
|
||||
do_install() {
|
||||
cd ${S}
|
||||
oe_runmake DESTDIR="${D}" install-tools
|
||||
|
||||
# Remove unported python 2 scripts -- see the separate xen-python2 recipe
|
||||
rm -f ${D}${bindir}/xentrace_format \
|
||||
${D}${bindir}/xencons \
|
||||
${D}${bindir}/xencov_split \
|
||||
${D}${libdir}/xen/bin/xenpvnetboot
|
||||
|
||||
# remove installed volatiles
|
||||
rm -rf ${D}${base_prefix}/run \
|
||||
${D}${localstatedir}/run \
|
||||
|
|
|
@ -6,6 +6,12 @@ XEN_BRANCH ?= "stable-${XEN_REL}"
|
|||
SRC_URI = " \
|
||||
git://xenbits.xen.org/xen.git;branch=${XEN_BRANCH} \
|
||||
file://0001-python-pygrub-pass-DISTUTILS-xen.4.12.patch \
|
||||
file://xen-tools-update-python-scripts-to-py3.patch \
|
||||
file://xen-tools-libxl-gentypes-py3.patch \
|
||||
file://xen-tools-python-fix-Wsign-compare-warnings.patch \
|
||||
file://xen-tools-pygrub-change-tabs-into-spaces.patch \
|
||||
file://xen-tools-pygrub-make-python-scripts-work-with-2.6-and-up.patch \
|
||||
file://xen-tools-pygrub-py3.patch \
|
||||
"
|
||||
|
||||
LIC_FILES_CHKSUM ?= "file://COPYING;md5=bbb4b1bdc2c3b6743da3c39d03249095"
|
||||
|
|
|
@ -43,7 +43,7 @@ DEPENDS = " \
|
|||
pciutils \
|
||||
pixman \
|
||||
procps \
|
||||
python \
|
||||
python3 \
|
||||
libaio \
|
||||
lzo \
|
||||
util-linux \
|
||||
|
@ -77,8 +77,8 @@ libexecdir = "${libdir}"
|
|||
export XEN_OS = "Linux"
|
||||
|
||||
# this is used for the header (#!${bindir}/python) of the install python scripts
|
||||
export PYTHONPATH="${bindir}/python"
|
||||
export ac_cv_path_PYTHONPATH="${bindir}/python"
|
||||
export PYTHONPATH="${bindir}/env python3"
|
||||
export ac_cv_path_PYTHONPATH="${bindir}/env python3"
|
||||
export DISTUTILS_BUILD_ARGS
|
||||
export DISTUTILS_INSTALL_ARGS
|
||||
|
||||
|
@ -207,6 +207,7 @@ EXTRA_OEMAKE += "XEN_CONFIG_EXPERT=y"
|
|||
EXTRA_OEMAKE += "debug=n"
|
||||
|
||||
do_configure_common() {
|
||||
cd ${S}
|
||||
|
||||
#./configure --enable-xsmpolicy does not set XSM_ENABLE must be done manually
|
||||
if [ "${XSM_ENABLED}" = "1" ]; then
|
||||
|
@ -222,7 +223,9 @@ do_configure_common() {
|
|||
|
||||
# do configure
|
||||
oe_runconf EXTRA_CFLAGS_XEN_CORE="${EXTRA_CFLAGS_XEN_CORE}" \
|
||||
EXTRA_CFLAGS_XEN_TOOLS="${EXTRA_CFLAGS_XEN_TOOLS}"
|
||||
EXTRA_CFLAGS_XEN_TOOLS="${EXTRA_CFLAGS_XEN_TOOLS}" \
|
||||
PYTHON="${PYTHON}"
|
||||
|
||||
if [ ! -e ${STAGING_INCDIR}/bits/long-double-32.h ]; then
|
||||
cp ${STAGING_INCDIR}/bits/long-double-64.h ${STAGING_INCDIR}/bits/long-double-32.h
|
||||
fi
|
||||
|
|
Loading…
Reference in New Issue
Block a user