#!/usr/bin/env bash
-# Copyright (C) 1990-2014 Free Software Foundation
+# Copyright (C) 1990-2020 Free Software Foundation
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
BZIPPROG=bzip2
GZIPPROG=gzip
+LZIPPROG=lzip
XZPROG=xz
-MD5PROG=md5sum
+SHA256PROG=sha256sum
MAKE=make
CC=gcc
CXX=g++
+release_date=
# Default to avoid splitting info files by setting the threshold high.
MAKEINFOFLAGS=--split-size=5000000
#
# Support for building net releases
-# Files in devo used in any net release.
-DEVO_SUPPORT="README Makefile.in configure configure.ac \
- config.guess config.sub config move-if-change \
- COPYING COPYING.LIB install-sh config-ml.in symlink-tree \
- mkinstalldirs ltmain.sh missing ylwrap \
- libtool.m4 ltsugar.m4 ltversion.m4 ltoptions.m4 \
- Makefile.def Makefile.tpl src-release config.rpath \
- ChangeLog MAINTAINERS README-maintainer-mode \
- lt~obsolete.m4 ltgcc.m4 depcomp mkdep compile \
- COPYING3 COPYING3.LIB"
+# Files in root used in any net release.
+DEVO_SUPPORT="ar-lib ChangeLog compile config config-ml.in config.guess \
+ config.rpath config.sub configure configure.ac COPYING COPYING.LIB \
+ COPYING3 COPYING3.LIB depcomp install-sh libtool.m4 ltgcc.m4 \
+ ltmain.sh ltoptions.m4 ltsugar.m4 ltversion.m4 lt~obsolete.m4 \
+ MAINTAINERS Makefile.def Makefile.in Makefile.tpl missing mkdep \
+ mkinstalldirs move-if-change README README-maintainer-mode \
+ SECURITY.txt src-release.sh symlink-tree test-driver ylwrap"
# Files in devo/etc used in any net release.
ETC_SUPPORT="Makefile.in configure configure.in standards.texi \
bfd/configure --version | sed -n -e '1s,.* ,,p'
elif test -f $tool/common/create-version.sh; then
$tool/common/create-version.sh $tool 'dummy-host' 'dummy-target' VER.tmp
- cat VER.tmp | grep 'version\[\]' | sed 's/.*"\([^"]*\)".*/\1/' | sed 's/-cvs$//'
+ cat VER.tmp | grep 'version\[\]' | sed 's/.*"\([^"]*\)".*/\1/' | sed 's/-git$//'
+ rm -f VER.tmp
+ elif test $tool = "gdb"; then
+ ./gdbsupport/create-version.sh $tool 'dummy-host' 'dummy-target' VER.tmp
+ cat VER.tmp | grep 'version\[\]' | sed 's/.*"\([^"]*\)".*/\1/' | sed 's/-git$//'
rm -f VER.tmp
elif test -f $tool/version.in; then
- head -1 $tool/version.in
+ head -n 1 $tool/version.in
else
echo VERSION
fi
ver=$2
tool=$3
support_files=$4
+
+ echo "==> Cleaning sources."
+ find \( -name "*.orig" -o -name "*.rej" -o -name "*~" -o -name ".#*" -o -name "*~$bkpat" \) -exec rm {} \;
+
echo "==> Making $package-$ver/"
# Take out texinfo from a few places.
sed -e '/^all\.normal: /s/\all-texinfo //' \
-e '/^ install-texinfo /d' \
<Makefile.in >tmp
mv -f tmp Makefile.in
- #
- ./configure --target=i386-pc-linux-gnu \
- --with-target-subdir=. \
- --disable-multilib
+ # configure. --enable-gold is needed to ensure .c/.h from .y are
+ # built in the gold dir. The disables speed the build a little.
+ enables=
+ disables=
+ for dir in binutils gas gdb gold gprof gprofng libsframe ld libctf libdecnumber readline sim; do
+ case " $tool $support_files " in
+ *" $dir "*) enables="$enables --enable-$dir" ;;
+ *) disables="$disables --disable-$dir" ;;
+ esac
+ done
+ echo "==> configure --target=i386-pc-linux-gnu $disables $enables"
+ ./configure --target=i386-pc-linux-gnu $disables $enables
$MAKE configure-host configure-target \
ALL_GCC="" ALL_GCC_C="" ALL_GCC_CXX="" \
CC_FOR_TARGET="$CC" CXX_FOR_TARGET="$CXX"
fi
else
if (echo x$d | grep / >/dev/null); then
- mkdir -p proto-toplev/`dirname $d`
- x=`dirname $d`
- ln -s ../`echo $x/ | sed -e 's,[^/]*/,../,g'`$d proto-toplev/$d
+ mkdir -p proto-toplev/`dirname $d`
+ x=`dirname $d`
+ ln -s ../`echo $x/ | sed -e 's,[^/]*/,../,g'`$d proto-toplev/$d
else
- ln -s ../$d proto-toplev/$d
+ ln -s ../$d proto-toplev/$d
fi
- fi
- done
- (cd etc; $MAKE MAKEINFOFLAGS="$MAKEINFOFLAGS" info)
- $MAKE distclean
- mkdir proto-toplev/etc
- (cd proto-toplev/etc;
- for i in $ETC_SUPPORT; do
- ln -s ../../etc/$i .
- done)
- #
- # Take out texinfo from configurable dirs
- rm proto-toplev/configure.ac
- sed -e '/^host_tools=/s/texinfo //' \
- <configure.ac >proto-toplev/configure.ac
- #
- mkdir proto-toplev/texinfo
- ln -s ../../texinfo/texinfo.tex proto-toplev/texinfo/
- if test -r texinfo/util/tex3patch ; then
- mkdir proto-toplev/texinfo/util && \
- ln -s ../../../texinfo/util/tex3patch proto-toplev/texinfo/util
- else
- true
fi
- chmod -R og=u . || chmod og=u `find . -print`
- #
- # Create .gmo files from .po files.
- for f in `find . -name '*.po' -type f -print`; do
- msgfmt -o `echo $f | sed -e 's/\.po$/.gmo/'` $f
- done
- #
- rm -f $package-$ver
- ln -s proto-toplev $package-$ver
+ done
+ (cd etc; $MAKE MAKEINFOFLAGS="$MAKEINFOFLAGS" info)
+ $MAKE distclean
+ mkdir proto-toplev/etc
+ (cd proto-toplev/etc;
+ for i in $ETC_SUPPORT; do
+ ln -s ../../etc/$i .
+ done)
+ #
+ # Take out texinfo from configurable dirs
+ rm proto-toplev/configure.ac
+ sed -e '/^host_tools=/s/texinfo //' \
+ <configure.ac >proto-toplev/configure.ac
+ #
+ mkdir proto-toplev/texinfo
+ ln -s ../../texinfo/texinfo.tex proto-toplev/texinfo/
+ if test -r texinfo/util/tex3patch ; then
+ mkdir proto-toplev/texinfo/util && \
+ ln -s ../../../texinfo/util/tex3patch proto-toplev/texinfo/util
+ fi
+ chmod -R og=u . || chmod og=u `find . -print`
+ #
+ # Create .gmo files from .po files.
+ for f in `find . -name '*.po' -type f -print`; do
+ msgfmt -o `echo $f | sed -e 's/\.po$/.gmo/'` $f
+ done
+ #
+ rm -f $package-$ver
+ ln -s proto-toplev $package-$ver
}
CVS_NAMES='-name CVS -o -name .cvsignore'
-# Add an md5sum to the built tarball
-do_md5sum()
+# Add a sha256sum to the built tarball
+do_sha256sum()
{
- echo "==> Adding md5 checksum to top-level directory"
+ echo "==> Adding sha256 checksum to top-level directory"
(cd proto-toplev && find * -follow \( $CVS_NAMES \) -prune \
-o -type f -print \
- | xargs $MD5PROG > ../md5.new)
- rm -f proto-toplev/md5.sum
- mv md5.new proto-toplev/md5.sum
+ | xargs $SHA256PROG > ../sha256.new)
+ rm -f proto-toplev/sha256.sum
+ mv sha256.new proto-toplev/sha256.sum
}
# Build the release tarball
ver=$2
echo "==> Making $package-$ver.tar"
rm -f $package-$ver.tar
- find $package-$ver -follow \( $CVS_NAMES \) -prune \
- -o -type f -print \
- | tar cTfh - $package-$ver.tar
+ if test x$release_date == "x" ; then
+ find $package-$ver -follow \( $CVS_NAMES \) -prune -o -type f -print \
+ | tar cTfh - $package-$ver.tar
+ else
+ # Attempt to create a consistent, reproducible tarball using the
+ # specified date.
+ find $package-$ver -follow \( $CVS_NAMES \) -prune -o -type f -print \
+ | LC_ALL=C sort \
+ | tar cTfh - $package-$ver.tar \
+ --mtime=$release_date --group=0 --owner=0
+ fi
}
# Compress the output with bzip2
$GZIPPROG -k -v -9 $package-$ver.tar
}
+# Compress the output with lzip
+do_lz()
+{
+ package=$1
+ ver=$2
+ echo "==> Lzipping $package-$ver.tar.lz"
+ rm -f $package-$ver.tar.lz
+ $LZIPPROG -k -v -9 $package-$ver.tar
+}
+
# Compress the output with xz
do_xz()
{
do_bz2 $package $ver;;
gz)
do_gz $package $ver;;
+ lz)
+ do_lz $package $ver;;
xz)
do_xz $package $ver;;
*)
tool=$2
support_files=$3
compressors=$4
- ver=$(getver $tool)
+ verdir=${5:-$tool}
+ ver=$(getver $verdir)
do_proto_toplev $package $ver $tool "$support_files"
- do_md5sum
+ do_sha256sum
do_tar $package $ver
do_compress $package $ver "$compressors"
}
compressors=$4
ver=$(getver $tool)
do_proto_toplev $package $ver $tool "$support_files"
- do_md5sum
+ do_sha256sum
do_djunpack $package $ver
do_tar $package $ver
do_compress $package $ver "$compressors"
}
# The FSF "binutils" release includes gprof and ld.
-BINUTILS_SUPPORT_DIRS="bfd gas include libiberty opcodes ld elfcpp gold gprof intl setup.com makefile.vms cpu zlib"
+BINUTILS_SUPPORT_DIRS="libsframe bfd gas include libiberty libctf opcodes ld elfcpp gold gprof gprofng intl setup.com makefile.vms cpu zlib"
binutils_release()
{
compressors=$1
tar_compress $package $tool "$GAS_SUPPORT_DIRS" "$compressors"
}
-GDB_SUPPORT_DIRS="bfd include libiberty opcodes readline sim intl libdecnumber cpu zlib"
+GDB_SUPPORT_DIRS="libsframe bfd include libiberty libctf opcodes readline sim intl libdecnumber cpu zlib contrib gnulib gdbsupport gdbserver libbacktrace"
gdb_release()
{
compressors=$1
}
# Corresponding to the CVS "sim" module.
-SIM_SUPPORT_DIRS="bfd opcodes libiberty include intl gdb/version.in makefile.vms zlib"
+SIM_SUPPORT_DIRS="bfd opcodes libiberty include intl gdb/version.in gdb/common/create-version.sh makefile.vms zlib"
sim_release()
{
compressors=$1
package=sim
tool=sim
- tar_compress $package $tool "$SIM_SUPPORT_DIRS" "$compressors"
+ tar_compress $package $tool "$SIM_SUPPORT_DIRS" "$compressors" gdb
}
usage()
echo "options:"
echo " -b: Compress with bzip2"
echo " -g: Compress with gzip"
+ echo " -l: Compress with lzip"
echo " -x: Compress with xz"
+ echo " -r <date>: Create a reproducible tarball using <date> as the mtime"
exit 1
}
compressors=""
-while getopts ":gbx" opt; do
+while getopts ":bglr:x" opt; do
case $opt in
b)
compressors="$compressors bz2";;
g)
compressors="$compressors gz";;
+ l)
+ compressors="$compressors lz";;
+ r)
+ release_date=$OPTARG;;
x)
compressors="$compressors xz";;
\?)