mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-24 04:58:57 +08:00
2d6fd5fd06
From-SVN: r38448
253 lines
9.1 KiB
Bash
253 lines
9.1 KiB
Bash
#! /bin/sh -x
|
|
#
|
|
# GCC release generation script.
|
|
#
|
|
# Originally written by Jeff Law <law@redhat.com>.
|
|
|
|
# We need separate variables for the tag in the CVS sources and the
|
|
# name of the release directory. Consider if we have a packaging problem
|
|
# and need to respin the release. The sources do not change, but the release
|
|
# name changes.
|
|
#
|
|
# [[ Not clear. You can purge the old tag and make a new one, too.
|
|
# That way they continue to match. Maximize consistency. ]]
|
|
#
|
|
# We used to use a tag to get the previous release, but it is more reliable to
|
|
# actually unpack the previous release from the ftp directory. Consider files
|
|
# like .brik which are in the release, but not in the repository.
|
|
#
|
|
if test $# != 6 ; then
|
|
echo "usage: release release-tag release-name release_branch last-release-name prerelease dotag"
|
|
exit 1
|
|
fi
|
|
|
|
release_tag=$1
|
|
release_name=$2
|
|
release_suffix=`echo $release_name | sed -e s#gcc-##`
|
|
release_branch=$3
|
|
last_release_name=$4
|
|
last_release_suffix=`echo $last_release_name | sed -e s#gcc-##`
|
|
prerelease=$5
|
|
dotag=$6
|
|
|
|
case $last_release_name in
|
|
egcs-1.0*)
|
|
echo "unprotoize.c and README.gcc need special handling"
|
|
exit 1;
|
|
;;
|
|
egcs-1.1*)
|
|
echo "No java or chill in egcs-1.1*"
|
|
;;
|
|
|
|
gcc-2.95*)
|
|
echo "No testsuites in gcc-2.95*"
|
|
;;
|
|
esac
|
|
|
|
STATEDIR=${STATEDIR-/home/law}
|
|
GCCBASE=${GCCBASE-${STATEDIR}/gcc}
|
|
TMPDIR=${TMPDIR-/var/tmp}
|
|
export TMPDIR STATEDIR GCCBASE
|
|
|
|
PATH=${GCCBASE}:$PATH
|
|
|
|
[ -f ${GCCBASE}/gcc.pot ] || {
|
|
echo "'${GCCBASE}/gcc.pot' is missing"
|
|
exit 1
|
|
}
|
|
|
|
[ -f ${STATEDIR}/bin/brik ] || {
|
|
echo "'${STATEDIR}/bin/brik' is missing"
|
|
exit 1
|
|
}
|
|
|
|
# We run this on the cvs server itself so we can get at the cvs
|
|
# files quickly. It also assumes access to my home dir for some
|
|
# programs.
|
|
CVSROOT=/cvs/gcc
|
|
export CVSROOT
|
|
|
|
# Get somewhere useful with a lot of disk space.
|
|
cd $TMPDIR
|
|
|
|
# Get into a temporary directory so as not to be confused by
|
|
# any existing CVS administration files.
|
|
rm -rf $$
|
|
mkdir $$
|
|
cd $$
|
|
|
|
if test $prerelease = no -a $dotag = yes; then
|
|
update_changelogs $release_name $release_branch
|
|
fi
|
|
|
|
# If requested, tag the branch. Three steps, first remove the old tag from
|
|
# the repository, then check out the release branch, then retag the release
|
|
# branch.
|
|
if test $dotag = yes; then
|
|
rm -rf gcc
|
|
cvs -Q rtag -d $release_tag gcc
|
|
cvs -Q co -r $release_branch gcc
|
|
cvs -Q tag -f $release_tag
|
|
rm -rf gcc
|
|
fi
|
|
|
|
# Get a copy of the previous release. Get it from the ftp dir to avoid minor
|
|
# issues with files like .brik not being in the repository.
|
|
if test $prerelease = yes; then
|
|
echo "Yow!"
|
|
exit 1;
|
|
zcat ~ftp/pub/gcc/snapshots/egcs-1.1.2-prerelease/$last_release_name.tar.gz | tar xf -
|
|
else
|
|
zcat ~ftp/pub/gcc/releases/$last_release_name/$last_release_name.tar.gz | tar xf -
|
|
fi
|
|
|
|
# Files/directories which are not part of the gcc-core module.
|
|
noncore_files="gcc/cp libio libstdc++ gcc/f libf2c gcc/objc libobjc gcc/ch libchill gcc/java libjava gcc/testsuite"
|
|
|
|
# Get the gcc core. Note that the gcc-core module doesn't work yet, so
|
|
# we get the whole directory, then prune the things we do not want.
|
|
#
|
|
# Also, get the latest copy of the installation instructions and the
|
|
# faq in html, build plaintext versions of those documents.
|
|
cvs -Q export -ko -r$release_tag gcc
|
|
cd gcc
|
|
contrib/gcc_update --touch
|
|
cp ${GCCBASE}/gcc.pot gcc/po
|
|
cd ..
|
|
cvs -Q export -ko -Dnow wwwdocs/htdocs/install
|
|
cvs -Q export -ko -Dnow wwwdocs/htdocs/faq.html
|
|
#cvs -Q export -ko -Dnow wwwdocs/htdocs/bugs.html
|
|
mv gcc $release_name
|
|
release_docs $release_name $$
|
|
|
|
# Build a list of files in this release.
|
|
cd $release_name
|
|
find . -type f -print | sort > ../files_$release_name
|
|
${STATEDIR}/bin/brik -Gb -f ../files_$release_name > ../.brik_$release_name
|
|
cp ../.brik_$release_name ./.brik
|
|
|
|
# Get back to the directory with the two releases in it.
|
|
cd ..
|
|
|
|
# Remove anything that is not part of the core
|
|
for file in $noncore_files; do
|
|
rm -rf $last_release_name/$file
|
|
rm -rf $release_name/$file
|
|
done
|
|
|
|
# Make the core tarball
|
|
tar cf - $release_name | gzip --best > gcc-core-$release_suffix.tar.gz
|
|
|
|
# make empty directories for directories that disappeared so that
|
|
# patch will delete any files in those directories when patching up to
|
|
# this release
|
|
case $last_release_name in
|
|
gcc-2.95*)
|
|
mkdir $release_name/xiberty
|
|
mkdir $release_name/contrib/fixinc
|
|
;;
|
|
esac
|
|
|
|
# Diff the core modules
|
|
diff -x de.gmo -x fr.gmo -Nrc3p $last_release_name $release_name > gcc-core-$last_release_suffix-$release_suffix.diff
|
|
|
|
# Remove the core gunk
|
|
rm -rf $last_release_name
|
|
rm -rf $release_name
|
|
|
|
|
|
# Go back and get the full distributions.
|
|
if test $prerelease = yes; then
|
|
zcat ~ftp/pub/gcc/snapshots/egcs-1.1.2-prerelease/$last_release_name.tar.gz | tar xf -
|
|
else
|
|
zcat ~ftp/pub/gcc/releases/$last_release_name/$last_release_name.tar.gz | tar xf -
|
|
fi
|
|
|
|
cvs -Q export -ko -r$release_tag gcc
|
|
cd gcc
|
|
contrib/gcc_update --touch
|
|
cp ${GCCBASE}/gcc.pot gcc/po
|
|
cd ..
|
|
cvs -Q export -ko -Dnow wwwdocs/htdocs/install
|
|
cvs -Q export -ko -Dnow wwwdocs/htdocs/faq.html
|
|
#cvs -Q export -ko -Dnow wwwdocs/htdocs/bugs.html
|
|
mv gcc $release_name
|
|
find $release_name/gcc/testsuite -type f -print | xargs rm -f
|
|
release_docs $release_name $$
|
|
|
|
|
|
# No need to regenerate the .brik file. We didn't delete it.
|
|
cp .brik_$release_name $release_name/.brik
|
|
|
|
# We don't need this anymore.
|
|
rm .brik_$release_name
|
|
rm .brik_$last_release_name
|
|
|
|
# Make tarballs
|
|
|
|
tar cf - $release_name/.brik $release_name/gcc/f $release_name/libf2c | gzip --best > gcc-g77-$release_suffix.tar.gz
|
|
tar cf - $release_name/.brik $release_name/gcc/java | gzip --best > gcc-java-$release_suffix.tar.gz
|
|
tar cf - $release_name/.brik $release_name/gcc/ch $release_name/libchill | gzip --best > gcc-chill-$release_suffix.tar.gz
|
|
#tar cf - $release_name/.brik $release_name/gcc/testsuite/g77.f-torture | gzip --best > gcc-g77-testsuite-$release_suffix.tar.gz
|
|
tar cf - $release_name/.brik $release_name/gcc/objc $release_name/libobjc | gzip --best > gcc-objc-$release_suffix.tar.gz
|
|
tar cf - $release_name/.brik $release_name/gcc/cp $release_name/libio $release_name/libstdc++ | gzip --best > gcc-g++-$release_suffix.tar.gz
|
|
#tar cf - $release_name/.brik $release_name/gcc/testsuite/g++.old-deja | gzip --best > gcc-g++-tests-$release_suffix.tar.gz
|
|
#tar cf - $release_name/.brik $release_name/gcc/testsuite | gzip --best > gcc-tests-$release_suffix.tar.gz
|
|
tar cf - $release_name | gzip --best > $release_name.tar.gz
|
|
# make empty directories for directories that disappeared so that
|
|
# patch will delete any files in those directories when patching up to
|
|
# this release
|
|
# make empty directories for directories that disappeared so that
|
|
# patch will delete any files in those directories when patching up to
|
|
# this release
|
|
case $last_release_name in
|
|
gcc-2.95*)
|
|
mkdir $release_name/xiberty
|
|
mkdir $release_name/contrib/fixinc
|
|
;;
|
|
esac
|
|
|
|
# Now make diffs for g77, g77-testsuite objc, g++, g++-testsuite, testsuite,
|
|
# then the whole bloody thing. Add libobjc, java & chill for next major
|
|
#release.
|
|
diff -x de.gmo -x fr.gmo -Nrc3p $last_release_name/gcc/f $release_name/gcc/f > gcc-g77-$last_release_suffix-$release_suffix.diff
|
|
diff -x de.gmo -x fr.gmo -Nrc3p $last_release_name/libf2c $release_name/libf2c >> gcc-g77-$last_release_suffix-$release_suffix.diff
|
|
|
|
#diff -x de.gmo -x fr.gmo -Nrc3p $last_release_name/gcc/testsuite/g77.f-torture $release_name/gcc/testsuite/g77.f-torture > gcc-g77-testsuite-$last_release_suffix-$release_suffix.diff
|
|
|
|
diff -x de.gmo -x fr.gmo -Nrc3p $last_release_name/gcc/ch $release_name/gcc/ch > gcc-chill-$last_release_suffix-$release_suffix.diff
|
|
diff -x de.gmo -x fr.gmo -Nrc3p $last_release_name/libchill $release_name/libchill >> gcc-chill-$last_release_suffix-$release_suffix.diff
|
|
|
|
diff -x de.gmo -x fr.gmo -Nrc3p $last_release_name/gcc/java $release_name/gcc/java > gcc-java-$last_release_suffix-$release_suffix.diff
|
|
#diff -x de.gmo -x fr.gmo -Nrc3p $last_release_name/libf2c $release_name/libf2c >> gcc-java-$last_release_suffix-$release_suffix.diff
|
|
|
|
diff -x de.gmo -x fr.gmo -Nrc3p $last_release_name/gcc/objc $release_name/gcc/objc > gcc-objc-$last_release_suffix-$release_suffix.diff
|
|
mkdir $last_release_name/libobjc
|
|
diff -x de.gmo -x fr.gmo -Nrc3p $last_release_name/libobjc $release_name/libobjc >> gcc-objc-$last_release_suffix-$release_suffix.diff
|
|
|
|
diff -x de.gmo -x fr.gmo -Nrc3p $last_release_name/gcc/cp $release_name/gcc/cp > gcc-g++-$last_release_suffix-$release_suffix.diff
|
|
diff -x de.gmo -x fr.gmo -Nrc3p $last_release_name/libio $release_name/libio >> gcc-g++-$last_release_suffix-$release_suffix.diff
|
|
diff -x de.gmo -x fr.gmo -Nrc3p $last_release_name/libstdc++ $release_name/libstdc++ >> gcc-g++-$last_release_suffix-$release_suffix.diff
|
|
|
|
#diff -x de.gmo -x fr.gmo -Nrc3p $last_release_name/gcc/testsuite/g++.old-deja $release_name/gcc/testsuite/g++.old-deja > gcc-g++-tests-$last_release_suffix-$release_suffix.diff
|
|
|
|
#diff -x de.gmo -x fr.gmo -Nrc3p $last_release_name/gcc/testsuite $release_name/gcc/testsuite > gcc-tests-$last_release_suffix-$release_suffix.diff
|
|
|
|
diff -x de.gmo -x fr.gmo -Nrc3p $last_release_name $release_name > gcc-$last_release_suffix-$release_suffix.diff
|
|
|
|
|
|
# Remove the old snapshot, we're done with it.
|
|
rm -rf $last_release_name
|
|
|
|
|
|
# Compress the diff files.
|
|
gzip --best *.diff
|
|
|
|
# bzip everything too
|
|
|
|
# Copy them to the FTP server XXX
|
|
|
|
# Update links on the ftp server XXX
|
|
|
|
# Announce it XXX
|