Joel Brobecker | f37c443 | 2012-11-05 23:06:31 +0000 | [diff] [blame] | 1 | #! /bin/sh |
| 2 | |
Joel Brobecker | 213516e | 2023-01-01 16:49:04 +0400 | [diff] [blame] | 3 | # Copyright (C) 2011-2023 Free Software Foundation, Inc. |
Joel Brobecker | f37c443 | 2012-11-05 23:06:31 +0000 | [diff] [blame] | 4 | # |
| 5 | # This file is part of GDB. |
| 6 | # |
| 7 | # This program is free software; you can redistribute it and/or modify |
| 8 | # it under the terms of the GNU General Public License as published by |
| 9 | # the Free Software Foundation; either version 3 of the License, or |
| 10 | # (at your option) any later version. |
| 11 | # |
| 12 | # This program is distributed in the hope that it will be useful, |
| 13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 15 | # GNU General Public License for more details. |
| 16 | # |
| 17 | # You should have received a copy of the GNU General Public License |
| 18 | # along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 19 | |
| 20 | # Usage: update-gnulib.sh <path-to-gnulib-repository> |
| 21 | # Update our import of gnulib in the GDB source tree. |
| 22 | # |
| 23 | # This script assumes that it is being called from the gdb/gnulib |
| 24 | # subdirectory, and will verify this before proceeding. |
| 25 | # |
| 26 | # This script will also make a number of other verifications: |
| 27 | # . The gnulib version (it should match $GNULIB_COMMIT_SHA1). |
| 28 | # . The correct versions of the auto-tools that are used to |
| 29 | # regenerate the various scripts and Makefiles are on the PATH. |
| 30 | |
| 31 | # The list of gnulib modules we are importing in GDB. |
Tom Tromey | a7c11ee | 2013-11-05 14:49:14 -0700 | [diff] [blame] | 32 | IMPORTED_GNULIB_MODULES="\ |
Mike Frysinger | c54d02b | 2021-05-29 15:57:48 -0400 | [diff] [blame] | 33 | accept \ |
Yao Qi | 00d7f58 | 2014-11-21 22:05:41 +0800 | [diff] [blame] | 34 | alloca \ |
Mike Frysinger | c54d02b | 2021-05-29 15:57:48 -0400 | [diff] [blame] | 35 | bind \ |
Yao Qi | 9839978 | 2014-11-23 22:02:50 +0800 | [diff] [blame] | 36 | canonicalize-lgpl \ |
Mike Frysinger | 64c2e4a | 2021-05-29 12:10:38 -0400 | [diff] [blame] | 37 | chown \ |
Mike Frysinger | c54d02b | 2021-05-29 15:57:48 -0400 | [diff] [blame] | 38 | connect \ |
Simon Marchi | 5f661e0 | 2020-02-14 14:41:07 -0500 | [diff] [blame] | 39 | count-one-bits \ |
Yao Qi | 6068ad5 | 2014-11-21 22:05:41 +0800 | [diff] [blame] | 40 | dirent \ |
Gregory Fong | 18848e2 | 2014-05-16 12:26:33 -0600 | [diff] [blame] | 41 | dirfd \ |
Yao Qi | 278289d | 2014-11-21 22:05:42 +0800 | [diff] [blame] | 42 | errno \ |
Mike Frysinger | 32e2770 | 2021-05-18 22:11:41 -0400 | [diff] [blame] | 43 | ffs \ |
Tom Tromey | a7c11ee | 2013-11-05 14:49:14 -0700 | [diff] [blame] | 44 | fnmatch-gnu \ |
| 45 | frexpl \ |
Mike Frysinger | 4aaaa4e | 2021-05-02 12:05:44 -0400 | [diff] [blame] | 46 | gendocs \ |
Sergio Durigan Junior | 6ec2e0f | 2017-09-08 20:09:12 -0400 | [diff] [blame] | 47 | getcwd \ |
Mike Frysinger | c17253b | 2021-05-01 18:00:27 -0400 | [diff] [blame] | 48 | getline \ |
Christian Biesinger | 698be2d | 2020-08-26 15:37:28 -0700 | [diff] [blame] | 49 | gettimeofday \ |
Mike Frysinger | 0fa6376 | 2021-01-09 22:18:00 -0500 | [diff] [blame] | 50 | gitlog-to-changelog \ |
Sergio Durigan Junior | 6ec2e0f | 2017-09-08 20:09:12 -0400 | [diff] [blame] | 51 | glob \ |
John Baldwin | 725e299 | 2018-09-18 14:05:47 -0700 | [diff] [blame] | 52 | inet_ntop |
Tom Tromey | a7c11ee | 2013-11-05 14:49:14 -0700 | [diff] [blame] | 53 | inttypes \ |
Yao Qi | f45c62c | 2014-11-23 21:54:45 +0800 | [diff] [blame] | 54 | lstat \ |
Pedro Alves | 49e4877 | 2016-10-18 17:18:29 +0100 | [diff] [blame] | 55 | limits-h \ |
Mike Frysinger | c54d02b | 2021-05-29 15:57:48 -0400 | [diff] [blame] | 56 | listen \ |
Yao Qi | 0cae13b | 2014-11-21 22:05:41 +0800 | [diff] [blame] | 57 | memchr \ |
Tom Tromey | a7c11ee | 2013-11-05 14:49:14 -0700 | [diff] [blame] | 58 | memmem \ |
Simon Marchi | 8a99096 | 2018-08-07 18:13:52 -0400 | [diff] [blame] | 59 | mkdir \ |
Simon Marchi | e8d8cce | 2018-11-01 15:40:43 -0400 | [diff] [blame] | 60 | mkdtemp \ |
Tom Tromey | b3279b6 | 2018-09-20 16:04:04 -0600 | [diff] [blame] | 61 | mkostemp \ |
Mike Frysinger | 172a7ff | 2021-05-29 12:48:49 -0400 | [diff] [blame] | 62 | netdb \ |
Tom Tromey | a7c11ee | 2013-11-05 14:49:14 -0700 | [diff] [blame] | 63 | pathmax \ |
Simon Marchi | 56e374a | 2016-01-28 13:49:46 -0500 | [diff] [blame] | 64 | rawmemchr \ |
Yao Qi | 2196f55 | 2014-11-23 21:49:20 +0800 | [diff] [blame] | 65 | readlink \ |
Yao Qi | 6a29c58 | 2014-11-23 22:19:49 +0800 | [diff] [blame] | 66 | rename \ |
Mike Frysinger | d20bc12 | 2021-05-29 12:55:39 -0400 | [diff] [blame] | 67 | select \ |
Anton Kolesov | 3d99e81 | 2017-07-03 19:17:29 +0300 | [diff] [blame] | 68 | setenv \ |
Mike Frysinger | c54d02b | 2021-05-29 15:57:48 -0400 | [diff] [blame] | 69 | setsockopt \ |
Pedro Alves | 0750520 | 2015-08-27 13:26:22 +0100 | [diff] [blame] | 70 | signal-h \ |
Mike Frysinger | c54d02b | 2021-05-29 15:57:48 -0400 | [diff] [blame] | 71 | socket \ |
Simon Marchi | 8424cc9 | 2016-01-28 10:28:56 -0500 | [diff] [blame] | 72 | strchrnul \ |
Christian Biesinger | 5abebf3 | 2019-11-06 12:49:52 -0600 | [diff] [blame] | 73 | strerror_r-posix \ |
Tom Tromey | 63ce710 | 2013-11-05 14:53:48 -0700 | [diff] [blame] | 74 | strstr \ |
Pedro Alves | 421693b | 2015-04-08 18:10:21 +0100 | [diff] [blame] | 75 | strtok_r \ |
Tom Tromey | 09607c9 | 2013-11-06 07:49:44 -0700 | [diff] [blame] | 76 | sys_stat \ |
Mike Frysinger | e994f4e | 2021-05-29 14:14:59 -0400 | [diff] [blame] | 77 | sys_wait \ |
Christian Biesinger | f8e27d8 | 2019-11-08 11:25:17 -0600 | [diff] [blame] | 78 | time_r \ |
Yao Qi | 6068ad5 | 2014-11-21 22:05:41 +0800 | [diff] [blame] | 79 | unistd \ |
Anton Kolesov | 3d99e81 | 2017-07-03 19:17:29 +0300 | [diff] [blame] | 80 | unsetenv \ |
Yao Qi | 6068ad5 | 2014-11-21 22:05:41 +0800 | [diff] [blame] | 81 | update-copyright \ |
Yao Qi | f0c00af | 2014-11-21 22:05:41 +0800 | [diff] [blame] | 82 | wchar \ |
| 83 | wctype-h \ |
Tom Tromey | a7c11ee | 2013-11-05 14:49:14 -0700 | [diff] [blame] | 84 | " |
Joel Brobecker | f37c443 | 2012-11-05 23:06:31 +0000 | [diff] [blame] | 85 | |
| 86 | # The gnulib commit ID to use for the update. |
Simon Marchi | b318629 | 2022-04-29 08:39:24 -0400 | [diff] [blame] | 87 | GNULIB_COMMIT_SHA1="bd11400942d63de12371988dca8144925de9e2c3" |
Joel Brobecker | f37c443 | 2012-11-05 23:06:31 +0000 | [diff] [blame] | 88 | |
| 89 | # The expected version number for the various auto tools we will |
| 90 | # use after the import. |
Simon Marchi | d0ac1c4 | 2018-06-19 16:54:48 -0400 | [diff] [blame] | 91 | AUTOCONF_VERSION="2.69" |
| 92 | AUTOMAKE_VERSION="1.15.1" |
Joel Brobecker | f37c443 | 2012-11-05 23:06:31 +0000 | [diff] [blame] | 93 | ACLOCAL_VERSION="$AUTOMAKE_VERSION" |
| 94 | |
| 95 | if [ $# -ne 1 ]; then |
| 96 | echo "Error: Path to gnulib repository missing. Aborting." |
| 97 | echo "Usage: update-gnulib.sh <path-to-gnulib-repository>" |
| 98 | exit 1 |
| 99 | fi |
| 100 | gnulib_prefix=$1 |
| 101 | |
| 102 | gnulib_tool="$gnulib_prefix/gnulib-tool" |
| 103 | |
| 104 | # Verify that the gnulib directory does exist... |
| 105 | if [ ! -f "$gnulib_tool" ]; then |
| 106 | echo "Error: Invalid gnulib directory. Cannot find gnulib tool" |
| 107 | echo " ($gnulib_tool)." |
| 108 | echo "Aborting." |
| 109 | exit 1 |
| 110 | fi |
| 111 | |
| 112 | # Verify that we have the right version of gnulib... |
| 113 | gnulib_head_sha1=`cd $gnulib_prefix && git rev-parse HEAD` |
| 114 | if [ "$gnulib_head_sha1" != "$GNULIB_COMMIT_SHA1" ]; then |
| 115 | echo "Error: Wrong version of gnulib: $gnulib_head_sha1" |
| 116 | echo " (we expected it to be $GNULIB_COMMIT_SHA1)" |
| 117 | echo "Aborting." |
| 118 | exit 1 |
| 119 | fi |
| 120 | |
Gary Benson | 70175d8 | 2019-06-21 13:23:59 +0100 | [diff] [blame] | 121 | # Verify that we are in the correct directory. |
| 122 | if [ ! -f ../gdb/main.c -o ! -d import ]; then |
| 123 | echo "Error: This script should be called from the gnulib subdirectory." |
Joel Brobecker | f37c443 | 2012-11-05 23:06:31 +0000 | [diff] [blame] | 124 | echo "Aborting." |
| 125 | exit 1 |
| 126 | fi |
| 127 | |
| 128 | # Verify that we have the correct version of autoconf. |
| 129 | ver=`autoconf --version 2>&1 | head -1 | sed 's/.*) //'` |
| 130 | if [ "$ver" != "$AUTOCONF_VERSION" ]; then |
Simon Marchi | 8199b8f | 2018-06-14 18:38:23 -0400 | [diff] [blame] | 131 | echo "Error: Wrong autoconf version ($ver), we need $AUTOCONF_VERSION." |
| 132 | echo "Aborting." |
Joel Brobecker | f37c443 | 2012-11-05 23:06:31 +0000 | [diff] [blame] | 133 | exit 1 |
| 134 | fi |
| 135 | |
| 136 | # Verify that we have the correct version of automake. |
| 137 | ver=`automake --version 2>&1 | head -1 | sed 's/.*) //'` |
| 138 | if [ "$ver" != "$AUTOMAKE_VERSION" ]; then |
| 139 | echo "Error: Wrong automake version ($ver), we need $AUTOMAKE_VERSION." |
| 140 | echo "Aborting." |
| 141 | exit 1 |
| 142 | fi |
| 143 | |
| 144 | # Verify that we have the correct version of aclocal. |
Pedro Alves | f543dc8 | 2015-04-09 10:35:29 +0100 | [diff] [blame] | 145 | # |
| 146 | # The grep below is needed because Perl >= 5.16 dumps a "called too |
| 147 | # early to check prototype" warning when running aclocal 1.11.1. This |
| 148 | # causes trouble below, because the warning is the first line output |
| 149 | # by aclocal, resulting in: |
| 150 | # |
| 151 | # $ sh ./update-gnulib.sh ~/src/gnulib/src/ |
| 152 | # Error: Wrong aclocal version: called too early to check prototype at /opt/automake-1.11.1/bin/aclocal line 617.. Aborting. |
| 153 | # |
| 154 | # Some distros carry an automake patch for that: |
| 155 | # https://bugs.debian.org/cgi-bin/bugreport.cgi?msg=5;filename=aclocal-function-prototypes.debdiff;att=1;bug=752784 |
| 156 | # |
| 157 | # But since we prefer pristine FSF versions of autotools, work around |
| 158 | # the issue here. This can be removed later when we bump the required |
| 159 | # automake version. |
| 160 | # |
| 161 | ver=`aclocal --version 2>&1 | grep -v "called too early to check prototype" | head -1 | sed 's/.*) //'` |
Joel Brobecker | f37c443 | 2012-11-05 23:06:31 +0000 | [diff] [blame] | 162 | if [ "$ver" != "$ACLOCAL_VERSION" ]; then |
Simon Marchi | 8199b8f | 2018-06-14 18:38:23 -0400 | [diff] [blame] | 163 | echo "Error: Wrong aclocal version ($ver), we need $ACLOCAL_VERSION." |
| 164 | echo "Aborting." |
Joel Brobecker | f37c443 | 2012-11-05 23:06:31 +0000 | [diff] [blame] | 165 | exit 1 |
| 166 | fi |
| 167 | |
| 168 | # Update our gnulib import. |
| 169 | $gnulib_prefix/gnulib-tool --import --dir=. --lib=libgnu \ |
| 170 | --source-base=import --m4-base=import/m4 --doc-base=doc \ |
| 171 | --tests-base=tests --aux-dir=import/extra \ |
| 172 | --no-conditional-dependencies --no-libtool --macro-prefix=gl \ |
| 173 | --no-vc-files \ |
| 174 | $IMPORTED_GNULIB_MODULES |
| 175 | if [ $? -ne 0 ]; then |
| 176 | echo "Error: gnulib import failed. Aborting." |
| 177 | exit 1 |
| 178 | fi |
| 179 | |
Simon Marchi | b567ca6 | 2018-09-18 23:40:55 -0400 | [diff] [blame] | 180 | # Apply our local patches. |
| 181 | apply_patches () |
| 182 | { |
Christian Biesinger | c0c3707 | 2019-11-16 23:37:06 -0600 | [diff] [blame] | 183 | patch -p2 -f -i "$1" |
Simon Marchi | b567ca6 | 2018-09-18 23:40:55 -0400 | [diff] [blame] | 184 | if [ $? -ne 0 ]; then |
| 185 | echo "Failed to apply some patches. Aborting." |
| 186 | exit 1 |
| 187 | fi |
| 188 | } |
| 189 | |
Tom Tromey | d706b69 | 2020-09-08 10:20:44 -0600 | [diff] [blame] | 190 | apply_patches "patches/0001-use-windows-stat" |
Rainer Orth | 10a63f8 | 2022-11-20 14:55:52 +0100 | [diff] [blame] | 191 | apply_patches "patches/0002-no-solaris-_gl_attribute_dealloc" |
Tom Tromey | d706b69 | 2020-09-08 10:20:44 -0600 | [diff] [blame] | 192 | |
Joel Brobecker | f37c443 | 2012-11-05 23:06:31 +0000 | [diff] [blame] | 193 | # Regenerate all necessary files... |
Christian Biesinger | 33bd010 | 2019-11-14 16:17:59 -0800 | [diff] [blame] | 194 | aclocal && |
Joel Brobecker | f37c443 | 2012-11-05 23:06:31 +0000 | [diff] [blame] | 195 | autoconf && |
Joel Brobecker | 48c95e5f | 2012-12-18 04:40:25 +0000 | [diff] [blame] | 196 | autoheader && |
Joel Brobecker | f37c443 | 2012-11-05 23:06:31 +0000 | [diff] [blame] | 197 | automake |
| 198 | if [ $? -ne 0 ]; then |
| 199 | echo "Error: Failed to regenerate Makefiles and configure scripts." |
| 200 | exit 1 |
| 201 | fi |