2026-08-25 14:48:28 +02:00
# conan-utils
Add MIT license, full README and CLAUDE.md
- LICENSE: MIT, referenced from pyproject.toml metadata.
- README: explains what the project is, how to install conandeps with uv,
every option, exit codes, a worked example with a conflict/override
walkthrough, how it works internally, and the container dev workflow.
- CLAUDE.md: hard constraints (Conan 1.66 only, Python <3.12, all work in
the container, private remote "knor" never available in tests) and the
design decisions behind conandeps so future sessions do not revisit them.
- Ignore uv build output (dist/).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYNdaGDrpaqDyT8QtrTQbM
2026-08-25 14:56:00 +02:00
Small, single-file utilities for **Conan 1.x ** (targeting 1.66) that answer
questions the stock `conan info` / `conan search` commands make hard to answer.
Development and testing happen inside a pinned Podman container so nothing from
the host environment leaks in.
2026-08-25 14:48:28 +02:00
Add MIT license, full README and CLAUDE.md
- LICENSE: MIT, referenced from pyproject.toml metadata.
- README: explains what the project is, how to install conandeps with uv,
every option, exit codes, a worked example with a conflict/override
walkthrough, how it works internally, and the container dev workflow.
- CLAUDE.md: hard constraints (Conan 1.66 only, Python <3.12, all work in
the container, private remote "knor" never available in tests) and the
design decisions behind conandeps so future sessions do not revisit them.
- Ignore uv build output (dist/).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYNdaGDrpaqDyT8QtrTQbM
2026-08-25 14:56:00 +02:00
Licensed under the [MIT License ](LICENSE ).
2026-08-25 14:48:28 +02:00
Add MIT license, full README and CLAUDE.md
- LICENSE: MIT, referenced from pyproject.toml metadata.
- README: explains what the project is, how to install conandeps with uv,
every option, exit codes, a worked example with a conflict/override
walkthrough, how it works internally, and the container dev workflow.
- CLAUDE.md: hard constraints (Conan 1.66 only, Python <3.12, all work in
the container, private remote "knor" never available in tests) and the
design decisions behind conandeps so future sessions do not revisit them.
- Ignore uv build output (dist/).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYNdaGDrpaqDyT8QtrTQbM
2026-08-25 14:56:00 +02:00
## Tools
2026-08-25 14:48:28 +02:00
Add MIT license, full README and CLAUDE.md
- LICENSE: MIT, referenced from pyproject.toml metadata.
- README: explains what the project is, how to install conandeps with uv,
every option, exit codes, a worked example with a conflict/override
walkthrough, how it works internally, and the container dev workflow.
- CLAUDE.md: hard constraints (Conan 1.66 only, Python <3.12, all work in
the container, private remote "knor" never available in tests) and the
design decisions behind conandeps so future sessions do not revisit them.
- Ignore uv build output (dist/).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYNdaGDrpaqDyT8QtrTQbM
2026-08-25 14:56:00 +02:00
| Tool | What it does |
|------|--------------|
| [`conandeps` ](#conandeps ) | Lists direct/indirect dependencies, checks which build types have binaries on a remote for your exact profile, and shows requirement overrides. |
2026-08-25 14:48:28 +02:00
Add MIT license, full README and CLAUDE.md
- LICENSE: MIT, referenced from pyproject.toml metadata.
- README: explains what the project is, how to install conandeps with uv,
every option, exit codes, a worked example with a conflict/override
walkthrough, how it works internally, and the container dev workflow.
- CLAUDE.md: hard constraints (Conan 1.66 only, Python <3.12, all work in
the container, private remote "knor" never available in tests) and the
design decisions behind conandeps so future sessions do not revisit them.
- Ignore uv build output (dist/).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYNdaGDrpaqDyT8QtrTQbM
2026-08-25 14:56:00 +02:00
## conandeps
2026-08-25 14:51:38 +02:00
Add MIT license, full README and CLAUDE.md
- LICENSE: MIT, referenced from pyproject.toml metadata.
- README: explains what the project is, how to install conandeps with uv,
every option, exit codes, a worked example with a conflict/override
walkthrough, how it works internally, and the container dev workflow.
- CLAUDE.md: hard constraints (Conan 1.66 only, Python <3.12, all work in
the container, private remote "knor" never available in tests) and the
design decisions behind conandeps so future sessions do not revisit them.
- Ignore uv build output (dist/).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYNdaGDrpaqDyT8QtrTQbM
2026-08-25 14:56:00 +02:00
Given a `conanfile.py` , `conandeps` tells you three things in one report:
1. **What you depend on ** – direct and indirect requirements, host and build
context, as a table and as a tree.
2. **Which binaries are missing ** – for every dependency, whether a package
2026-08-25 15:14:54 +02:00
exists * on the remote * for **Release, Debug and RelWithDebInfo ** (or any
list you choose), evaluated for * your exact profile * (compiler, version,
libcxx, arch, options, …), not "some binary with that build type". Every
cell names the remote that has the binary; a binary that only lives in
your local cache is reported as not available.
Add MIT license, full README and CLAUDE.md
- LICENSE: MIT, referenced from pyproject.toml metadata.
- README: explains what the project is, how to install conandeps with uv,
every option, exit codes, a worked example with a conflict/override
walkthrough, how it works internally, and the container dev workflow.
- CLAUDE.md: hard constraints (Conan 1.66 only, Python <3.12, all work in
the container, private remote "knor" never available in tests) and the
design decisions behind conandeps so future sessions do not revisit them.
- Ignore uv build output (dist/).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYNdaGDrpaqDyT8QtrTQbM
2026-08-25 14:56:00 +02:00
3. **Which requirements were overridden ** – both explicit
`self.requires("x/2.0", override=True)` and implicit ones, where a
downstream consumer simply asks for a newer version than a transitive
dependency declared. Each override is listed with who wanted what and who
forced the change, and annotated on the exact edge of the dependency tree
where it happened.
### Installation
2026-08-25 15:07:07 +02:00
Requires Python 3.8 or newer. With
Add MIT license, full README and CLAUDE.md
- LICENSE: MIT, referenced from pyproject.toml metadata.
- README: explains what the project is, how to install conandeps with uv,
every option, exit codes, a worked example with a conflict/override
walkthrough, how it works internally, and the container dev workflow.
- CLAUDE.md: hard constraints (Conan 1.66 only, Python <3.12, all work in
the container, private remote "knor" never available in tests) and the
design decisions behind conandeps so future sessions do not revisit them.
- Ignore uv build output (dist/).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYNdaGDrpaqDyT8QtrTQbM
2026-08-25 14:56:00 +02:00
[uv ](https://docs.astral.sh/uv/ ):
```bash
# As a command on your PATH, in its own venv with Conan 1.66:
2026-08-25 15:00:10 +02:00
uv tool install git+https://kode.naiv.no/olemd/conan-1.6-utilities.git
# with an SSH key: uv tool install git+ssh://git@kode.naiv.no:2222/olemd/conan-1.6-utilities.git
# from a checkout: uv tool install .
2026-08-25 15:39:43 +02:00
conandeps path/to/conanfile.py -r myremote
Add MIT license, full README and CLAUDE.md
- LICENSE: MIT, referenced from pyproject.toml metadata.
- README: explains what the project is, how to install conandeps with uv,
every option, exit codes, a worked example with a conflict/override
walkthrough, how it works internally, and the container dev workflow.
- CLAUDE.md: hard constraints (Conan 1.66 only, Python <3.12, all work in
the container, private remote "knor" never available in tests) and the
design decisions behind conandeps so future sessions do not revisit them.
- Ignore uv build output (dist/).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYNdaGDrpaqDyT8QtrTQbM
2026-08-25 14:56:00 +02:00
# Or run the single file directly, no checkout needed (PEP 723 inline metadata):
2026-08-25 15:39:43 +02:00
uv run conandeps.py path/to/conanfile.py -r myremote
2026-08-25 14:51:38 +02:00
```
Add MIT license, full README and CLAUDE.md
- LICENSE: MIT, referenced from pyproject.toml metadata.
- README: explains what the project is, how to install conandeps with uv,
every option, exit codes, a worked example with a conflict/override
walkthrough, how it works internally, and the container dev workflow.
- CLAUDE.md: hard constraints (Conan 1.66 only, Python <3.12, all work in
the container, private remote "knor" never available in tests) and the
design decisions behind conandeps so future sessions do not revisit them.
- Ignore uv build output (dist/).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYNdaGDrpaqDyT8QtrTQbM
2026-08-25 14:56:00 +02:00
The tool's venv carries its own Conan 1.66 and does not touch the Conan you
build with, but it reads the same `~/.conan` configuration: profiles,
`remotes.json` and stored remote credentials. Log in to your remote once with
`conan user -r <remote> -p` (or set `CONAN_LOGIN_USERNAME` / `CONAN_PASSWORD` )
if it requires authentication.
2026-08-25 14:51:38 +02:00
Add MIT license, full README and CLAUDE.md
- LICENSE: MIT, referenced from pyproject.toml metadata.
- README: explains what the project is, how to install conandeps with uv,
every option, exit codes, a worked example with a conflict/override
walkthrough, how it works internally, and the container dev workflow.
- CLAUDE.md: hard constraints (Conan 1.66 only, Python <3.12, all work in
the container, private remote "knor" never available in tests) and the
design decisions behind conandeps so future sessions do not revisit them.
- Ignore uv build output (dist/).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYNdaGDrpaqDyT8QtrTQbM
2026-08-25 14:56:00 +02:00
### Usage
2026-08-25 14:51:38 +02:00
```
Add MIT license, full README and CLAUDE.md
- LICENSE: MIT, referenced from pyproject.toml metadata.
- README: explains what the project is, how to install conandeps with uv,
every option, exit codes, a worked example with a conflict/override
walkthrough, how it works internally, and the container dev workflow.
- CLAUDE.md: hard constraints (Conan 1.66 only, Python <3.12, all work in
the container, private remote "knor" never available in tests) and the
design decisions behind conandeps so future sessions do not revisit them.
- Ignore uv build output (dist/).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYNdaGDrpaqDyT8QtrTQbM
2026-08-25 14:56:00 +02:00
conandeps CONANFILE [-r REMOTE] [-pr PROFILE] [-s KEY=VALUE] [-o PKG:KEY=VALUE]
[--build-types Release,Debug,RelWithDebInfo] [-u] [--html FILE] [-v]
2026-08-25 14:51:38 +02:00
```
Add MIT license, full README and CLAUDE.md
- LICENSE: MIT, referenced from pyproject.toml metadata.
- README: explains what the project is, how to install conandeps with uv,
every option, exit codes, a worked example with a conflict/override
walkthrough, how it works internally, and the container dev workflow.
- CLAUDE.md: hard constraints (Conan 1.66 only, Python <3.12, all work in
the container, private remote "knor" never available in tests) and the
design decisions behind conandeps so future sessions do not revisit them.
- Ignore uv build output (dist/).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYNdaGDrpaqDyT8QtrTQbM
2026-08-25 14:56:00 +02:00
| Option | Meaning |
|--------|---------|
| `CONANFILE` | Path to `conanfile.py` (or a directory containing one). |
2026-08-25 15:39:43 +02:00
| `-r` , `--remote` | Remote to look for binaries in, e.g. `-r myremote` . Default: all configured remotes. |
Add MIT license, full README and CLAUDE.md
- LICENSE: MIT, referenced from pyproject.toml metadata.
- README: explains what the project is, how to install conandeps with uv,
every option, exit codes, a worked example with a conflict/override
walkthrough, how it works internally, and the container dev workflow.
- CLAUDE.md: hard constraints (Conan 1.66 only, Python <3.12, all work in
the container, private remote "knor" never available in tests) and the
design decisions behind conandeps so future sessions do not revisit them.
- Ignore uv build output (dist/).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYNdaGDrpaqDyT8QtrTQbM
2026-08-25 14:56:00 +02:00
| `-pr` , `--profile` | Profile to evaluate with (repeatable, like `conan -pr` ). Default: your default profile. |
| `-s` , `-o` | Extra settings / options, repeatable, same syntax as `conan install` . |
| `--build-types` | Comma-separated build types to check. Default: `Release,Debug,RelWithDebInfo` . |
| `-u` , `--update` | Ask the remote for newer recipes/binaries (`conan -u` ). |
| `--html FILE` | Also write a self-contained HTML report (no scripts, no external assets). |
2026-08-25 15:07:07 +02:00
| `-v` | Stream Conan's own output to stderr live. |
| `-q` | Suppress the progress lines on stderr. |
2026-08-25 15:19:22 +02:00
| `--color auto\|always\|never` | Colour the text report. Default `auto` : only on a terminal, honours `NO_COLOR` . |
2026-08-25 15:07:07 +02:00
2026-08-25 15:39:43 +02:00
Progress (`[1/3] resolving graph for build_type=Release on myremote ...` ) goes to
2026-08-25 15:07:07 +02:00
stderr; the report itself goes to stdout, so redirecting stdout to a file
gives a clean report.
2026-08-25 14:51:38 +02:00
Add MIT license, full README and CLAUDE.md
- LICENSE: MIT, referenced from pyproject.toml metadata.
- README: explains what the project is, how to install conandeps with uv,
every option, exit codes, a worked example with a conflict/override
walkthrough, how it works internally, and the container dev workflow.
- CLAUDE.md: hard constraints (Conan 1.66 only, Python <3.12, all work in
the container, private remote "knor" never available in tests) and the
design decisions behind conandeps so future sessions do not revisit them.
- Ignore uv build output (dist/).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYNdaGDrpaqDyT8QtrTQbM
2026-08-25 14:56:00 +02:00
Exit status: `0` all binaries present, `1` at least one is missing, `2` Conan
failed to build the graph (for example a version conflict). This makes it
usable as a CI gate.
### Example
2026-08-25 14:51:38 +02:00
2026-08-25 14:48:28 +02:00
```
2026-08-25 15:39:43 +02:00
$ conandeps MyProject/conanfile.py -r myremote
Add MIT license, full README and CLAUDE.md
- LICENSE: MIT, referenced from pyproject.toml metadata.
- README: explains what the project is, how to install conandeps with uv,
every option, exit codes, a worked example with a conflict/override
walkthrough, how it works internally, and the container dev workflow.
- CLAUDE.md: hard constraints (Conan 1.66 only, Python <3.12, all work in
the container, private remote "knor" never available in tests) and the
design decisions behind conandeps so future sessions do not revisit them.
- Ignore uv build output (dist/).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYNdaGDrpaqDyT8QtrTQbM
2026-08-25 14:56:00 +02:00
conandeps report for MyProject/conanfile.py
2026-08-25 15:39:43 +02:00
remote : myremote
Add MIT license, full README and CLAUDE.md
- LICENSE: MIT, referenced from pyproject.toml metadata.
- README: explains what the project is, how to install conandeps with uv,
every option, exit codes, a worked example with a conflict/override
walkthrough, how it works internally, and the container dev workflow.
- CLAUDE.md: hard constraints (Conan 1.66 only, Python <3.12, all work in
the container, private remote "knor" never available in tests) and the
design decisions behind conandeps so future sessions do not revisit them.
- Ignore uv build output (dist/).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYNdaGDrpaqDyT8QtrTQbM
2026-08-25 14:56:00 +02:00
profile: arch=x86_64, compiler=gcc, compiler.libcxx=libstdc++11, compiler.version=14, os=Linux
Dependencies (4) and binary availability
2026-08-25 15:42:22 +02:00
package via ctx Release Debug RelWithDebInfo
---------------------------------------------------------------------
MyDepA/1.0 - host myremote myremote myremote
MyDepB/1.0 - host myremote myremote myremote
boost/1.8 MyDepA host myremote myremote myremote
MyDepB -> Zigma
Zigma/1.0 MyDepB host myremote myremote MISSING
Add MIT license, full README and CLAUDE.md
- LICENSE: MIT, referenced from pyproject.toml metadata.
- README: explains what the project is, how to install conandeps with uv,
every option, exit codes, a worked example with a conflict/override
walkthrough, how it works internally, and the container dev workflow.
- CLAUDE.md: hard constraints (Conan 1.66 only, Python <3.12, all work in
the container, private remote "knor" never available in tests) and the
design decisions behind conandeps so future sessions do not revisit them.
- Ignore uv build output (dist/).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYNdaGDrpaqDyT8QtrTQbM
2026-08-25 14:56:00 +02:00
2026-08-25 15:19:22 +02:00
Missing binaries (1)
package build type package_id reason
---------------------------------------------------------------------------------------
Zigma/1.0 RelWithDebInfo 3f9c2b7d0e6a4f18c5d9a0b3e7f1c2d4a5b6e21a no binary anywhere
Add MIT license, full README and CLAUDE.md
- LICENSE: MIT, referenced from pyproject.toml metadata.
- README: explains what the project is, how to install conandeps with uv,
every option, exit codes, a worked example with a conflict/override
walkthrough, how it works internally, and the container dev workflow.
- CLAUDE.md: hard constraints (Conan 1.66 only, Python <3.12, all work in
the container, private remote "knor" never available in tests) and the
design decisions behind conandeps so future sessions do not revisit them.
- Ignore uv build output (dist/).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYNdaGDrpaqDyT8QtrTQbM
2026-08-25 14:56:00 +02:00
Overrides (1)
2026-08-25 15:19:22 +02:00
package wanted forced to by kind
-------------------------------------------------------------------------------------
Zigma/1.0 boost/1.7 boost/1.8 your conanfile implicit (newer requirement downstream)
Add MIT license, full README and CLAUDE.md
- LICENSE: MIT, referenced from pyproject.toml metadata.
- README: explains what the project is, how to install conandeps with uv,
every option, exit codes, a worked example with a conflict/override
walkthrough, how it works internally, and the container dev workflow.
- CLAUDE.md: hard constraints (Conan 1.66 only, Python <3.12, all work in
the container, private remote "knor" never available in tests) and the
design decisions behind conandeps so future sessions do not revisit them.
- Ignore uv build output (dist/).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYNdaGDrpaqDyT8QtrTQbM
2026-08-25 14:56:00 +02:00
Dependency hierarchy
2026-08-25 15:19:22 +02:00
Add MIT license, full README and CLAUDE.md
- LICENSE: MIT, referenced from pyproject.toml metadata.
- README: explains what the project is, how to install conandeps with uv,
every option, exit codes, a worked example with a conflict/override
walkthrough, how it works internally, and the container dev workflow.
- CLAUDE.md: hard constraints (Conan 1.66 only, Python <3.12, all work in
the container, private remote "knor" never available in tests) and the
design decisions behind conandeps so future sessions do not revisit them.
- Ignore uv build output (dist/).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYNdaGDrpaqDyT8QtrTQbM
2026-08-25 14:56:00 +02:00
MyProject/conanfile.py
|-- MyDepA/1.0
2026-08-25 15:45:48 +02:00
| `-- boost/1.8 [MyDepA -> boost]
Add MIT license, full README and CLAUDE.md
- LICENSE: MIT, referenced from pyproject.toml metadata.
- README: explains what the project is, how to install conandeps with uv,
every option, exit codes, a worked example with a conflict/override
walkthrough, how it works internally, and the container dev workflow.
- CLAUDE.md: hard constraints (Conan 1.66 only, Python <3.12, all work in
the container, private remote "knor" never available in tests) and the
design decisions behind conandeps so future sessions do not revisit them.
- Ignore uv build output (dist/).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYNdaGDrpaqDyT8QtrTQbM
2026-08-25 14:56:00 +02:00
`-- MyDepB/1.0
2026-08-25 15:45:48 +02:00
`-- Zigma/1.0 [MyDepB -> Zigma; MISSING: RelWithDebInfo]
`-- boost/1.8 [MyDepB -> Zigma -> boost; overrides boost/1.7 (implicit by your conanfile)]
2026-08-25 14:48:28 +02:00
```
2026-08-25 15:19:22 +02:00
On a terminal the tables are coloured (green = on the remote, red = missing,
yellow = cache-only / overridden version); `--color never` or the `NO_COLOR`
environment variable turns that off, and redirecting stdout to a file never
produces colour codes unless you pass `--color always` . The HTML report uses
the same colour coding.
2026-08-25 15:39:03 +02:00
Reading the table: the `via` column is the shortest path from your conanfile
to the package – `-` for a direct dependency, `MyDepB` for something MyDepB
2026-08-25 15:42:22 +02:00
requires, `MyDepB -> Zigma` for something Zigma requires, and so on. A
package required by several others gets one line per parent (boost above is
pulled in by both MyDepA and Zigma), shortest path first. Rows are sorted
direct-first, then by path, so a branch's transitive dependencies stay
together; the dependency hierarchy section at the end shows the same
2026-08-25 15:45:48 +02:00
information as a tree, and every indirect node there also spells out the
path of its branch so deep indentation never has to be counted.
2026-08-25 15:29:46 +02:00
Add MIT license, full README and CLAUDE.md
- LICENSE: MIT, referenced from pyproject.toml metadata.
- README: explains what the project is, how to install conandeps with uv,
every option, exit codes, a worked example with a conflict/override
walkthrough, how it works internally, and the container dev workflow.
- CLAUDE.md: hard constraints (Conan 1.66 only, Python <3.12, all work in
the container, private remote "knor" never available in tests) and the
design decisions behind conandeps so future sessions do not revisit them.
- Ignore uv build output (dist/).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYNdaGDrpaqDyT8QtrTQbM
2026-08-25 14:56:00 +02:00
2026-08-25 15:39:43 +02:00
* a remote name (e.g. `myremote` ) – the remote has a binary for the package_id your
2026-08-25 15:14:54 +02:00
profile produces. Hover a cell in the HTML report to see the package_id.
* `not available` – the binary exists only in your local Conan cache; the
remote does not have it, so a clean machine or CI would fail. Counts as
missing.
* `MISSING` – no binary anywhere.
Add MIT license, full README and CLAUDE.md
- LICENSE: MIT, referenced from pyproject.toml metadata.
- README: explains what the project is, how to install conandeps with uv,
every option, exit codes, a worked example with a conflict/override
walkthrough, how it works internally, and the container dev workflow.
- CLAUDE.md: hard constraints (Conan 1.66 only, Python <3.12, all work in
the container, private remote "knor" never available in tests) and the
design decisions behind conandeps so future sessions do not revisit them.
- Ignore uv build output (dist/).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYNdaGDrpaqDyT8QtrTQbM
2026-08-25 14:56:00 +02:00
* `-` – not applicable (Conan marked the node `Skip` or `Editable` ).
* Header-only packages show `ok` everywhere: their package_id ignores
`build_type` .
Things worth knowing:
* Two sibling dependencies requiring different versions of the same package
with no decision from your conanfile is a **conflict ** in Conan 1.x, not an
override. Conan refuses to build the graph, and `conandeps` prints Conan's
conflict message and exits with `2` .
* An override can change the package_id of the package whose requirement was
rewritten (with the default `semver_direct_mode` , a direct requirement's
version is part of the id). If that makes * all * build types of a package go
`MISSING` , the report is telling the truth: no binary on the remote was built
against the overridden version.
2026-08-25 14:48:28 +02:00
### How it works
Add MIT license, full README and CLAUDE.md
- LICENSE: MIT, referenced from pyproject.toml metadata.
- README: explains what the project is, how to install conandeps with uv,
every option, exit codes, a worked example with a conflict/override
walkthrough, how it works internally, and the container dev workflow.
- CLAUDE.md: hard constraints (Conan 1.66 only, Python <3.12, all work in
the container, private remote "knor" never available in tests) and the
design decisions behind conandeps so future sessions do not revisit them.
- Ignore uv build output (dist/).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYNdaGDrpaqDyT8QtrTQbM
2026-08-25 14:56:00 +02:00
Rather than hand-matching `conan search` output against your profile, the
dependency graph is built once per build type through Conan's own `info` API –
the same code path `conan install` uses – and each node's binary status
(`Cache` , `Download` , `Update` , `Missing` , …) is read back. That is why
2026-08-25 14:48:28 +02:00
`package_id()` customisations, options and `default_package_id_mode` are
2026-08-25 15:14:54 +02:00
honoured exactly as a real install would. Conan reports `Cache` without
consulting the remote, so for those nodes the tool additionally runs a
package search on the remote and only counts the binary as available if the
same package_id is found there.
2026-08-25 14:48:28 +02:00
Add MIT license, full README and CLAUDE.md
- LICENSE: MIT, referenced from pyproject.toml metadata.
- README: explains what the project is, how to install conandeps with uv,
every option, exit codes, a worked example with a conflict/override
walkthrough, how it works internally, and the container dev workflow.
- CLAUDE.md: hard constraints (Conan 1.66 only, Python <3.12, all work in
the container, private remote "knor" never available in tests) and the
design decisions behind conandeps so future sessions do not revisit them.
- Ignore uv build output (dist/).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYNdaGDrpaqDyT8QtrTQbM
2026-08-25 14:56:00 +02:00
Conan 1.x does not keep override information on the graph object; the only
trace is a `WARN: <pkg>: requirement A overridden by B to C` line written while
the graph is resolved. The tool captures Conan's output stream during graph
construction and parses those lines. A test pins the message format.
2026-08-25 14:48:28 +02:00
2026-08-25 16:18:05 +02:00
## Releases
Tagged releases with a built wheel, source distribution and `SHA256SUMS` are
published on the
[releases page ](https://kode.naiv.no/olemd/conan-1.6-utilities/releases ).
Latest: [v0.1.0 ](https://kode.naiv.no/olemd/conan-1.6-utilities/releases/tag/v0.1.0 ).
Install a specific release with
```bash
uv tool install git+https://kode.naiv.no/olemd/conan-1.6-utilities.git@v0 .1.0
# or, from the downloaded wheel:
uv tool install conan_utils-0.1.0-py3-none-any.whl
```
To cut a release: bump `version` in `pyproject.toml` , push an annotated tag
`vX.Y.Z` , build with `./dev.sh uv build` , and create the Forgejo release with
the artifacts attached (`fj release create --tag vX.Y.Z --attach ...` ).
2026-08-25 14:48:28 +02:00
## Development
Add MIT license, full README and CLAUDE.md
- LICENSE: MIT, referenced from pyproject.toml metadata.
- README: explains what the project is, how to install conandeps with uv,
every option, exit codes, a worked example with a conflict/override
walkthrough, how it works internally, and the container dev workflow.
- CLAUDE.md: hard constraints (Conan 1.66 only, Python <3.12, all work in
the container, private remote "knor" never available in tests) and the
design decisions behind conandeps so future sessions do not revisit them.
- Ignore uv build output (dist/).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYNdaGDrpaqDyT8QtrTQbM
2026-08-25 14:56:00 +02:00
Everything runs inside the `conan-utils-dev` container (Conan 1.66, Python
3.11, ruff, pytest, uv) via the `dev.sh` wrapper, which mounts the checkout at
`/work` :
```bash
./dev.sh build # build the image
./dev.sh python -m pytest # run the tests
2026-08-25 14:48:28 +02:00
./dev.sh ruff check . && ./dev.sh ruff format .
Add MIT license, full README and CLAUDE.md
- LICENSE: MIT, referenced from pyproject.toml metadata.
- README: explains what the project is, how to install conandeps with uv,
every option, exit codes, a worked example with a conflict/override
walkthrough, how it works internally, and the container dev workflow.
- CLAUDE.md: hard constraints (Conan 1.66 only, Python <3.12, all work in
the container, private remote "knor" never available in tests) and the
design decisions behind conandeps so future sessions do not revisit them.
- Ignore uv build output (dist/).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYNdaGDrpaqDyT8QtrTQbM
2026-08-25 14:56:00 +02:00
./dev.sh # interactive shell
2026-08-25 14:48:28 +02:00
```
The tests start a throw-away `conan_server` inside the container, upload a
Add MIT license, full README and CLAUDE.md
- LICENSE: MIT, referenced from pyproject.toml metadata.
- README: explains what the project is, how to install conandeps with uv,
every option, exit codes, a worked example with a conflict/override
walkthrough, how it works internally, and the container dev workflow.
- CLAUDE.md: hard constraints (Conan 1.66 only, Python <3.12, all work in
the container, private remote "knor" never available in tests) and the
design decisions behind conandeps so future sessions do not revisit them.
- Ignore uv build output (dist/).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYNdaGDrpaqDyT8QtrTQbM
2026-08-25 14:56:00 +02:00
small dependency graph with deliberately missing binaries and both kinds of
override, wipe the local cache, and run the tool against the server using an
isolated `CONAN_USER_HOME` . Your own `~/.conan` is never touched.
See [CLAUDE.md ](CLAUDE.md ) for the conventions that apply when working on this
repository.