██████╗ ██╗ ██╗██╗ ██╔═══██╗██║ ██╔╝██║ ██║ ██║█████╔╝ ██║ ██║ ██║██╔═██╗ ██║ ╚██████╔╝██║ ██╗██║ ╚═════╝ ╚═╝ ╚═╝╚═╝
Open pacKage Installer
oki(1) is a package manager for C and C++ projects, focused on configuration simplicity.
Oki can download project's dependencies and provide an integration to the build process.
You can browse the staging instance at oki-pkg.dev.
Specifications
Oki implements a dependency manager and a package repository.
The command line interface allows you to:
- bootstrap a new project using
oki init
- search for packages to add with
oki list
- install new dependencies with
oki install
- make sure your dependencies are up-to-date using
oki update
- publish your librairies to a package repository (
oki publish
) - visualize your dependency graph (
oki tree
)
The package repository interface enables you to:
- look for newly published packages
- summarize package information
- access the package README
- view dependents packages
Conception (written in French)
Prerequisites
Database
A PostgreSQL server is recommended in production. For development purposes, you may instead want to use an SQLite database.
On Debian: apt install postgresql
/ apt install sqlite3
Web
The backend is written in PHP >= 7.4.
Depending on the database you have chosen, the appropriate PDO extensions are also required.
On Debian (versions may vary): apt install php7.4-cli php7.4-pgsql php7.4-sqlite3
Command Line Interface
A C++ 20 compiler like GCC is needed, with the nlohmann/json, curl, toml++, boost::program_options and minizip libraries. Unit tests are using doctest.
On Debian: apt install build-essential nlohmann-json3-dev libcurl4-openssl-dev libminizip-dev libboost-program-options-dev doctest-dev
Some commands also use some clang tools like clang-format
and gcovr
.
On Debian: apt install clang-format gcovr
Quick setup
cd cli
./configure.sh -d
make BUILD=release
sudo make install BUILD=release
Development
Create a sample database and run the server
cd sql && ./create_sqlite_db.sh && cd ..
php -S localhost:8000 -t web/public
Compile the cli
At home
cd cli && make
At the IUT
cd cli && ./make-in-vdn.sh && unset http_proxy
Inspiration
- Cargo, the Rust package manager for its manifest format and command organization
- npm, the JavaScript package manager for its lockfile handling and website presentation
- pub, the Dart package manager for its dependency resolution algorithm
- semver, semantic versioning in order to know if a version is compatible with another