summaryrefslogtreecommitdiff
path: root/build.c
diff options
context:
space:
mode:
Diffstat (limited to 'build.c')
-rw-r--r--build.c53
1 files changed, 47 insertions, 6 deletions
diff --git a/build.c b/build.c
index 7ab787f..7e5e892 100644
--- a/build.c
+++ b/build.c
@@ -6,6 +6,14 @@
#include <time.h>
#include <string.h>
+void print_cmd(char** args) {
+ int i = 0;
+ while (args[i] != NULL) {
+ printf("%s ", args[i++]);
+ }
+ printf("\n");
+}
+
// https://github.com/tsoding/nob.h/blob/0a08926d8094fc4ae678155c5d73ae21d1f96f3f/nob.h#L2413
int needs_rebuild(char* bin_file, char* source_file) {
struct stat statbuf = {0};
@@ -28,26 +36,39 @@ int main(int argc, char** argv) {
if (needs_rebuild(argv[0], __FILE__)) {
if (fork() == 0) {
char* args[] = {"gcc", __FILE__, "-o", argv[0], NULL};
+ print_cmd(args);
execvp(args[0], args);
return 0;
} else {
wait(NULL);
+ print_cmd(argv);
execvp(argv[0], argv);
}
}
+ if (fork() == 0) {
+ char* args[] = {"mkdir", "-p", "output", NULL};
+ print_cmd(args);
+ execvp(args[0], args);
+ return 0;
+ } else {
+ wait(NULL);
+ }
+
if (argc > 1) {
if (strcmp(argv[1], "test") == 0) {
printf("Test mode\n");
if (fork() == 0) {
- char* args[] = {"gcc", "generate/find_tests.c", "-o", "find_tests.o", NULL};
+ char* args[] = {"gcc", "generate/find_tests.c", "-o", "output/find_tests.o", NULL};
+ print_cmd(args);
execvp(args[0], args);
return 0;
} else {
wait(NULL);
}
if (fork() == 0) {
- char* args[] = {"./find_tests.o", NULL};
+ char* args[] = {"./output/find_tests.o", NULL};
+ print_cmd(args);
execvp(args[0], args);
return 0;
} else {
@@ -55,28 +76,48 @@ int main(int argc, char** argv) {
}
printf("\n");
if (fork() == 0) {
- char* args[] = {"gcc", "tests/main.c", "-o", "test.o", NULL};
+ char* args[] = {"gcc", "tests/main.c", "-o", "output/test.o", NULL};
+ print_cmd(args);
+ execvp(args[0], args);
+ return 0;
+ } else {
+ wait(NULL);
+ }
+
+ char* args[] = {"./output/test.o", NULL};
+ print_cmd(args);
+ execvp(args[0], args);
+ return 0;
+ }
+ if (strcmp(argv[1], "server") == 0) {
+ printf("Server mode\n");
+ if (fork() == 0) {
+ char* args[] = {"gcc", "src/server.c", "-lcrypto", "-o", "output/server.o", NULL};
+ print_cmd(args);
execvp(args[0], args);
return 0;
} else {
wait(NULL);
}
- char* args[] = {"./test.o", NULL};
+ char* args[] = {"./output/server.o", "./output/main.o", NULL};
+ print_cmd(args);
execvp(args[0], args);
return 0;
}
}
if (fork() == 0) {
- char* args[] = {"gcc", "src/main.c", "-o", "main.o", NULL};
+ char* args[] = {"gcc", "src/main.c", "-o", "output/main.o", NULL};
+ print_cmd(args);
execvp(args[0], args);
return 0;
} else {
wait(NULL);
}
- char* args[] = {"./main.o", NULL};
+ char* args[] = {"./output/main.o", NULL};
+ print_cmd(args);
execvp(args[0], args);
return 0;
}