3 ########################################################################
6 # Author: Jeffrey Law, Bernd Schmidt, Mark Mitchell
10 # Script to create a GCC release.
12 # Copyright (c) 2001, 2002 Free Software Foundation.
14 # This file is part of GCC.
16 # GCC is free software; you can redistribute it and/or modify
17 # it under the terms of the GNU General Public License as published by
18 # the Free Software Foundation; either version 2, or (at your option)
21 # GCC is distributed in the hope that it will be useful,
22 # but WITHOUT ANY WARRANTY; without even the implied warranty of
23 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24 # GNU General Public License for more details.
26 # You should have received a copy of the GNU General Public License
27 # along with GCC; see the file COPYING. If not, write to
28 # the Free Software Foundation, 51 Franklin Street, Fifth Floor,
29 # Boston, MA 02110-1301, USA.
31 ########################################################################
33 ########################################################################
35 ########################################################################
37 # Here is an example usage of this script, to create a GCC 3.0.2
40 # gcc_release -r 3.0.2
42 # This script will automatically use the head of the release branch
43 # to generate the release.
45 ########################################################################
47 ########################################################################
49 # Issue the error message given by $1 and exit with a non-zero
53 echo "gcc_release: error: $1"
57 # Issue the informational message given by $1.
60 echo "gcc_release: $1"
63 # Issue a usage message explaining how to use this script.
67 gcc_release -r release [-f] [further options]
68 gcc_release -s name:cvsbranch [further options]
72 -r release Version of the form X.Y or X.Y.Z.
73 -s name:cvsbranch Create a snapshot, not a real release.
75 -d destination Local working directory where we will build the release
77 -f Create a final release (and update ChangeLogs,...).
78 -l Indicate that we are running on gcc.gnu.org.
79 -p previous-tarball Location of a previous tarball (to generate diff files).
80 -t tag Tag to mark the release in CVS.
81 -u username Username for upload operations.
86 # Change to the directory given by $1.
90 error "Could not change directory to $1"
93 # Each of the arguments is a directory name, relative to the top
94 # of the source tree. Return another name for that directory, relative
95 # to the working directory.
99 echo `basename ${SOURCE_DIRECTORY}`/$x
103 # Build the source tree that will be the basis for the release
104 # in ${WORKING_DIRECTORY}/gcc-${RELEASE}.
107 # If the WORKING_DIRECTORY already exists, do not risk destroying it.
108 if [ -r ${WORKING_DIRECTORY} ]; then
109 error "\`${WORKING_DIRECTORY}' already exists"
111 # Create the WORKING_DIRECTORY.
112 mkdir "${WORKING_DIRECTORY}" \
113 || error "Could not create \`${WORKING_DIRECTORY}'"
114 changedir "${WORKING_DIRECTORY}"
116 # If this is a final release, make sure that the ChangeLogs
117 # and version strings are updated.
118 if [ ${FINAL} -ne 0 ]; then
119 inform "Updating ChangeLogs and version files"
121 ${SVN} -q co "${SVNROOT}/${SVNBRANCH}" "`basename ${SOURCE_DIRECTORY}`" ||\
122 error "Could not check out release sources"
123 for x in `find ${SOURCE_DIRECTORY} -name ChangeLog`; do
124 # Update this ChangeLog file only if it does not yet contain the
125 # entry we are going to add. (This is a safety net for repeated
126 # runs of this script for the same release.)
127 if ! grep "GCC ${RELEASE} released." ${x} > /dev/null ; then
128 cat - ${x} > ${x}.new <<EOF
129 ${LONG_DATE} Release Manager
131 * GCC ${RELEASE} released.
134 mv ${x}.new ${x} || \
135 error "Could not update ${x}"
136 (changedir `dirname ${x}` && \
137 ${SVN} -q ci -m 'Mark ChangeLog' `basename ${x}`) || \
138 error "Could not commit ${x}"
142 # Update gcc/DEV-PHASE if it exists, otherwise gcc/version.c.
144 if [ -f ${SOURCE_DIRECTORY}/gcc/DEV-PHASE ]; then
145 [ `cat ${SOURCE_DIRECTORY}/gcc/BASE-VER` = ${RELEASE} ] || \
146 error "Release number ${RELEASE} does not match BASE-VER"
147 (changedir ${SOURCE_DIRECTORY}/gcc && \
149 ${SVN} -q ci -m 'Mark as release' DEV-PHASE) || \
150 error "Could not update DEV-PHASE"
152 for x in gcc/version.c; do
154 (changedir `dirname ${SOURCE_DIRECTORY}/${x}` && \
155 sed -e 's|version_string\[\] = \".*\"|version_string\[\] = \"'${RELEASE}'\"|g' < ${y} > ${y}.new && \
156 mv ${y}.new ${y} && \
157 ${SVN} -q ci -m 'Update version' ${y}) || \
158 error "Could not update ${x}"
162 # Make sure we tag the sources for a final release.
163 TAG="tags/gcc_`echo ${RELEASE} | tr . _`_release"
165 rm -rf ${SOURCE_DIRECTORY}
170 if [ -n "${TAG}" ]; then
171 inform "Tagging sources as ${TAG}"
173 # Try to check out a file using ${TAG}. If the command succeeds,
174 # then the sources have already been tagged. We don't want to
175 # overwrite an existing tag, so we don't want to use the "-F"
176 # option to "cvs rtag" below. So, if the tag already exists,
177 # issue an error message; the release manager can manually remove
178 # the tag if appropriate.
179 echo "${SVN} ls ${SVNROOT}/${EXPORTTAG}/ChangeLog"
180 if ${SVN} ls "${SVNROOT}/${EXPORTTAG}/ChangeLog"; then
181 error "Tag ${TAG} already exists"
183 ${SVN} -m "Tagging source as ${TAG}" cp "${SVNROOT}/${SVNBRANCH}" "${SVNROOT}/${TAG}" || \
184 error "Could not tag sources"
186 if [ ${SVNBRANCH} != "/trunk" ]; then
187 EXPORTTAG="/branches/${SVNBRANCH}"
188 # It does not work to use both "-r" and "-D" with
189 # "cvs export" so EXPORTDATE is not set here.
190 SVNREV=`${SVN} info "${SVNROOT}/${EXPORTTAG}"|grep "Revision:"|awk '{print $2}'`
193 EXPORTDATE="-D{`date --iso-8601=minutes`}"
194 SVNREV=`${SVN} info ${EXPORTDATE} "${SVNROOT}/trunk"|grep "Revision:"|awk '{print $2}'`
198 # Export the current sources.
199 inform "Retrieving sources (svn export -r ${SVNREV} ${SVNROOT}/${SVNBRANCH}/gcc)"
201 ${SVN} -q export -r${SVNREV} "${SVNROOT}/${SVNBRANCH}" "`basename ${SOURCE_DIRECTORY}`" ||\
202 error "Could not retrieve sources"
204 # Run gcc_update on them to set up the timestamps nicely, and (re)write
205 # the LAST_UPDATED file containing the CVS tag/date used.
206 changedir "gcc-${RELEASE}"
207 contrib/gcc_update --touch
208 echo "Obtained from SVN: Revision ${SVNREV}" > LAST_UPDATED
210 # Obtain some documentation files from the wwwdocs module.
211 inform "Retrieving HTML documentation"
212 changedir "${WORKING_DIRECTORY}"
213 for x in bugs faq; do
214 (${CVS} export -r HEAD wwwdocs/htdocs/${x}.html && \
215 cp ${WORKING_DIRECTORY}/wwwdocs/htdocs/${x}.html \
216 ${SOURCE_DIRECTORY}) || \
217 error "Could not retrieve ${x}.html"
220 inform "Generating plain-text documentation from HTML"
221 changedir "${SOURCE_DIRECTORY}"
222 for file in *.html; do
223 newfile=`echo $file | sed -e 's/.html//' | tr "[:lower:]" "[:upper:]"`
224 (${ENV} TERM=vt100 lynx -dump $file \
225 | sed -e "s#file://localhost`/bin/pwd`\(.*\)#http://gcc.gnu.org\1#g" \
227 error "Could not generate text-only version of ${file}"
230 # For a prerelease or real release, we need to generate additional
231 # files not present in SVN.
232 changedir "${SOURCE_DIRECTORY}"
233 if [ $SNAPSHOT -ne 1 ]; then
234 # Generate the documentation.
235 inform "Building install docs"
236 SOURCEDIR=${SOURCE_DIRECTORY}/gcc/doc
237 DESTDIR=${SOURCE_DIRECTORY}/INSTALL
240 ${SOURCE_DIRECTORY}/gcc/doc/install.texi2html
242 # Regenerate the NEWS file.
243 contrib/gennews > NEWS || \
244 error "Could not regenerate NEWS files"
246 # Now, we must build the compiler in order to create any generated
247 # files that are supposed to go in the source directory. This is
248 # also a good sanity check to make sure that the release builds
249 # on at least one platform.
250 inform "Building compiler"
251 OBJECT_DIRECTORY=../objdir
252 contrib/gcc_build -d ${SOURCE_DIRECTORY} -o ${OBJECT_DIRECTORY} \
253 -c "--enable-generated-files-in-srcdir" build || \
254 error "Could not rebuild GCC"
257 # Move message catalogs to source directory.
258 mv ../objdir/gcc/po/*.gmo gcc/po/
259 [ -f libcpp/po/cpplib.pot ] && mv ../objdir/libcpp/po/*.gmo libcpp/po/
261 # Create a "MD5SUMS" file to use for checking the validity of the release.
263 "# This file contains the MD5 checksums of the files in the
264 # gcc-"${RELEASE}".tar.bz2 tarball.
266 # Besides verifying that all files in the tarball were correctly expanded,
267 # it also can be used to determine if any files have changed since the
268 # tarball was expanded or to verify that a patchfile was correctly applied.
271 # md5sum -c MD5SUMS | grep -v \"OK$\"
275 sed -e 's:^\./::' -e '/MD5SUMS/d' |
277 xargs md5sum >>MD5SUMS
280 # Buid a single tarfile. The first argument is the name of the name
281 # of the tarfile to build, without any suffixes. They will be added
282 # automatically. The rest of the arguments are the files or
283 # directories to include, and possibly other arguments to tar.
286 # Get the name of the destination tar file.
290 # Build the tar file itself.
291 (${TAR} cf - "$@" | ${BZIP2} > ${TARFILE}) || \
292 error "Could not build tarfile"
293 FILE_LIST="${FILE_LIST} ${TARFILE}"
296 # Build a single tarfile if any of the directories listed exist,
297 # but not if none of them do (because that component doesn't exist
299 maybe_build_tarfile() {
303 for maybe_dir in "$@"; do
304 if [ -d "$maybe_dir" ]; then
308 if [ $dir_exists = 1 ]; then
309 build_tarfile "$dest" "$@"
311 echo "Not building $dest tarfile"
315 # Build the various tar files for the release.
318 inform "Building tarfiles"
320 changedir "${WORKING_DIRECTORY}"
322 # The GNU Coding Standards specify that all files should
324 chmod -R a+r ${SOURCE_DIRECTORY}
325 # And that all directories have mode 777.
326 find ${SOURCE_DIRECTORY} -type d -exec chmod 777 {} \;
328 # Build one huge tarfile for the entire distribution.
329 build_tarfile gcc-${RELEASE} `basename ${SOURCE_DIRECTORY}`
331 # Now, build one for each of the languages.
332 maybe_build_tarfile gcc-ada-${RELEASE} ${ADA_DIRS}
333 maybe_build_tarfile gcc-g++-${RELEASE} ${CPLUSPLUS_DIRS}
334 maybe_build_tarfile gcc-g77-${RELEASE} ${FORTRAN_DIRS}
335 maybe_build_tarfile gcc-fortran-${RELEASE} ${FORTRAN95_DIRS}
336 maybe_build_tarfile gcc-java-${RELEASE} ${JAVA_DIRS}
337 maybe_build_tarfile gcc-objc-${RELEASE} ${OBJECTIVEC_DIRS}
338 maybe_build_tarfile gcc-testsuite-${RELEASE} ${TESTSUITE_DIRS}
340 # The core is everything else.
342 for x in ${ADA_DIRS} ${CPLUSPLUS_DIRS} ${FORTRAN_DIRS} ${FORTRAN95_DIRS}\
343 ${JAVA_DIRS} ${OBJECTIVEC_DIRS} ${TESTSUITE_DIRS}; do
344 EXCLUDES="${EXCLUDES} --exclude $x"
346 build_tarfile gcc-core-${RELEASE} ${EXCLUDES} \
347 `basename ${SOURCE_DIRECTORY}`
352 for f in ${FILE_LIST}; do
354 (${BZIP2} -d -c $f | ${GZIP} > ${target}) || error "Could not create ${target}"
358 # Build diffs against an old release.
362 old_vers=${old_file%.tar.bz2}
363 old_vers=${old_vers#gcc-}
364 inform "Building diffs against version $old_vers"
365 for f in gcc gcc-ada gcc-g++ gcc-g77 gcc-fortran gcc-java gcc-objc gcc-testsuite gcc-core; do
366 old_tar=${old_dir}/${f}-${old_vers}.tar.bz2
367 new_tar=${WORKING_DIRECTORY}/${f}-${RELEASE}.tar.bz2
368 if [ ! -e $old_tar ]; then
369 inform "$old_tar not found; not generating diff file"
370 elif [ ! -e $new_tar ]; then
371 inform "$new_tar not found; not generating diff file"
373 build_diff $old_tar gcc-${old_vers} $new_tar gcc-${RELEASE} \
374 ${f}-${old_vers}-${RELEASE}.diff.bz2
379 # Build an individual diff.
381 changedir "${WORKING_DIRECTORY}"
383 mkdir $tmpdir || error "Could not create directory $tmpdir"
385 (${BZIP2} -d -c $1 | ${TAR} xf - ) || error "Could not unpack $1 for diffs"
386 (${BZIP2} -d -c $3 | ${TAR} xf - ) || error "Could not unpack $3 for diffs"
387 ${DIFF} $2 $4 > ../${5%.bz2}
388 if [ $? -eq 2 ]; then
389 error "Trouble making diffs from $1 to $3"
391 ${BZIP2} ../${5%.bz2} || error "Could not generate ../$5"
394 FILE_LIST="${FILE_LIST} $5"
397 # Upload the files to the FTP server.
399 inform "Uploading files"
401 changedir "${WORKING_DIRECTORY}"
403 # Make sure the directory exists on the server.
404 if [ $LOCAL -eq 0 ]; then
405 ${SSH} -l ${GCC_USERNAME} ${GCC_HOSTNAME} \
406 mkdir -p "${FTP_PATH}/diffs"
407 UPLOAD_PATH="${GCC_USERNAME}@${GCC_HOSTNAME}:${FTP_PATH}"
409 mkdir -p "${FTP_PATH}/diffs" \
410 || error "Could not create \`${FTP_PATH}'"
411 UPLOAD_PATH=${FTP_PATH}
414 # Then copy files to their respective (sub)directories.
415 for x in gcc*.gz gcc*.bz2; do
417 # Make sure the file will be readable on the server.
427 ${SCP} ${x} ${UPLOAD_PATH}/${SUBDIR} \
428 || error "Could not upload ${x}"
433 #Print description if snapshot exists
435 if [ -e ${RELEASE}/$1 ]; then
436 printf "%-38s%s\n\n" "$1" "$2" >> ${SNAPSHOT_README}
437 echo " <tr><td><a href=\"$1\">$1</a></td>" >> ${SNAPSHOT_INDEX}
438 echo " <td>$2</td></tr>" >> ${SNAPSHOT_INDEX}
442 # Announce a snapshot, both on the web and via mail.
443 announce_snapshot() {
444 inform "Updating links and READMEs on the FTP server"
446 TEXT_DATE=`date --date=$DATE +%B\ %d,\ %Y`
447 SNAPSHOT_README=${RELEASE}/README
448 SNAPSHOT_INDEX=${RELEASE}/index.html
450 changedir "${SNAPSHOTS_DIR}"
452 "Snapshot gcc-"${RELEASE}" is now available on
453 ftp://gcc.gnu.org/pub/gcc/snapshots/"${RELEASE}"/
454 and on various mirrors, see http://gcc.gnu.org/mirrors.html for details.
456 This snapshot has been generated from the GCC "${BRANCH}" SVN branch
457 with the following options: "svn://gcc.gnu.org/svn/gcc/${SVNBRANCH} revision ${SVNREV}"
460 " > ${SNAPSHOT_README}
466 <title>GCC "${RELEASE}" Snapshot</title>
470 <h1>GCC "${RELEASE}" Snapshot</h1>
472 <p>The <a href =\"http://gcc.gnu.org/\">GCC Project</a> makes
473 periodic snapshots of the GCC source tree available to the public
474 for testing purposes.</p>
476 <p>If you are planning to download and use one of our snapshots, then
477 we highly recommend you join the GCC developers list. Details for
478 how to sign up can be found on the GCC project home page.</p>
480 <p>This snapshot has been generated from the GCC "${BRANCH}" SVN branch
481 with the following options: <code>"svn://gcc.gnu.org/svn/gcc/${SVNBRANCH} revision ${SVNREV}"</code></p>
483 <table>" > ${SNAPSHOT_INDEX}
485 snapshot_print gcc-${RELEASE}.tar.bz2 "Complete GCC (includes all of below)"
486 snapshot_print gcc-core-${RELEASE}.tar.bz2 "C front end and core compiler"
487 snapshot_print gcc-ada-${RELEASE}.tar.bz2 "Ada front end and runtime"
488 snapshot_print gcc-fortran-${RELEASE}.tar.bz2 "Fortran front end and runtime"
489 snapshot_print gcc-g++-${RELEASE}.tar.bz2 "C++ front end and runtime"
490 snapshot_print gcc-g77-${RELEASE}.tar.bz2 "Fortran 77 front end and runtime"
491 snapshot_print gcc-java-${RELEASE}.tar.bz2 "Java front end and runtime"
492 snapshot_print gcc-objc-${RELEASE}.tar.bz2 "Objective-C front end and runtime"
493 snapshot_print gcc-testsuite-${RELEASE}.tar.bz2 "The GCC testsuite"
496 "Diffs from "${BRANCH}"-"${LAST_DATE}" are available in the diffs/ subdirectory.
498 When a particular snapshot is ready for public consumption the LATEST-"${BRANCH}"
499 link is updated and a message is sent to the gcc list. Please do not use
500 a snapshot before it has been announced that way." >> ${SNAPSHOT_README}
504 <p>Diffs from "${BRANCH}"-"${LAST_DATE}" are available in the
505 <a href=\"diffs/\">diffs/ subdirectory</a>.</p>
507 <p>When a particular snapshot is ready for public consumption the LATEST-"${BRANCH}"
508 link is updated and a message is sent to the gcc list. Please do not use
509 a snapshot before it has been announced that way.</p>
514 <a href=\"mailto:gcc@gcc.gnu.org\">gcc@gcc.gnu.org</a>
516 Last modified "${TEXT_DATE}"
520 </html>" >> ${SNAPSHOT_INDEX}
522 rm -f LATEST-${BRANCH}
523 ln -s ${RELEASE} LATEST-${BRANCH}
525 inform "Sending mail"
527 export QMAILHOST=gcc.gnu.org
528 mail -s "gcc-${RELEASE} is now available" gcc@gcc.gnu.org < ${SNAPSHOT_README}
531 ########################################################################
533 ########################################################################
536 DATE=`date "+%Y%m%d"`
537 LONG_DATE=`date "+%Y-%m-%d"`
539 SVN=${SVN:-/usr/bin/svn}
540 # The CVS server containing the GCC repository.
541 SVN_SERVER="gcc.gnu.org"
542 # The path to the repository on that server.
543 SVN_REPOSITORY="/svn/gcc"
544 # The username to use when connecting to the server.
545 SVN_USERNAME="${USER}"
547 # The machine to which files will be uploaded.
548 GCC_HOSTNAME="gcc.gnu.org"
549 # The name of the account on the machine to which files are uploaded.
550 GCC_USERNAME="gccadmin"
551 # The directory in which the files will be placed (do not use ~user syntax).
552 FTP_PATH=/var/ftp/pub/gcc
553 # The directory in which snapshots will be placed.
554 SNAPSHOTS_DIR=${FTP_PATH}/snapshots
556 # The major number for the release. For release `3.0.2' this would be
559 # The minor number for the release. For release `3.0.2' this would be
562 # The revision number for the release. For release `3.0.2' this would
565 # The complete name of the release.
568 # The name of the branch from which the release should be made, in a
569 # user-friendly form.
572 # The name of the branch from which the release should be made, as used
573 # for our version control system.
576 # The tag to apply to the sources used for the release.
579 # The old tarballs from which to generate diffs.
582 # The directory that will be used to construct the release. The
583 # release itself will be placed in a subdirectory of this diretory.
587 # The directory that will contain the GCC sources.
590 # The directories that should be part of the various language-specific
591 # tar files. These are all relative to the top of the source tree.
592 ADA_DIRS="gcc/ada libada gnattools"
593 CPLUSPLUS_DIRS="gcc/cp libstdc++-v3"
594 FORTRAN_DIRS="gcc/f libf2c"
595 FORTRAN95_DIRS="gcc/fortran libgfortran"
596 JAVA_DIRS="gcc/java libjava libffi fastjar zlib boehm-gc"
597 OBJECTIVEC_DIRS="gcc/objc libobjc"
598 TESTSUITE_DIRS="gcc/testsuite"
600 # Non-zero if this is the final release, rather than a prerelease.
603 # Non-zero if we are building a snapshot, and don't build gcc or
604 # include generated files.
607 # Non-zero if we are running locally on gcc.gnu.org, and use local CVS
608 # and copy directly to the FTP directory.
611 # Major operation modes.
618 # List of archive files generated; used to create .gz files from .bz2.
623 BZIP2="${BZIP2:-bzip2}"
624 CVS="${CVS:-cvs -f -Q -z9}"
625 DIFF="${DIFF:-diff -Nrcpad}"
627 GZIP="${GZIP:-gzip --best}"
632 ########################################################################
633 # Command Line Processing
634 ########################################################################
637 while getopts "d:fr:u:t:p:s:l" ARG; do
639 d) DESTINATION="${OPTARG}";;
640 r) RELEASE="${OPTARG}";;
642 u) SVN_USERNAME="${OPTARG}";;
646 SVNBRANCH=${OPTARG#*:}
650 PATH=~:/usr/local/bin:$PATH;;
651 p) OLD_TARS="${OLD_TARS} ${OPTARG}"
652 if [ ! -f ${OPTARG} ]; then
653 error "-p argument must name a tarball"
658 shift `expr ${OPTIND} - 1`
660 # Handle the major modes.
661 while [ $# -ne 0 ]; do
663 diffs) MODE_DIFFS=1;;
665 sources) MODE_SOURCES=1;;
666 tarfiles) MODE_TARFILES=1;;
667 upload) MODE_UPLOAD=1;;
668 all) MODE_SOURCES=1; MODE_TARFILES=1; MODE_DIFFS=1; MODE_UPLOAD=1;
669 if [ $SNAPSHOT -ne 1 ]; then
670 # Only for releases and pre-releases.
674 *) error "Unknown mode $1";;
679 # Perform consistency checking.
680 if [ ${LOCAL} -eq 0 ] && [ -z ${SVN_USERNAME} ]; then
681 error "No username specified"
684 if [ ! -d ${DESTINATION} ]; then
685 error "\`${DESTINATION}' is not a directory"
688 if [ $SNAPSHOT -eq 0 ]; then
689 if [ -z ${RELEASE} ]; then
690 error "No release number specified"
693 # Compute the major and minor release numbers.
694 RELEASE_MAJOR=`echo $RELEASE | awk --assign FS=. '{ print $1; }'`
695 RELEASE_MINOR=`echo $RELEASE | awk --assign FS=. '{ print $2; }'`
696 RELEASE_REVISION=`echo $RELEASE | awk --assign FS=. '{ print $3; }'`
698 if [ -z "${RELEASE_MAJOR}" ] || [ -z "${RELEASE_MINOR}" ]; then
699 error "Release number \`${RELEASE}' is invalid"
702 # Compute the full name of the release.
703 if [ -z "${RELEASE_REVISION}" ]; then
704 RELEASE="${RELEASE_MAJOR}.${RELEASE_MINOR}"
706 RELEASE="${RELEASE_MAJOR}.${RELEASE_MINOR}.${RELEASE_REVISION}"
709 # Compute the name of the branch, which is based solely on the major
710 # and minor release numbers.
711 SVNBRANCH="branches/gcc-${RELEASE_MAJOR}_${RELEASE_MINOR}-branch"
713 # If this is not a final release, set various parameters acordingly.
714 if [ ${FINAL} -ne 1 ]; then
715 RELEASE="${RELEASE}-${DATE}"
716 FTP_PATH="${FTP_PATH}/prerelease-${RELEASE}/"
718 FTP_PATH="${FTP_PATH}/releases/gcc-${RELEASE}/"
721 RELEASE=${BRANCH}-${DATE}
722 FTP_PATH="${FTP_PATH}/snapshots/${RELEASE}"
723 # if [ ${SVNBRANCH} != "/trunk" ]; then
724 # TAG=tags/gcc-ss-`echo ${RELEASE} | tr '.' '_'`
727 # If diffs are requested when building locally on gcc.gnu.org, we (usually)
728 # know what the last snapshot date was and take the corresponding tarballs,
729 # unless the user specified tarballs explictly.
730 if [ $MODE_DIFFS -ne 0 ] && [ $LOCAL -ne 0 ] && [ -z "${OLD_TARS}" ]; then
731 LAST_DATE=`cat ~/.snapshot_date-${BRANCH}`
732 OLD_TARS=${SNAPSHOTS_DIR}/${BRANCH}-${LAST_DATE}/gcc-${BRANCH}-${LAST_DATE}.tar.bz2
736 # Compute the name of the WORKING_DIRECTORY and the SOURCE_DIRECTORY.
737 WORKING_DIRECTORY="${DESTINATION}/gcc-${RELEASE}"
738 SOURCE_DIRECTORY="${WORKING_DIRECTORY}/gcc-${RELEASE}"
740 # Recompute the names of all the language-specific directories,
741 # relative to the WORKING_DIRECTORY.
742 ADA_DIRS=`adjust_dirs ${ADA_DIRS}`
743 CPLUSPLUS_DIRS=`adjust_dirs ${CPLUSPLUS_DIRS}`
744 FORTRAN_DIRS=`adjust_dirs ${FORTRAN_DIRS}`
745 FORTRAN95_DIRS=`adjust_dirs ${FORTRAN95_DIRS}`
746 JAVA_DIRS=`adjust_dirs ${JAVA_DIRS}`
747 OBJECTIVEC_DIRS=`adjust_dirs ${OBJECTIVEC_DIRS}`
748 TESTSUITE_DIRS=`adjust_dirs ${TESTSUITE_DIRS}`
751 if [ $LOCAL -eq 0 ]; then
752 SVNROOT="svn+ssh://${SVN_USERNAME}@${SVN_SERVER}${SVN_REPOSITORY}"
753 CVSROOT=":ext:${SVN_USERNAME}@gcc.gnu.org/cvs/gcc"
755 SVNROOT="file:///svn/gcc"
761 ########################################################################
763 ########################################################################
765 # Set the timezone to UTC
769 # Build the source directory.
771 if [ $MODE_SOURCES -ne 0 ]; then
775 # Build the tar files.
777 if [ $MODE_TARFILES -ne 0 ]; then
783 if [ $MODE_DIFFS -ne 0 ]; then
784 # Possibly build diffs.
785 if [ -n "$OLD_TARS" ]; then
786 for old_tar in $OLD_TARS; do
793 if [ $MODE_GZIP -ne 0 ]; then
797 # Upload them to the FTP server.
798 if [ $MODE_UPLOAD -ne 0 ]; then
801 # For snapshots, make some further updates.
802 if [ $SNAPSHOT -ne 0 ] && [ $LOCAL -ne 0 ]; then
805 # Update snapshot date file.
807 echo $DATE > .snapshot_date-${BRANCH}
809 # Remove working directory
810 rm -rf ${WORKING_DIRECTORY}