summaryrefslogtreecommitdiff
path: root/Tools/scripts/release/doit.sh
blob: 96f42885d51f777ec130b2d06952ffb2b02216b0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#!/bin/sh
# $FreeBSD$

pathtoports=$1
dir=`dirname $0`
if [ "X$dir" = "X." ]; then
  dir=`pwd`
fi

##############################################################################
#
# Tweak these parameters to match your configuration and make sure to check
# that the disc information in config is correct.
#
# You'll also want to place a recent copy of print-cdrom-packages.sh in the
# $scripts directory.
#

  ports="$dir/ports"
  dists="$ports/distfiles"
   logs="$dir/gen"
   pkgs="$ports/packages/All"
scripts="$dir"
   xdep_re="^XFree86-3.3.6_1[0-9]$"
#indexfile="INDEX-5"
indexfile="INDEX"
#
##############################################################################

test -d $logs || mkdir -p $logs

if [ ! -d "$ports" ]; then
  if [ -z "$pathtoports" ]; then
    echo "Missing path to ports/packages toree to process for setup.sh."
    exit 1
  fi
  $scripts/setup.sh $pathtoports
  echo ""
  echo "Make sure you tweak $dir/config to suit your needs."
  echo ""
fi

if [ ! -f "$logs/restricted.sh" ]; then
  echo "===> restricted list generation started at $(date)"
  (cd $ports; PORTSDIR=$ports make ECHO_MSG=/usr/bin/true \
    clean-restricted-list > $logs/restricted.sh)
  echo "===> restricted list generation ended at $(date)"
  echo $(grep -c '^#' $logs/restricted.sh) "ports in $logs/restricted.sh"
fi

if [ ! -f "$logs/.restricted.done" ]; then
  echo "===> cleaning restricted files"
  sh $logs/restricted.sh
  touch $logs/.restricted.done
fi

if [ ! -f "$logs/cdrom.sh" ]; then
  echo "===> cdrom list generation started at $(date)"
  (cd $ports; PORTSDIR=$ports make ECHO_MSG=/usr/bin/true \
    clean-for-cdrom-list > $logs/cdrom.sh)
  echo "===> cdrom list generation ended at $(date)"
  echo $(grep -c '^#' $logs/cdrom.sh) "ports in $logs/cdrom.sh"
fi

if [ ! -f "$logs/.cdrom.done" ]; then
  echo "===> cleaning non-CDROM-able files"
  sh $logs/cdrom.sh
  touch $logs/.cdrom.done
fi

if [ ! -f "$logs/$indexfile" ]; then
  echo "===> copying INDEX file from $ports/$indexfile"
  $scripts/scrubindex.pl $pkgs $ports/$indexfile > $logs/INDEX
  $scripts/checkdeps.pl $pkgs $logs/INDEX | sort -u | \
    sed -e 's/^/missing dependency: /'
fi

echo -n "Create a list of needed files for each disc? [y] "
read ans
if [ X$ans != Xn -a X$ans != XN ]; then
  >$logs/need.ALL
  for disc in `cat config | grep -v '#' | sed -e 's/[ 	].*//'`; do
    echo "disc $disc" >> $logs/need.ALL
    $scripts/print-cdrom-packages.sh `echo $disc | sed -e 's/^disc//'` \
      $ports | grep -Ev $xdep_re | tee $logs/need.$disc >> $logs/need.ALL
  done
fi

echo -n "Populate the discs now? [y] "
read ans
if [ X$ans != Xn -a X$ans != XN ]; then
  for disc in `ls -d disc? 2>/dev/null`; do
    echo "===> deleting $disc"
    rm -rf $disc
  done
  if [ -d "scratch" ]; then
    echo "===> deleting scratch"
    rm -rf scratch
  fi
  echo "Calling oneshot.pl config $logs/need.ALL $logs/INDEX $ports $pkgs/../ $dists"
  $scripts/oneshot.pl config $logs/need.ALL $logs/INDEX $ports $pkgs/../ $dists
  for disc in `ls -d disc? 2>/dev/null`; do
    echo "===> cleaning $disc"
    if [ -d "$disc/packages/All" ]; then
      $scripts/checkdeps.pl $disc/packages/All $disc/packages/INDEX | \
        sort -u | sed -e 's/^/missing package: /'
      (
        cd $disc/packages/All; \
        $scripts/scrubindex.pl . ../INDEX > ../INDEX.new; \
        mv ../INDEX.new ../INDEX; \
        find . -name '*.tgz' | xargs /sbin/md5 > CHECKSUM.MD5; \
      )
    fi
    du -ck $disc | grep total
  done
fi

echo -n "Make sure the 'needed' packages made it on the right disc(s)? [y] "
read ans
if [ X$ans != Xn -a X$ans != XN ]; then
  for disc in `ls -d disc? 2>/dev/null`; do
    echo "===> checking $disc"
    > $logs/have.$disc
    if [ -d "$disc/packages/All" ]; then
      ( cd $disc/packages/All && find . -name '*.tgz' | \
        sed -e 's/\.tgz//' -e 's/^\.\///' | sort) > \
        $logs/have.$disc
    fi
    diff -u $logs/have.$disc $logs/need.$disc | grep -e '^\+' | \
      grep -v -e '^\+* ' | sed -e 's/\+//' > $logs/missing.$disc
    if [ -s $logs/missing.$disc ]; then
      echo "===>  missing required packages on $disc"
      cat $logs/missing.$disc
    fi
  done
fi