| #! /bin/sh |
| |
| # Copyright (C) 2011-2024 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="bd11400942d63de12371988dca8144925de9e2c3" |
| |
| # 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" |
| apply_patches "patches/0002-no-solaris-_gl_attribute_dealloc" |
| |
| # Regenerate all necessary files... |
| aclocal && |
| autoconf && |
| autoheader && |
| automake |
| if [ $? -ne 0 ]; then |
| echo "Error: Failed to regenerate Makefiles and configure scripts." |
| exit 1 |
| fi |