summaryrefslogtreecommitdiff
path: root/gnulib/update-gnulib.sh
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2019-05-05 17:35:20 -0600
committerTom Tromey <tom@tromey.com>2019-06-14 12:40:02 -0600
commit73cc72729a184f00bf6fc4d74684a8516ba6b683 (patch)
treee6887d2f33a00c23c4ec054d02b9be9f892da571 /gnulib/update-gnulib.sh
parentf568655424ad268c8c5df3f56e4e19a86b16623d (diff)
downloadbinutils-gdb-73cc72729a184f00bf6fc4d74684a8516ba6b683.tar.gz
Move gnulib to top level
This patch moves the gdb/gnulib subdirectory to the top level. It adjusts the top-level build system to build gnulib when necessary, and changes gdb to use this. However, gdbserver still builds its own copy of gnulib, just from the new source location. A small hack was needed to ensure that gnulib is only built when gdb is enabled. The Makefile only provides an ordering -- the directory must be mentioned in configdirs to actually be compiled at all. Most of the patch is just a "git mv" of gnulib, though a few minor path adjustments were needed in some files there. Tested by the buildbot. ChangeLog 2019-06-14 Tom Tromey <tom@tromey.com> * MAINTAINERS: Add gnulib. * gnulib: New directory, move from gdb/gnulib. * configure.ac (host_libs): Add gnulib. * configure: Rebuild. * Makefile.def (host_modules, dependencies): Add gnulib. * Makefile.in: Rebuild. gdb/ChangeLog 2019-06-14 Tom Tromey <tom@tromey.com> * gnulib: Move directory to top-level. * configure.ac: Don't configure gnulib. * configure: Rebuild. * common/common-defs.h: Use new path to gnulib. * Makefile.in (GNULIB_BUILDDIR): Now ../gnulib. (GNULIB_H): Remove. (INCGNU): Look in new gnulib location. (HFILES_NO_SRCDIR): Remove gnulib files. (SUBDIR, REQUIRED_SUBDIRS): Remove gnulib. (generated_files): Remove GNULIB_H. ($(LIBGNU), all-lib): Remove targets. (distclean): Don't mention GNULIB_BUILDDIR. ($(GNULIB_BUILDDIR)/Makefile): Remove target. gdb/gdbserver/ChangeLog 2019-06-14 Tom Tromey <tom@tromey.com> * configure.ac: Use new path to gnulib. * configure: Rebuild. * Makefile.in (INCGNU, $(GNULIB_BUILDDIR)/Makefile): Use new path to gnulib. gnulib/ChangeLog 2019-06-14 Tom Tromey <tom@tromey.com> * update-gnulib.sh: Adjust paths. * Makefile.in: Adjust paths. * configure.ac: Adjust paths. Use ACX_LARGEFILE. * configure: Rebuild.
Diffstat (limited to 'gnulib/update-gnulib.sh')
-rwxr-xr-xgnulib/update-gnulib.sh195
1 files changed, 195 insertions, 0 deletions
diff --git a/gnulib/update-gnulib.sh b/gnulib/update-gnulib.sh
new file mode 100755
index 00000000000..fb79b23c531
--- /dev/null
+++ b/gnulib/update-gnulib.sh
@@ -0,0 +1,195 @@
+#! /bin/sh
+
+# Copyright (C) 2011-2019 Free Software Foundation, Inc.
+#
+# 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/>.
+
+# Usage: update-gnulib.sh <path-to-gnulib-repository>
+# Update our import of gnulib in the GDB source tree.
+#
+# This script assumes that it is being called from the gdb/gnulib
+# subdirectory, and will verify this before proceeding.
+#
+# This script will also make a number of other verifications:
+# . The gnulib version (it should match $GNULIB_COMMIT_SHA1).
+# . The correct versions of the auto-tools that are used to
+# regenerate the various scripts and Makefiles are on the PATH.
+
+# The list of gnulib modules we are importing in GDB.
+IMPORTED_GNULIB_MODULES="\
+ alloca \
+ canonicalize-lgpl \
+ dirent \
+ dirfd \
+ errno \
+ fnmatch-gnu \
+ frexpl \
+ getcwd \
+ glob \
+ inet_ntop
+ inttypes \
+ lstat \
+ limits-h \
+ memchr \
+ memmem \
+ mkdir \
+ mkdtemp \
+ mkostemp \
+ pathmax \
+ rawmemchr \
+ readlink \
+ rename \
+ setenv \
+ signal-h \
+ strchrnul \
+ strstr \
+ strtok_r \
+ sys_stat \
+ unistd \
+ unsetenv \
+ update-copyright \
+ wchar \
+ wctype-h \
+"
+
+# The gnulib commit ID to use for the update.
+GNULIB_COMMIT_SHA1="38237baf99386101934cd93278023aa4ae523ec0"
+
+# The expected version number for the various auto tools we will
+# use after the import.
+AUTOCONF_VERSION="2.69"
+AUTOMAKE_VERSION="1.15.1"
+ACLOCAL_VERSION="$AUTOMAKE_VERSION"
+
+if [ $# -ne 1 ]; then
+ echo "Error: Path to gnulib repository missing. Aborting."
+ echo "Usage: update-gnulib.sh <path-to-gnulib-repository>"
+ exit 1
+fi
+gnulib_prefix=$1
+
+gnulib_tool="$gnulib_prefix/gnulib-tool"
+
+# Verify that the gnulib directory does exist...
+if [ ! -f "$gnulib_tool" ]; then
+ echo "Error: Invalid gnulib directory. Cannot find gnulib tool"
+ echo " ($gnulib_tool)."
+ echo "Aborting."
+ exit 1
+fi
+
+# Verify that we have the right version of gnulib...
+gnulib_head_sha1=`cd $gnulib_prefix && git rev-parse HEAD`
+if [ "$gnulib_head_sha1" != "$GNULIB_COMMIT_SHA1" ]; then
+ echo "Error: Wrong version of gnulib: $gnulib_head_sha1"
+ echo " (we expected it to be $GNULIB_COMMIT_SHA1)"
+ echo "Aborting."
+ exit 1
+fi
+
+# Verify that we are in the gdb/ subdirectory.
+if [ ! -f ../main.c -o ! -d import ]; then
+ echo "Error: This script should be called from the gdb/gnulib subdirectory."
+ echo "Aborting."
+ exit 1
+fi
+
+# Verify that we have the correct version of autoconf.
+ver=`autoconf --version 2>&1 | head -1 | sed 's/.*) //'`
+if [ "$ver" != "$AUTOCONF_VERSION" ]; then
+ echo "Error: Wrong autoconf version ($ver), we need $AUTOCONF_VERSION."
+ echo "Aborting."
+ exit 1
+fi
+
+# Verify that we have the correct version of automake.
+ver=`automake --version 2>&1 | head -1 | sed 's/.*) //'`
+if [ "$ver" != "$AUTOMAKE_VERSION" ]; then
+ echo "Error: Wrong automake version ($ver), we need $AUTOMAKE_VERSION."
+ echo "Aborting."
+ exit 1
+fi
+
+# Verify that we have the correct version of aclocal.
+#
+# The grep below is needed because Perl >= 5.16 dumps a "called too
+# early to check prototype" warning when running aclocal 1.11.1. This
+# causes trouble below, because the warning is the first line output
+# by aclocal, resulting in:
+#
+# $ sh ./update-gnulib.sh ~/src/gnulib/src/
+# Error: Wrong aclocal version: called too early to check prototype at /opt/automake-1.11.1/bin/aclocal line 617.. Aborting.
+#
+# Some distros carry an automake patch for that:
+# https://bugs.debian.org/cgi-bin/bugreport.cgi?msg=5;filename=aclocal-function-prototypes.debdiff;att=1;bug=752784
+#
+# But since we prefer pristine FSF versions of autotools, work around
+# the issue here. This can be removed later when we bump the required
+# automake version.
+#
+ver=`aclocal --version 2>&1 | grep -v "called too early to check prototype" | head -1 | sed 's/.*) //'`
+if [ "$ver" != "$ACLOCAL_VERSION" ]; then
+ echo "Error: Wrong aclocal version ($ver), we need $ACLOCAL_VERSION."
+ echo "Aborting."
+ exit 1
+fi
+
+# Update our gnulib import.
+$gnulib_prefix/gnulib-tool --import --dir=. --lib=libgnu \
+ --source-base=import --m4-base=import/m4 --doc-base=doc \
+ --tests-base=tests --aux-dir=import/extra \
+ --no-conditional-dependencies --no-libtool --macro-prefix=gl \
+ --no-vc-files \
+ $IMPORTED_GNULIB_MODULES
+if [ $? -ne 0 ]; then
+ echo "Error: gnulib import failed. Aborting."
+ exit 1
+fi
+
+# Apply our local patches.
+apply_patches ()
+{
+ patch -p3 -f -i "$1"
+ if [ $? -ne 0 ]; then
+ echo "Failed to apply some patches. Aborting."
+ exit 1
+ fi
+}
+
+apply_patches "patches/0001-Fix-PR-gdb-23558-Use-system-s-getcwd-when-cross-comp.patch"
+apply_patches "patches/0002-mkostemp-mkostemps-Fix-compilation-error-in-C-mode-o.patch"
+
+# Regenerate all necessary files...
+aclocal -Iimport/m4 -I../config &&
+autoconf &&
+autoheader &&
+automake
+if [ $? -ne 0 ]; then
+ echo "Error: Failed to regenerate Makefiles and configure scripts."
+ exit 1
+fi
+
+# Update aclocal-m4-deps.mk
+ACLOCAL_M4_DEPS_FILE=aclocal-m4-deps.mk
+cat > ${ACLOCAL_M4_DEPS_FILE}.tmp <<EOF
+# THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi :set ro:
+aclocal_m4_deps = \\
+$(find import/m4 -type f -name "*.m4" | LC_COLLATE=C sort | \
+ sed 's/^/ /; s/$/ \\/; $s/ \\//g')
+EOF
+
+../../move-if-change ${ACLOCAL_M4_DEPS_FILE}.tmp ${ACLOCAL_M4_DEPS_FILE}
+rm -f ${ACLOCAL_M4_DEPS_FILE}.tmp