This repository has been archived on 2021-04-17. You can view files and clone it, but cannot push or open issues or pull requests.
uIRC/README.md

80 lines
3.7 KiB
Markdown
Raw Permalink Normal View History

2020-07-05 11:10:50 +00:00
# MicroIRC, a simple, lightweight IRC protocol helper
## Requirements
- CMake (tested on 3.17)
2021-03-21 18:40:21 +00:00
- 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)
2020-07-05 11:10:50 +00:00
## Building
First, create the required build files (usually the Makefile)
```sh
2020-12-30 19:14:21 +00:00
cmake -B build/ -DCMAKE_BUILD_TYPE=Release .
2020-07-05 11:10:50 +00:00
```
2021-03-21 18:40:21 +00:00
| 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 |
2020-07-05 11:10:50 +00:00
Following that, just use your build system and compile it
Example for **make**:
```sh
2020-12-30 19:14:21 +00:00
make -C build
2020-07-05 11:10:50 +00:00
```
You now should have the library built at `build/libuirc.a` or `build/libuirc.so.VERSION`
2020-07-05 11:10:50 +00:00
2021-03-21 18:40:21 +00:00
## 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.
2020-07-05 11:10:50 +00:00
## 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 <https://www.gnu.org/licenses/>.