diff --git a/README.md b/README.md index 8e9c0f9..28fcb12 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,10 @@ ## Requirements - CMake (tested on 3.17) -- C99 compiler +- C99 compiler (ideally clang or gcc, should work with anything that supports these though) +- corelibs libraries (https://git.redxen.eu/caskd/corelibs) + + llist (linked list library) + + stringext (string.h extensions/wrappers) ## Building @@ -11,15 +14,14 @@ First, create the required build files (usually the Makefile) ```sh cmake -B build/ -DCMAKE_BUILD_TYPE=Release . ``` -| Option | Description | Type | Default | Supported since | -|:------------------:|:----------------------------------------------------------------------:|:--------:|:-------:|:---------------:| -| BUILD_HELPERS | Build simple assemblers and tokenizers that handle the heavy lifting | boolean | true | - | -| BUILD_VALIDATORS | Build validators that check if the messages follow the standards (WIP) | boolean | true | 2020.10.29 | -| BUILD_TESTS | Build tests that check if the build results behave as they should | boolean | false | - | -| BUILD_IRCV3 | Build IRCv3 support (WIP) | boolean | true | - | -| BUILD_DOCS | Build documentation using doxygen (WIP) | boolean | false | - | -| CODE_ANALYZER | Use static analysis tools | boolean | false | 2020.12.20 | -| CODE_COVERAGE | Generate code coverage output | boolean | false | 2020.12.20 | +| Option | Description | Type | Status | Default | +|:------------------:|:----------------------------------------------------------------------:|:--------:|:--------:|:--------: +| BUILD_IRCV3 | Build IRCv3 support | boolean | WIP ~20% | false | +| BUILD_VALIDATORS | Build validators that check if the messages follow the standards | boolean | WIP 0% | false | +| BUILD_DOCS | Build documentation using doxygen | boolean | WIP ~35% | false | +| BUILD_TESTS | Build tests that check if the build results behave as they should | boolean | WIP ~60% | false | +| CODE_ANALYZER | Use static analysis tools | boolean | WIP TK | false | +| CODE_COVERAGE | Generate code coverage output | boolean | WIP CI | false | Following that, just use your build system and compile it @@ -30,6 +32,37 @@ make -C build You now should have the library built at `build/libuirc.a` or `build/libuirc.so.VERSION` +## Features + +### Finished +- IRC message parsing and assembly that doesn't lose details +- Simple message allocation and translation between string format and in-memory structure + +### Planned / Not finished +- RFC2812 compliant parser (still need to verify a few things) +- Variable-size lists wrappers (capabilities, tags, messages in a buffer etc.) +- Message validators (checks messages for formatting problems) +- CTCP -> ANSI formatting translation +- Mode masks + +## Motivation + +I have started this project initally to learn more about the protocol and learn C. +This project has taught me on how to organize code, what tasks are required to maintain a codebase clean and other smaller things. +Over the time this learning process has resulted into multiple rewrites or/and redesigns. These include: + + - Splitting the daemon from the core (library) + - Parsing tags into structs + - Storing structs in memory instead of pointers to buffers + - Separating structs + - Parsing read-only by copying buffers + +Each of these required redesigning some/all of the code and some also have their downsides. + +Over the time it has turned into a more generalized library that is supposed to not be tied to a specific codebase. +I am motivated to write this as i've seen that many codebases have turned into overly-fragmented code or monolithic code. +This library isn't supposed to replace any other libraries but instead it should fill this small space that i've noticed was missing. + ## License This program is free software: you can redistribute it and/or modify