Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/h2non/semver.c
Semantic version in ANSI C
https://github.com/h2non/semver.c
ansi-c c comparison-operators semantic semver version versioning
Last synced: about 2 months ago
JSON representation
Semantic version in ANSI C
- Host: GitHub
- URL: https://github.com/h2non/semver.c
- Owner: h2non
- License: mit
- Created: 2015-08-16T17:12:36.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2020-04-10T05:01:05.000Z (about 4 years ago)
- Last Synced: 2024-03-03T05:32:42.919Z (4 months ago)
- Topics: ansi-c, c, comparison-operators, semantic, semver, version, versioning
- Language: C
- Homepage:
- Size: 83 KB
- Stars: 182
- Watchers: 9
- Forks: 34
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- Changelog: History.md
- License: LICENSE
Lists
- awesome-cpp - semver.c - A semver parser and render in ANSI C. [MIT] (Miscellaneous)
- awesome-cpp - semver.c - A semver parser and render in ANSI C. [MIT] (Miscellaneous)
- awesome-cpp-cn - semver.c
- fucking-awesome-cpp - semver.c - A semver parser and render in ANSI C. [MIT] (Miscellaneous)
- awesome-cpp - semver.c - A semver parser and render in ANSI C. [MIT] (Miscellaneous)
- awesome-cpp - semver.c - A semver parser and render in ANSI C. [MIT] (Miscellaneous)
- awesome-cpp-completed - semver.c - A semver parser and render in ANSI C. [MIT] (Miscellaneous)
- awesome-cpp - semver.c - A semver parser and render in ANSI C. [MIT] (Miscellaneous)
- awesome-cpp - semver.c - A semver parser and render in ANSI C. [MIT] (Miscellaneous)
- awesome-cpp - semver.c - A semver parser and render in ANSI C. [MIT] (Miscellaneous)
- awesome-cpp - semver.c - A semver parser and render in ANSI C. [MIT] (Miscellaneous)
- awesome-cpp - semver.c - A semver parser and render in ANSI C. [MIT] (Miscellaneous)
- awesome-cpp - semver.c - A semver parser and render in ANSI C. [MIT] (Miscellaneous)
- awesome-cpp - semver.c - A semver parser and render in ANSI C. [MIT] (Miscellaneous)
- awesome-cpp-completed - semver.c - A semver parser and render in ANSI C. [MIT] (Miscellaneous)
- awesome-cpp - semver.c - A semver parser and render in ANSI C. [MIT] (Miscellaneous)
- awesome-cpp - semver.c - A semver parser and render in ANSI C. [MIT] (Miscellaneous)
README
# semver.c [![Build Status](https://travis-ci.org/h2non/semver.c.png)](https://travis-ci.org/h2non/semver.c) [![GitHub release](https://img.shields.io/github/tag/h2non/semver.c.svg)](https://github.com/h2non/semver.c/releases)
[Semantic version](http://semver.org) v2.0 parser and render written in [ANSI C](https://en.wikipedia.org/wiki/ANSI_C) with zero dependencies.
## Features
- [x] Standard compliant (otherwise, open an issue)
- [x] Version metadata parsing
- [x] Version prerelease parsing
- [x] Version comparison helpers
- [x] Supports comparison operators
- [x] Version render
- [x] Version bump
- [x] Version sanitizer
- [x] 100% test coverage
- [x] No regexp (ANSI C doesn't support it)
- [x] Numeric conversion for sorting/filtering## Versions
- [v0](https://github.com/h2non/semver.c/tree/89e66f36544e0250def32640b84b7e15c8585da4) - Legacy version. Beta. Not maintained anymore.
- [v1](https://github.com/h2non/semver.c) - Current stable version.## Usage
Basic comparison:
```c
#include
#includechar current[] = "1.5.10";
char compare[] = "2.3.0";int
main(int argc, char *argv[]) {
semver_t current_version = {};
semver_t compare_version = {};if (semver_parse(current, ¤t_version)
|| semver_parse(compare, &compare_version)) {
fprintf(stderr,"Invalid semver string\n");
return -1;
}int resolution = semver_compare(compare_version, current_version);
if (resolution == 0) {
printf("Versions %s is equal to: %s\n", compare, current);
}
else if (resolution == -1) {
printf("Version %s is lower than: %s\n", compare, current);
}
else {
printf("Version %s is higher than: %s\n", compare, current);
}// Free allocated memory when we're done
semver_free(¤t_version);
semver_free(&compare_version);
return 0;
}
```Satisfies version:
```c
#include
#includesemver_t current = {};
semver_t compare = {};int
main(int argc, char *argv[]) {
semver_parse("1.3.10", ¤t);
semver_parse("1.5.2", &compare);// Use caret operator for the comparison
char operator[] = "^";if (semver_satisfies(current, compare, operator)) {
printf("Version %s can be satisfied by %s", "1.3.10", "1.5.2");
}// Free allocated memory when we're done
semver_free(¤t);
semver_free(&compare);
return 0;
}
```## Installation
Clone this repository:
```bash
$ git clone https://github.com/h2non/semver.c
```Or install with [clib](https://github.com/clibs/clib):
```bash
$ clib install h2non/semver.c
```## API
#### struct semver_t { int major, int minor, int patch, char * prerelease, char * metadata }
semver base struct.
#### semver_parse(const char *str, semver_t *ver) => int
Parses a string as semver expression.
**Returns**:
- `-1` - In case of invalid semver or parsing error.
- `0` - All was fine!#### semver_compare(semver_t a, semver_t b) => int
Compare versions `a` with `b`.
Returns:
- `-1` in case of lower version.
- `0` in case of equal versions.
- `1` in case of higher version.#### semver_satisfies(semver_t a, semver_t b, char *operator) => int
Checks if both versions can be satisfied
based on the given comparison operator.**Allowed operators**:
- `=` - Equality
- `>=` - Higher or equal to
- `<=` - Lower or equal to
- `<` - Lower than
- `>` - Higher than
- `^` - Caret operator comparison ([more info](https://docs.npmjs.com/misc/semver#caret-ranges-1-2-3-0-2-5-0-0-4))
- `~` - Tilde operator comparison ([more info](https://docs.npmjs.com/misc/semver#tilde-ranges-1-2-3-1-2-1))**Returns**:
- `1` - Can be satisfied
- `0` - Cannot be satisfied#### semver_satisfies_caret(semver_t a, semver_t b) => int
Checks if version `x` can be satisfied by `y`
performing a comparison with caret operator.See: https://docs.npmjs.com/misc/semver#caret-ranges-1-2-3-0-2-5-0-0-4
**Returns**:
- `1` - Can be satisfied
- `0` - Cannot be satisfied#### semver_satisfies_patch(semver_t a, semver_t b) => int
Checks if version `x` can be satisfied by `y`
performing a comparison with tilde operator.See: https://docs.npmjs.com/misc/semver#tilde-ranges-1-2-3-1-2-1
**Returns**:
- `1` - Can be satisfied
- `0` - Cannot be satisfied#### semver_eq(semver_t a, semver_t b) => int
Equality comparison.
#### semver_ne(semver_t a, semver_t b) => int
Non equal comparison.
#### semver_gt(semver_t a, semver_t b) => int
Greater than comparison.
#### semver_lt(semver_t a, semver_t b) => int
Lower than comparison.
#### semver_gte(semver_t a, semver_t b) => int
Greater than or equal comparison.
#### semver_lte(semver_t a, semver_t b) => int
Lower than or equal comparison.
#### semver_render(semver_t *v, char *dest) => void
Render as string.
#### semver_numeric(semver_t *v) => int
Render as numeric value. Useful for ordering and filtering.
#### semver_bump(semver_t *a) => void
Bump major version.
#### semver_bump_minor(semver_t *a) => void
Bump minor version.
#### semver_bump_patch(semver_t *a) => void
Bump patch version.
#### semver_free(semver_t *a) => void
Helper to free allocated memory from heap.
#### semver_is_valid(char *str) => int
Checks if the given string is a valid semver expression.
#### semver_clean(char *str) => int
Removes invalid semver characters in a given string.
## License
MIT - Tomas Aparicio