mirror of
https://gitlab.com/fdroid/fdroidserver.git
synced 2024-11-20 13:50:12 +01: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
@ -472,13 +472,7 @@ def build_local(app, build, vcs, build_dir, output_dir, srclib_dir, extlib_dir,
|
|||||||
logging.critical("Android NDK '%s' is not a directory!" % ndk_path)
|
logging.critical("Android NDK '%s' is not a directory!" % ndk_path)
|
||||||
sys.exit(3)
|
sys.exit(3)
|
||||||
|
|
||||||
# Set up environment vars that depend on each build
|
common.set_FDroidPopen_env(build)
|
||||||
for n in ['ANDROID_NDK', 'NDK', 'ANDROID_NDK_HOME']:
|
|
||||||
common.env[n] = ndk_path
|
|
||||||
|
|
||||||
common.reset_env_path()
|
|
||||||
# Set up the current NDK to the PATH
|
|
||||||
common.add_to_env_path(ndk_path)
|
|
||||||
|
|
||||||
# Prepare the source code...
|
# Prepare the source code...
|
||||||
root_dir, srclibpaths = common.prepare_source(vcs, app, build,
|
root_dir, srclibpaths = common.prepare_source(vcs, app, build,
|
||||||
|
@ -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
|
The config is read from config_file, which is in the current directory when
|
||||||
any of the repo management commands are used.
|
any of the repo management commands are used.
|
||||||
"""
|
"""
|
||||||
global config, options, env, orig_path
|
global config, options, orig_path
|
||||||
|
|
||||||
if config is not None:
|
if config is not None:
|
||||||
return config
|
return config
|
||||||
@ -268,6 +268,21 @@ def read_config(opts, config_file='config.py'):
|
|||||||
return config
|
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):
|
def find_sdk_tools_cmd(cmd):
|
||||||
'''find a working path to a tool from the Android SDK'''
|
'''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
|
global env
|
||||||
|
if env is None:
|
||||||
|
set_FDroidPopen_env()
|
||||||
|
|
||||||
if cwd:
|
if cwd:
|
||||||
cwd = os.path.normpath(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))
|
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
|
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):
|
for n in ['ANDROID_NDK', 'NDK', 'ANDROID_NDK_HOME']:
|
||||||
global env
|
env[n] = build.ndk_path()
|
||||||
paths = env['PATH'].split(os.pathsep)
|
|
||||||
if path in paths:
|
|
||||||
return
|
|
||||||
paths.append(path)
|
|
||||||
env['PATH'] = os.pathsep.join(paths)
|
|
||||||
|
|
||||||
|
|
||||||
def replace_config_vars(cmd, build):
|
def replace_config_vars(cmd, build):
|
||||||
global env
|
|
||||||
cmd = cmd.replace('$$SDK$$', config['sdk_path'])
|
cmd = cmd.replace('$$SDK$$', config['sdk_path'])
|
||||||
# env['ANDROID_NDK'] is set in build_local right before prepare_source
|
cmd = cmd.replace('$$NDK$$', get_ndk_path(build['ndk']))
|
||||||
cmd = cmd.replace('$$NDK$$', env['ANDROID_NDK'])
|
|
||||||
cmd = cmd.replace('$$MVN3$$', config['mvn3'])
|
cmd = cmd.replace('$$MVN3$$', config['mvn3'])
|
||||||
if build is not None:
|
if build is not None:
|
||||||
cmd = cmd.replace('$$COMMIT$$', build.commit)
|
cmd = cmd.replace('$$COMMIT$$', build.commit)
|
||||||
|
@ -64,7 +64,7 @@ class CommonTest(unittest.TestCase):
|
|||||||
|
|
||||||
def testIsApkDebuggable(self):
|
def testIsApkDebuggable(self):
|
||||||
config = dict()
|
config = dict()
|
||||||
config['sdk_path'] = os.getenv('ANDROID_HOME')
|
fdroidserver.common.fill_config_defaults(config)
|
||||||
fdroidserver.common.config = config
|
fdroidserver.common.config = config
|
||||||
self._set_build_tools()
|
self._set_build_tools()
|
||||||
config['aapt'] = fdroidserver.common.find_sdk_tools_cmd('aapt')
|
config['aapt'] = fdroidserver.common.find_sdk_tools_cmd('aapt')
|
||||||
|
@ -25,8 +25,9 @@ class ImportTest(unittest.TestCase):
|
|||||||
|
|
||||||
def test_import_gitlab(self):
|
def test_import_gitlab(self):
|
||||||
# FDroidPopen needs some config to work
|
# FDroidPopen needs some config to work
|
||||||
fdroidserver.common.config = dict()
|
config = dict()
|
||||||
fdroidserver.common.config['sdk_path'] = '/fake/path/to/android-sdk'
|
fdroidserver.common.fill_config_defaults(config)
|
||||||
|
fdroidserver.common.config = config
|
||||||
|
|
||||||
url = 'https://gitlab.com/fdroid/fdroidclient'
|
url = 'https://gitlab.com/fdroid/fdroidclient'
|
||||||
app = fdroidserver.metadata.get_default_app_info()
|
app = fdroidserver.metadata.get_default_app_info()
|
||||||
|
@ -23,7 +23,7 @@ class InstallTest(unittest.TestCase):
|
|||||||
|
|
||||||
def test_devices(self):
|
def test_devices(self):
|
||||||
config = dict()
|
config = dict()
|
||||||
config['sdk_path'] = os.getenv('ANDROID_HOME')
|
fdroidserver.common.fill_config_defaults(config)
|
||||||
fdroidserver.common.config = config
|
fdroidserver.common.config = config
|
||||||
config['adb'] = fdroidserver.common.find_sdk_tools_cmd('adb')
|
config['adb'] = fdroidserver.common.find_sdk_tools_cmd('adb')
|
||||||
self.assertTrue(os.path.exists(config['adb']))
|
self.assertTrue(os.path.exists(config['adb']))
|
||||||
|
@ -29,6 +29,10 @@ class UpdateTest(unittest.TestCase):
|
|||||||
if not os.path.exists(getsig_dir + "/getsig.class"):
|
if not os.path.exists(getsig_dir + "/getsig.class"):
|
||||||
logging.critical("getsig.class not found. To fix: cd '%s' && ./make.sh" % getsig_dir)
|
logging.critical("getsig.class not found. To fix: cd '%s' && ./make.sh" % getsig_dir)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
# FDroidPopen needs some config to work
|
||||||
|
config = dict()
|
||||||
|
fdroidserver.common.fill_config_defaults(config)
|
||||||
|
fdroidserver.common.config = config
|
||||||
p = FDroidPopen(['java', '-cp', os.path.join(os.path.dirname(__file__), 'getsig'),
|
p = FDroidPopen(['java', '-cp', os.path.join(os.path.dirname(__file__), 'getsig'),
|
||||||
'getsig', os.path.join(os.getcwd(), apkfile)])
|
'getsig', os.path.join(os.getcwd(), apkfile)])
|
||||||
sig = None
|
sig = None
|
||||||
|
Loading…
Reference in New Issue
Block a user