Metadata-Version: 2.4
Name: kmpkg
Version: 0.3.3
Summary: vcpkg-compatible package manager with C++ project scaffolding
Author-email: "Kumo Inc." <dev@kumose.cc>
License-Expression: Apache-2.0
Project-URL: Homepage, https://github.com/kumose/kmpkg
Project-URL: Repository, https://github.com/kumose/kmpkg.git
Project-URL: Documentation, https://github.com/kumose/kmpkg
Keywords: vcpkg,package-manager,c++,cmake,kmpkg
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development :: Build Tools
Requires-Python: >=3.8
Description-Content-Type: text/markdown
Requires-Dist: click>=8.0
Requires-Dist: rich>=12.0

# kmpkg

A Python reimplementation of the vcpkg package manager, with built-in C++ project scaffolding via kmcmake templates.

## Installation

```bash
pip install kmpkg
```

Requires Python >= 3.8 and `cmake` on PATH.

## Quick Start

```bash
# Create a C++ project from kmcmake template
kmpkg new --project --name myapp -o ./myapp

# Install a port
kmpkg install fmt

# Search available ports
kmpkg search fmt

# List installed ports
kmpkg list
```

## Configuration

kmpkg reads `kmpkg-configuration.json` from the current directory or kmpkg root:

```json
{
  "default-registry": {
    "kind": "git",
    "baseline": "d5c94a00e9d3d27a88399368d789971bc7e4fca8",
    "repository": "https://github.com/kumose/kmpkgcore.git"
  }
}
```

The root directory defaults to `$KMPKG_ROOT` or `/home/jeff/kmpkgcore`.

## Commands

### Project Creation

| Command | Description |
|---------|-------------|
| `kmpkg new --project --name X -o path` | Create C++ project from kmcmake template |
| `kmpkg new --name X --version Y` | Create a new `kmpkg.json` manifest |
| `kmpkg add fmt` | Add dependency to manifest |

### Package Management

| Command | Description |
|---------|-------------|
| `kmpkg install fmt` | Build and install a port |
| `kmpkg install` | Install all dependencies from `kmpkg.json` |
| `kmpkg remove fmt` | Uninstall a port |
| `kmpkg update` | List upgradable packages |
| `kmpkg upgrade` | Rebuild outdated packages |

### Build

| Command | Description |
|---------|-------------|
| `kmpkg build fmt` | Build a single port |
| `kmpkg build fmt --overrides fmt=10.0.0` | Build with version overrides |
| `kmpkg ci --all` | CI build all ports |
| `kmpkg test-features fmt` | Test all feature combinations |
| `kmpkg check-support fmt` | Check if port is supported |

### Information

| Command | Description |
|---------|-------------|
| `kmpkg list` | List all available ports |
| `kmpkg search fmt` | Search ports by pattern |
| `kmpkg find fmt` | Alias for search |
| `kmpkg package-info fmt` | Show port details |
| `kmpkg depend-info fmt` | Show dependency tree |
| `kmpkg owns file.h` | Find which package owns a file |
| `kmpkg license-report` | Show licenses of installed packages |

### Registry Management

| Command | Description |
|---------|-------------|
| `kmpkg clone -i <src> -o <dst> -p fmt` | Clone ports with recursive deps |
| `kmpkg publish fmt` | Publish port changes |
| `kmpkg update-registry` | Fetch latest from git registry |
| `kmpkg regenerate` | Regenerate version DB from ports/ |
| `kmpkg x-add-version fmt` | Update version database |
| `kmpkg x-update-baseline --add fmt=1.0` | Add baseline entry |
| `kmpkg gitlog` | Show registry git log |
| `kmpkg gitlog -p fmt` | Show port change history |

### Integration

| Command | Description |
|---------|-------------|
| `kmpkg integrate install` | Set up CMake integration |
| `kmpkg integrate remove` | Remove CMake integration |
| `kmpkg autocomplete bash` | Install shell completion |
| `kmpkg autocomplete bash --remove` | Remove shell completion |
| `kmpkg env --bin` | Create build environment |

### Export & Config

| Command | Description |
|---------|-------------|
| `kmpkg export fmt` | Export installed packages |
| `kmpkg config show` | Show configuration |
| `kmpkg config default-triplet x64-linux` | Set default triplet |
| `kmpkg version` | Show version |

## Architecture

```
kmpkg/
  cli/              -- Click-based CLI (54 commands)
  core/             -- Core modules
    builder.py      -- PortBuilder (cmake -P portfile.cmake)
    dependency_resolver.py  -- Transitive dependency resolution
    statusdb.py     -- Installed package tracking
    binary_cache.py -- ABI-hash based binary cache
    download_manager.py     -- Download with SHA512 verification
    kmpkgpaths.py   -- Path discovery + registry configuration
  registry/
    builtin.py      -- Local files registry
    git.py          -- Git registry (remote clone/fetch)
    registry_set.py -- Registry routing
    port_provider.py -- Port file provider
  tests/            -- 74 pytest tests
```

## Development

```bash
git clone https://github.com/kumose/kmpkg
cd kmpkg
pip install -e .
pytest
```

## License

Apache 2.0
