This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Make init.c depend on source files


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=b180d0a254034c14fd540c1b57391bb413f788f7

commit b180d0a254034c14fd540c1b57391bb413f788f7
Author: Tom Tromey <tom@tromey.com>
Date:   Mon Dec 24 11:44:10 2018 -0700

    Make init.c depend on source files
    
    I noticed that init.c depends on the object files that go into gdb.
    Because init.c actually only requires the contents of the
    corresponding source files, this unnecessarily serializes the step
    that builds init.c.
    
    This patch changes gdb's Makefile to make init.c depend on the source
    files.  This also simplifies the rule to build init.c.
    
    gdb/ChangeLog
    2018-12-27  Tom Tromey  <tom@tromey.com>
    
    	* Makefile.in (INIT_FILES): Redefine.
    	(stamp-init): Remove sed, tr invocations.  Use for loop.  Don't
    	set LANG or LC_ALL.

Diff:
---
 gdb/ChangeLog   |  6 ++++++
 gdb/Makefile.in | 35 +++++++++++------------------------
 2 files changed, 17 insertions(+), 24 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 33cc257..5c7e98b 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,11 @@
 2018-12-27  Tom Tromey  <tom@tromey.com>
 
+	* Makefile.in (INIT_FILES): Redefine.
+	(stamp-init): Remove sed, tr invocations.  Use for loop.  Don't
+	set LANG or LC_ALL.
+
+2018-12-27  Tom Tromey  <tom@tromey.com>
+
 	* Makefile.in (stamp-init): Remove gdbtypes special case.
 
 2018-12-27  John Baldwin  <jhb@FreeBSD.org>
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index 1adbbca..713b0d8 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -1830,37 +1830,24 @@ test-cp-name-parser$(EXEEXT): test-cp-name-parser.o $(LIBIBERTY)
 #
 # Note that the set of files with init functions might change, or the names
 # of the functions might change, so this files needs to depend on all the
-# object files that will be linked into gdb.
+# source files that will be linked into gdb.  However, due to the way
+# this Makefile has generally been written, we do this indirectly, by
+# computing the list of source files from the list of object files.
 
-# FIXME: There is a problem with this approach - init.c may force
-# unnecessary files to be linked in.
+INIT_FILES = \
+	$(patsubst %.o,%.c, \
+	  $(patsubst %-exp.o,%-exp.y, \
+	    $(filter-out $(NATDEPFILES) init.o version.o %_S.o %_U.o,\
+	      $(COMMON_OBS))))
 
-# NOTE: cagney/2003-03-18: The sed pattern ``s|^\([^ /]...'' is
-# anchored on the first column and excludes the ``/'' character so
-# that it doesn't add the $(srcdir) prefix to any file that already
-# has an absolute path.  It turns out that $(DEC)'s True64 make
-# automatically adds the $(srcdir) prefixes when it encounters files
-# in sub-directories such as cli/ and mi/.
-
-INIT_FILES = $(COMMON_OBS)
 init.c: stamp-init; @true
 stamp-init: $(INIT_FILES)
 	@$(ECHO_INIT_C) echo "Making init.c"
 	@rm -f init.c-tmp init.l-tmp
 	@touch init.c-tmp
-	@-LANG=C ; export LANG ; \
-	LC_ALL=C ; export LC_ALL ; \
-	echo $(INIT_FILES) | \
-	tr ' ' '\012' | \
-	sed \
-	    -e '/^init.[co]$$/d' \
-	    -e '/version.[co]$$/d' \
-	    -e '/^[a-z0-9A-Z_]*_[SU].[co]$$/d' \
-	    -e 's/-exp\.o$$/-exp.y/' \
-	    -e 's/\.o$$/.c/' \
-	    -e 's|^\([^  /][^     ]*\)|$(srcdir)/\1|g' | \
-	while read f; do \
-	    sed -n -e 's/^_initialize_\([a-z_0-9A-Z]*\).*/\1/p' $$f 2>/dev/null; \
+	@-for f in $(INIT_FILES); do \
+	    sed -n -e 's/^_initialize_\([a-z_0-9A-Z]*\).*/\1/p' \
+	        $(srcdir)/$$f 2>/dev/null; \
 	done > init.l-tmp
 	@echo '/* Do not modify this file.  */' >>init.c-tmp
 	@echo '/* It is created automatically by the Makefile.  */'>>init.c-tmp


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]