Possibly very dumb package manager for C/++, written in Python.


License
MIT
Install
pip install dumbcpm==0.3.6

Documentation

dumcpm

Possibly very dumb package manager for C/++, written in Python.

Installation

$ pip install dumbcpm

Usage

Getting root repository

Root repository will be cloned into ~/dumbcpm-repos/handicraftsman-dumbcpm-packages on first start.

To update root repository, run git pool in its root directory.

Writing a package manifest

This is the package manifest i used for testing:

name: hello
version: 0.1.0
description: "Hello, World!"

git-repo: "/home/handicraftsman/dumbcpm/hello/"
git-tag: master

depends:
  world: ">=0.1.0,<0.2.0"

# In this way you can tell dumbcpm to also build given targets. (if they're not built by default)
# This field is honored only in the root package (aka working)
#also-build:
#  - world/world

targets:
  hello:
    type: executable # 'library' is another possible type.
                     # It will produce a shared library.
    sources:
      - "src/main.cpp"
      - "src/whatever.c"
    include-dirs: # include dirs are also passed into the targets which depend on this one
      - "."
    cpp: "c++17"
    c: "c11"
    pkg-config:
      - "jsoncpp >= 1.8.4"
    link:
      - world/world # In this way you can link to a library dependency provided by
                    # another package.
    # flags: -DWHATEVER # In this way you can define extra compile flags to be used
                        # at compile time.
    # after-flags: -DWHATEVER # These flags will be added at the end of the command.
                              # This can be used for linking with static libraries.

Fetching packages for build

python -m dumbcpm fetch

This will check installed repositories for needed packages and download them.

Building packages

python -m dumbcpm build

This will build all targets specified in the current package and their dependencies into ./dumbcpm-build/ directory.

More targets to build can be specified as shown above.

Copying libraries

pkg-config libraries required by the project can be copied into the build directory using the next command:

python -m dumbcpm libs

Creating a repository

dumbcpm repository is a folder (possibly a git repository) with structure like below:

repository.yaml
<package>/
  <package>-<version>.yaml

repository.yaml example:

packages:
  - hello
  - world

Installing a repository

After creating or cloning a repository, it must be registered in ~/.dumbcpm.yaml as shown below:

repositories:
  - /home/%USERNAME%/dumbcpm-repos/handicraftsman-dumbcpm-packages

handicraftsman-dumbcpm-packages is a clone of https://github.com/handicraftsman/dumbcpm-packages/

Adding a package to a repository

As shown above, your new package can be added to the repository by adding a new entry to its repository.yaml

New package version can be added by copying your package.yaml to /path/to/repo/<pkg>/<pkg>-<version>.yaml