Pack ==== Pack is a simple serialisation and deserialisation library for C. Build health: - [![builds.sr.ht status](https://builds.sr.ht/~tk/pack/commits/alpine.yml.svg)](https://builds.sr.ht/~tk/pack/commits/alpine.yml?) - Alpine - [![builds.sr.ht status](https://builds.sr.ht/~tk/pack/commits/archlinux.yml.svg)](https://builds.sr.ht/~tk/pack/commits/archlinux.yml?) - Arch Linux - [![builds.sr.ht status](https://builds.sr.ht/~tk/pack/commits/freebsd.yml.svg)](https://builds.sr.ht/~tk/pack/commits/freebsd.yml?) - FreeBSD - [![builds.sr.ht status](https://builds.sr.ht/~tk/pack/commits/openbsd.yml.svg)](https://builds.sr.ht/~tk/pack/commits/openbsd.yml?) - OpenBSD Dependencies ------------ Pack has no runtime dependencies. The following is a list of build dependencies: - An implementation of redo - [Avery Pennarun's do][minimal-do] - Works for one-shot builds. Copy it to the source directory, make it executable and run it. For development, one of the other implementations is recommended. - [Nils Dagsson Moskopp's redo][redo-sh] - Tested building and development. Slightly overzealous rebuilds. Performance issues with jobserver. - [Jonathan de Boyne Pollard's redo][jdebp-redo] - Tested building and development. Bugs with jobserver. Uncommon definition of `$2`. - [Avery Pennarun's redo][apenwarr-redo] - Tested for building. May have some bugs when used for development. - [Leah Neukirchen's redo][leah-redo] - Tested for building. Overzealous rebuilds but generally very fast. - A C11 compiler with GCC style parameters (clang works) - POSIX cat, find, rm, sed, sh and tr - xargs with support for the `-r` gnu extension - bash 4.4 or newer (parameter expansion transformations) - (optional) jq (for generating `compile_commands.json`) [minimal-do]: https://raw.githubusercontent.com/apenwarr/redo/redo-0.42d/minimal/do [redo-sh]: http://news.dieweltistgarnichtso.net/bin/redo-sh.html [jdebp-redo]: https://jdebp.uk/Softwares/redo/ [apenwarr-redo]: https://github.com/apenwarr/redo [leah-redo]: https://github.com/leahneukirchen/redo-c/ Compilation ----------- Optionally run `./configure` (see `./configure -h` for options). Some build hosts require calling `./configure` with `-B-lm` to pass `-lm` to the linker for certain math.h functions. Run `redo all` to build the library and tests. ### Cross Compilation To cross compile, run `./configure` as normal and edit the resulting `config.rc` to set `TCC` to the target compiler. Additional flags can be passed via the arrays `TCFLAGS`, `TCPPFLAGS`, `TLDFLAGS`, and `TLDLIBS`. Host specific flags can be passed via the corresponding `H` arrays. For example, to cross compile for windows using `i686-w64-mingw32-gcc` as the target compiler and `clang` as the host compiler: ``` $ CC=clang ./configure $ echo TCC=i686-w64-mingw32-gcc >>config.rc $ redo all ``` Testing ------- Run `./test` to run all the tests. Installation ------------ Not implemented yet. Development ----------- Please configure with `-w` and ensure code compiles cleanly. Be aware that different compiler versions can enable different warnings. If in doubt, ask. If you use a tool such as `clangd` which makes use of `compile_commands.json` then make sure you have `jq` installed and run `./configure` with `-f`. Contributing ------------ Please email patches to [~tk/pack-patches@lists.sr.ht](mailto:~tk/pack-patches@lists.sr.ht) ([archive](https://lists.sr.ht/~tk/pack-patches)). If you've never used a mailing list for development, please [read this](https://man.sr.ht/lists.sr.ht/#new-to-mailing-lists). Please email feature requests to [~tk/pack@todo.sr.ht](mailto:~tk/pack@todo.sr.ht) or use the [web interface](https://todo.sr.ht/~tk/pack). When dealing with any email based communication please follow [email etiquette](https://man.sr.ht/lists.sr.ht/etiquette.md). In general, stay on topic and respect differences in opinion and philosophy. Bugs ---- Bugs are tracked and can be reported [here](https://todo.sr.ht/~tk/pack?search=status%3Aopen%20label%3A%22bug%22).