From c27027cd2eeebfa63c084e746c7da46c952fb255 Mon Sep 17 00:00:00 2001 From: Tharre Date: Mon, 17 Nov 2014 15:48:23 +0100 Subject: Merge all redo-*.c files into redo.c. The resulting redo binary behaves differently if called with each respective redo-* name, and is symlinked to the different command names. This should reduce the memory footprint of a redo build, as the OS only needs to keep one copy of the redo code in memory. --- src/redo.c | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) (limited to 'src/redo.c') diff --git a/src/redo.c b/src/redo.c index a62f1a6..b460b55 100644 --- a/src/redo.c +++ b/src/redo.c @@ -27,6 +27,10 @@ static inline unsigned digits(unsigned n) { } void prepare_env() { + if (getenv("REDO_ROOT") && getenv("REDO_PARENT_TARGET") + && getenv("REDO_MAGIC")) + return; + /* create the dependency store if it doesn't already exist */ if (mkdirp(".redo") && mkdirp(".redo/deps")) fprintf(stderr, "redo: creating dependency store ...\n"); @@ -36,7 +40,7 @@ void prepare_env() { if (!cwd) diem("redo: failed to obtain cwd"); if (setenv("REDO_ROOT", cwd, 0)) - diem("redo: failed to setenv REDO_ROOT to %s", cwd); + diem("redo: failed to setenv() REDO_ROOT to %s", cwd); free(cwd); /* set REDO_MAGIC */ @@ -50,12 +54,30 @@ void prepare_env() { int main(int argc, char *argv[]) { prepare_env(); - if (argc < 2) { - update_target("all", 'a'); + if (!strcmp(argv[0], "redo")) { + if (argc < 2) { + update_target("all", 'a'); + } else { + for (int i = 1; i < argc; ++i) + update_target(argv[i], 'a'); + } + return EXIT_SUCCESS; } else { - int i; - for (i = 1; i < argc; ++i) { - update_target(argv[i], 'a'); + char ident; + if (!strcmp(argv[0], "redo-ifchange")) + ident = 'c'; + else if (!strcmp(argv[0], "redo-ifcreate")) + ident = 'e'; + else if (!strcmp(argv[0], "redo-always")) + ident = 'a'; + else + die("argv set to unkown value\n"); + + for (int i = 1; i < argc; ++i) { + update_target(argv[i], ident); + add_dep(argv[i], NULL, ident); } + + return EXIT_SUCCESS; } } -- cgit v1.2.3-70-g09d2