Home | History | Annotate | Line # | Download | only in gnulib
update-gnulib.sh revision 1.1.1.1
      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.
     32 IMPORTED_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.
     73 GNULIB_COMMIT_SHA1="4e3f2d4cfdba14e1d89479362061a9280f2f22b6"
     74 
     75 # The expected version number for the various auto tools we will
     76 # use after the import.
     77 AUTOCONF_VERSION="2.69"
     78 AUTOMAKE_VERSION="1.15.1"
     79 ACLOCAL_VERSION="$AUTOMAKE_VERSION"
     80 
     81 if [ $# -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
     85 fi
     86 gnulib_prefix=$1
     87 
     88 gnulib_tool="$gnulib_prefix/gnulib-tool"
     89 
     90 # Verify that the gnulib directory does exist...
     91 if [ ! -f "$gnulib_tool" ]; then
     92    echo "Error: Invalid gnulib directory. Cannot find gnulib tool"
     93    echo "       ($gnulib_tool)."
     94    echo "Aborting."
     95    exit 1
     96 fi
     97 
     98 # Verify that we have the right version of gnulib...
     99 gnulib_head_sha1=`cd $gnulib_prefix && git rev-parse HEAD`
    100 if [ "$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
    105 fi
    106 
    107 # Verify that we are in the correct directory.
    108 if [ ! -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
    112 fi
    113 
    114 # Verify that we have the correct version of autoconf.
    115 ver=`autoconf --version 2>&1 | head -1 | sed 's/.*) //'`
    116 if [ "$ver" != "$AUTOCONF_VERSION" ]; then
    117    echo "Error: Wrong autoconf version ($ver), we need $AUTOCONF_VERSION."
    118    echo "Aborting."
    119    exit 1
    120 fi
    121 
    122 # Verify that we have the correct version of automake.
    123 ver=`automake --version 2>&1 | head -1 | sed 's/.*) //'`
    124 if [ "$ver" != "$AUTOMAKE_VERSION" ]; then
    125    echo "Error: Wrong automake version ($ver), we need $AUTOMAKE_VERSION."
    126    echo "Aborting."
    127    exit 1
    128 fi
    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 #
    147 ver=`aclocal --version 2>&1 | grep -v "called too early to check prototype" | head -1 | sed 's/.*) //'`
    148 if [ "$ver" != "$ACLOCAL_VERSION" ]; then
    149    echo "Error: Wrong aclocal version ($ver), we need $ACLOCAL_VERSION."
    150    echo "Aborting."
    151    exit 1
    152 fi
    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
    161 if [ $? -ne 0 ]; then
    162    echo "Error: gnulib import failed.  Aborting."
    163    exit 1
    164 fi
    165 
    166 # Apply our local patches.
    167 apply_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 
    176 apply_patches "patches/0001-use-windows-stat"
    177 
    178 # Regenerate all necessary files...
    179 aclocal &&
    180 autoconf &&
    181 autoheader &&
    182 automake
    183 if [ $? -ne 0 ]; then
    184    echo "Error: Failed to regenerate Makefiles and configure scripts."
    185    exit 1
    186 fi
    187