mirror of
https://github.com/f-droid/fdroidserver.git
synced 2025-11-05 15:00:30 +03:00
refactor env handling for FDroidPopen to support .fdroid.* metadata
The start up sequence of processes that are based on the .fdroid.* metadata is a bit different, so this ensures that the environment variables get properly initialized in all cases. This also creates a single function where the environment is set. Before it was being set in multiple places across multiple files.
This commit is contained in:
parent
9abb80b3b7
commit
3768d7a4d6
6 changed files with 47 additions and 24 deletions
|
|
@ -197,7 +197,7 @@ def read_config(opts, config_file='config.py'):
|
|||
The config is read from config_file, which is in the current directory when
|
||||
any of the repo management commands are used.
|
||||
"""
|
||||
global config, options, env, orig_path
|
||||
global config, options, orig_path
|
||||
|
||||
if config is not None:
|
||||
return config
|
||||
|
|
@ -268,6 +268,21 @@ def read_config(opts, config_file='config.py'):
|
|||
return config
|
||||
|
||||
|
||||
def get_ndk_path(version):
|
||||
if config is None or 'ndk_paths' not in config:
|
||||
ndk_path = os.getenv('ANDROID_NDK_HOME')
|
||||
if ndk_path is None:
|
||||
logging.error('No NDK found! Either set ANDROID_NDK_HOME or add ndk_path to your config.py')
|
||||
else:
|
||||
return ndk_path
|
||||
if version is None:
|
||||
version = 'r10e' # falls back to latest
|
||||
paths = config['ndk_paths']
|
||||
if version not in paths:
|
||||
return ''
|
||||
return paths[version] or ''
|
||||
|
||||
|
||||
def find_sdk_tools_cmd(cmd):
|
||||
'''find a working path to a tool from the Android SDK'''
|
||||
|
||||
|
|
@ -1639,6 +1654,8 @@ def FDroidPopenBytes(commands, cwd=None, output=True, stderr_to_stdout=True):
|
|||
"""
|
||||
|
||||
global env
|
||||
if env is None:
|
||||
set_FDroidPopen_env()
|
||||
|
||||
if cwd:
|
||||
cwd = os.path.normpath(cwd)
|
||||
|
|
@ -1780,25 +1797,32 @@ def remove_signing_keys(build_dir):
|
|||
logging.info("Cleaned %s of keysigning configs at %s" % (propfile, path))
|
||||
|
||||
|
||||
def reset_env_path():
|
||||
def set_FDroidPopen_env(build=None):
|
||||
# There is only a weak standard, the variables used by gradle, so also set
|
||||
# up the most commonly used environment variables for SDK and NDK
|
||||
global env, orig_path
|
||||
env['PATH'] = orig_path
|
||||
if env is None:
|
||||
env = os.environ
|
||||
orig_path = env['PATH']
|
||||
for n in ['ANDROID_HOME', 'ANDROID_SDK']:
|
||||
env[n] = config['sdk_path']
|
||||
|
||||
# Set up environment vars that depend on each build
|
||||
if build is not None:
|
||||
path = build.ndk_path()
|
||||
paths = orig_path.split(os.pathsep)
|
||||
if path in paths:
|
||||
return
|
||||
paths.append(path)
|
||||
env['PATH'] = os.pathsep.join(paths)
|
||||
|
||||
def add_to_env_path(path):
|
||||
global env
|
||||
paths = env['PATH'].split(os.pathsep)
|
||||
if path in paths:
|
||||
return
|
||||
paths.append(path)
|
||||
env['PATH'] = os.pathsep.join(paths)
|
||||
for n in ['ANDROID_NDK', 'NDK', 'ANDROID_NDK_HOME']:
|
||||
env[n] = build.ndk_path()
|
||||
|
||||
|
||||
def replace_config_vars(cmd, build):
|
||||
global env
|
||||
cmd = cmd.replace('$$SDK$$', config['sdk_path'])
|
||||
# env['ANDROID_NDK'] is set in build_local right before prepare_source
|
||||
cmd = cmd.replace('$$NDK$$', env['ANDROID_NDK'])
|
||||
cmd = cmd.replace('$$NDK$$', get_ndk_path(build['ndk']))
|
||||
cmd = cmd.replace('$$MVN3$$', config['mvn3'])
|
||||
if build is not None:
|
||||
cmd = cmd.replace('$$COMMIT$$', build.commit)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue