extra-dev: run the remaining dev package installs in opam's install phase (9 recipes) - #3825
Merged
JasonGross merged 1 commit intoAug 11, 2026
Conversation
Nine extra-dev recipes still call `make install` from `build:` and carry no `install:` field, so the install runs under opam's build sandbox rather than its install sandbox. Under a sandboxed opam the build phase has no write access to the switch prefix, so these rows cannot install: `make install` fails, or worse, silently installs nothing while the build reports success. This is the same defect and the same mechanical fix as rocq-prover#3793, which cleared 14 of the 23 extra-dev rows that had it. These nine are the residue; after this commit the class is empty under extra-dev/. The edit is identical in every file: drop `[make "install"]` from the tail of `build:` and add `install: [make "install"]` immediately after. Nothing else changes -- no dependency, bound, url or remove: field is touched. coq-algebra.dev coq-distributed-reference-counting.dev coq-fermat4.dev coq-hoare-tut.dev coq-jordan-curve-theorem.dev coq-maths.dev coq-orb-stab.dev coq-tree-automata.dev coq-universe-comparator.1.0.1 Tested: coq-tree-automata.dev installs on a Rocq dev switch with exactly this split and does not without it. The other eight are not individually build-tested against a dev prover -- several have other, unrelated reasons not to build there -- so this commit is a fix to the recipes' install phase, not a claim that the nine packages build. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L9BGQT7XUuubV6C619DW4b
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This is a mechanical fix to the install phase of nine recipes. It is not a claim that nine packages build. The tested/untested split is spelled out below, because the file count here does not imply coverage.
The defect
Nine recipes under
extra-dev/runmake installas the last command ofbuild:and declare noinstall:field, so the install executes during opam's build phase instead of its install phase.This is the same defect and the same one-line mechanical fix as #3793, which cleared 14 recipes of exactly this shape. These nine are the residue that PR left behind.
Every hunk is identical:
[make "-j%{jobs}%"] - [make "install"] ] +install: [make "install"]9 files, +9/-9. No dependency, version bound,
url, orremove:field is touched anywhere in the diff.install:is the ordinary spelling in this repository already: 3563 of the 4157opamfiles in the tree carry one.The nine recipes
extra-dev/packages/coq-algebra/coq-algebra.devextra-dev/packages/coq-distributed-reference-counting/coq-distributed-reference-counting.devextra-dev/packages/coq-fermat4/coq-fermat4.devextra-dev/packages/coq-hoare-tut/coq-hoare-tut.devextra-dev/packages/coq-jordan-curve-theorem/coq-jordan-curve-theorem.devextra-dev/packages/coq-maths/coq-maths.devextra-dev/packages/coq-orb-stab/coq-orb-stab.devextra-dev/packages/coq-tree-automata/coq-tree-automata.devextra-dev/packages/coq-universe-comparator/coq-universe-comparator.1.0.1Eight are
.devrecipes;coq-universe-comparator.1.0.1is a numeric version carrying the same defect, and it lives underextra-dev/like the rest.Independent confirmation:
opam lintwarning 26opam lintimplements a slightly narrower form of this predicate itself:I walked all 4157
opamfiles in the tree withopam lintand grepped for that warning:A per-file comparison of the warning sets before and after shows the change removes warning 26 and introduces no new warning. All nine lint at
rc=0(with--warn=-21); the remaining warnings on them (36, 37, 47, 62) are pre-existing and untouched.Scope: why this stops at nine
A broader scan of the same 4157 files — "
build:performs the install (make install / dune install / a copy into%{lib}%) and the recipe has noinstall:field" — finds 24 at the base commit: these 9 underextra-dev/, 15 undercore-dev/, and 0 underreleased/. After this changeextra-dev/is at 0 and the archive-wide figure is 15.The 15
core-dev/recipes are deliberately left alone here — they are the historicalcoq.8.0.dev…coq.8.5~rc1andcoqide.8.5~beta*recipes. They are also why warning 26 alone undercounts: W26 additionally requires aremove:field, and those recipes have none, so opam's linter is silent about them. One concern per PR;extra-dev/going to 0 is a complete story on its own.Tested / untested
Tested: 1 of 9.
coq-tree-automatainstalls on a Rocq dev switch with exactly this build/install split, and does not install without it — that is the observation this whole PR came from.Two further recipes of the same shape,
coq-bddsandcoq-smc, were verified the same way before #3793 landed. They are not part of this PR, but they are the same mechanism working.Two things about the
coq-tree-automataresult that should not be blurred together. That install test was run against a fork whose sources have been fixed for a current prover. Upstreamcoq-contribs/tree-automata, which is what this recipe'surlactually names, is red today atcoq_makefile: Unknown option -fulland would not reach the install step at all.Untested: 8 of 9 — and none of the eight can be end-to-end tested today. I built each of the eight git-sourced upstreams in an isolated prefix (clone,
coq_makefile,make, thenmake install DESTDIR=…) against a current dev prover. All eight are red, all eight install zero files, and in every case the first failure is upstream source rot with nothing to do with the install phase:coq-tree-automatacoq_makefilerc=1,Unknown option -fullcoq-distributed-reference-countingcoq_makefilerc=1,Unknown option -optcoq-hoare-tutconstructor Iset … applied to 3 argumentscoq-fermat4infinite_descent: Attempt to save an incomplete proofcoq-jordan-curve-theoremlibrary Omega … not foundcoq-algebracoq-mathscoq-orb-stabThe ninth,
coq-universe-comparator.1.0.1, constrainscoq {>= "8.5~beta2" & < "8.5~beta3"}, so it cannot be resolved on any current switch and is untestable by construction.So the claim being made is precisely: these nine recipes now run their install in opam's install phase. Whether the underlying packages build is a separate question, and for eight of them the answer today is no.
Caveat on the opam version
The lint results above were produced with opam 2.5.1. CI here runs opam 2.1.2, which is the version #3793 was checked against. The edit is plain opam 2.0 syntax used by most of the repository already, so I do not expect a difference, but I have not reproduced the lint run under 2.1.2 locally.