Home | History | Annotate | Line # | Download | only in gnulib
update-gnulib.sh revision 1.1.1.2
      1 #! /bin/sh
      2 
      3 # Copyright (C) 2011-2023 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.
     32 IMPORTED_GNULIB_MODULES="\
     33     accept \
     34     alloca \
     35     bind \
     36     canonicalize-lgpl \
     37     chown \
     38     connect \
     39     count-one-bits \
     40     dirent \
     41     dirfd \
     42     errno \
     43     ffs \
     44     fnmatch-gnu \
     45     frexpl \
     46     gendocs \
     47     getcwd \
     48     getline \
     49     gettimeofday \
     50     gitlog-to-changelog \
     51     glob \
     52     inet_ntop
     53     inttypes \
     54     lstat \
     55     limits-h \
     56     listen \
     57     memchr \
     58     memmem \
     59     mkdir \
     60     mkdtemp \
     61     mkostemp \
     62     netdb \
     63     pathmax \
     64     rawmemchr \
     65     readlink \
     66     rename \
     67     select \
     68     setenv \
     69     setsockopt \
     70     signal-h \
     71     socket \
     72     strchrnul \
     73     strerror_r-posix \
     74     strstr \
     75     strtok_r \
     76     sys_stat \
     77     sys_wait \
     78     time_r \
     79     unistd \
     80     unsetenv \
     81     update-copyright \
     82     wchar \
     83     wctype-h \
     84 "
     85 
     86 # The gnulib commit ID to use for the update.
     87 GNULIB_COMMIT_SHA1="bd11400942d63de12371988dca8144925de9e2c3"
     88 
     89 # The expected version number for the various auto tools we will
     90 # use after the import.
     91 AUTOCONF_VERSION="2.69"
     92 AUTOMAKE_VERSION="1.15.1"
     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 
    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."
    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
    131    echo "Error: Wrong autoconf version ($ver), we need $AUTOCONF_VERSION."
    132    echo "Aborting."
    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.
    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/.*) //'`
    162 if [ "$ver" != "$ACLOCAL_VERSION" ]; then
    163    echo "Error: Wrong aclocal version ($ver), we need $ACLOCAL_VERSION."
    164    echo "Aborting."
    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 
    180 # Apply our local patches.
    181 apply_patches ()
    182 {
    183     patch -p2 -f -i "$1"
    184     if [ $? -ne 0 ]; then
    185         echo "Failed to apply some patches.  Aborting."
    186         exit 1
    187     fi
    188 }
    189 
    190 apply_patches "patches/0001-use-windows-stat"
    191 apply_patches "patches/0002-no-solaris-_gl_attribute_dealloc"
    192 
    193 # Regenerate all necessary files...
    194 aclocal &&
    195 autoconf &&
    196 autoheader &&
    197 automake
    198 if [ $? -ne 0 ]; then
    199    echo "Error: Failed to regenerate Makefiles and configure scripts."
    200    exit 1
    201 fi
    202