diff -rc job.c job.c *** job.c 2006-03-20 04:03:04.000000000 +0100 --- job.c 2009-01-19 19:37:28.000000000 +0100 *************** *** 1083,1089 **** appear. */ message (0, (just_print_flag || (!(flags & COMMANDS_SILENT) && !silent_flag)) ! ? "%s" : (char *) 0, p); /* Tell update_goal_chain that a command has been started on behalf of this target. It is important that this happens here and not in --- 1083,1089 ---- appear. */ message (0, (just_print_flag || (!(flags & COMMANDS_SILENT) && !silent_flag)) ! ? (enable_nested_output ? "\e[3s\e[a%s\e[b" : "%s") : (char *) 0, p); /* Tell update_goal_chain that a command has been started on behalf of this target. It is important that this happens here and not in diff -rc main.c main.c *** main.c 2006-03-20 03:36:37.000000000 +0100 --- main.c 2009-01-19 19:41:41.000000000 +0100 *************** *** 886,891 **** --- 886,900 ---- } + static void close_nesting() + { + while (stdout_nesting_level--) + printf("\e[q"); + while (stderr_nesting_level--) + fprintf(stderr, "\e[q"); + } + + #ifdef _AMIGA int main (int argc, char **argv) *************** *** 931,936 **** --- 940,950 ---- atexit (close_stdout); #endif + atexit(close_nesting); + + if (getenv("NIX_INDENT_MAKE")) + enable_nested_output = 1; + /* Needed for OS/2 */ initialize_main(&argc, &argv); *************** *** 3095,3100 **** --- 3109,3120 ---- /* Use entire sentences to give the translators a fighting chance. */ + if (entering && enable_nested_output) + { + printf("\e[p"); + stdout_nesting_level++; + } + if (makelevel == 0) if (starting_directory == 0) if (entering) *************** *** 3124,3129 **** --- 3144,3159 ---- printf (_("%s[%u]: Leaving directory `%s'\n"), program, makelevel, starting_directory); + if (!entering && enable_nested_output) + { + printf("\e[q"); + stdout_nesting_level--; + } + /* Flush stdout to be sure this comes before any stderr output. */ fflush (stdout); } + + int enable_nested_output = 0; + int stdout_nesting_level = 0; + int stderr_nesting_level = 0; diff -rc make.h *** make.h 2006-02-16 00:54:43.000000000 +0100 --- make.h 2009-01-19 19:32:03.000000000 +0100 *************** *** 609,611 **** --- 609,614 ---- #define ENULLLOOP(_v,_c) do{ errno = 0; \ while (((_v)=_c)==0 && errno==EINTR); }while(0) + extern int enable_nested_output; + extern int stdout_nesting_level; + extern int stderr_nesting_level; diff -rc reremake.c *** remake.c 2006-03-20 03:36:37.000000000 +0100 --- remake.c 2009-01-19 19:39:40.000000000 +0100 *************** *** 1120,1126 **** --- 1120,1137 ---- /* The normal case: start some commands. */ if (!touch_flag || file->cmds->any_recurse) { + if (enable_nested_output) + { + log_working_directory (1); + fprintf(stderr, "\e[pbuilding %s\n", file->name); + stderr_nesting_level++; + } execute_file_commands (file); + if (enable_nested_output) + { + fprintf(stderr, "\e[q"); + stderr_nesting_level--; + } return; }