diff --git a/gebs.c b/gebs.c index 765fb4b..cbd8edb 100644 --- a/gebs.c +++ b/gebs.c @@ -9,10 +9,14 @@ int main(int argc, char ** argv) gebs_mkdir("build"); } - if (GEBS_CMD("gcc", "-ggdb", "-o", "build/self_rebuild", "example/self_rebuild.c") != 0) - return 1; - if (GEBS_CMD("gcc", "-ggdb", "-o", "build/arena", "example/arena.c") != 0) - return 1; + if (gebs_needs_rebuild_many("build/self_rebuild", "example/self_rebuild.c")) { + if (GEBS_CMD("gcc", "-ggdb", "-o", "build/self_rebuild", "example/self_rebuild.c") != 0) + return 1; + } + if (gebs_needs_rebuild_many("build/arena", "example/arena.c")) { + if (GEBS_CMD("gcc", "-ggdb", "-o", "build/arena", "example/arena.c") != 0) + return 1; + } return 0; } diff --git a/gebs.h b/gebs.h index ec1bf91..7383294 100644 --- a/gebs.h +++ b/gebs.h @@ -236,6 +236,16 @@ void gebs_rebuild_self1_alloc(Gebs_Allocator *alloc, int argc, char ** argv, sizeof(__argv)/sizeof(__argv[0]), (char**)__argv, __FILE__); \ } while(0) +#define gebs_needs_rebuild_many(out, ...) \ +({ \ + const char *__deps[] = { __VA_ARGS__ }; \ + bool __ok = true; \ + for (size_t __i = 0; __i < sizeof(__deps)/sizeof(__deps[0]); __i++) { \ + __ok = __ok && gebs_needs_rebuild((out), __deps[__i]); \ + } \ + __ok; \ +}) + // ---------------------------------------------------------------------------- // Scratch arena // ----------------------------------------------------------------------------