From 607df76ebdf5516085835a0a1f7718baf966a6e0 Mon Sep 17 00:00:00 2001 From: Ruben Pollan Date: Tue, 20 Sep 2016 16:45:53 +0200 Subject: [feat] discover gpg bin path instead of hardcode it --- src/leap/bitmask/util.py | 58 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) (limited to 'src/leap/bitmask/util.py') diff --git a/src/leap/bitmask/util.py b/src/leap/bitmask/util.py index 96dafe0..6da8571 100644 --- a/src/leap/bitmask/util.py +++ b/src/leap/bitmask/util.py @@ -18,11 +18,17 @@ Handy common utils """ import os +import platform import sys +from twisted.python import log + + +STANDALONE = getattr(sys, 'frozen', False) + def here(module=None): - if getattr(sys, 'frozen', False): + if STANDALONE: # we are running in a |PyInstaller| bundle return sys._MEIPASS else: @@ -31,3 +37,53 @@ def here(module=None): return dirname(module.__file__) else: return dirname(__file__) + + +def get_gpg_bin_path(): + """ + Return the path to gpg binary. + + :returns: the gpg binary path + :rtype: str + """ + gpgbin = None + + # During the transition towards gpg2, we can look for /usr/bin/gpg1 + # binary, in case it was renamed using dpkg-divert or manually. + # We could just pick gpg2, but we need to solve #7564 first. + try: + gpgbin_options = which("gpg1") + for opt in gpgbin_options: + if not os.path.islink(opt): + gpgbin = opt + break + except IndexError as e: + log.msg("Couldn't find the gpg1 binary!: %s" % (e,)) + if gpgbin is not None: + return gpgbin + + if STANDALONE: + gpgbin = os.path.join( + get_path_prefix(), "..", "apps", "mail", "gpg") + if platform.system() == "Windows": + gpgbin += ".exe" + else: + try: + gpgbin_options = which("gpg") + # gnupg checks that the path to the binary is not a + # symlink, so we need to filter those and come up with + # just one option. + for opt in gpgbin_options: + if not os.path.islink(opt): + gpgbin = opt + break + except IndexError as e: + log.msg("Couldn't find the gpg binary!: %s" % (e,)) + log.exception(e) + if platform.system() == "Darwin": + gpgbin = os.path.abspath( + os.path.join(here(), "apps", "mail", "gpg")) + + if gpgbin is None: + log.msg("Could not find gpg1 binary") + return gpgbin -- cgit v1.2.3