bug-make
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[RFC PATCH v4 1/3] Add my logging setup


From: Britton Leo Kerin
Subject: [RFC PATCH v4 1/3] Add my logging setup
Date: Mon, 23 Dec 2024 15:56:46 -0900

---
 .gitignore                   |  2 ++
 Makefile.am                  | 54 +++++++++++++++++++++++++++++++++---
 cflow.rc                     | 16 +++++++++++
 src/.cscope_rebuild_commands |  1 +
 src/main.c                   |  5 ++++
 src/myMakeLog.c              | 31 +++++++++++++++++++++
 src/myMakeLog.h              | 12 ++++++++
 7 files changed, 117 insertions(+), 4 deletions(-)
 create mode 100644 cflow.rc
 create mode 100644 src/.cscope_rebuild_commands
 create mode 100644 src/myMakeLog.c
 create mode 100644 src/myMakeLog.h

diff --git a/.gitignore b/.gitignore
index cf4109d5..9288f9f5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,6 +4,8 @@ TAGS
 GPATH
 GRTAGS
 GTAGS
+make.cflow
+make.rcflow
 .*cache
 .*gdbinit
 .gdb_history
diff --git a/Makefile.am b/Makefile.am
index 096ff661..61522ed8 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -34,10 +34,11 @@ make_SRCS = src/ar.c src/arscan.c src/commands.c 
src/commands.h \
                src/getopt.h src/getopt1.c src/gettext.h src/guile.c \
                src/hash.c src/hash.h src/implicit.c src/job.c src/job.h \
                src/load.c src/loadapi.c src/main.c src/makeint.h src/misc.c \
-               src/mkcustom.h src/os.h src/output.c src/output.h src/read.c \
-               src/remake.c src/rule.c src/rule.h src/shuffle.h src/shuffle.c \
-               src/signame.c src/strcache.c src/variable.c src/variable.h \
-               src/version.c src/vpath.c src/warning.c src/warning.h
+               src/mkcustom.h src/myMakeLog.c src/os.h src/output.c \
+               src/output.h src/read.c src/remake.c src/rule.c src/rule.h \
+               src/shuffle.h src/shuffle.c src/signame.c src/strcache.c \
+               src/variable.c src/variable.h src/version.c src/vpath.c \
+               src/warning.c src/warning.h
 
 w32_SRCS =     src/w32/pathstuff.c src/w32/w32os.c src/w32/compat/dirent.c \
                src/w32/compat/posixfcn.c src/w32/include/dirent.h \
@@ -209,6 +210,51 @@ check-regression: tests/config-flags.pm
          echo "Can't find the $(PACKAGE_NAME) test suite 
($(top_srcdir)/tests)."; \
        fi
 
+# Without --brief reverse graph blows up to at least 20G and forward graph is
+# pretty huge also so that's sort of mandatory
+CFLOW_MANDATORY_FLAGS = --brief
+
+# It might be desireable to change this, but it gives best looking output IMO:
+CFLOW_FLAGS = --level 'begin=' --level '0=  ' --level '1=| ' --level end0='| ' 
--level end1='\\ ' --omit-arguments --omit-symbol-names -i x
+# One might not want -i x to the above to try to see users of variables, I'm
+# not sure it's really reliable enough to be worthwhile.  Maybe good old grep
+# and then using syntax folding to quickly figure out which function each
+# reference is in is better for that.  -i _ can be used to not avoid symbols
+# starting with _.
+
+# These are common to both call and callee graph building:
+CFLOW_COMMON_FLAGS = $(CFLOW_MANDATORY_FLAGS) $(CFLOW_FLAGS) $(DEFS) \
+                    $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS)  \
+                    $(CPPFLAGS)
+
+# Presumably other modern automake setups have something like this around:
+make_CFLOW_INPUT=$(make_SRCS)
+
+# Ideas for more improvements:
+#
+#   * Filter (with perl probably) all function entries that don't have a source
+#     location.  They're probably all library function calls and they're likely
+#     not of interest.  Note that function entries can be distinguished fromn
+#     variables by the presence of ().
+#
+#   * A version with source locations removed (probably with perl)
+#
+#   * An interface to interogate (e.g. show only tree for or involving a
+#     partigular function).
+#
+#   * Support easy createion of version from cflow without -i x
+#
+#   * If appropriate don't show noise () when not doing -i x
+#
+#   * Make variables or something to drive the above as appropriate.
+#
+
+make.cflow: $(make_CFLOW_INPUT) cflow.rc Makefile
+       CFLOWRC=$(top_srcdir)/cflow.rc \
+        cflow -omake.cflow            $(CFLOW_COMMON_FLAGS) $(make_CFLOW_INPUT)
+make.rcflow: $(make_CFLOW_INPUT) cflow.rc Makefile
+       CFLOWRC=$(top_srcdir)/cflow.rc \
+        cflow -omake.rcflow --reverse $(CFLOW_COMMON_FLAGS) $(make_CFLOW_INPUT)
 
 # --------------- Maintainer's Section
 
diff --git a/cflow.rc b/cflow.rc
new file mode 100644
index 00000000..c02f411d
--- /dev/null
+++ b/cflow.rc
@@ -0,0 +1,16 @@
+# As advised in the manual for working with GNU sources:
+--symbol __inline:=inline
+--symbol __inline__:=inline
+--symbol __const__:=const
+--symbol __const:=const
+--symbol __restrict:=restrict
+--symbol __extension__:qualifier
+--symbol __attribute__:wrapper
+--symbol __asm__:wrapper
+--symbol __nonnull:wrapper
+--symbol __wur:wrapper
+
+# Hack because cflow gets confused by integer literals with e.g. L, UL suffixes
+# (there are probably more of these that should be added):
+--symbol L:keyword
+--symbol UL:keyword
diff --git a/src/.cscope_rebuild_commands b/src/.cscope_rebuild_commands
new file mode 100644
index 00000000..1b08bea8
--- /dev/null
+++ b/src/.cscope_rebuild_commands
@@ -0,0 +1 @@
+cscope -b -q -R
diff --git a/src/main.c b/src/main.c
index 6a129768..a92b2ace 100644
--- a/src/main.c
+++ b/src/main.c
@@ -32,6 +32,8 @@ this program.  If not, see <https://www.gnu.org/licenses/>.  
*/
 # include <fcntl.h>
 #endif
 
+#include "myMakeLog.h"
+
 #if MK_OS_VMS
 int vms_use_mcr_command = 0;
 int vms_always_use_cmd_file = 0;
@@ -1210,6 +1212,9 @@ main (int argc, char **argv, char **envp)
   no_default_sh_exe = 1;
 #endif
 
+  mLInit ();
+  mL ("HI THERE");
+
   initialize_variable_output ();
 
   /* Useful for attaching debuggers, etc.  */
diff --git a/src/myMakeLog.c b/src/myMakeLog.c
new file mode 100644
index 00000000..6cbd1963
--- /dev/null
+++ b/src/myMakeLog.c
@@ -0,0 +1,31 @@
+
+#include <assert.h>
+
+#include "myMakeLog.h"
+
+static FILE *mml = NULL;
+
+void
+mLInit (void)
+{
+  mml = fopen("/tmp/myMakeLog", "a");
+  assert (mml != NULL);
+}
+
+void
+mL (char const *format, ...)
+{
+  va_list args;
+  int return_code;
+
+  assert (mml != NULL);
+
+  va_start (args, format);
+  vfprintf (mml, format, args);
+  va_end (args);
+
+  fprintf (mml, "\n");
+
+  return_code = fflush (mml);
+  assert (return_code == 0);
+}
diff --git a/src/myMakeLog.h b/src/myMakeLog.h
new file mode 100644
index 00000000..a2db09e2
--- /dev/null
+++ b/src/myMakeLog.h
@@ -0,0 +1,12 @@
+
+#include <stdarg.h>
+#include <stdio.h>
+
+void
+mLInit (void);
+
+void
+mL (const char *format, ...) __attribute__((format(printf, 1, 2)));
+
+#define mCP() \
+  mL ("%s:%i: hit checkpoint (in function %s)", __FILE__, __LINE__, __func__)
-- 
2.43.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]