Correctly set the environment.
When running command without `shell=True`, python's subproccess will look for variable `"PATH"` and `b"PATH"` and will complain if both are set. So the defaultdict should not return something for `b"PATH"`. We also escape space ` ` in the environment variables to not break everything with directory containing space.
This commit is contained in:
parent
738bfa6744
commit
e87835c61d
|
@ -4,7 +4,7 @@ import subprocess
|
||||||
import platform
|
import platform
|
||||||
import distro
|
import distro
|
||||||
|
|
||||||
from .utils import pj, download_remote, Defaultdict
|
from .utils import pj, download_remote, escape_path
|
||||||
from ._global import neutralEnv, option
|
from ._global import neutralEnv, option
|
||||||
|
|
||||||
|
|
||||||
|
@ -125,21 +125,34 @@ class BuildEnv:
|
||||||
pkgconfig_path = pj(self.install_dir, self.libprefix, 'pkgconfig')
|
pkgconfig_path = pj(self.install_dir, self.libprefix, 'pkgconfig')
|
||||||
env['PKG_CONFIG_PATH'] = ':'.join([env['PKG_CONFIG_PATH'], pkgconfig_path])
|
env['PKG_CONFIG_PATH'] = ':'.join([env['PKG_CONFIG_PATH'], pkgconfig_path])
|
||||||
|
|
||||||
env['PATH'] = ':'.join([pj(self.install_dir, 'bin'), env['PATH']])
|
env['PATH'] = ':'.join([
|
||||||
|
escape_path(pj(self.install_dir, 'bin')),
|
||||||
|
env['PATH']
|
||||||
|
])
|
||||||
|
|
||||||
env['LD_LIBRARY_PATH'] = ':'.join([env['LD_LIBRARY_PATH'],
|
env['LD_LIBRARY_PATH'] = ':'.join([env['LD_LIBRARY_PATH'],
|
||||||
pj(self.install_dir, 'lib'),
|
pj(self.install_dir, 'lib'),
|
||||||
pj(self.install_dir, self.libprefix)
|
pj(self.install_dir, self.libprefix)
|
||||||
])
|
])
|
||||||
|
|
||||||
env['QMAKE_CXXFLAGS'] = " ".join(['-I'+pj(self.install_dir, 'include'), env['QMAKE_CXXFLAGS']])
|
env['QMAKE_CXXFLAGS'] = " ".join([
|
||||||
env['CPPFLAGS'] = " ".join(['-I'+pj(self.install_dir, 'include'), env['CPPFLAGS']])
|
escape_path('-I'+pj(self.install_dir, 'include')),
|
||||||
env['QMAKE_LFLAGS'] = " ".join(['-L'+pj(self.install_dir, 'lib'),
|
env['QMAKE_CXXFLAGS']
|
||||||
'-L'+pj(self.install_dir, self.libprefix),
|
])
|
||||||
env['QMAKE_LFLAGS']])
|
env['CPPFLAGS'] = " ".join([
|
||||||
env['LDFLAGS'] = " ".join(['-L'+pj(self.install_dir, 'lib'),
|
escape_path('-I'+pj(self.install_dir, 'include')),
|
||||||
'-L'+pj(self.install_dir, self.libprefix),
|
env['CPPFLAGS']
|
||||||
env['LDFLAGS']])
|
])
|
||||||
|
env['QMAKE_LFLAGS'] = " ".join([
|
||||||
|
escape_path('-L'+pj(self.install_dir, 'lib')),
|
||||||
|
escape_path('-L'+pj(self.install_dir, self.libprefix)),
|
||||||
|
env['QMAKE_LFLAGS']
|
||||||
|
])
|
||||||
|
env['LDFLAGS'] = " ".join([
|
||||||
|
escape_path('-L'+pj(self.install_dir, 'lib')),
|
||||||
|
escape_path('-L'+pj(self.install_dir, self.libprefix)),
|
||||||
|
env['LDFLAGS']
|
||||||
|
])
|
||||||
|
|
||||||
if cross_comp_flags:
|
if cross_comp_flags:
|
||||||
self.platformInfo.set_comp_flags(env)
|
self.platformInfo.set_comp_flags(env)
|
||||||
|
|
|
@ -3,7 +3,7 @@ import os
|
||||||
import shutil
|
import shutil
|
||||||
import time
|
import time
|
||||||
|
|
||||||
from kiwixbuild.utils import pj, Context, SkipCommand, WarningMessage, extract_archive, Defaultdict, StopBuild, run_command, colorize, copy_tree
|
from kiwixbuild.utils import pj, Context, SkipCommand, WarningMessage, extract_archive, StopBuild, run_command, colorize, copy_tree
|
||||||
from kiwixbuild.versions import main_project_versions, base_deps_versions
|
from kiwixbuild.versions import main_project_versions, base_deps_versions
|
||||||
from kiwixbuild._global import neutralEnv, option, get_target_step
|
from kiwixbuild._global import neutralEnv, option, get_target_step
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ from .base import (
|
||||||
MakeBuilder,
|
MakeBuilder,
|
||||||
)
|
)
|
||||||
|
|
||||||
from kiwixbuild.utils import Remotefile, pj, Defaultdict, SkipCommand, run_command
|
from kiwixbuild.utils import Remotefile, pj, SkipCommand, run_command
|
||||||
from kiwixbuild._global import get_target_step
|
from kiwixbuild._global import get_target_step
|
||||||
|
|
||||||
class LibMagic(Dependency):
|
class LibMagic(Dependency):
|
||||||
|
|
|
@ -8,6 +8,7 @@ import urllib.request
|
||||||
import urllib.error
|
import urllib.error
|
||||||
import ssl
|
import ssl
|
||||||
import subprocess
|
import subprocess
|
||||||
|
import re
|
||||||
from collections import namedtuple, defaultdict
|
from collections import namedtuple, defaultdict
|
||||||
|
|
||||||
from kiwixbuild._global import neutralEnv, option
|
from kiwixbuild._global import neutralEnv, option
|
||||||
|
@ -39,13 +40,25 @@ def xrun_find(name):
|
||||||
return output[:-1].decode()
|
return output[:-1].decode()
|
||||||
|
|
||||||
|
|
||||||
|
regex_space = re.compile(r'((?<!\\) )')
|
||||||
|
def escape_path(path):
|
||||||
|
path = str(path)
|
||||||
|
return regex_space.sub(r'\ ', path)
|
||||||
|
|
||||||
|
|
||||||
class Defaultdict(defaultdict):
|
class Defaultdict(defaultdict):
|
||||||
def __getattr__(self, name):
|
def __getattr__(self, name):
|
||||||
return self[name]
|
return self[name]
|
||||||
|
|
||||||
|
|
||||||
def DefaultEnv():
|
class DefaultEnv(Defaultdict):
|
||||||
return Defaultdict(str, os.environ)
|
def __init__(self):
|
||||||
|
super().__init__(str, os.environ)
|
||||||
|
|
||||||
|
def __getitem__(self, name):
|
||||||
|
if name == b'PATH':
|
||||||
|
raise KeyError
|
||||||
|
return super().__getitem__(name)
|
||||||
|
|
||||||
|
|
||||||
def remove_duplicates(iterable, key_function=None):
|
def remove_duplicates(iterable, key_function=None):
|
||||||
|
@ -265,7 +278,7 @@ def extract_archive(archive_path, dest_dir, topdir=None, name=None):
|
||||||
def run_command(command, cwd, context, *, env=None, input=None):
|
def run_command(command, cwd, context, *, env=None, input=None):
|
||||||
os.makedirs(cwd, exist_ok=True)
|
os.makedirs(cwd, exist_ok=True)
|
||||||
if env is None:
|
if env is None:
|
||||||
env = Defaultdict(str, os.environ)
|
env = DefaultEnv()
|
||||||
log = None
|
log = None
|
||||||
try:
|
try:
|
||||||
if not option('verbose'):
|
if not option('verbose'):
|
||||||
|
|
Loading…
Reference in New Issue