[PKG-Openstack-devel] Bug#829191: python-pydot-ng: FTBFS: pydot_ng/__init__.py:1958: InvocationException

Chris Lamb lamby at debian.org
Fri Jul 1 10:08:16 UTC 2016


Source: python-pydot-ng
Version: 1.0.0-2
Severity: serious
Justification: fails to build from source
User: reproducible-builds at lists.alioth.debian.org
Usertags: ftbfs
X-Debbugs-Cc: reproducible-builds at lists.alioth.debian.org

Dear Maintainer,

python-pydot-ng fails to build from source in unstable/amd64:

  [..]

  pyversions: missing X(S)-Python-Version in control file, fall back to debian/pyversions
  pyversions: missing debian/pyversions file, fall back to supported versions
  py3versions: no X-Python3-Version in control file, using supported versions
  dh_clean -O--buildsystem=python_distutils
  rm -rf build
  make[1]: Leaving directory '/home/lamby/temp/cdt.20160701115412.iR2SLMJMIF.python-pydot-ng/python-pydot-ng-1.0.0'
   debian/rules build
  pyversions: missing X(S)-Python-Version in control file, fall back to debian/pyversions
  pyversions: missing debian/pyversions file, fall back to supported versions
  pyversions: missing X(S)-Python-Version in control file, fall back to debian/pyversions
  pyversions: missing debian/pyversions file, fall back to supported versions
  py3versions: no X-Python3-Version in control file, using supported versions
  dh build --buildsystem=python_distutils --with python2
     dh_testdir -O--buildsystem=python_distutils
     dh_update_autotools_config -O--buildsystem=python_distutils
     dh_auto_configure -O--buildsystem=python_distutils
     dh_auto_build -O--buildsystem=python_distutils
  pyversions: missing X(S)-Python-Version in control file, fall back to debian/pyversions
  pyversions: missing debian/pyversions file, fall back to supported versions
  	python setup.py build --force
  running build
  running build_py
  creating build
  creating build/lib.linux-x86_64-2.7
  creating build/lib.linux-x86_64-2.7/pydot_ng
  copying pydot_ng/__init__.py -> build/lib.linux-x86_64-2.7/pydot_ng
  copying pydot_ng/_dotparser.py -> build/lib.linux-x86_64-2.7/pydot_ng
     debian/rules override_dh_auto_test
  make[1]: Entering directory '/home/lamby/temp/cdt.20160701115412.iR2SLMJMIF.python-pydot-ng/python-pydot-ng-1.0.0'
  pyversions: missing X(S)-Python-Version in control file, fall back to debian/pyversions
  pyversions: missing debian/pyversions file, fall back to supported versions
  pyversions: missing X(S)-Python-Version in control file, fall back to debian/pyversions
  pyversions: missing debian/pyversions file, fall back to supported versions
  py3versions: no X-Python3-Version in control file, using supported versions
  set -e ; for pyvers in 2.7 3.5; do \
  	python$pyvers -m pytest test ; \
  done
  ============================= test session starts ==============================
  platform linux2 -- Python 2.7.12, pytest-2.9.2, py-1.4.31, pluggy-0.3.1
  rootdir: /home/lamby/temp/cdt.20160701115412.iR2SLMJMIF.python-pydot-ng/python-pydot-ng-1.0.0, inifile: 
  collected 23 items
  
  test/test_pydot.py ........ss.....F....F..
  
  =================================== FAILURES ===================================
  ____________________ TestGraphAPI.test_my_regression_tests _____________________
  
  self = <test_pydot.TestGraphAPI testMethod=test_my_regression_tests>
  
      def test_my_regression_tests(self):
  >       self._render_and_compare_dot_files(MY_REGRESSION_TESTS_DIR)
  
  test/test_pydot.py:222: 
  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
  test/test_pydot.py:243: in _render_and_compare_dot_files
      parsed_data_hexdigest = self._render_with_pydot(fname)
  test/test_pydot.py:217: in _render_with_pydot
      jpe_data = NULL_SEP.join([_g.create(format='jpe') for _g in g])
  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
  
  self = <pydot_ng.Dot object at 0x7fb322c28d90>, prog = 'dot', format = 'jpe'
  
      def create(self, prog=None, format='ps'):
          """Creates and returns a Postscript representation of the graph.
      
              create will write the graph to a temporary dot file and process
              it with the program given by 'prog' (which defaults to 'twopi'),
              reading the Postscript output and returning it as a string is the
              operation is successful.
              On failure None is returned.
      
              There's also the preferred possibility of using:
      
                  create_'format'(prog='program')
      
              which are automatically defined for all the supported formats.
              [create_ps(), create_gif(), create_dia(), ...]
      
              If 'prog' is a list instead of a string the fist item is expected
              to be the program name, followed by any optional command-line
              arguments for it:
      
                  ['twopi', '-Tdot', '-s10']
              """
      
          if prog is None:
              prog = self.prog
      
          if isinstance(prog, (list, tuple)):
              prog, args = prog[0], prog[1:]
          else:
              args = []
      
          if self.progs is None:
              self.progs = find_graphviz()
              if self.progs is None:
                  raise InvocationException(
                      'GraphViz\'s executables not found')
      
          if prog not in self.progs:
              raise InvocationException(
                  'GraphViz\'s executable "%s" not found' % prog)
      
          if not os.path.exists(self.progs[prog]) or not os.path.isfile(self.progs[prog]):
              raise InvocationException(
                  'GraphViz\'s executable "%s" is not a file or doesn\'t exist' % self.progs[prog])
      
          tmp_fd, tmp_name = tempfile.mkstemp()
          os.close(tmp_fd)
          self.write(tmp_name)
          tmp_dir = os.path.dirname(tmp_name)
      
          # For each of the image files...
          for img in self.shape_files:
      
              # Get its data
              f = open(img, 'rb')
              f_data = f.read()
              f.close()
      
              # And copy it under a file with the same name in the temporary directory
              f = open(os.path.join(tmp_dir, os.path.basename(img)), 'wb')
              f.write(f_data)
              f.close()
      
          cmdline = [self.progs[prog], '-T' + format, tmp_name] + args
      
          p = subprocess.Popen(
              cmdline,
              cwd=tmp_dir,
              stderr=subprocess.PIPE, stdout=subprocess.PIPE)
      
          stderr = p.stderr
          stdout = p.stdout
      
          stdout_output = list()
          while True:
              data = stdout.read()
              if not data:
                  break
              stdout_output.append(data)
          stdout.close()
      
          stdout_output = NULL_SEP.join(stdout_output)
      
          if not stderr.closed:
              stderr_output = list()
              while True:
                  data = stderr.read()
                  if not data:
                      break
                  stderr_output.append(data)
              stderr.close()
      
              if stderr_output:
                  stderr_output = NULL_SEP.join(stderr_output)
                  if PY3:
                      stderr_output = stderr_output.decode(sys.stderr.encoding)
      
          #pid, status = os.waitpid(p.pid, 0)
          status = p.wait()
      
          if status != 0:
              raise InvocationException(
                  'Program terminated with status: %d. stderr follows: %s' % (
  >                   status, stderr_output))
  E           InvocationException: Program terminated with status: 1. stderr follows: Format: "jpe" not recognized. Use one of: canon cmap cmapx cmapx_np dot eps fig gd gd2 gv imap imap_np ismap pdf pic plain plain-ext png pov ps ps2 svg svgz tk vml vmlz x11 xdot xdot1.2 xdot1.4 xlib
  
  pydot_ng/__init__.py:1958: InvocationException
  ----------------------------- Captured stdout call -----------------------------
  #Failed rendering BAD(html_labels.dot)
  __________________________ TestGraphAPI.test_quoting ___________________________
  
  self = <test_pydot.TestGraphAPI testMethod=test_quoting>
  
      def test_quoting(self):
          import string
          g = pydot.Dot()
          g.add_node(pydot.Node("test", label=string.printable))
          #print g.to_string()
  >       data = g.create(format='jpe')
  
  test/test_pydot.py:350: 
  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
  
  self = <pydot_ng.Dot object at 0x7fb3224a9910>, prog = 'dot', format = 'jpe'
  
      def create(self, prog=None, format='ps'):
          """Creates and returns a Postscript representation of the graph.
      
              create will write the graph to a temporary dot file and process
              it with the program given by 'prog' (which defaults to 'twopi'),
              reading the Postscript output and returning it as a string is the
              operation is successful.
              On failure None is returned.
      
              There's also the preferred possibility of using:
      
                  create_'format'(prog='program')
      
              which are automatically defined for all the supported formats.
              [create_ps(), create_gif(), create_dia(), ...]
      
              If 'prog' is a list instead of a string the fist item is expected
              to be the program name, followed by any optional command-line
              arguments for it:
      
                  ['twopi', '-Tdot', '-s10']
              """
      
          if prog is None:
              prog = self.prog
      
          if isinstance(prog, (list, tuple)):
              prog, args = prog[0], prog[1:]
          else:
              args = []
      
          if self.progs is None:
              self.progs = find_graphviz()
              if self.progs is None:
                  raise InvocationException(
                      'GraphViz\'s executables not found')
      
          if prog not in self.progs:
              raise InvocationException(
                  'GraphViz\'s executable "%s" not found' % prog)
      
          if not os.path.exists(self.progs[prog]) or not os.path.isfile(self.progs[prog]):
              raise InvocationException(
                  'GraphViz\'s executable "%s" is not a file or doesn\'t exist' % self.progs[prog])
      
          tmp_fd, tmp_name = tempfile.mkstemp()
          os.close(tmp_fd)
          self.write(tmp_name)
          tmp_dir = os.path.dirname(tmp_name)
      
          # For each of the image files...
          for img in self.shape_files:
      
              # Get its data
              f = open(img, 'rb')
              f_data = f.read()
              f.close()
      
              # And copy it under a file with the same name in the temporary directory
              f = open(os.path.join(tmp_dir, os.path.basename(img)), 'wb')
              f.write(f_data)
              f.close()
      
          cmdline = [self.progs[prog], '-T' + format, tmp_name] + args
      
          p = subprocess.Popen(
              cmdline,
              cwd=tmp_dir,
              stderr=subprocess.PIPE, stdout=subprocess.PIPE)
      
          stderr = p.stderr
          stdout = p.stdout
      
          stdout_output = list()
          while True:
              data = stdout.read()
              if not data:
                  break
              stdout_output.append(data)
          stdout.close()
      
          stdout_output = NULL_SEP.join(stdout_output)
      
          if not stderr.closed:
              stderr_output = list()
              while True:
                  data = stderr.read()
                  if not data:
                      break
                  stderr_output.append(data)
              stderr.close()
      
              if stderr_output:
                  stderr_output = NULL_SEP.join(stderr_output)
                  if PY3:
                      stderr_output = stderr_output.decode(sys.stderr.encoding)
      
          #pid, status = os.waitpid(p.pid, 0)
          status = p.wait()
      
          if status != 0:
              raise InvocationException(
                  'Program terminated with status: %d. stderr follows: %s' % (
  >                   status, stderr_output))
  E           InvocationException: Program terminated with status: 1. stderr follows: Format: "jpe" not recognized. Use one of: canon cmap cmapx cmapx_np dot eps fig gd gd2 gv imap imap_np ismap pdf pic plain plain-ext png pov ps ps2 svg svgz tk vml vmlz x11 xdot xdot1.2 xdot1.4 xlib
  
  pydot_ng/__init__.py:1958: InvocationException
  ================ 2 failed, 19 passed, 2 skipped in 2.56 seconds ================
  debian/rules:27: recipe for target 'override_dh_auto_test' failed
  make[1]: *** [override_dh_auto_test] Error 1
  make[1]: Leaving directory '/home/lamby/temp/cdt.20160701115412.iR2SLMJMIF.python-pydot-ng/python-pydot-ng-1.0.0'
  debian/rules:10: recipe for target 'build' failed
  make: *** [build] Error 2

  [..]

The full build log is attached.


Regards,

-- 
      ,''`.
     : :'  :     Chris Lamb
     `. `'`      lamby at debian.org / chris-lamb.co.uk
       `-
-------------- next part --------------
A non-text attachment was scrubbed...
Name: python-pydot-ng.1.0.0-2.unstable.amd64.log.txt.gz
Type: application/octet-stream
Size: 8365 bytes
Desc: not available
URL: <http://lists.alioth.debian.org/pipermail/openstack-devel/attachments/20160701/dc3b228a/attachment-0001.obj>


More information about the Openstack-devel mailing list