tree bca6b378d59f03b770db5d5e45c1c20718524581
parent c9551eab009b3493dde8d9a038c1783a5c4c624c
author Javier Jardón <jjardon@gnome.org> 1515146085 +0000
committer Javier Jardón <jjardon@gnome.org> 1515158346 +0000

doc/source/install.rst: BuildStream depends on 'patch'

You will get errors like this if not:
"
Traceback (most recent call last):
  File "/root/.local/bin/bst", line 11, in <module>
    load_entry_point('BuildStream==0.1.dev1642+g8c0aaa1', 'console_scripts', 'bst')()
  File "/root/.local/lib/python3.6/site-packages/click/core.py", line 722, in __call__
    return self.main(*args, **kwargs)
  File "/root/.local/lib/python3.6/site-packages/buildstream/_frontend/main.py", line 132, in override_main
    standalone_mode=standalone_mode, **extra)
  File "/root/.local/lib/python3.6/site-packages/click/core.py", line 697, in main
    rv = self.invoke(ctx)
  File "/root/.local/lib/python3.6/site-packages/click/core.py", line 1066, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/root/.local/lib/python3.6/site-packages/click/core.py", line 895, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/root/.local/lib/python3.6/site-packages/click/core.py", line 535, in invoke
    return callback(*args, **kwargs)
  File "/root/.local/lib/python3.6/site-packages/click/decorators.py", line 27, in new_func
    return f(get_current_context().obj, *args, **kwargs)
  File "/root/.local/lib/python3.6/site-packages/buildstream/_frontend/main.py", line 219, in build
    app.pipeline.initialize(use_remote_cache=True, inconsistent=track)
  File "/root/.local/lib/python3.6/site-packages/buildstream/_pipeline.py", line 142, in initialize
    self.preflight()
  File "/root/.local/lib/python3.6/site-packages/buildstream/_pipeline.py", line 155, in preflight
    plugin.preflight()
  File "/root/.local/lib/python3.6/site-packages/buildstream/plugins/sources/patch.py", line 61, in preflight
    self.host_patch = utils.get_host_tool("patch")
  File "/root/.local/lib/python3.6/site-packages/buildstream/utils.py", line 417, in get_host_tool
    raise ProgramNotFoundError("Did not find '{}' in PATH: {}".format(name, search_path))
buildstream.utils.ProgramNotFoundError: Did not find 'patch' in PATH: /root/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
"
