OpenCores
URL https://opencores.org/ocsvn/scarts/scarts/trunk

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gcc/] [gcc-4.1.1/] [maintainer-scripts/] [gcc_release] - Blame information for rev 20

Go to most recent revision | Details | Compare with Previous | View Log

" >> ${SNAPSHOT_INDEX}" >> ${SNAPSHOT_INDEX}
Line No. Rev Author Line
1 15 jlechner
#! /bin/sh
2
 
3
########################################################################
4
#
5
# File:   gcc_release
6
# Author: Jeffrey Law, Bernd Schmidt, Mark Mitchell
7
# Date:   2001-05-25
8
#
9
# Contents:
10
#   Script to create a GCC release.
11
#
12
# Copyright (c) 2001, 2002 Free Software Foundation.
13
#
14
# This file is part of GCC.
15
#
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)
19
# any later version.
20
#
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.
25
#
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.
30
#
31
########################################################################
32
 
33
########################################################################
34
# Notes
35
########################################################################
36
 
37
# Here is an example usage of this script, to create a GCC 3.0.2
38
# prerelease:
39
#
40
#   gcc_release -r 3.0.2
41
#
42
# This script will automatically use the head of the release branch
43
# to generate the release.
44
 
45
########################################################################
46
# Functions
47
########################################################################
48
 
49
# Issue the error message given by $1 and exit with a non-zero
50
# exit code.
51
 
52
error() {
53
    echo "gcc_release: error: $1"
54
    exit 1
55
}
56
 
57
# Issue the informational message given by $1.
58
 
59
inform() {
60
    echo "gcc_release: $1"
61
}
62
 
63
# Issue a usage message explaining how to use this script.
64
 
65
usage() {
66
cat <
67
gcc_release -r release [-f] [further options]
68
gcc_release -s name:svnbranch [further options]
69
 
70
Options:
71
 
72
  -r release           Version of the form X.Y or X.Y.Z.
73
  -s name:svnbranch    Create a snapshot, not a real release.
74
 
75
  -d destination       Local working directory where we will build the release
76
                       (default=${HOME}).
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 SVN.
81
  -u username          Username for upload operations.
82
EOF
83
    exit 1
84
}
85
 
86
# Change to the directory given by $1.
87
 
88
changedir() {
89
  cd $1 || \
90
    error "Could not change directory to $1"
91
}
92
 
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.
96
 
97
adjust_dirs() {
98
  for x in $@; do
99
    echo `basename ${SOURCE_DIRECTORY}`/$x
100
  done
101
}
102
 
103
# Build the source tree that will be the basis for the release
104
# in ${WORKING_DIRECTORY}/gcc-${RELEASE}.
105
 
106
build_sources() {
107
  # If the WORKING_DIRECTORY already exists, do not risk destroying it.
108
  if [ -r ${WORKING_DIRECTORY} ]; then
109
    error "\`${WORKING_DIRECTORY}' already exists"
110
  fi
111
  # Create the WORKING_DIRECTORY.
112
  mkdir "${WORKING_DIRECTORY}" \
113
    || error "Could not create \`${WORKING_DIRECTORY}'"
114
  changedir "${WORKING_DIRECTORY}"
115
 
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"
120
 
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 <
129
${LONG_DATE}  Release Manager
130
 
131
        * GCC ${RELEASE} released.
132
 
133
EOF
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}"
139
      fi
140
    done
141
 
142
    # Update gcc/DEV-PHASE if it exists, otherwise gcc/version.c.
143
 
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 && \
148
       : > DEV-PHASE && \
149
       ${SVN} -q ci -m 'Mark as release' DEV-PHASE) || \
150
      error "Could not update DEV-PHASE"
151
    else
152
      for x in gcc/version.c; do
153
        y=`basename ${x}`
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}"
159
      done
160
    fi
161
 
162
    # Make sure we tag the sources for a final release.
163
    TAG="tags/gcc_`echo ${RELEASE} | tr . _`_release"
164
 
165
    rm -rf ${SOURCE_DIRECTORY}
166
  fi
167
 
168
  # Tag the sources.
169
  if [ -n "${TAG}" ]; then
170
    inform "Tagging sources as ${TAG}"
171
    # We don't want to overwrite an existing tag.  So, if the tag
172
    # already exists, issue an error message; the release manager can
173
    # manually remove the tag if appropriate.
174
    echo "${SVN} ls ${SVNROOT}/${TAG}/ChangeLog"
175
    if ${SVN} ls "${SVNROOT}/${TAG}/ChangeLog"; then
176
      error "Tag ${TAG} already exists"
177
    fi
178
    ${SVN} -m "Tagging source as ${TAG}" cp "${SVNROOT}/${SVNBRANCH}" "${SVNROOT}/${TAG}" || \
179
      error "Could not tag sources"
180
    SVNBRANCH=${TAG}
181
  fi
182
  SVNREV=`${SVN} info "${SVNROOT}/${SVNBRANCH}"|awk '/Revision:/ {print $2}'`
183
 
184
  # Export the current sources.
185
  inform "Retrieving sources (svn export -r ${SVNREV} ${SVNROOT}/${SVNBRANCH})"
186
 
187
  ${SVN} -q export -r${SVNREV} "${SVNROOT}/${SVNBRANCH}" "`basename ${SOURCE_DIRECTORY}`" ||\
188
    error "Could not retrieve sources"
189
 
190
  # Run gcc_update on them to set up the timestamps nicely, and (re)write
191
  # the LAST_UPDATED file containing the SVN tag/revision used.
192
  changedir "gcc-${RELEASE}"
193
  contrib/gcc_update --touch
194
  echo "Obtained from SVN: ${SVNBRANCH} revision ${SVNREV}" > LAST_UPDATED
195
 
196
  # Obtain some documentation files from the wwwdocs module.
197
  inform "Retrieving HTML documentation"
198
  changedir "${WORKING_DIRECTORY}"
199
  for x in bugs faq; do
200
    (${CVS} export -r HEAD wwwdocs/htdocs/${x}.html && \
201
     cp ${WORKING_DIRECTORY}/wwwdocs/htdocs/${x}.html \
202
        ${SOURCE_DIRECTORY}) || \
203
      error "Could not retrieve ${x}.html"
204
  done
205
 
206
  inform "Generating plain-text documentation from HTML"
207
  changedir "${SOURCE_DIRECTORY}"
208
  for file in *.html; do
209
    newfile=`echo $file | sed -e 's/.html//' | tr "[:lower:]" "[:upper:]"`
210
    (${ENV} TERM=vt100 lynx -dump $file \
211
       | sed -e "s#file://localhost`/bin/pwd`\(.*\)#http://gcc.gnu.org\1#g" \
212
       > $newfile) || \
213
     error "Could not generate text-only version of ${file}"
214
  done
215
 
216
  # For a prerelease or real release, we need to generate additional
217
  # files not present in SVN.
218
  changedir "${SOURCE_DIRECTORY}"
219
  if [ $SNAPSHOT -ne 1 ]; then
220
    # Generate the documentation.
221
    inform "Building install docs"
222
    SOURCEDIR=${SOURCE_DIRECTORY}/gcc/doc
223
    DESTDIR=${SOURCE_DIRECTORY}/INSTALL
224
    export SOURCEDIR
225
    export DESTDIR
226
    ${SOURCE_DIRECTORY}/gcc/doc/install.texi2html
227
 
228
    # Regenerate the NEWS file.
229
    contrib/gennews > NEWS || \
230
      error "Could not regenerate NEWS files"
231
 
232
    # Now, we must build the compiler in order to create any generated
233
    # files that are supposed to go in the source directory.  This is
234
    # also a good sanity check to make sure that the release builds
235
    # on at least one platform.
236
    inform "Building compiler"
237
    OBJECT_DIRECTORY=../objdir
238
    contrib/gcc_build -d ${SOURCE_DIRECTORY} -o ${OBJECT_DIRECTORY} \
239
      -c "--enable-generated-files-in-srcdir" build || \
240
      error "Could not rebuild GCC"
241
  fi
242
 
243
  # Move message catalogs to source directory.
244
  mv ../objdir/gcc/po/*.gmo gcc/po/
245
  [ -f libcpp/po/cpplib.pot ] && mv ../objdir/libcpp/po/*.gmo libcpp/po/
246
 
247
  # Create a "MD5SUMS" file to use for checking the validity of the release.
248
  echo \
249
"# This file contains the MD5 checksums of the files in the
250
# gcc-"${RELEASE}".tar.bz2 tarball.
251
#
252
# Besides verifying that all files in the tarball were correctly expanded,
253
# it also can be used to determine if any files have changed since the
254
# tarball was expanded or to verify that a patchfile was correctly applied.
255
#
256
# Suggested usage:
257
# md5sum -c MD5SUMS | grep -v \"OK$\"
258
" > MD5SUMS
259
 
260
  find . -type f |
261
  sed -e 's:^\./::' -e '/MD5SUMS/d' |
262
  sort |
263
  xargs md5sum >>MD5SUMS
264
}
265
 
266
# Buid a single tarfile.  The first argument is the name of the name
267
# of the tarfile to build, without any suffixes.  They will be added
268
# automatically.  The rest of the arguments are the files or
269
# directories to include, and possibly other arguments to tar.
270
 
271
build_tarfile() {
272
  # Get the name of the destination tar file.
273
  TARFILE="$1.tar.bz2"
274
  shift
275
 
276
  # Build the tar file itself.
277
  (${TAR} cf - "$@" | ${BZIP2} > ${TARFILE}) || \
278
    error "Could not build tarfile"
279
  FILE_LIST="${FILE_LIST} ${TARFILE}"
280
}
281
 
282
# Build a single tarfile if any of the directories listed exist,
283
# but not if none of them do (because that component doesn't exist
284
# on this branch).
285
maybe_build_tarfile() {
286
  dest=$1
287
  shift
288
  dir_exists=0
289
  for maybe_dir in "$@"; do
290
    if [ -d "$maybe_dir" ]; then
291
      dir_exists=1
292
    fi
293
  done
294
  if [ $dir_exists = 1 ]; then
295
    build_tarfile "$dest" "$@"
296
  else
297
    echo "Not building $dest tarfile"
298
  fi
299
}
300
 
301
# Build the various tar files for the release.
302
 
303
build_tarfiles() {
304
  inform "Building tarfiles"
305
 
306
  changedir "${WORKING_DIRECTORY}"
307
 
308
  # The GNU Coding Standards specify that all files should
309
  # world readable.
310
  chmod -R a+r ${SOURCE_DIRECTORY}
311
  # And that all directories have mode 777.
312
  find ${SOURCE_DIRECTORY} -type d -exec chmod 777 {} \;
313
 
314
  # Build one huge tarfile for the entire distribution.
315
  build_tarfile gcc-${RELEASE} `basename ${SOURCE_DIRECTORY}`
316
 
317
  # Now, build one for each of the languages.
318
  maybe_build_tarfile gcc-ada-${RELEASE} ${ADA_DIRS}
319
  maybe_build_tarfile gcc-g++-${RELEASE} ${CPLUSPLUS_DIRS}
320
  maybe_build_tarfile gcc-g77-${RELEASE} ${FORTRAN_DIRS}
321
  maybe_build_tarfile gcc-fortran-${RELEASE} ${FORTRAN95_DIRS}
322
  maybe_build_tarfile gcc-java-${RELEASE} ${JAVA_DIRS}
323
  maybe_build_tarfile gcc-objc-${RELEASE} ${OBJECTIVEC_DIRS}
324
  maybe_build_tarfile gcc-testsuite-${RELEASE} ${TESTSUITE_DIRS}
325
 
326
  # The core is everything else.
327
  EXCLUDES=""
328
  for x in ${ADA_DIRS} ${CPLUSPLUS_DIRS} ${FORTRAN_DIRS} ${FORTRAN95_DIRS}\
329
           ${JAVA_DIRS} ${OBJECTIVEC_DIRS} ${TESTSUITE_DIRS}; do
330
    EXCLUDES="${EXCLUDES} --exclude $x"
331
  done
332
  build_tarfile gcc-core-${RELEASE} ${EXCLUDES} \
333
    `basename ${SOURCE_DIRECTORY}`
334
}
335
 
336
# Build .gz files.
337
build_gzip() {
338
  for f in ${FILE_LIST}; do
339
    target=${f%.bz2}.gz
340
    (${BZIP2} -d -c $f | ${GZIP} > ${target}) || error "Could not create ${target}"
341
  done
342
}
343
 
344
# Build diffs against an old release.
345
build_diffs() {
346
  old_dir=${1%/*}
347
  old_file=${1##*/}
348
  old_vers=${old_file%.tar.bz2}
349
  old_vers=${old_vers#gcc-}
350
  inform "Building diffs against version $old_vers"
351
  for f in gcc gcc-ada gcc-g++ gcc-g77 gcc-fortran gcc-java gcc-objc gcc-testsuite gcc-core; do
352
    old_tar=${old_dir}/${f}-${old_vers}.tar.bz2
353
    new_tar=${WORKING_DIRECTORY}/${f}-${RELEASE}.tar.bz2
354
    if [ ! -e $old_tar ]; then
355
      inform "$old_tar not found; not generating diff file"
356
    elif [ ! -e $new_tar ]; then
357
      inform "$new_tar not found; not generating diff file"
358
    else
359
      build_diff $old_tar gcc-${old_vers} $new_tar gcc-${RELEASE} \
360
        ${f}-${old_vers}-${RELEASE}.diff.bz2
361
    fi
362
  done
363
}
364
 
365
# Build an individual diff.
366
build_diff() {
367
  changedir "${WORKING_DIRECTORY}"
368
  tmpdir=gccdiff.$$
369
  mkdir $tmpdir || error "Could not create directory $tmpdir"
370
  changedir $tmpdir
371
  (${BZIP2} -d -c $1 | ${TAR} xf - ) || error "Could not unpack $1 for diffs"
372
  (${BZIP2} -d -c $3 | ${TAR} xf - ) || error "Could not unpack $3 for diffs"
373
  ${DIFF} $2 $4 > ../${5%.bz2}
374
  if [ $? -eq 2 ]; then
375
    error "Trouble making diffs from $1 to $3"
376
  fi
377
  ${BZIP2} ../${5%.bz2} || error "Could not generate ../$5"
378
  changedir ..
379
  rm -rf $tmpdir
380
  FILE_LIST="${FILE_LIST} $5"
381
}
382
 
383
# Upload the files to the FTP server.
384
upload_files() {
385
  inform "Uploading files"
386
 
387
  changedir "${WORKING_DIRECTORY}"
388
 
389
  # Make sure the directory exists on the server.
390
  if [ $LOCAL -eq 0 ]; then
391
    ${SSH} -l ${GCC_USERNAME} ${GCC_HOSTNAME} \
392
      mkdir -p "${FTP_PATH}/diffs"
393
    UPLOAD_PATH="${GCC_USERNAME}@${GCC_HOSTNAME}:${FTP_PATH}"
394
  else
395
    mkdir -p "${FTP_PATH}/diffs" \
396
      || error "Could not create \`${FTP_PATH}'"
397
    UPLOAD_PATH=${FTP_PATH}
398
  fi
399
 
400
  # Then copy files to their respective (sub)directories.
401
  for x in gcc*.gz gcc*.bz2; do
402
    if [ -e ${x} ]; then
403
      # Make sure the file will be readable on the server.
404
      chmod a+r ${x}
405
      # Copy it.
406
      case ${x} in
407
        *.diff.*)
408
          SUBDIR="diffs/";
409
          ;;
410
        *)
411
          SUBDIR="";
412
      esac
413
      ${SCP} ${x} ${UPLOAD_PATH}/${SUBDIR} \
414
        || error "Could not upload ${x}"
415
    fi
416
  done
417
}
418
 
419
#Print description if snapshot exists
420
snapshot_print() {
421
  if [ -e ${RELEASE}/$1 ]; then
422
     printf "%-38s%s\n\n" "$1" "$2" >> ${SNAPSHOT_README}
423
     echo "  
$1
424
     echo "      
$2
425
  fi
426
}
427
 
428
# Announce a snapshot, both on the web and via mail.
429
announce_snapshot() {
430
  inform "Updating links and READMEs on the FTP server"
431
 
432
  TEXT_DATE=`date --date=$DATE +%B\ %d,\ %Y`
433
  SNAPSHOT_README=${RELEASE}/README
434
  SNAPSHOT_INDEX=${RELEASE}/index.html
435
 
436
  changedir "${SNAPSHOTS_DIR}"
437
  echo \
438
"Snapshot gcc-"${RELEASE}" is now available on
439
  ftp://gcc.gnu.org/pub/gcc/snapshots/"${RELEASE}"/
440
and on various mirrors, see http://gcc.gnu.org/mirrors.html for details.
441
 
442
This snapshot has been generated from the GCC "${BRANCH}" SVN branch
443
with the following options: "svn://gcc.gnu.org/svn/gcc/${SVNBRANCH} revision ${SVNREV}"
444
 
445
You'll find:
446
" > ${SNAPSHOT_README}
447
 
448
  echo \
449
"
450
 
451
452
GCC "${RELEASE}" Snapshot
453
454
 
455
456

GCC "${RELEASE}" Snapshot

457
 
458

The GCC Project makes

459
periodic snapshots of the GCC source tree available to the public
460
for testing purposes.

461
 
462

If you are planning to download and use one of our snapshots, then

463
we highly recommend you join the GCC developers list.  Details for
464
how to sign up can be found on the GCC project home page.

465
 
466

This snapshot has been generated from the GCC "${BRANCH}" SVN branch

467
with the following options: "svn://gcc.gnu.org/svn/gcc/${SVNBRANCH} revision ${SVNREV}"

468
 
469
" > ${SNAPSHOT_INDEX}
470
 
471
  snapshot_print gcc-${RELEASE}.tar.bz2 "Complete GCC (includes all of below)"
472
  snapshot_print gcc-core-${RELEASE}.tar.bz2 "C front end and core compiler"
473
  snapshot_print gcc-ada-${RELEASE}.tar.bz2 "Ada front end and runtime"
474
  snapshot_print gcc-fortran-${RELEASE}.tar.bz2 "Fortran front end and runtime"
475
  snapshot_print gcc-g++-${RELEASE}.tar.bz2 "C++ front end and runtime"
476
  snapshot_print gcc-g77-${RELEASE}.tar.bz2 "Fortran 77 front end and runtime"
477
  snapshot_print gcc-java-${RELEASE}.tar.bz2 "Java front end and runtime"
478
  snapshot_print gcc-objc-${RELEASE}.tar.bz2 "Objective-C front end and runtime"
479
  snapshot_print gcc-testsuite-${RELEASE}.tar.bz2 "The GCC testsuite"
480
 
481
  echo \
482
"Diffs from "${BRANCH}"-"${LAST_DATE}" are available in the diffs/ subdirectory.
483
 
484
When a particular snapshot is ready for public consumption the LATEST-"${BRANCH}"
485
link is updated and a message is sent to the gcc list.  Please do not use
486
a snapshot before it has been announced that way." >> ${SNAPSHOT_README}
487
 
488
  echo \
489
"
490

Diffs from "${BRANCH}"-"${LAST_DATE}" are available in the

491
diffs/ subdirectory.

492
 
493

When a particular snapshot is ready for public consumption the LATEST-"${BRANCH}"

494
link is updated and a message is sent to the gcc list.  Please do not use
495
a snapshot before it has been announced that way.

496
 
497

498
 
499
500
gcc@gcc.gnu.org
501

502
Last modified "${TEXT_DATE}"
503
504
505
 
506
" >> ${SNAPSHOT_INDEX}
507
 
508
  rm -f LATEST-${BRANCH}
509
  ln -s ${RELEASE} LATEST-${BRANCH}
510
 
511
  inform "Sending mail"
512
 
513
  export QMAILHOST=gcc.gnu.org
514
  mail -s "gcc-${RELEASE} is now available" gcc@gcc.gnu.org < ${SNAPSHOT_README}
515
}
516
 
517
########################################################################
518
# Initialization
519
########################################################################
520
 
521
# Today's date.
522
DATE=`date "+%Y%m%d"`
523
LONG_DATE=`date "+%Y-%m-%d"`
524
 
525
SVN=${SVN:-/usr/bin/svn}
526
# The CVS server containing the GCC repository.
527
SVN_SERVER="gcc.gnu.org"
528
# The path to the repository on that server.
529
SVN_REPOSITORY="/svn/gcc"
530
# The username to use when connecting to the server.
531
SVN_USERNAME="${USER}"
532
 
533
# The machine to which files will be uploaded.
534
GCC_HOSTNAME="gcc.gnu.org"
535
# The name of the account on the machine to which files are uploaded.
536
GCC_USERNAME="gccadmin"
537
# The directory in which the files will be placed (do not use ~user syntax).
538
FTP_PATH=/var/ftp/pub/gcc
539
# The directory in which snapshots will be placed.
540
SNAPSHOTS_DIR=${FTP_PATH}/snapshots
541
 
542
# The major number for the release.  For release `3.0.2' this would be
543
# `3'
544
RELEASE_MAJOR=""
545
# The minor number for the release.  For release `3.0.2' this would be
546
# `0'.
547
RELEASE_MINOR=""
548
# The revision number for the release.  For release `3.0.2' this would
549
# be `2'.
550
RELEASE_REVISION=""
551
# The complete name of the release.
552
RELEASE=""
553
 
554
# The name of the branch from which the release should be made, in a
555
# user-friendly form.
556
BRANCH=""
557
 
558
# The name of the branch from which the release should be made, as used
559
# for our version control system.
560
SVNBRANCH=""
561
 
562
# The tag to apply to the sources used for the release.
563
TAG=""
564
 
565
# The old tarballs from which to generate diffs.
566
OLD_TARS=""
567
 
568
# The directory that will be used to construct the release.  The
569
# release itself will be placed in a subdirectory of this diretory.
570
DESTINATION=${HOME}
571
# The subdirectory.
572
WORKING_DIRECTORY=""
573
# The directory that will contain the GCC sources.
574
SOURCE_DIRECTORY=""
575
 
576
# The directories that should be part of the various language-specific
577
# tar files.  These are all relative to the top of the source tree.
578
ADA_DIRS="gcc/ada libada gnattools"
579
CPLUSPLUS_DIRS="gcc/cp libstdc++-v3"
580
FORTRAN_DIRS="gcc/f libf2c"
581
FORTRAN95_DIRS="gcc/fortran libgfortran"
582
JAVA_DIRS="gcc/java libjava libffi fastjar zlib boehm-gc"
583
OBJECTIVEC_DIRS="gcc/objc libobjc"
584
TESTSUITE_DIRS="gcc/testsuite"
585
 
586
# Non-zero if this is the final release, rather than a prerelease.
587
FINAL=0
588
 
589
# Non-zero if we are building a snapshot, and don't build gcc or
590
# include generated files.
591
SNAPSHOT=0
592
 
593
# Non-zero if we are running locally on gcc.gnu.org, and use local CVS
594
# and copy directly to the FTP directory.
595
LOCAL=0
596
 
597
# Major operation modes.
598
MODE_GZIP=0
599
MODE_DIFFS=0
600
MODE_SOURCES=0
601
MODE_TARFILES=0
602
MODE_UPLOAD=0
603
 
604
# List of archive files generated; used to create .gz files from .bz2.
605
FILE_LIST=""
606
 
607
# Programs we use.
608
 
609
BZIP2="${BZIP2:-bzip2}"
610
CVS="${CVS:-cvs -f -Q -z9}"
611
DIFF="${DIFF:-diff -Nrcpad}"
612
ENV="${ENV:-env}"
613
GZIP="${GZIP:-gzip --best}"
614
SCP="${SCP:-scp -p}"
615
SSH="${SSH:-ssh}"
616
TAR="${TAR:-tar}"
617
 
618
########################################################################
619
# Command Line Processing
620
########################################################################
621
 
622
# Parse the options.
623
while getopts "d:fr:u:t:p:s:l" ARG; do
624
    case $ARG in
625
    d)    DESTINATION="${OPTARG}";;
626
    r)    RELEASE="${OPTARG}";;
627
    t)    TAG="${OPTARG}";;
628
    u)    SVN_USERNAME="${OPTARG}";;
629
    f)    FINAL=1;;
630
    s)    SNAPSHOT=1
631
          BRANCH=${OPTARG%:*}
632
          SVNBRANCH=${OPTARG#*:}
633
          ;;
634
    l)    LOCAL=1
635
          SCP=cp
636
          PATH=~:/usr/local/bin:$PATH;;
637
    p)    OLD_TARS="${OLD_TARS} ${OPTARG}"
638
          if [ ! -f ${OPTARG} ]; then
639
            error "-p argument must name a tarball"
640
          fi;;
641
    \?)   usage;;
642
    esac
643
done
644
shift `expr ${OPTIND} - 1`
645
 
646
# Handle the major modes.
647
while [ $# -ne 0 ]; do
648
    case $1 in
649
    diffs)    MODE_DIFFS=1;;
650
    gzip)     MODE_GZIP=1;;
651
    sources)  MODE_SOURCES=1;;
652
    tarfiles) MODE_TARFILES=1;;
653
    upload)   MODE_UPLOAD=1;;
654
    all)      MODE_SOURCES=1; MODE_TARFILES=1; MODE_DIFFS=1; MODE_UPLOAD=1;
655
              if [ $SNAPSHOT -ne 1 ]; then
656
                # Only for releases and pre-releases.
657
                MODE_GZIP=1;
658
              fi
659
              ;;
660
    *)        error "Unknown mode $1";;
661
    esac
662
    shift
663
done
664
 
665
# Perform consistency checking.
666
if [ ${LOCAL} -eq 0 ] && [ -z ${SVN_USERNAME} ]; then
667
  error "No username specified"
668
fi
669
 
670
if [ ! -d ${DESTINATION} ]; then
671
  error "\`${DESTINATION}' is not a directory"
672
fi
673
 
674
if [ $SNAPSHOT -eq 0 ]; then
675
  if [ -z ${RELEASE} ]; then
676
    error "No release number specified"
677
  fi
678
 
679
  # Compute the major and minor release numbers.
680
  RELEASE_MAJOR=`echo $RELEASE | awk --assign FS=. '{ print $1; }'`
681
  RELEASE_MINOR=`echo $RELEASE | awk --assign FS=. '{ print $2; }'`
682
  RELEASE_REVISION=`echo $RELEASE | awk --assign FS=. '{ print $3; }'`
683
 
684
  if [ -z "${RELEASE_MAJOR}" ] || [ -z "${RELEASE_MINOR}" ]; then
685
    error "Release number \`${RELEASE}' is invalid"
686
  fi
687
 
688
  # Compute the full name of the release.
689
  if [ -z "${RELEASE_REVISION}" ]; then
690
    RELEASE="${RELEASE_MAJOR}.${RELEASE_MINOR}"
691
  else
692
    RELEASE="${RELEASE_MAJOR}.${RELEASE_MINOR}.${RELEASE_REVISION}"
693
  fi
694
 
695
  # Compute the name of the branch, which is based solely on the major
696
  # and minor release numbers.
697
  SVNBRANCH="branches/gcc-${RELEASE_MAJOR}_${RELEASE_MINOR}-branch"
698
 
699
  # If this is not a final release, set various parameters acordingly.
700
  if [ ${FINAL} -ne 1 ]; then
701
    RELEASE="${RELEASE}-${DATE}"
702
    FTP_PATH="${FTP_PATH}/prerelease-${RELEASE}/"
703
  else
704
    FTP_PATH="${FTP_PATH}/releases/gcc-${RELEASE}/"
705
  fi
706
else
707
  RELEASE=${BRANCH}-${DATE}
708
  FTP_PATH="${FTP_PATH}/snapshots/${RELEASE}"
709
 
710
  # If diffs are requested when building locally on gcc.gnu.org, we (usually)
711
  # know what the last snapshot date was and take the corresponding tarballs,
712
  # unless the user specified tarballs explictly.
713
  if [ $MODE_DIFFS -ne 0 ] && [ $LOCAL -ne 0 ] && [ -z "${OLD_TARS}" ]; then
714
    LAST_DATE=`cat ~/.snapshot_date-${BRANCH}`
715
    OLD_TARS=${SNAPSHOTS_DIR}/${BRANCH}-${LAST_DATE}/gcc-${BRANCH}-${LAST_DATE}.tar.bz2
716
  fi
717
fi
718
 
719
# Compute the name of the WORKING_DIRECTORY and the SOURCE_DIRECTORY.
720
WORKING_DIRECTORY="${DESTINATION}/gcc-${RELEASE}"
721
SOURCE_DIRECTORY="${WORKING_DIRECTORY}/gcc-${RELEASE}"
722
 
723
# Recompute the names of all the language-specific directories,
724
# relative to the WORKING_DIRECTORY.
725
ADA_DIRS=`adjust_dirs ${ADA_DIRS}`
726
CPLUSPLUS_DIRS=`adjust_dirs ${CPLUSPLUS_DIRS}`
727
FORTRAN_DIRS=`adjust_dirs ${FORTRAN_DIRS}`
728
FORTRAN95_DIRS=`adjust_dirs ${FORTRAN95_DIRS}`
729
JAVA_DIRS=`adjust_dirs ${JAVA_DIRS}`
730
OBJECTIVEC_DIRS=`adjust_dirs ${OBJECTIVEC_DIRS}`
731
TESTSUITE_DIRS=`adjust_dirs ${TESTSUITE_DIRS}`
732
 
733
# Set up SVNROOT.
734
if [ $LOCAL -eq 0 ]; then
735
    SVNROOT="svn+ssh://${SVN_USERNAME}@${SVN_SERVER}${SVN_REPOSITORY}"
736
    CVSROOT=":ext:${SVN_USERNAME}@gcc.gnu.org/cvs/gcc"
737
else
738
    SVNROOT="file:///svn/gcc"
739
    CVSROOT="/cvs/gcc"
740
fi
741
export SVNROOT
742
export CVSROOT
743
 
744
########################################################################
745
# Main Program
746
########################################################################
747
 
748
# Set the timezone to UTC
749
TZ="UTC0"
750
export TZ
751
 
752
# Build the source directory.
753
 
754
if [ $MODE_SOURCES -ne 0 ]; then
755
  build_sources
756
fi
757
 
758
# Build the tar files.
759
 
760
if [ $MODE_TARFILES -ne 0 ]; then
761
  build_tarfiles
762
fi
763
 
764
# Build diffs
765
 
766
if [ $MODE_DIFFS -ne 0 ]; then
767
  # Possibly build diffs.
768
  if [ -n "$OLD_TARS" ]; then
769
    for old_tar in $OLD_TARS; do
770
      build_diffs $old_tar
771
    done
772
  fi
773
fi
774
 
775
# Build gzip files
776
if [ $MODE_GZIP -ne 0 ]; then
777
  build_gzip
778
fi
779
 
780
# Upload them to the FTP server.
781
if [ $MODE_UPLOAD -ne 0 ]; then
782
  upload_files
783
 
784
  # For snapshots, make some further updates.
785
  if [ $SNAPSHOT -ne 0 ] && [ $LOCAL -ne 0 ]; then
786
    announce_snapshot
787
 
788
    # Update snapshot date file.
789
    changedir ~
790
    echo $DATE > .snapshot_date-${BRANCH}
791
 
792
    # Remove working directory
793
    rm -rf ${WORKING_DIRECTORY}
794
  fi
795
fi

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.