# liberate
[![status-badge](https://ci.codeberg.org/api/badges/interpeer/liberate/status.svg)](https://ci.codeberg.org/interpeer/liberate) [![Build status](https://ci.appveyor.com/api/projects/status/objyc63xyiv2rbf8?svg=true)](https://ci.appveyor.com/project/jfinkhaeuser/liberate) [![Project Status: WIP – Initial development is in progress, but there has not yet been a stable, usable release suitable for the public.](https://www.repostatus.org/badges/latest/wip.svg)](https://www.repostatus.org/#wip) liberate is a small platform liberation library for the Interpeer Project. The scope of the project is bound to the needs of the overall proejct. It may change over time. For now, the focus is on the subset of platform abstractions that are shared amongst several other projects: - [packeteer](https://codeberg.org/interpeer/packeteer) - [channeler](https://codeberg.org/interpeer/channeler) - [s3kr1t](https://codeberg.org/interpeer/s3kr1t) - [caprock](https://codeberg.org/interpeer/caprock) ## Contents 1. `liberate/checksum/` contains a header-only implementation of CRC32 with various polynomials. 1. `liberate/concurrency` contains some useful classes for concurrent algorithms. 1. `liberate/cpp/` contains headers that make some C++ language features a little more accessible. 1. `liberate/fs/` contains simple operating system abstractions of file system operations. 1. `liberate/net/` contains classes for socket and network addresses, and a simple URL parser for socket-URLs. 1. `liberate/string/` contains some string utilities. 1. `liberate/serialization/` contains functions for serializing and deserializing value types. 1. `liberate/sys/` contains miscellaneous operating system abstractions. 1. `liberate/types{.h}` contains standard type headers, as well as type definitions such as a variable length integer type. 1. `liberate/visibility.h` contains library symbol visibility macros that can be re-used in other libraries. 1. `liberate/logging.h` contains logging macros. ## Logging Liberate itself does not provide genuine logging facilities. It does, however, provide macros which delegate to one of several logging backends, or to a simple stderr-based logging mechanism. The purpose of these macros is to provide the same logging interface for liberate and it's dependent project, but leave the project user in control of where log data is sent. You choose the logging backend from `meson_options.txt`, or by passing the `-DLIBERATE_LOG_BACKEND` compiler flag. Note that depending on how you use the macros, either option may be more appropriate for you. If all your projects are built with meson, in the top-level project do: ```bash $ cd