better Makefile

This commit is contained in:
2025-06-04 09:15:36 +02:00
parent 2a85d8d0e1
commit 7adfcc7b23
2 changed files with 84 additions and 35 deletions
+17 -6
View File
@@ -1,13 +1,24 @@
TARGET=mg
TARGET ?= margen
INSTALL_DIR ?= $(HOME)/.local/bin
TEST_ARGS ?= -w=100 -h=100
SHELL := /bin/bash
.PHONY: build
clean:
rm -rf build
@rm -rf build
build:
mkdir -p build
@mkdir -p build
gcc -Wall src/*.c src/*.h -o build/$(TARGET)
.PHONY: leak-test
leak-test: clean build
valgrind --leak-check=full -s ./build/$(TARGET)
.PHONY: install
install: build
cp -f build/$(TARGET) $(INSTALL_DIR)/$(TARGET)
.PHONY: time
time: build
time ./build/$(TARGET) $(TEST_ARGS)
.PHONY: valgrind
valgrind: build
valgrind --leak-check=full -s ./build/$(TARGET) $(TEST_ARGS)
+67 -29
View File
@@ -3,8 +3,9 @@
#include <stdlib.h>
#include <string.h>
void print_help(int status_code) {
puts("usage: mg "
void print_help(int status_code)
{
puts("usage: margen "
"[--help] "
"[-q] "
"[-w=WIDTH] "
@@ -29,15 +30,20 @@ void print_help(int status_code) {
exit(status_code);
}
void invalid_arg(char *arg) {
void invalid_arg(char *arg)
{
fprintf(stderr, "invalid argument: '%s'\n\n", arg);
print_help(1);
}
void invalid_value(char *arg, char *subarg, char *value) {
if (subarg == NULL) {
void invalid_value(char *arg, char *subarg, char *value)
{
if (subarg == NULL)
{
fprintf(stderr, "invalid value for argument '%s': '%s'\n\n", arg, value);
} else {
}
else
{
fprintf(stderr, "invalid value for argument '%s' %s: '%s'\n\n", arg, subarg,
value);
}
@@ -46,54 +52,66 @@ void invalid_value(char *arg, char *subarg, char *value) {
bool is_arg(char *arg, char *ref) { return strcoll(arg, ref) == 0; }
char *split_arg_value(char *arg) {
char *split_arg_value(char *arg)
{
strtok(arg, "=");
return strtok(NULL, "=");
}
bool is_digit(char c) { return c >= '0' && c <= '9'; }
bool is_number(char *value) {
if (value == NULL) {
bool is_number(char *value)
{
if (value == NULL)
{
return false;
}
unsigned long value_len = strlen(value);
int i;
for (i = 0; i < value_len; i++) {
if (!is_digit(value[i])) {
for (i = 0; i < value_len; i++)
{
if (!is_digit(value[i]))
{
return false;
}
}
return value;
}
long parse_number(char *arg, char *value) {
if (!is_number(value)) {
long parse_number(char *arg, char *value)
{
if (!is_number(value))
{
invalid_value(arg, NULL, value);
}
return atol(value);
}
void parse_color(char *arg, char *value, unsigned char color[3]) {
void parse_color(char *arg, char *value, unsigned char color[3])
{
char *tmp;
tmp = strtok(value, ",");
if (!is_number(tmp)) {
if (!is_number(tmp))
{
invalid_value(arg, "(R)", tmp);
}
color[0] = (unsigned char)atoi(tmp);
tmp = strtok(NULL, ",");
if (!is_number(tmp)) {
if (!is_number(tmp))
{
invalid_value(arg, "(G)", tmp);
}
color[1] = (unsigned char)atoi(tmp);
tmp = strtok(NULL, ",");
if (!is_number(tmp)) {
if (!is_number(tmp))
{
invalid_value(arg, "(B)", tmp);
}
color[2] = (unsigned char)atoi(tmp);
}
parameters parse_args(int argc, char **argv) {
parameters parse_args(int argc, char **argv)
{
parameters params;
params.quiet = false;
@@ -112,28 +130,48 @@ parameters parse_args(int argc, char **argv) {
int i;
char *arg;
char *value;
for (i = 1; i < argc; i++) {
for (i = 1; i < argc; i++)
{
arg = argv[i];
value = split_arg_value(arg);
if (is_arg(arg, "--help")) {
if (is_arg(arg, "--help"))
{
print_help(0);
} else if (is_arg(arg, "-q") || is_arg(arg, "--quiet")) {
}
else if (is_arg(arg, "-q") || is_arg(arg, "--quiet"))
{
params.quiet = true;
} else if (is_arg(arg, "-w") || is_arg(arg, "--width")) {
}
else if (is_arg(arg, "-w") || is_arg(arg, "--width"))
{
params.width = (unsigned long)parse_number(arg, value);
} else if (is_arg(arg, "-h") || is_arg(arg, "--height")) {
}
else if (is_arg(arg, "-h") || is_arg(arg, "--height"))
{
params.height = (unsigned long)parse_number(arg, value);
} else if (is_arg(arg, "-o") || is_arg(arg, "--output")) {
}
else if (is_arg(arg, "-o") || is_arg(arg, "--output"))
{
params.file_path = value;
} else if (is_arg(arg, "-p") || is_arg(arg, "--pixel")) {
}
else if (is_arg(arg, "-p") || is_arg(arg, "--pixel"))
{
params.size = (unsigned char)parse_number(arg, value);
} else if (is_arg(arg, "-s") || is_arg(arg, "--slope")) {
}
else if (is_arg(arg, "-s") || is_arg(arg, "--slope"))
{
params.size = (unsigned char)parse_number(arg, value);
} else if (is_arg(arg, "-c") || is_arg(arg, "--color")) {
}
else if (is_arg(arg, "-c") || is_arg(arg, "--color"))
{
parse_color(arg, value, params.start);
} else if (is_arg(arg, "-v") || is_arg(arg, "--variation")) {
}
else if (is_arg(arg, "-v") || is_arg(arg, "--variation"))
{
parse_color(arg, value, params.start);
} else {
}
else
{
invalid_arg(arg);
}
}