From 45426f06689a520fc47f81ee29b49d509f11ba58 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Mon, 19 Nov 2018 14:24:26 +0100
Subject: [PATCH] python module: do not manipulate the environment when calling
 pkg-config

Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
---
 mesonbuild/modules/python.py | 14 --------------
 1 file changed, 14 deletions(-)

diff --git a/mesonbuild/modules/python.py b/mesonbuild/modules/python.py
index 1195d8a..df81da4 100644
--- a/mesonbuild/modules/python.py
+++ b/mesonbuild/modules/python.py
@@ -67,26 +67,12 @@ class PythonDependency(ExternalDependency):
         if DependencyMethods.PKGCONFIG in self.methods and not python_holder.is_pypy:
             pkg_version = self.variables.get('LDVERSION') or self.version
             pkg_libdir = self.variables.get('LIBPC')
-            old_pkg_libdir = os.environ.get('PKG_CONFIG_LIBDIR')
-            old_pkg_path = os.environ.get('PKG_CONFIG_PATH')
-
-            os.environ.pop('PKG_CONFIG_PATH', None)
-
-            if pkg_libdir:
-                os.environ['PKG_CONFIG_LIBDIR'] = pkg_libdir
 
             try:
                 self.pkgdep = PkgConfigDependency('python-{}'.format(pkg_version), environment, kwargs)
             except Exception:
                 pass
 
-            if old_pkg_path is not None:
-                os.environ['PKG_CONFIG_PATH'] = old_pkg_path
-
-            if old_pkg_libdir is not None:
-                os.environ['PKG_CONFIG_LIBDIR'] = old_pkg_libdir
-            else:
-                os.environ.pop('PKG_CONFIG_LIBDIR', None)
 
         if self.pkgdep and self.pkgdep.found():
             self.compile_args = self.pkgdep.get_compile_args()
