openvswitch: fix build host contamination

There is only a single PYTHON variable for configure and yet python is
used for the build as well as scripts installed on the target. If we
set a path in PYTHON as we had we end up using this same path during
the build and since it isn't to the sysroot we end up with host
contamination (as demonstrated by python failing to import 'six' on
build hosts without python-six installed.

The best approach is to set PYTHON to "python" when calling configure,
ie. without a path. This will use 'python' from the path during build
time and by ensuring all the installed scripts use '/usr/bin/env' we
can ensure python will be found on the target when the scripts are
run.

Since 'six' is used as part of the build we have to ensure it is
-native'ly buildable and we set all the required build and runtime
dependencies.

Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com>
Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
This commit is contained in:
Mark Asselstine 2017-01-13 16:49:56 -05:00 committed by Bruce Ashfield
parent 9152441483
commit b6d051a197
4 changed files with 61 additions and 5 deletions

View File

@ -15,3 +15,5 @@ SRC_URI[sha256sum] = "105f8d68616f8248e24bf0e9372ef04d3cc10104f1980f54d57b2ce73a
S = "${WORKDIR}/${SRCNAME}-${PV}"
inherit setuptools
BBCLASSEXTEND = "native"

View File

@ -0,0 +1,53 @@
From 33769657e951da855b9258eb91fa9838373023ad Mon Sep 17 00:00:00 2001
From: Mark Asselstine <mark.asselstine@windriver.com>
Date: Fri, 13 Jan 2017 16:12:55 -0500
Subject: [PATCH] python: make remaining scripts use /usr/bin/env
Unfortunately there is no concept of a host python vs. target python
to facilitate cross compilation. There is only one PYTHON variable and
this is used during building and in the header of python scripts after
installation. The best approach for cross compilation is to thus to
ensure python is in the path and avoid passing a path as part of
PYTHON. To make this function smoothly all installed scripts should
make use of /usr/bin/env to increase the chances of finding python.
Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com>
---
ovsdb/ovsdb-dot.in | 2 +-
ovsdb/ovsdb-idlc.in | 2 +-
utilities/bugtool/ovs-bugtool.in | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/ovsdb/ovsdb-dot.in b/ovsdb/ovsdb-dot.in
index 134ce22..893c408 100755
--- a/ovsdb/ovsdb-dot.in
+++ b/ovsdb/ovsdb-dot.in
@@ -1,4 +1,4 @@
-#! @PYTHON@
+#! /usr/bin/env @PYTHON@
from datetime import date
import ovs.db.error
diff --git a/ovsdb/ovsdb-idlc.in b/ovsdb/ovsdb-idlc.in
index cd4532e..dceb02f 100755
--- a/ovsdb/ovsdb-idlc.in
+++ b/ovsdb/ovsdb-idlc.in
@@ -1,4 +1,4 @@
-#! @PYTHON@
+#! /usr/bin/env @PYTHON@
import getopt
import os
diff --git a/utilities/bugtool/ovs-bugtool.in b/utilities/bugtool/ovs-bugtool.in
index bb771b0..152d171 100755
--- a/utilities/bugtool/ovs-bugtool.in
+++ b/utilities/bugtool/ovs-bugtool.in
@@ -1,4 +1,4 @@
-#! @PYTHON@
+#! /usr/bin/env @PYTHON@
# This library is free software; you can redistribute it and/or
# modify it under the terms of version 2.1 of the GNU Lesser General Public
--
2.7.4

View File

@ -11,11 +11,11 @@ HOMEPAGE = "http://openvswitch.org/"
SECTION = "networking"
LICENSE = "Apache-2"
DEPENDS += "bridge-utils openssl python perl"
DEPENDS += "bridge-utils openssl python perl python-six-native"
RDEPENDS_${PN} += "util-linux-uuidgen util-linux-libuuid coreutils \
python perl perl-module-strict ${PN}-switch \
bash python-twisted"
bash python-twisted python-six"
RDEPENDS_${PN}-testcontroller = "${PN} lsb ${PN}-pki"
RDEPENDS_${PN}-switch = "${PN} openssl procps util-linux-uuidgen"
RDEPENDS_${PN}-pki = "${PN}"
@ -34,8 +34,8 @@ SRC_URI = "\
"
EXTRA_OECONF += "\
PYTHON=${bindir}/python \
PYTHON3=${bindir}/python3 \
PYTHON=python \
PYTHON3=python3 \
PERL=${bindir}/perl \
"
CONFIGUREOPT_DEPTRACK = ""
@ -70,7 +70,7 @@ FILES_${PN} += "${datadir}/ovsdbmonitor"
FILES_${PN} += "/run"
FILES_${PN} += "${libdir}/python${PYTHON_BASEVERSION}/"
inherit autotools update-rc.d systemd python-dir
inherit autotools update-rc.d systemd pythonnative
SYSTEMD_PACKAGES = "${PN}-switch"
SYSTEMD_SERVICE_${PN}-switch = " \

View File

@ -24,6 +24,7 @@ SRC_URI += "\
file://disable_m4_check.patch \
file://kernel_module.patch \
file://openvswitch-ptest-Fix-python-path.patch \
file://python-make-remaining-scripts-use-usr-bin-env.patch \
"
LIC_FILES_CHKSUM = "file://COPYING;md5=17b2c9d4c70853a09c0e143137754b35"