cps-org / cps-org/cps

Currently cannot support multiple languages or non-clike languages

Open
#3 1 comment 6 reactions 0 assignees View on GitHub
enhancement help wanted need discussion
Dominant language
Python
Stars
191
Forks
14
PR merge metrics
No merged PRs in 30d

Description

I've been thinking about replacing pkg-config a lot, and one of the real short comings of pkg-config is that it assumes C (and C++ and ObjC kinda work because of that), but trying to use a newer language like Rust, Zig, or D is pretty painful, or just impossible. CPS kinda supports non-C languages through it's `Type: "jar"` mechanism, but that means each language has to be hard coded. It also means that you have to duplicate keys like `c-runtime-vendor` and `cpp-runtime-vendor`. I'd propose instead something like this:
```json
{
"platform": {
"languages": {
"c": {
"runtime-vendor": "gnu",
},
"rust": {
...
}
}
},
"components": {
"sample": {
"language": "c",
"type": "dylib",
...
}
}
}
```

This necessitates a couple of things: that the keys and their values in each component are language specific:" ie, rust doesn't provide a rust dynamic ABI, only a rust static lib ABI, but a component can be built with rust that provides a C ABI.

I think that solving the problems of future languages is really critical to making anything replacing pkg-config a success.

Contributor guide

No contributing guide indexed for this repository

Research direction

No files, tests, or implementation entry points are named. Start by reviewing the existing CPS specification and its treatment of language-specific components, then determine how the proposed languages structure would fit. Done means agreeing on a language-agnostic schema and its ABI and key-value semantics for current and future languages.

Written by the indexing model from the issue text.

Assessment

Tech stack
c, cpp, objective-c, rust, zig
Domain
build-system, tooling
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.