[OE-core] [PATCH v2] terminal.py: No --disable-factory for gnome-terminal >= 3.10

Paul Eggleton paul.eggleton at linux.intel.com
Wed Feb 25 09:46:07 UTC 2015


Hi Sven,

On Monday 23 February 2015 20:39:41 Sven Ebenfeld wrote:
> --disable-factory has been disabled in earlier versions of gnome-terminal
> but from version 3.10 it raises an error and quits. This makes devshell
> unusable with gnome-terminal >= 3.10. This patch checks for the version and
> removes --disable-factory if you have the terminal version 3.10 or higher.
> 
> Signed-off-by: Sven Ebenfeld <sven.ebenfeld at gmail.com>
> ---
>  meta/lib/oe/terminal.py | 30 ++++++++++++++++++++++--------
>  1 file changed, 22 insertions(+), 8 deletions(-)
> 
> diff --git a/meta/lib/oe/terminal.py b/meta/lib/oe/terminal.py
> index 54e3ffc..01c0ccc 100644
> --- a/meta/lib/oe/terminal.py
> +++ b/meta/lib/oe/terminal.py
> @@ -55,6 +55,14 @@ class Gnome(XTerminal):
>      command = 'gnome-terminal -t "{title}" --disable-factory -x {command}'
>      priority = 2
> 
> +    def __init__(self, sh_cmd, title=None, env=None, d=None):
> +        # Check version
> +        (major, minor) = check_terminal_version("gnome-terminal")
> +        if major >= 3 and minor >= 10:
> +            logger.warn(1, 'Gnome-Terminal >3.10 does not support
> --disable-factory') +            self.command = 'gnome-terminal -t
> "{title}" -x {command}' +        XTerminal.__init__(self, sh_cmd, title,
> env, d)
> +
>  class Mate(XTerminal):
>      command = 'mate-terminal -t "{title}" -x {command}'
>      priority = 2
> @@ -73,11 +81,10 @@ class Konsole(XTerminal):
> 
>      def __init__(self, sh_cmd, title=None, env=None, d=None):
>          # Check version
> -        vernum = check_konsole_version("konsole")
> -        if vernum:
> -            if vernum.split('.')[0] == "2":
> -                logger.debug(1, 'Konsole from KDE 4.x will not work as
> devshell, skipping') -                raise UnsupportedTerminal(self.name)
> +        (major, minor) = check_terminal_version("konsole")
> +        if major == 2:
> +            logger.debug(1, 'Konsole from KDE 4.x will not work as
> devshell, skipping') +            raise UnsupportedTerminal(self.name)
>          XTerminal.__init__(self, sh_cmd, title, env, d)
> 
>  class XTerm(XTerminal):
> @@ -219,10 +226,10 @@ def check_tmux_pane_size(tmux):
>          return True
>      return False
> 
> -def check_konsole_version(konsole):
> +def check_terminal_version(terminalName):
>      import subprocess as sub
>      try:
> -        p = sub.Popen(['sh', '-c', '%s --version' %
> konsole],stdout=sub.PIPE,stderr=sub.PIPE) +        p = sub.Popen(['sh',
> '-c', '%s --version' % terminalName],stdout=sub.PIPE,stderr=sub.PIPE) out,
> err = p.communicate()
>          ver_info = out.rstrip().split('\n')
>      except OSError as exc:
> @@ -232,10 +239,17 @@ def check_konsole_version(konsole):
>          else:
>              raise
>      vernum = None
> +    major = int(0)
> +    minor = int(0)
>      for ver in ver_info:
>          if ver.startswith('Konsole'):
>              vernum = ver.split(' ')[-1]
> -    return vernum
> +	if ver.startswith('GNOME Terminal'):
> +            vernum = ver.split(' ')[-1]
> +    if vernum:
> +	major = int(vernum.split('.')[0])
> +	minor = int(vernum.split('.')[1])
> +    return major, minor

Obviously we needed the other part, but this API change means that we no 
longer get the full version when there are more than two parts (e.g. the 
current version of konsole on my system is 2.4.12), and it will blow up in the 
case when the version does not contain '.' or contains non-integer parts e.g. 
"3.4-beta". These might not be immediate problems but they may be in future.

I'd honestly rather we keep this as a string; if we need to do comparisons we 
can use distutils.version.LooseVersion(). I can send a fix for this along with 
a fix for Konsole 2.x which seems to be able to work now.

Cheers,
Paul


-- 

Paul Eggleton
Intel Open Source Technology Centre


More information about the Openembedded-core mailing list