This is the mail archive of the gdb-patches@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]

[patch] Create general staging area for data-directory files.


Hi.

Currently we create a staging area for the syscall files.
[grep for xml-syscall-copy in gdb/Makefile.in.
I'm not sure if it's used though, testsuite/gdb.base/catch-syscall.exp
sets data-directory to the source tree.  Though it could be used
by manually setting data-directory of course.]

We now have python files that also live in data-directory,
and rather than have multiple staging areas it makes sense
to consolidate them into one.

This patch does that.

This patch is a prerequisite to adding python modules for gdb
in that we'll want testcases for them, and thus we'll want a way
to point gdb at those files from the build tree.
[And while we could point data-directory at the source tree too,
we can't point data-directory at both syscalls and python at
the same time.]

I've modified the xml syscall "make install" rule to take the files
from the staging area.  If we're going to have a staging area
(and I think we should), then we should install from it.
Since "install" depends on "all", this isn't really a problem.

Another change is that one now has to remember to type "make"
before "make check" after modifying these data files.
I think this is a small price to pay, and s.o.p. for other source
files anyway.

This patch also provides an uninstall rule for xml syscalls
which is currently missing.

I can imagine quibbling over the name choice of the subdirectory:
data-directory.
I chose it because:
- it matches the gdb parameter of the same name
- it (currently) tab completes in 3 characters
- it's not so long of a name that it messes up `ls' output
  [darwin-nat-info.c is close by in `ls' output and is longer]

I will check this in in two days if there are no objections.


2010-10-04  Doug Evans  <dje@google.com>

	Create subdir data-directory.
	* Makefile.in (XML_SYSCALL_DIR, XML_SYSCALL_FILES): Moved to
	data-directory/Makefile.in.
	(SUBDIRS): Add data-directory.
	(all): Remove xml-syscall-copy dependency.
	(xml-syscall-copy): Moved to data-directory/Makefile.in as
	stamp-syscalls.
	(xml-syscall-install): Moved to data-directory/Makefile.in as
	install-syscalls.
	(install-only): Remove xml-syscall-install dependency.
	(all-data-directory): New rule.
	(data-directory/Makefile): New rule.
	* configure.ac (AC_OUTPUT): Add data-directory/Makefile.
	* configure: Regenerate.
	* data-directory/Makefile.in: New file.
	* python/lib/gdb/__init__.py: New file.

	testsuite/
	* gdb.base/catch-syscall.exp (do_syscall_tests): Update location
	of syscall staging area.

Index: Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/Makefile.in,v
retrieving revision 1.1134
diff -u -p -r1.1134 Makefile.in
--- Makefile.in	13 Sep 2010 17:59:59 -0000	1.1134
+++ Makefile.in	4 Oct 2010 23:34:03 -0000
@@ -870,16 +870,9 @@ COMMON_OBS = $(DEPFILES) $(CONFIG_OBS) $
 	inferior.o osdata.o gdb_usleep.o record.o gcore.o \
 	jit.o progspace.o
 
-# Definitions for the syscall's XML files and dir
-XML_SYSCALLS_DIR = syscalls/
-XML_SYSCALLS_FILES = gdb-syscalls.dtd \
-		     ppc-linux.xml ppc64-linux.xml \
-		     i386-linux.xml amd64-linux.xml \
-		     sparc-linux.xml sparc64-linux.xml
-
 TSOBS = inflow.o
 
-SUBDIRS = @subdirs@
+SUBDIRS = @subdirs@ data-directory
 CLEANDIRS = $(SUBDIRS) gnulib
 
 # For now, shortcut the "configure GDB for fewer languages" stuff.
@@ -910,41 +903,11 @@ generated_files = config.h observer.h ob
 	$(COMPILE) $<
 	$(POSTCOMPILE)
 
-all: gdb$(EXEEXT) $(CONFIG_ALL) xml-syscall-copy
+all: gdb$(EXEEXT) $(CONFIG_ALL)
 	@$(MAKE) $(FLAGS_TO_PASS) DO=all "DODIRS=`echo $(SUBDIRS) | sed 's/testsuite//'`" subdir_do
 .PHONY: all-tui
 all-tui: $(TUI)$(EXEEXT)
 
-# This is needed for running GDB from the build directory
-.PHONY: xml-syscall-copy
-xml-syscall-copy:
-	if [ "`cd $(srcdir) && pwd`" != "`pwd`" ] ; then \
-	  mkdir -p ./$(XML_SYSCALLS_DIR) ; \
-	  list='$(XML_SYSCALLS_FILES)' ; \
- 	  for file in $$list ; do \
-	    f=$(srcdir)/$(XML_SYSCALLS_DIR)/$$file ; \
-	    if test -f $$f ; then \
-	      $(INSTALL_DATA) $$f \
-	    	  ./$(XML_SYSCALLS_DIR) ; \
-	    fi ; \
-	  done ; \
-	fi ;
-
-# This target is responsible for properly installing the syscalls'
-# XML files in the system.
-.PHONY: xml-syscall-install
-xml-syscall-install:
-	$(SHELL) $(srcdir)/../mkinstalldirs \
-		$(DESTDIR)$(GDB_DATADIR)/$(XML_SYSCALLS_DIR) ; \
-	list='$(XML_SYSCALLS_FILES)' ; \
-	for file in $$list ; do \
-	  f=$(srcdir)/$(XML_SYSCALLS_DIR)/$$file ; \
-	  if test -f $$f ; then \
-	    $(INSTALL_DATA) $$f \
-	    	$(DESTDIR)$(GDB_DATADIR)/$(XML_SYSCALLS_DIR) ; \
-	  fi ; \
-	done ;
-
 installcheck:
 
 # The check target can not use subdir_do, because subdir_do does not
@@ -1003,9 +966,7 @@ gdb.z:gdb.1
 # install-only is intended to address that need.
 install: all install-only 
 
-# The "install-only" target also installs the syscalls' XML files in
-# the system.
-install-only: $(CONFIG_INSTALL) xml-syscall-install
+install-only: $(CONFIG_INSTALL)
 	transformed_name=`t='$(program_transform_name)'; \
 			  echo gdb | sed -e "$$t"` ; \
 		if test "x$$transformed_name" = x; then \
@@ -1178,6 +1139,11 @@ all-lib: gnulib/Makefile
 	@$(MAKE) $(FLAGS_TO_PASS) DO=all DODIRS=gnulib subdir_do
 .PHONY: all-lib
 
+# Convenience rule to handle recursion.
+.PHONY: all-data-directory
+all-data-directory: data-directory/Makefile
+	@$(MAKE) $(FLAGS_TO_PASS) DO=all DODIRS=data-directory subdir_do
+
 # Create a library of the gdb object files and build GDB by linking
 # against that.
 #
@@ -1294,6 +1260,13 @@ gnulib/Makefile: gnulib/Makefile.in gnul
 	  CONFIG_LINKS= \
 	  $(SHELL) config.status
 
+data-directory/Makefile: data-directory/Makefile.in config.status @frags@
+	CONFIG_FILES="data-directory/Makefile" \
+	  CONFIG_COMMANDS="depfiles" \
+	  CONFIG_HEADERS= \
+	  CONFIG_LINKS= \
+	  $(SHELL) config.status
+
 config.h: stamp-h ; @true
 stamp-h: $(srcdir)/config.in config.status
 	CONFIG_HEADERS=config.h:config.in \
Index: configure
===================================================================
RCS file: /cvs/src/src/gdb/configure,v
retrieving revision 1.317
diff -u -p -r1.317 configure
--- configure	22 Sep 2010 16:14:57 -0000	1.317
+++ configure	4 Oct 2010 23:34:03 -0000
@@ -15891,7 +15891,7 @@ ac_config_links="$ac_config_links $ac_co
 $as_echo "#define GDB_DEFAULT_HOST_CHARSET \"UTF-8\"" >>confdefs.h
 
 
-ac_config_files="$ac_config_files Makefile .gdbinit:gdbinit.in gnulib/Makefile"
+ac_config_files="$ac_config_files Makefile .gdbinit:gdbinit.in gnulib/Makefile data-directory/Makefile"
 
 ac_config_commands="$ac_config_commands default"
 
@@ -16658,6 +16658,7 @@ do
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
     ".gdbinit") CONFIG_FILES="$CONFIG_FILES .gdbinit:gdbinit.in" ;;
     "gnulib/Makefile") CONFIG_FILES="$CONFIG_FILES gnulib/Makefile" ;;
+    "data-directory/Makefile") CONFIG_FILES="$CONFIG_FILES data-directory/Makefile" ;;
     "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;;
 
   *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
Index: configure.ac
===================================================================
RCS file: /cvs/src/src/gdb/configure.ac,v
retrieving revision 1.131
diff -u -p -r1.131 configure.ac
--- configure.ac	22 Sep 2010 16:15:01 -0000	1.131
+++ configure.ac	4 Oct 2010 23:34:03 -0000
@@ -2140,7 +2140,7 @@ dnl  At the moment, we just assume it's 
 AC_DEFINE(GDB_DEFAULT_HOST_CHARSET, "UTF-8",
           [Define to be a string naming the default host character set.])
 
-AC_OUTPUT(Makefile .gdbinit:gdbinit.in gnulib/Makefile,
+AC_OUTPUT(Makefile .gdbinit:gdbinit.in gnulib/Makefile data-directory/Makefile,
 [
 case x$CONFIG_HEADERS in
 xconfig.h:config.in)
Index: testsuite/gdb.base/catch-syscall.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.base/catch-syscall.exp,v
retrieving revision 1.8
diff -u -p -r1.8 catch-syscall.exp
--- testsuite/gdb.base/catch-syscall.exp	1 Jun 2010 21:29:21 -0000	1.8
+++ testsuite/gdb.base/catch-syscall.exp	4 Oct 2010 23:34:03 -0000
@@ -278,7 +278,7 @@ proc do_syscall_tests {} {
     global gdb_prompt srcdir
 
     # First, we need to set GDB datadir.
-    gdb_test_no_output "set data-directory $srcdir/.."
+    gdb_test_no_output "set data-directory [pwd]/../data-directory"
 
     # Verify that the 'catch syscall' help is available
     set thistest "help catch syscall"
--- /dev/null	2010-09-23 16:28:04.543730915 -0700
+++ python/lib/gdb/__init__.py	2010-10-04 16:42:40.000000000 -0700
@@ -0,0 +1,16 @@
+# Copyright (C) 2010 Free Software Foundation, Inc.
+
+# This program 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.
+#
+# This program 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/>.
+
+
--- /dev/null	2010-09-23 16:28:04.543730915 -0700
+++ data-directory/Makefile.in	2010-10-04 16:56:01.000000000 -0700
@@ -0,0 +1,185 @@
+# Copyright (C) 2010 Free Software Foundation, Inc.
+
+# Makefile for building a staged copy of the data-directory.
+# This file is part of GDB.
+
+# This program 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.
+#
+# This program 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/>.
+
+srcdir = @srcdir@
+SYSCALLS_SRCDIR = $(srcdir)/../syscalls
+PYTHON_SRCDIR = $(srcdir)/../python/lib
+VPATH = $(srcdir):$(SYSCALLS_SRCDIR):$(PYTHON_SRCDIR)
+
+top_srcdir = @top_srcdir@
+top_builddir = @top_builddir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+datarootdir = @datarootdir@
+datadir = @datadir@
+
+SHELL = @SHELL@
+
+LN_S = @LN_S@
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_DIR = $(SHELL) $(srcdir)/../../mkinstalldirs
+
+GDB_DATADIR = @GDB_DATADIR@
+
+SYSCALLS_DIR = syscalls
+SYSCALLS_INSTALL_DIR = $(DESTDIR)/$(GDB_DATADIR)/$(SYSCALLS_DIR)
+SYSCALLS_FILES = \
+	gdb-syscalls.dtd \
+	ppc-linux.xml ppc64-linux.xml \
+	i386-linux.xml amd64-linux.xml \
+	sparc-linux.xml sparc64-linux.xml
+
+PYTHON_DIR = python
+PYTHON_INSTALL_DIR = $(DESTDIR)/$(GDB_DATADIR)/$(PYTHON_DIR)
+PYTHON_FILES = \
+	gdb/__init__.py
+
+# Host-dependent makefile fragment comes in here.
+@host_makefile_frag@
+# End of host-dependent makefile fragment
+
+.PHONY: all
+all: stamp-syscalls stamp-python
+
+# For portability's sake, we need to handle systems that don't have
+# symbolic links.
+stamp-syscalls: Makefile $(SYSCALLS_FILES)
+	rm -rf ./$(SYSCALLS_DIR)
+	mkdir ./$(SYSCALLS_DIR)
+	files='$(SYSCALLS_FILES)' ; \
+	for file in $$files ; do \
+	  f=$(SYSCALLS_SRCDIR)/$$file ; \
+	  if test -f $$f ; then \
+	    $(INSTALL_DATA) $$f ./$(SYSCALLS_DIR) ; \
+	  fi ; \
+	done
+	touch $@
+
+.PHONY: clean-syscalls
+clean-syscalls:
+	rm -rf $(SYSCALLS_DIR)
+
+# This target is responsible for properly installing the syscalls'
+# XML files in the system.
+.PHONY: install-syscalls
+install-syscalls:
+	$(INSTALL_DIR) $(SYSCALLS_INSTALL_DIR)
+	files='$(SYSCALLS_FILES)' ; \
+	for file in $$files; do \
+	  f=$(SYSCALLS_SRCDIR)/$$file ; \
+	  if test -f $$f ; then \
+	    $(INSTALL_DATA) $$f $(SYSCALLS_INSTALL_DIR) ; \
+	  fi ; \
+	done
+
+.PHONY: uninstall-syscalls
+uninstall-syscalls:
+	files='$(SYSCALLS_FILES)' ; \
+	for file in $$files ; do \
+	  slashdir=`echo "/$$file" | sed 's,/[^/]*$$,,'` ; \
+	  rm -f $(SYSCALLS_INSTALL_DIR)/$$file ; \
+	  while test "x$$file" != "x$$slashdir" ; do \
+	    rmdir 2>/dev/null "$(SYSCALLS_INSTALL_DIR)$$slashdir" ; \
+	    file="$$slashdir" ; \
+	    slashdir=`echo "$$file" | sed 's,/[^/]*$$,,'` ; \
+	  done \
+	done
+
+stamp-python: Makefile $(PYTHON_FILES)
+	rm -rf ./$(PYTHON_DIR)
+	files='$(PYTHON_FILES)' ; \
+	for file in $$files ; do \
+	  dir=`echo "$$file" | sed 's,/[^/]*$$,,'` ; \
+	  $(INSTALL_DIR) ./$(PYTHON_DIR)/$$dir ; \
+	  $(INSTALL_DATA) $(PYTHON_SRCDIR)/$$file ./$(PYTHON_DIR)/$$dir ; \
+	done
+	touch $@
+
+.PHONY: clean-python
+clean-python:
+	rm -rf $(PYTHON_DIR)
+
+.PHONY: install-python
+install-python:
+	files='$(PYTHON_FILES)' ; \
+	for file in $$files ; do \
+	  dir=`echo "$$file" | sed 's,/[^/]*$$,,'` ; \
+	  $(INSTALL_DIR) $(PYTHON_INSTALL_DIR)/$$dir ; \
+	  $(INSTALL_DATA) ./$(PYTHON_DIR)/$$file $(PYTHON_INSTALL_DIR)/$$dir ; \
+	done
+
+.PHONY: uninstall-python
+uninstall-python:
+	files='$(PYTHON_FILES)' ; \
+	for file in $$files ; do \
+	  slashdir=`echo "/$$file" | sed 's,/[^/]*$$,,'` ; \
+	  rm -f $(PYTHON_INSTALL_DIR)/$$file ; \
+	  while test "x$$file" != "x$$slashdir" ; do \
+	    rmdir 2>/dev/null "$(PYTHON_INSTALL_DIR)$$slashdir" ; \
+	    file="$$slashdir" ; \
+	    slashdir=`echo "$$file" | sed 's,/[^/]*$$,,'` ; \
+	  done \
+	done
+
+# Traditionally "install" depends on "all".  But it may be useful
+# not to; for example, if the user has made some trivial change to a
+# source file and doesn't care about rebuilding or just wants to save the
+# time it takes for make to check that all is up to date.
+# install-only is intended to address that need.
+.PHONY: install
+install: all
+	$(MAKE) install-only
+
+.PHONY: install-only
+install-only: install-syscalls install-python
+
+.PHONY: uninstall
+uninstall: uninstall-syscalls uninstall-python
+
+.PHONY: clean
+clean: clean-syscalls clean-python
+	rm -f stamp-*
+
+.PHONY: maintainer-clean realclean distclean
+maintainer-clean realclean distclean: clean
+	rm -f Makefile
+
+.PHONY: check installcheck info dvi pdf html
+.PHONY: install-info install-pdf install-html clean-info
+check installcheck:
+info dvi pdf html:
+install-info install-pdf install-html:
+clean-info:
+
+# GNU Make has an annoying habit of putting *all* the Makefile variables
+# into the environment, unless you include this target as a circumvention.
+# Rumor is that this will be fixed (and this target can be removed)
+# in GNU Make 4.0.
+.NOEXPORT:
+
+# GNU Make 3.63 has a different problem: it keeps tacking command line
+# overrides onto the definition of $(MAKE).  This variable setting
+# will remove them.
+MAKEOVERRIDES=
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @frags@
+	cd $(top_builddir) && $(MAKE) data-directory/Makefile


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