| CARVIEW |
cpkg: Build tool for C
Flags
Manual Flags
| Name | Description | Default |
|---|---|---|
| development | Enable `-Werror` | Disabled |
Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info
Downloads
- cpkg-0.2.5.8.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)
Maintainer's Corner
For package maintainers and hackage trustees
Candidates
- No Candidates
| Versions [RSS] | 0.1.0.0, 0.1.1.0, 0.1.1.1, 0.1.2.1, 0.1.3.0, 0.1.3.1, 0.2.0.0, 0.2.0.1, 0.2.1.0, 0.2.2.0, 0.2.3.0, 0.2.3.1, 0.2.3.2, 0.2.3.3, 0.2.3.4, 0.2.3.5, 0.2.3.6, 0.2.3.7, 0.2.3.8, 0.2.3.9, 0.2.4.0, 0.2.4.1, 0.2.4.2, 0.2.4.3, 0.2.4.4, 0.2.4.5, 0.2.4.6, 0.2.5.0, 0.2.5.1, 0.2.5.2, 0.2.5.3, 0.2.5.4, 0.2.5.6, 0.2.5.7, 0.2.5.8 |
|---|---|
| Change log | CHANGELOG.md |
| Dependencies | base (>=4.11 && <5), binary, bytestring, bz2 (>=0.1.1.0), composition-prelude (>=1.5.2.0), containers (>=0.6.0.0), cpkg, dhall (>=1.29.0), dir-traverse (>=0.2.1.0), directory (>=1.3.1.0), filemanip, filepath, hashable, http-client, http-client-tls, libarchive (>=2.2.5.0), lzlib (>=0.3.0.0), lzma, megaparsec, microlens, mtl, network-uri, optparse-applicative, prettyprinter (>=1.7.0), process, recursion (>=2.2.3.0), temporary, text, zip-archive, zlib, zstd [details] |
| License | BSD-3-Clause |
| Copyright | Copyright: (c) 2018-2020 Vanessa McHale |
| Author | Vanessa McHale |
| Maintainer | vamchale@gmail.com |
| Uploaded | by vmchale at 2023-11-06T15:59:13Z |
| Category | Packaging, Package Management, Dhall, C |
| Source repo | head: git clone https://github.com/vmchale/cpkg |
| Distributions | NixOS:0.2.5.8 |
| Executables | cpkg |
| Downloads | 16420 total (136 in the last 30 days) |
| Rating | (no votes yet) [estimated by Bayesian average] |
| Your Rating |
|
| Status | Docs uploaded by user Build status unknown [no reports yet] |
Readme for cpkg-0.2.5.8
[back to package description]cpkg
cpkg is a build tool for C with a particular emphasis on cross compilation.
It is configured using
Dhall.
By considering a package to be a function taking a cpkg-supplied
installation directory to a series of steps, we can effectively package
C projects with diverse build systems and handle dependencies between them.
This tool provides reasonably good support for cross-compilation of C projects and packages. It is not a full-fledged package manager.
Installation
cabal new-install cpkg
Shell Completions
Add the following to your ~/.bashrc for shell completions:
eval "$(cpkg --bash-completion-script cpkg)"
Packages
To view available packages, use cpkg list
vanessa@thinkpad ~/programming/haskell/done/cpkg 🌸 cpkg list
autoconf
url: https://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.xz
version: 2.69
build dependencies: m4
automake
url: https://ftp.gnu.org/gnu/automake/automake-1.16.1.tar.xz
version: 1.16.1
build dependencies: autoconf
at-spi2-atk
url: https://ftp.gnome.org/pub/gnome/sources/at-spi2-atk/2.30/at-spi2-atk-2.30.0.tar.xz
version: 2.30.0
dependencies: at-spi2-core, atk, libxml2
build dependencies: meson, ninja
at-spi2-core
url: https://ftp.gnome.org/pub/gnome/sources/at-spi2-core/2.30/at-spi2-core-2.30.0.tar.xz
version: 2.30.0
dependencies: libXtst, glib
build dependencies: meson, ninja
atk
url: https://ftp.gnome.org/pub/gnome/sources/atk/2.30/atk-2.30.0.tar.xz
version: 2.30.0
build dependencies: gobject-introspection
â‹®
Example
To install tar:
cpkg install tar
To install emacs:
cpkg install emacs
Configuration
Here is the configuration for Lua:
let prelude = https://raw.githubusercontent.com/vmchale/cpkg/master/dhall/cpkg-prelude.dhall
in
let lua =
λ(v : List Natural) →
let printLuaOS =
λ(os : types.OS) →
merge
{ FreeBSD = λ(_ : {}) → "freebsd"
, OpenBSD = λ(_ : {}) → "bsd"
, NetBSD = λ(_ : {}) → "bsd"
, Solaris = λ(_ : {}) → "solaris"
, Dragonfly = λ(_ : {}) → "bsd"
, Linux = λ(_ : {}) → "linux"
, Darwin = λ(_ : {}) → "macosx"
, Windows = λ(_ : {}) → "mingw"
, Redox = λ(_ : {}) → "generic"
, Haiku = λ(_ : {}) → "generic"
, IOS = λ(_ : {}) → "generic"
, AIX = λ(_ : {}) → "generic"
, Hurd = λ(_ : {}) → "generic"
, Android = λ(_ : {}) → "generic"
, NoOs = λ(_ : {}) → "c89"
}
os
in
let luaBuild =
λ(cfg : types.BuildVars) →
let cc = prelude.mkCCArg cfg
in
let ldflags =
(prelude.mkLDFlags cfg.linkDirs).value
in
let cflags =
(prelude.mkCFlags cfg.includeDirs).value
in
let os =
prelude.osCfg cfg
in
[ prelude.call (prelude.defaultCall ⫽ { program = "make"
, arguments = cc # [ printLuaOS os, "MYLDFLAGS=${ldflags}", "MYCFLAGS=${cflags}", "MYLIBS=-lncurses" ]
})
]
in
let luaInstall =
λ(cfg : types.BuildVars) →
[ prelude.call (prelude.defaultCall ⫽ { program = "make"
, arguments = [ "install", "INSTALL_TOP=${cfg.installDir}" ]
}) ]
# prelude.symlinkBinaries [ "bin/lua", "bin/luac" ]
in
prelude.simplePackage { name = "lua", version = v } ⫽
{ pkgUrl = "https://www.lua.org/ftp/lua-${prelude.showVersion v}.tar.gz"
, configureCommand = prelude.doNothing
, buildCommand = luaBuild
, installCommand = luaInstall
, pkgDeps = [ prelude.unbounded "readline"
, prelude.unbounded "ncurses"
]
}
in
lua [5,3,5]
Cabal Integration
After running
cpkg install libX11 --target=arm-linux-gnueabihf
cpkg install libXext --target=arm-linux-gnueabihf
cpkg install libXrandr --target=arm-linux-gnueabihf
cpkg install libXinerama --target=arm-linux-gnueabihf
cpkg install libXScrnSaver --target=arm-linux-gnueabihf
You can dump flags to be passed to cabal with
cpkg dump-cabal libX11 libXext libXrandr libXinerama libXScrnSaver --target=arm-linux-gnueabihf
which will produce something like
--extra-lib-dirs=/home/vanessa/.cpkg/arm-linux-gnueabihf/libX11-1.6.7-820c8166b4caadb/lib --extra-lib-dirs=/home/vanessa/.cpkg/arm-linux-gnueabihf/libXext-1.3.3-1bad0a89c6794a53/lib --extra-lib-dirs=/home/vanessa/.cpkg/arm-linux-gnueabihf/libXrandr-1.5.1-f58f951a622e5c2/lib --extra-lib-dirs=/home/vanessa/.cpkg/arm-linux-gnueabihf/libXinerama-1.1.4-516496f7e04d34be/lib --extra-lib-dirs=/home/vanessa/.cpkg/arm-linux-gnueabihf/libXScrnSaver-1.2.3-60f6993b79a87725/lib
This could be used, for example, to cross-compile xmonad, viz.
cabal new-install xmonad --with-ghc arm-linux-gnueabihf-ghc --with-ghc-pkg arm-linux-gnueabihf-ghc-pkg $(cpkg dump-cabal libX11 libXext libXrandr libXinerama libXScrnSaver --target=arm-linux-gnueabihf)
Dhall Prelude
There is
a prelude
available containing functions which simplify the process of writing package
descriptions. As an example, we can install sed
let prelude = https://raw.githubusercontent.com/vmchale/cpkg/master/dhall/cpkg-prelude.dhall
in
let sed =
λ(v : List Natural) →
prelude.makeGnuExe { name = "sed", version = v }
in
sed [4,5]
Known Deficiencies
Security
This tool is insecure.
Performance
This tool is not performant.
Dependency Solver
Currently, there is no dependency solver. It should be relatively easy to add a version-based dependency solver to the code.
Garbage Collection
Currently, there is no garbage collector à la $ nix-collect-garbage. This will
not be relatively easy to add, because it will require that the global package
index be re-implemented (ideally using a proper database).
Contents
Lovingly provided by polyglot:
───────────────────────────────────────────────────────────────────────────────
Language Files Lines Code Comments Blanks
───────────────────────────────────────────────────────────────────────────────
Bash 4 58 49 3 6
Cabal 1 165 147 0 18
Cabal Project 1 4 3 0 1
Dhall 5 6412 5724 0 688
Haskell 32 1999 1643 37 319
Makefile 1 12 8 0 4
Markdown 3 556 448 0 108
YAML 4 114 110 0 4
───────────────────────────────────────────────────────────────────────────────
Total 51 9320 8132 40 1148
───────────────────────────────────────────────────────────────────────────────