From b0a585e21362137c90a6484de44889d2117d9c7a Mon Sep 17 00:00:00 2001 From: Aargh Rai Date: Fri, 22 May 2026 18:13:07 +0530 Subject: using nob.h rebuild system --- build.c | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/build.c b/build.c index b8740fc..56c4d74 100644 --- a/build.c +++ b/build.c @@ -1,7 +1,41 @@ #include +#include #include +#include +#include +#include +#include + +// https://github.com/tsoding/nob.h/blob/0a08926d8094fc4ae678155c5d73ae21d1f96f3f/nob.h#L2413 +int needs_rebuild(char* bin_file, char* source_file) { + struct stat statbuf = {0}; + if (stat(bin_file, &statbuf) < 0) { + if (errno == ENOENT) return 1; + return -1; + } + time_t output_path_time = statbuf.st_mtime; + + if (stat(source_file, &statbuf) < 0) { + fprintf(stderr, "could not stat %s: %s", source_file, strerror(errno)); + return -1; + } + + time_t input_path_time = statbuf.st_mtime; + return input_path_time > output_path_time; +} + +int main(int argc, char** argv) { + if (needs_rebuild(argv[0], __FILE__)) { + if (fork() == 0) { + char* args[] = {"gcc", __FILE__, "-o", argv[0], NULL}; + execvp(args[0], args); + return 0; + } else { + wait(NULL); + execvp(argv[0], argv); + } + } -int main() { if (fork() == 0) { char* args[] = {"gcc", "src/main.c", "-o", "main.o", NULL}; execvp(args[0], args); -- cgit v1.2.3