summaryrefslogblamecommitdiff
path: root/Tools/portbuild/scripts/dopackages
blob: 49915a086025ee3822cbefa85026a7a293a36c06 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11










                                                                 



























































































                                                                                             
                     








                                         
                         






                                                                                







































                                                         
                                         





                                                         
                                                         
                                           
                                                         

                                     
  
 
                                                   
                          
                                     

  




                                                



                                                       
                                               

                                                      
    





                                           
    




                                        












                                                  
                                               





                                                         
                           
                                                                   

                                                                                      













                                                                                                 
                           
                                                                   

                                

                                                                            
                                                                     
                                                                     
                          














                                                                                                 
                                                                         
    
                                                         
                     
                                                         






                                      
                                                         
                     
                                                         


























                                                         
  


                                                       
#!/bin/sh

# configurable variables
pb=/a/asami/portbuild
user=asami

usage () {
  echo "usage: [-nobuild] [-noindex] [-noduds] [-nocvsup] branch"
  exit 1
}

# usage: makeindex pb scripts branch user
makeindex () {
  pb=$1
  scripts=$2
  branch=$3
  user=$4

  cd ${pb}/usr/ports
  echo "================================================"
  echo "generating index"
  echo "================================================"
  echo "index generation started at $(date)"
  ${scripts}/makeindex ${branch} || exit 1
  echo "index generation ended at $(date)"
  if grep -q non-existent INDEX; then
    echo "errors in INDEX:"
    grep -C non-existent INDEX
    grep -v non-existent INDEX > INDEX.tmp
    mv -f INDEX.tmp INDEX
  fi
  echo $(wc -l <INDEX) "lines in INDEX"
  chown ${user} INDEX
}

# usage: makeduds pb scripts branch
makeduds () {
  pb=$1
  scripts=$2
  branch=$3

  cd ${pb}/usr/ports
  echo "================================================"
  echo "generating duds"
  echo "================================================"
  echo "duds generation started at $(date)"
  if ! ${scripts}/makeduds ${branch}; then
    echo "error(s) detected, exiting script at $(date)"
    exit 1
  fi
  echo "duds generation ended at $(date)"
  echo $(wc -l < ${pb}/${branch}/duds) "items in duds"
  echo "duds diff:"
  diff ${pb}/${branch}/duds.old ${pb}/${branch}/duds
  cp -p ${pb}/${branch}/duds ${pb}/${branch}/duds.old
}

# usage: setupnode pb scripts branch me node
setupnode () {
  pb=$1
  scripts=$2
  branch=$3
  me=$4
  node=$5

  echo "setting up of $node started at $(date)"
  scp -p -a ${scripts}/setupnode ${node}:${scripts}
  ssh -n ${node} ${scripts}/setupnode ${me} ${pb} ${branch}
  echo "setting up of $node ended at $(date)"
}

# usage: restrictedlist pb scripts branch
restrictedlist () {
  pb=$1
  scripts=$2
  branch=$3

  cd ${pb}/usr/ports
  echo "================================================"
  echo "creating restricted list"
  echo "================================================"
  echo "restricted list genaration started at $(date)"
  make ECHO_MSG=/usr/bin/true clean-restricted-list > ${pb}/${branch}/restricted.sh
  echo "restricted list genaration ended at $(date)"
  echo $(grep -c '^#' ${pb}/${branch}/restricted.sh) "ports in ${pb}/${branch}/restricted.sh"
}
  
# usage: cdromlist pb scripts branch
cdromlist () {
  pb=$1
  scripts=$2
  branch=$3

  cd ${pb}/usr/ports
  echo "================================================"
  echo "creating cdrom list"
  echo "================================================"
  echo "cdrom list generation started at $(date)"
  make ECHO_MSG=/usr/bin/true clean-for-cdrom-list > ${pb}/${branch}/cdrom.sh
  echo "cdrom list generation ended at $(date)"
  echo $(grep -c '^#' ${pb}/${branch}/cdrom.sh) "ports in ${pb}/${branch}/cdrom.sh"
}

scripts=${pb}/scripts

umask 002
export PORTSDIR=${pb}/usr/ports

me=$(hostname -s)

echo "Subject: $me package building logs"
echo
echo "Called with arguments: "${1+"$@"}
echo "Started at $(date)"

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/X11R6/bin

if [ $# = 0 ]; then
  usage
fi

nobuild=0
noindex=0
noduds=0
nocvsup=0

# optional arguments
while [ $# -gt 1 ]; do
  case "x$1" in
    x-nobuild)
      nobuild=1
      ;;
    x-noindex)
      noindex=1
      ;;
    x-noduds)
      noduds=1
      ;;
    x-nocvsup)
      nocvsup=1
      ;;
    *)
      usage
      ;;
  esac
  shift
done

# mandatory argument
branch=$1
if [ "x$branch" != x3 -a "x$branch" != x4 ]; then
  usage
fi

cd ${pb}/usr/ports
if [ "$nocvsup" = 0 ]; then
  echo "================================================"
  echo "running cvsup"
  echo "================================================"
  su ${user} -c 'cvsup -g -L 1 /etc/supfile.cvsup'
  echo "================================================"
  echo "running cvs update on /usr/ports"
  echo "================================================"
  su ${user} -c 'cvs -q update -d -P'
  echo "================================================"
  echo "running make checksubdirs"
  echo "================================================"
  make checksubdirs 
  echo "================================================"
  echo "running cvs update on /usr/opt/doc"
  echo "================================================"
  cd ${pb}/usr/opt/doc
  su ${user} -c 'cvs -q update -d -P'
fi

# this one not in background to check return status
if [ "$noduds" = 0 ]; then
  makeduds ${pb} ${scripts} ${branch}
fi

# generate new Makefile
if [ "$noindex" = 0 ]; then
  makeindex ${pb} ${scripts} ${branch} ${user} &
  sleep 2
fi

echo "================================================"
echo "setting up nodes"
echo "================================================"
for node in $(awk '{print $1}' ${pb}/mlist); do
  setupnode ${pb} ${scripts} ${branch} ${me} ${node} &
  sleep 2
done

restrictedlist ${pb} ${scripts} ${branch} &
sleep 2

cdromlist ${pb} ${scripts} ${branch} &

wait

echo "all preparation ended at $(date)"

cd ${pb}/usr/ports
make parallel > ../../${branch}/Makefile

cd ${pb}
if [ "$nobuild" = 0 ]; then
  rm -rf bak/distfiles
  mv -f distfiles bak
  mkdir distfiles
  chown -R ${user} distfiles
  cd ${pb}/${branch}/bak
  rm -rf errors logs packages old-errors
  cd ${pb}/${branch}
  mv -f errors logs packages old-errors make.* bak
  mkdir -p errors logs packages/All
  chown -R ${user} errors logs packages 
  cp -p tarballs/XFree86-3.3.4.tgz packages/All
  cp -p tarballs/Motif-*.tgz packages/All
  count=$(awk '{sum+=$2}END{print sum+NR/2}' ${pb}/mlist)
  cd ${pb}/${branch}/packages/All
  echo "================================================"
  echo "building packages (phase 1)"
  echo "================================================"
  echo "started at $(date)"
  make -k -j$count -f ../../Makefile > ../../make.0 2>&1 </dev/null
  echo "ended at $(date)"
  echo $(echo $(ls -1 ${pb}/${branch}/packages/All | wc -l) - 2 | bc) "packages built"
  echo $(echo $(du -sk ${pb}/${branch}/packages | awk '{print $1}') / 1024 | bc) "MB of packages"
  echo $(echo $(du -sk ${pb}/distfiles | awk '{print $1}') / 1024 | bc) "MB of distfiles"
  cd ${pb}/${branch}
  if grep -q 'ptimeout: killing' make.0; then
    echo "The following port(s) timed out:"
    grep 'ptimeout: killing' make.0 | sed -e 's/^.*ptimeout:/ptimeout:/'
  fi
  cp -rp errors old-errors
  cd ${pb}/${branch}/old-errors
  ${pb}/scripts/processlogs
  cd ${pb}/${branch}/packages/All
  echo "================================================"
  echo "building packages (phase 2)"
  echo "================================================"
  echo "started at $(date)"
  make -k -j$count -f ../../Makefile > ../../make.1 2>&1 </dev/null
  echo "ended at $(date)"
  rm XFree86-3.*.tgz Motif-*.tgz
  ${pb}/scripts/chopindex ${pb}/usr/ports/INDEX ${pb}/${branch}/packages > \
    ${pb}/${branch}/packages/INDEX
  echo $(ls -1 ${pb}/${branch}/packages/All | wc -l) "packages built"
  echo $(cat ${pb}/${branch}/packages/INDEX | wc -l) "lines in INDEX"
  md5 *.tgz > CHECKSUM.MD5
  echo $(echo $(du -sk ${pb}/${branch}/packages | awk '{print $1}') / 1024 | bc) "MB of packages"
  echo $(echo $(du -sk ${pb}/distfiles | awk '{print $1}') / 1024 | bc) "MB of distfiles"
  cd ${pb}/${branch}
  if grep -q 'ptimeout: killing' make.1; then
    echo "The following port(s) timed out:"
    grep 'ptimeout: killing' make.1 | sed -e 's/^.*ptimeout:/ptimeout:/'
  fi
  cd ${pb}/${branch}/old-errors
  new=""
  for i in *.log; do
    if [ ! -f ../errors/$i ]; then
      new="$new $(basename $i .log)"
    fi
  done
  if [ "x$new" != "x" ]; then
    echo "The following port(s) didn't build the first time around: $new"
  fi
  echo "================================================"
  echo "new failures"
  echo "================================================"
  cd ${pb}/${branch}/errors
  for i in *.log; do
    if [ ! -f ../bak/errors/$i ]; then
      echo -n " $i"
    fi
  done
  echo
  echo "================================================"
  echo "old packages"
  echo "================================================"
  cd ${pb}/${branch}/bak/packages/All
  for i in *.tgz; do
    if [ ! -f ../../../packages/All/$i ]; then
      echo -n " $i"
    fi
  done
  echo
  echo "================================================"
  echo "old failures"
  echo "================================================"
  cd ${pb}/${branch}/bak/errors
  for i in *.log; do
    if [ ! -f ../../errors/$i ]; then
      echo -n " $i"
    fi
  done
  echo
  echo "================================================"
  echo "new packages"
  echo "================================================"
  cd ${pb}/${branch}/packages/All
  for i in *.tgz; do
    if [ ! -f ../../bak/packages/All/$i ]; then
      echo -n " $i"
    fi
  done
  echo
fi
echo "================================================"
echo "all done at $(date)"
echo "================================================"