123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- #! /bin/sh
- # Copyright (C) 2011-2022 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="\
- accept \
- alloca \
- bind \
- canonicalize-lgpl \
- chown \
- connect \
- count-one-bits \
- dirent \
- dirfd \
- errno \
- ffs \
- fnmatch-gnu \
- frexpl \
- gendocs \
- getcwd \
- getline \
- gettimeofday \
- gitlog-to-changelog \
- glob \
- inet_ntop
- inttypes \
- lstat \
- limits-h \
- listen \
- memchr \
- memmem \
- mkdir \
- mkdtemp \
- mkostemp \
- netdb \
- pathmax \
- rawmemchr \
- readlink \
- rename \
- select \
- setenv \
- setsockopt \
- signal-h \
- socket \
- strchrnul \
- strerror_r-posix \
- strstr \
- strtok_r \
- sys_stat \
- sys_wait \
- time_r \
- unistd \
- unsetenv \
- update-copyright \
- wchar \
- wctype-h \
- "
- # The gnulib commit ID to use for the update.
- GNULIB_COMMIT_SHA1="776af40e09b476a41073131a90022572f448c189"
- # 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 correct directory.
- if [ ! -f ../gdb/main.c -o ! -d import ]; then
- echo "Error: This script should be called from the 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 -p2 -f -i "$1"
- if [ $? -ne 0 ]; then
- echo "Failed to apply some patches. Aborting."
- exit 1
- fi
- }
- apply_patches "patches/0001-use-windows-stat"
- # Regenerate all necessary files...
- aclocal &&
- autoconf &&
- autoheader &&
- automake
- if [ $? -ne 0 ]; then
- echo "Error: Failed to regenerate Makefiles and configure scripts."
- exit 1
- fi
|