From 15465e8b518d9413c11dcdcad712a6a51b3ebde2 Mon Sep 17 00:00:00 2001 From: Tharre Date: Thu, 27 Oct 2016 23:43:45 +0200 Subject: Implement logging using REDO_DEBUG env variable --- src/build.c | 6 ++++++ src/dbg.h | 4 ++++ src/redo.c | 7 +++++++ 3 files changed, 17 insertions(+) diff --git a/src/build.c b/src/build.c index db73d4a..be739c9 100644 --- a/src/build.c +++ b/src/build.c @@ -483,6 +483,7 @@ static int handle_c(dep_info *dep) { if (!depfd) { if (errno == ENOENT) { /* dependency record does not exist */ + log_warn("%s ood: dependency record doesn't exist\n", dep->target); return build_target(dep); } else { fatal("redo: failed to open %s", dep->path); @@ -493,6 +494,7 @@ static int handle_c(dep_info *dep) { if (dsv_parse_file(&ctx_dep, depfd)) { /* parsing failed */ + log_info("%s ood: parsing of dependency file failed\n", dep->target); retval = build_target(dep); goto exit; } @@ -506,6 +508,7 @@ static int handle_c(dep_info *dep) { retval = 1; goto exit2; } else { + log_info("%s ood: target file nonexistent\n", dep->target); retval = build_target(dep); goto exit2; } @@ -515,6 +518,7 @@ static int handle_c(dep_info *dep) { if (sscanf(ctx_dep.fields[1], "%lld.%ld", (long long*)&dep->ctime.tv_sec, &dep->ctime.tv_nsec) < 2) { /* ctime parsing failed */ + log_info("%s ood: ctime parsing failed\n", dep->target); retval = build_target(dep); goto exit3; } @@ -537,6 +541,7 @@ static int handle_c(dep_info *dep) { if (memcmp(old_hash, dep->hash, 20)) { /* target hash doesn't match */ + log_info("%s ood: hashes don't match\n", dep->target); free(old_hash); retval = build_target(dep); goto exit3; @@ -577,6 +582,7 @@ static int handle_c(dep_info *dep) { free(ctx_prereq.fields[1]); if (outofdate) { + log_info("%s ood: subtarget is ood\n", dep->target); retval = build_target(dep); break; } diff --git a/src/dbg.h b/src/dbg.h index 902d885..6e52ed4 100644 --- a/src/dbg.h +++ b/src/dbg.h @@ -25,12 +25,16 @@ #define DEBUG 0 #endif +extern int DBG_LVL; + /* helper functions which help in replacing the GNU extension ##__VA_ARGS__ */ #define STRINGIFY(x) #x #define PREFIX(...) PREFIX_HELPER(_FILENAME, __LINE__, __VA_ARGS__) #define SUFFIX(S, M, ...) M S, __VA_ARGS__ #define log_err(...) fprintf(stderr, PREFIX(__VA_ARGS__)) +#define log_warn(...) do { if (DBG_LVL > 2) log_err(__VA_ARGS__); } while (0) +#define log_info(...) do { if (DBG_LVL > 1) log_err(__VA_ARGS__); } while (0) #define die(...) die_(PREFIX(__VA_ARGS__)) #define fatal(...) die(SUFFIX(": %s\n", __VA_ARGS__, strerror(errno))) diff --git a/src/redo.c b/src/redo.c index 00da7eb..7f69949 100644 --- a/src/redo.c +++ b/src/redo.c @@ -46,6 +46,8 @@ void prepare_env() { fatal("redo: failed to setenv() REDO_MAGIC to %s", magic_str); } +int DBG_LVL; + int main(int argc, char *argv[]) { srand(time(NULL)); char *argv_base = xbasename(argv[0]); @@ -78,6 +80,11 @@ int main(int argc, char *argv[]) { if (!parent || !root || !magic) die("%s must be called inside a .do script\n", argv[0]); + /* set DBG_LVL (for dbg.h) */ + char *env = getenv("REDO_DEBUG"); + if (env) + DBG_LVL = atoi(env); + if (ident == 'a') add_prereq(parent, parent, ident); else -- cgit v1.2.3-70-g09d2