1#! /bin/sh 2 3# Copyright (C) 2011-2020 Free Software Foundation, Inc. 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. 32IMPORTED_GNULIB_MODULES="\ 33 alloca \ 34 canonicalize-lgpl \ 35 count-one-bits \ 36 dirent \ 37 dirfd \ 38 errno \ 39 fnmatch-gnu \ 40 frexpl \ 41 getcwd \ 42 gettimeofday \ 43 glob \ 44 inet_ntop 45 inttypes \ 46 lstat \ 47 limits-h \ 48 memchr \ 49 memmem \ 50 mkdir \ 51 mkdtemp \ 52 mkostemp \ 53 pathmax \ 54 rawmemchr \ 55 readlink \ 56 rename \ 57 setenv \ 58 signal-h \ 59 strchrnul \ 60 strerror_r-posix \ 61 strstr \ 62 strtok_r \ 63 sys_stat \ 64 time_r \ 65 unistd \ 66 unsetenv \ 67 update-copyright \ 68 wchar \ 69 wctype-h \ 70" 71 72# The gnulib commit ID to use for the update. 73GNULIB_COMMIT_SHA1="4e3f2d4cfdba14e1d89479362061a9280f2f22b6" 74 75# The expected version number for the various auto tools we will 76# use after the import. 77AUTOCONF_VERSION="2.69" 78AUTOMAKE_VERSION="1.15.1" 79ACLOCAL_VERSION="$AUTOMAKE_VERSION" 80 81if [ $# -ne 1 ]; then 82 echo "Error: Path to gnulib repository missing. Aborting." 83 echo "Usage: update-gnulib.sh <path-to-gnulib-repository>" 84 exit 1 85fi 86gnulib_prefix=$1 87 88gnulib_tool="$gnulib_prefix/gnulib-tool" 89 90# Verify that the gnulib directory does exist... 91if [ ! -f "$gnulib_tool" ]; then 92 echo "Error: Invalid gnulib directory. Cannot find gnulib tool" 93 echo " ($gnulib_tool)." 94 echo "Aborting." 95 exit 1 96fi 97 98# Verify that we have the right version of gnulib... 99gnulib_head_sha1=`cd $gnulib_prefix && git rev-parse HEAD` 100if [ "$gnulib_head_sha1" != "$GNULIB_COMMIT_SHA1" ]; then 101 echo "Error: Wrong version of gnulib: $gnulib_head_sha1" 102 echo " (we expected it to be $GNULIB_COMMIT_SHA1)" 103 echo "Aborting." 104 exit 1 105fi 106 107# Verify that we are in the correct directory. 108if [ ! -f ../gdb/main.c -o ! -d import ]; then 109 echo "Error: This script should be called from the gnulib subdirectory." 110 echo "Aborting." 111 exit 1 112fi 113 114# Verify that we have the correct version of autoconf. 115ver=`autoconf --version 2>&1 | head -1 | sed 's/.*) //'` 116if [ "$ver" != "$AUTOCONF_VERSION" ]; then 117 echo "Error: Wrong autoconf version ($ver), we need $AUTOCONF_VERSION." 118 echo "Aborting." 119 exit 1 120fi 121 122# Verify that we have the correct version of automake. 123ver=`automake --version 2>&1 | head -1 | sed 's/.*) //'` 124if [ "$ver" != "$AUTOMAKE_VERSION" ]; then 125 echo "Error: Wrong automake version ($ver), we need $AUTOMAKE_VERSION." 126 echo "Aborting." 127 exit 1 128fi 129 130# Verify that we have the correct version of aclocal. 131# 132# The grep below is needed because Perl >= 5.16 dumps a "called too 133# early to check prototype" warning when running aclocal 1.11.1. This 134# causes trouble below, because the warning is the first line output 135# by aclocal, resulting in: 136# 137# $ sh ./update-gnulib.sh ~/src/gnulib/src/ 138# Error: Wrong aclocal version: called too early to check prototype at /opt/automake-1.11.1/bin/aclocal line 617.. Aborting. 139# 140# Some distros carry an automake patch for that: 141# https://bugs.debian.org/cgi-bin/bugreport.cgi?msg=5;filename=aclocal-function-prototypes.debdiff;att=1;bug=752784 142# 143# But since we prefer pristine FSF versions of autotools, work around 144# the issue here. This can be removed later when we bump the required 145# automake version. 146# 147ver=`aclocal --version 2>&1 | grep -v "called too early to check prototype" | head -1 | sed 's/.*) //'` 148if [ "$ver" != "$ACLOCAL_VERSION" ]; then 149 echo "Error: Wrong aclocal version ($ver), we need $ACLOCAL_VERSION." 150 echo "Aborting." 151 exit 1 152fi 153 154# Update our gnulib import. 155$gnulib_prefix/gnulib-tool --import --dir=. --lib=libgnu \ 156 --source-base=import --m4-base=import/m4 --doc-base=doc \ 157 --tests-base=tests --aux-dir=import/extra \ 158 --no-conditional-dependencies --no-libtool --macro-prefix=gl \ 159 --no-vc-files \ 160 $IMPORTED_GNULIB_MODULES 161if [ $? -ne 0 ]; then 162 echo "Error: gnulib import failed. Aborting." 163 exit 1 164fi 165 166# Apply our local patches. 167apply_patches () 168{ 169 patch -p2 -f -i "$1" 170 if [ $? -ne 0 ]; then 171 echo "Failed to apply some patches. Aborting." 172 exit 1 173 fi 174} 175 176apply_patches "patches/0001-use-windows-stat" 177 178# Regenerate all necessary files... 179aclocal && 180autoconf && 181autoheader && 182automake 183if [ $? -ne 0 ]; then 184 echo "Error: Failed to regenerate Makefiles and configure scripts." 185 exit 1 186fi 187