aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/build.c6
-rw-r--r--src/dbg.h4
-rw-r--r--src/redo.c7
3 files changed, 17 insertions, 0 deletions
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