241 lines
6.0 KiB
Markdown
241 lines
6.0 KiB
Markdown
# Graft Command USE Flags Integration - Status
|
|
|
|
## ✅ Completed
|
|
|
|
### 1. Enhanced Graft Command Module
|
|
**File:** `src/nimpak/cli/graft_commands_enhanced.nim`
|
|
|
|
**Features Implemented:**
|
|
- Extended function signature to accept USE flags
|
|
- Parse USE flags from CLI (`--use="+wayland -X +lto"`)
|
|
- Parse compiler flags from CLI (`--cflags="-O3"`)
|
|
- Profile support (`--profile=performance`)
|
|
- USE flag resolution (profile → global → package → CLI)
|
|
- USE flag validation against categories
|
|
- Variant hash generation
|
|
- Display effective USE flags before grafting
|
|
- Display compiler flags
|
|
- Logging of USE flags and variants
|
|
|
|
**Function Signature:**
|
|
```nim
|
|
proc graftCommandWithUseFlags*(
|
|
packageSpec: string,
|
|
useFlagsStr: string = "",
|
|
cflagsStr: string = "",
|
|
profileName: string = "",
|
|
verbose: bool = false,
|
|
coordinator: GraftCoordinator
|
|
): int
|
|
```
|
|
|
|
### 2. USE Flag Processing Flow
|
|
|
|
```
|
|
1. Parse CLI USE flags
|
|
↓
|
|
2. Load configuration
|
|
↓
|
|
3. Get effective USE flags (merge: profile → global → package → CLI)
|
|
↓
|
|
4. Validate USE flags (check exclusive categories)
|
|
↓
|
|
5. Get effective compiler flags
|
|
↓
|
|
6. Generate variant hash
|
|
↓
|
|
7. Display settings to user
|
|
↓
|
|
8. Perform graft (with USE flags logged)
|
|
↓
|
|
9. Display results with variant info
|
|
```
|
|
|
|
### 3. Example Usage
|
|
|
|
```bash
|
|
# Basic graft with USE flags
|
|
nip graft firefox --use="+wayland -X +lto"
|
|
|
|
# With compiler flags
|
|
nip graft vim --use="+python +lua" --cflags="-O3 -march=native"
|
|
|
|
# Using a profile
|
|
nip graft nginx --profile=performance
|
|
|
|
# Nexus-specific flags
|
|
nip graft nexus-fleet --use="+fleet-agent +fleet-mesh +wireguard"
|
|
|
|
# Gaming with GPU acceleration
|
|
nip graft blender --use="+vulkan +rocm +amd +python"
|
|
|
|
# ML workstation
|
|
nip graft pytorch --use="+rocm +opencl +onnx +python"
|
|
```
|
|
|
|
### 4. Output Example
|
|
|
|
```
|
|
🌱 NIP Graft - Universal Package Grafting with USE Flags
|
|
|
|
🔧 CLI USE flags: +wayland -X +lto
|
|
|
|
Effective USE Flags:
|
|
===================
|
|
Enabled: +wayland +lto +ipv6 +ssl
|
|
Disabled: -X
|
|
|
|
Compiler Flags:
|
|
==============
|
|
CFLAGS: -O3 -march=native -flto
|
|
CXXFLAGS: -O3 -march=native -flto
|
|
LDFLAGS: -Wl,-O1 -flto
|
|
MAKEFLAGS: -j8
|
|
|
|
📦 Package: firefox
|
|
📍 Source: nix
|
|
🏷️ Variant: lto-wayland
|
|
|
|
✅ Graft successful!
|
|
📍 Installed to: /Programs/Firefox/120.0/
|
|
🏷️ Variant: lto-wayland
|
|
(Variant tracking will be added to database in next update)
|
|
🔗 Symlinks created in /System/Links/
|
|
|
|
📋 Package built with USE flags:
|
|
Enabled: +wayland +lto +ipv6 +ssl
|
|
Disabled: -X
|
|
|
|
You can now run: firefox
|
|
```
|
|
|
|
## ⏳ TODO (Next Steps)
|
|
|
|
### 1. Main CLI Integration
|
|
Update `nip_mvp.nim` to parse `--use`, `--cflags`, `--profile` flags and call `graftCommandWithUseFlags`
|
|
|
|
### 2. Coordinator Enhancement
|
|
Update `GraftCoordinator.graft()` to accept and pass USE flags to adapters:
|
|
```nim
|
|
proc graft*(
|
|
coordinator: GraftCoordinator,
|
|
packageName: string,
|
|
source: PackageSource,
|
|
useFlags: seq[UseFlag] = @[],
|
|
compilerFlags: CompilerFlags = CompilerFlags()
|
|
): UnifiedGraftResult
|
|
```
|
|
|
|
### 3. Adapter Enhancement
|
|
Update adapters to apply USE flags:
|
|
|
|
**Nix Adapter:**
|
|
```nim
|
|
# Map USE flags to Nix options
|
|
if hasUseFlag(useFlags, "wayland"):
|
|
nixOptions.add("--arg waylandSupport true")
|
|
if hasUseFlag(useFlags, "X"):
|
|
nixOptions.add("--arg x11Support true")
|
|
|
|
# Set compiler flags
|
|
putEnv("NIX_CFLAGS_COMPILE", compilerFlags.cflags)
|
|
```
|
|
|
|
**PKGSRC Adapter:**
|
|
```nim
|
|
# Map to PKG_OPTIONS
|
|
var pkgOptions: seq[string] = @[]
|
|
if hasUseFlag(useFlags, "wayland"):
|
|
pkgOptions.add("wayland")
|
|
if not hasUseFlag(useFlags, "X"):
|
|
pkgOptions.add("-x11")
|
|
```
|
|
|
|
### 4. Variant Management
|
|
Create `variants.nim` module:
|
|
```nim
|
|
proc generateVariantPath(name, version: string, useFlags: seq[UseFlag]): string
|
|
proc listVariants(packageName: string): seq[PackageVariant]
|
|
proc setDefaultVariant(packageName, variantHash: string): bool
|
|
```
|
|
|
|
### 5. Database Schema Update
|
|
Add fields to package database:
|
|
```json
|
|
{
|
|
"useFlags": [
|
|
{"name": "wayland", "enabled": true, "category": "gui"},
|
|
{"name": "lto", "enabled": true, "category": "optimization"}
|
|
],
|
|
"useFlagsHash": "lto-wayland",
|
|
"compilerFlags": {
|
|
"cflags": "-O3 -march=native -flto",
|
|
"cxxflags": "-O3 -march=native -flto"
|
|
},
|
|
"isDefaultVariant": true,
|
|
"variantOf": "firefox-120.0"
|
|
}
|
|
```
|
|
|
|
### 6. CLI Commands
|
|
Implement:
|
|
- `nip use <package>` - Show/set USE flags
|
|
- `nip profile <action>` - Manage profiles
|
|
- `nip variants <package>` - List/manage variants
|
|
|
|
## 🎯 Integration Checklist
|
|
|
|
- [x] Create enhanced graft command module
|
|
- [x] Implement USE flag parsing
|
|
- [x] Implement flag resolution
|
|
- [x] Implement validation
|
|
- [x] Implement variant hash generation
|
|
- [x] Implement display functions
|
|
- [ ] Integrate with main CLI
|
|
- [ ] Update coordinator to pass USE flags
|
|
- [ ] Update adapters to apply USE flags
|
|
- [ ] Implement variant management
|
|
- [ ] Update database schema
|
|
- [ ] Implement USE/profile/variants commands
|
|
- [ ] Add tests
|
|
- [ ] Update documentation
|
|
|
|
## 📝 Notes
|
|
|
|
### Current Limitations
|
|
- USE flags are parsed and displayed but not yet passed to adapters
|
|
- Variant paths are generated but not yet used for installation
|
|
- Database doesn't yet store USE flag metadata
|
|
- Multiple variants of same package not yet supported
|
|
|
|
### Design Decisions
|
|
- USE flags follow Gentoo syntax (+flag, -flag)
|
|
- Resolution hierarchy: profile → global → package → CLI
|
|
- Variant hash uses sorted enabled flags only
|
|
- Exclusive categories validated before grafting
|
|
- Compiler flags can be overridden at any level
|
|
|
|
### Testing Strategy
|
|
1. Unit tests for USE flag parsing ✅
|
|
2. Integration tests for flag resolution ✅
|
|
3. End-to-end tests for graft with USE flags ⏳
|
|
4. Adapter tests with USE flags ⏳
|
|
5. Variant management tests ⏳
|
|
|
|
## 🚀 Ready for Next Phase
|
|
|
|
The foundation is complete! USE flags are:
|
|
- ✅ Parsed correctly
|
|
- ✅ Resolved through hierarchy
|
|
- ✅ Validated against categories
|
|
- ✅ Displayed to users
|
|
- ✅ Logged for tracking
|
|
|
|
Next: Wire up to adapters and implement variant management.
|
|
|
|
---
|
|
|
|
**Status:** Phase 1 Complete (Graft Command Integration)
|
|
**Next:** Phase 2 (Variant Management)
|
|
**Target:** v0.2.0
|