summaryrefslogtreecommitdiff
path: root/output.h
diff options
context:
space:
mode:
authorPaul Smith <psmith@gnu.org>2013-09-12 04:07:52 -0400
committerPaul Smith <psmith@gnu.org>2013-09-12 04:07:52 -0400
commitdeff9dacc97cc20015d3018992f2c77cb7fab102 (patch)
tree3da393310f9936a22aa211e6870a23e98b6fdebe /output.h
parent40a49f244da5b417af8bede84ac221cee2318d88 (diff)
downloadgunmake-deff9dacc97cc20015d3018992f2c77cb7fab102.tar.gz
Enhance the output sync mode.
Create a new file, output.c, and collect functions that generate output there. We introduce a new global context specifying where output should go (to stdout or to a sync file), and the lowest level output generator chooses where to write output based on that context. This allows us to set the context globally, and all operations that write output (including functions like $(info ...) etc.) will use it. Removed the "--trace=dir" capability. It was too confusing. If you have directory tracking enabled then output sync will print the enter/leave message for each synchronized block. If you don't want that, disable directory tracking.
Diffstat (limited to 'output.h')
-rw-r--r--output.h37
1 files changed, 37 insertions, 0 deletions
diff --git a/output.h b/output.h
new file mode 100644
index 0000000..a918504
--- /dev/null
+++ b/output.h
@@ -0,0 +1,37 @@
+/* Output to stdout / stderr for GNU make
+Copyright (C) 2013 Free Software Foundation, Inc.
+This file is part of GNU Make.
+
+GNU Make is free software; you can redistribute it and/or modify it under the
+terms of the GNU General Public License as published by the Free Software
+Foundation; either version 3 of the License, or (at your option) any later
+version.
+
+GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with
+this program. If not, see <http://www.gnu.org/licenses/>. */
+
+struct output
+ {
+ int out;
+ int err;
+ unsigned int syncout:1; /* True if we want to synchronize output. */
+ };
+
+extern struct output *output_context;
+
+#define OUTPUT_SET(_new) do{ if ((_new)->syncout) output_context = (_new); }while(0)
+#define OUTPUT_UNSET() do{ output_context = NULL; }while(0)
+
+void output_init (struct output *out, unsigned int syncout);
+void output_close (struct output *out);
+
+void output_start (void);
+void outputs (int is_err, const char *msg);
+
+#ifdef OUTPUT_SYNC
+void output_dump (struct output *out);
+#endif