# MicroIRC, a simple, lightweight IRC protocol helper ## Requirements - CMake (tested on 3.17) - 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 First, create the required build files (usually the Makefile) ```sh cmake -B build/ -DCMAKE_BUILD_TYPE=Release . ``` | 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 Example for **make**: ```sh 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 it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see .