> Contrarian examples are trivial to devise. Consider an autoconf based 
> generated file that builds if (and only if) certain files are detected. None 
> of those BuildRequires can be automated and generated during a spec file 
> parse with a pipe/file redirection.

That's more or less the Go system right now, computing deps is just a special 
compiler mode where it dumps what it will need instead of building the project 
(it is slowly evolving as a separate command, but still, it will continue to 
call Go compiler innards behind). So that depends what you call "build" if 
"building" means calling the compiler yes that's building, my definition of 
building is producing files.

I don't think it needs more than one phase at present though.

> Repopulating a buildroot with additional "dynamic" BuildRequires and 
> restarting an rpm build either needs to teach rpm how to install additional 
> packages as a side effect of parsing,

It only needs to teach rpm to:

- pass dynamic BRs requests to the buildsystem, 
- bomb if the BuildSystem is unable to provide them (and in case of no build 
system, bomb if the dynamic BRs are not already present).
- continue otherwise

There is not need to add BR provisioning logic to rpm itself, that has not been 
its role for quite a long time.

>or needs to be handled by dep solvers that populate the build root (entirely 
>out of scope for the current rpmbuild implementation) before rpmbuild is 
>invoked.

I think everyone would prefer the current responsibility separation where rpm 
does the parsing and building  and the build system does the provisioning

> There is currently no known way other than "works" to verify that the 
> BuildRequires passed to the depsolvers that populates the build system used.

You're over-engineering things. Builds can fail with static BR too, a requires 
system has never promised builds *will* succeed, only that the material they 
should need is present at build time.

> Only looping to test that the BuildRequires are sufficient.

That's why I proposed a two-command compute-BR/populate-BR system, that makes 
incremental dynamic BR composition possible, and places the packager/language 
integrator in command of when dynamic BR population is needed, and whether it 
is needed once or several times

(everyone will understand that the populate-BR is expensive in build time, so 
the packager's interest will be to batch as much compute-BRs as possible to 
limit populate-BRs calls)

Of course you can make the looping implicit, force the packager to declare all 
the compute-BR engines
(a project can include code in several languages) before a specific step in the 
spec, and then at this step loop

- execution of all compute-BR
- populate-BR 

till first step produces no dynamic BR not computed before.

That's a more brute-force approach. It will possibly be simpler to use by 
packagers, at the expense of increased build times (because the compute-BR 
logic will necessarily be simpler and more brutal too) and making some 
use-cases like declaring the BRs needed by unit tests in %check impossible.

> Hence any attempt to automate BuilRequires MUST have a persistent incremental 
> store from which the automagically generated BuildRequires can be retrieved 
> on the final build.

"final" build is a murky concept when a project can include code in several 
languages, and %checks can include many tests which are all small build units. 
I'd rather have a system that either declares the end of %prep or %prep-br the 
final limit after which no BR resolving occurs, or no rpm-enforced limit with 
an explicit fetch-BR command that can occur in all spec sections that need new 
BRs

Now as you astutely noted:

1. adding BRs is necessarily incremental (dynamic BR removal is too horrid to 
contemplate and all the systems I know are additive, not substractive, at worst 
the build commands know how to ignore stuff it doesn't need or want)
2. rpm needs to remember the result of the last compute-BR call to 

- abort the loop when no new BRs are produced in case of implicit looping
- return a "you already asked this" error code from populate-BR if you go the 
explicit call route

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/rpm-software-management/rpm/issues/104#issuecomment-366426484
_______________________________________________
Rpm-maint mailing list
Rpm-maint@lists.rpm.org
http://lists.rpm.org/mailman/listinfo/rpm-maint

Reply via email to