[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#981913: ITP: ognibuild -- Wrapper with common interface for invoking any kind of build tool



On Fri, Feb 05, 2021 at 03:03:07PM +0200, Andrius Merkys wrote:
> On 2021-02-05 04:11, Jelmer Vernooij wrote:
> > * Package name    : ognibuild
> >   Version         : 0.0.1
> >   Upstream Author : Jelmer Vernooij
> > * URL             : https://github.com/jelmer/ognibuild
> > * License         : GPL
> >   Programming Lang: Python
> >   Description     : Wrapper with common interface for invoking any kind of build tool
> > 
> > Ognibuild is a simple wrapper with a common interface for invoking any kind of
> > build tool.
> > 
> > The ideas is that it can be run to build and install any source code directory
> > by detecting the build system that is in use and invoking that with the correct
> > parameters.
> 
> Just curious: does it share code/logic with debhelper? AFAIK, debhelper
> also applies many heuristics to build/install packages.
It doesn't share any code with debhelper today; there are some
similarities in what they're trying to do but their constraints are
quite different.

Within a compat level debhelper needs to be consistent in its
behaviour, and predictable.

ognibuild provides no such guarantees and newer versions
may behave slightly differently, as support for more build systems is
added or tweaked. debhelper is specific Debian, ognibuild is
not.

> > It can also detect and install missing dependencies.
> Do you mean Debian packages?
That's what it's currently used for, but it's not specific to Debian.

It uses a two-tier approach.

It detects "upstream dependencies" from both upstream build
configuration (e.g. setup.py) and build logs (e.g. "ModuleNotFoundError: unable
to find module blah").

As a second step, it can then attempt to translate the upstream
dependency (e.g. {'family': 'python', 'module': 'blah'} to a Debian
package name by using apt-file or some other set of rules. That Debian
package name can then be added to the build dependencies and (in the
case of an error extract from a build log) the build retried to verify
that the new dependency addresses the build error.

It could also do something else as the second step, like invoke "pip
install blah", or perhaps translate the upstream dependency to a
RPM package name.

Cheers,

Jelmer

Attachment: signature.asc
Description: PGP signature


Reply to: