diff options
author | Florent Thoumie <flz@FreeBSD.org> | 2011-04-24 16:37:51 +0000 |
---|---|---|
committer | Florent Thoumie <flz@FreeBSD.org> | 2011-04-24 16:37:51 +0000 |
commit | 03074365a506cbcbf11231490d2d342f7f271c55 (patch) | |
tree | 717a56dc9e59bfd1d12a1e47985dd1ea389159da /Tools/portbuild/scripts/buildscript | |
parent | 5c392de08e25481fc1571ba09e497241e01792c0 (diff) | |
download | ports-03074365a506cbcbf11231490d2d342f7f271c55.tar.gz ports-03074365a506cbcbf11231490d2d342f7f271c55.zip |
Notes
Diffstat (limited to 'Tools/portbuild/scripts/buildscript')
-rwxr-xr-x | Tools/portbuild/scripts/buildscript | 432 |
1 files changed, 0 insertions, 432 deletions
diff --git a/Tools/portbuild/scripts/buildscript b/Tools/portbuild/scripts/buildscript deleted file mode 100755 index 47d69c859d3c..000000000000 --- a/Tools/portbuild/scripts/buildscript +++ /dev/null @@ -1,432 +0,0 @@ -#!/bin/sh -# $FreeBSD$ - -# client-side script to actually build a package - -# usage: $0 DIRNAME PHASE -# PHASE is 1 (checksum) or 2 (package) - -cleanup() { - status=$1 - - # Don't keep distfiles if 'make checksum' failed - keep_distfiles=$(make -V ALWAYS_KEEP_DISTFILES) - if [ ${status} -eq 1 -o -z "${keep_distfiles}" ]; then - cd ${dir} - distdir=$(make -V DISTDIR) - if [ ! -z "${distdir}" ]; then - rm -rf ${distdir}/* - fi - fi - - - if [ -e ${dir}/.keep ]; then - cd ${dir} - objdir=$(make -V WRKDIR) - tar cfjC /tmp/work.tbz ${objdir}/.. work - fi - - if [ ${status} -gt 0 ]; then - cat /tmp/make.log${status} - fi - - echo 1 > /tmp/status - touch /.dirty - echo "================================================================" - echo -n "build of ${dir} ended at " - date - - exit 0 -} - -add_pkg() { - pkgs=$* - - echo add_pkg $pkgs - cd /tmp/depends - # XXX TODO more hard-coding - export PKG_PATH=/tmp/depends - if [ ! -z "${pkgs}" ]; then - arch=$(uname -m) - echo "adding dependencies" - for i in $pkgs; do - echo "pkg_add $i" - base=$(basename $i .tgz) - base=$(basename $base .tbz) - if pkg_info -q -e $base; then - echo "skipping $base, already added" - else - if ! pkg_add $i; then - echo "error in dependency $i, exiting" - cleanup 0 - fi - fi - done - fi -} - -del_pkg() { - pkgs=$* - - cd /tmp/depends - # XXX TODO more hard-coding - export PKG_PATH=/tmp/depends - if [ ! -z "${pkgs}" ]; then - recursion=1 - dellist="" - while [ $recursion -eq 1 ]; do - unset delpkg nextpkg - recursion=0 - for i in $pkgs; do - base=$(basename $i .tgz) - base=$(basename $base .tbz) - if [ -s /var/db/pkg/${base}/+REQUIRED_BY ]; then - recursion=1 - nextpkg="${base} ${nextpkg}" - elif [ -d /var/db/pkg/${base}/ ]; then - delpkg="${base} ${delpkg}" - fi - done - pkgs="${nextpkg}" - if [ "$dellist" != "" -a "$dellist" = "$delpkg" ]; then - echo "deleted list =\""$dellist"\", packages to delete ="\"$delpkg\" - echo "The following packages were left behind (perhaps your dependency list is incomplete):" - ls /var/db/pkg - echo "error in pkg_delete, exiting" - cleanup 0 - else - for j in ${delpkg}; do - echo "Deleting ${j}" - if ! (pkg_delete -f $j); then - echo "--> error in pkg_delete, exiting" - cleanup 0 - fi - done - dellist=$delpkg - fi - done - fi -} - -dir=$1 -phase=$2 - -ED=$3 -PD=$4 -FD=$5 -BD=$6 -RD=$7 - -#export PATH=/ccache/libexec/ccache/:$PATH -#export CCACHE_PATH=/usr/bin:/usr/local/bin - -# pick up value from environment set up in portbuild script -L=`echo ${LOCALBASE} | sed 's,^/,,'` -Z=`ident ${dir}/Makefile | grep 'FreeBSD:' | sed 's/^[ \t]*//'` - -cd $dir || exit 1 -restr=$(make -V RESTRICTED) - -# Keep restricted distfiles in a subdirectory for extra protection -# against leakage -if [ ! -z "$restr" ]; then - # pick up value from environment set up in portbuild script - echo "DISTDIR=${DISTDIR}" - export DISTDIR=${DISTDIR}/RESTRICTED - echo "DISTDIR=${DISTDIR}" - mkdir -p ${DISTDIR} -fi - -if [ $phase = 1 ]; then - - # note: if you change this header, also change processonelog and processlogs2 - cd $dir || exit 1 - echo "building for: $(uname -mr)" - echo "maintained by: $(make maintainer)" - echo "port directory: ${dir}" - echo "Makefile ident: ${Z}" - echo "build started at $(date)" - - echo "FETCH_DEPENDS=${FD}" - echo "PATCH_DEPENDS=${PD}" - echo "EXTRACT_DEPENDS=${ED}" - echo "BUILD_DEPENDS=${BD}" - echo "RUN_DEPENDS=${RD}" - - echo "prefixes: LOCALBASE=${L}" - - # Stash a copy of /etc/master.passwd and /etc/group to detect whether someone modifies it - cp /etc/master.passwd /etc/master.passwd-save - cp /etc/group /etc/group-save - - # Files we do not care about changing between pre-build and post-cleanup - cat > /tmp/mtree.preexclude <<EOF -./root/* -./var/* -./tmp/* -./etc/make.conf.bak -./etc/make.conf -./work/* -./compat/linux/proc -./usr/share/man/cat*/* -./usr/local/etc/apache -./usr/local/news -./usr/local/share/xml -./usr/local/etc/gconf -./var/db/fontconfig -EOF - # Record a "pristine" mtree. - mtree -X /tmp/mtree.preexclude -xcn -k uid,gid,mode -p / > /tmp/mtree.pristine - - add_pkg $FD - - cd $dir || exit 1 - pkgname=$(make package-name) - echo "================================================================" - echo "====================<phase 1: make checksum>====================" - - # pick up value from environment set up in portbuild script - if /pnohang ${BUILD_TIMEOUT} /tmp/make.log1 ${pkgname} make checksum; then - cat /tmp/make.log1 - echo "0" > /tmp/status - else - cleanup 1 - fi - -else - - cd $dir || exit 1 - pkgname=$(make package-name) - - echo "================================================================" - echo "====================<phase 2: make extract>====================" - - add_pkg ${ED} - cd $dir - /pnohang ${BUILD_TIMEOUT} /tmp/make.log2 ${pkgname} make extract || cleanup 2 - cat /tmp/make.log2 - del_pkg ${ED} - - # Fetch depends still need to be here for 'make extract' since that target - # always reruns 'make fetch' due to the lack of fetch cookie (and no place - # to put it since WRKDIR isn't created by 'make fetch') - del_pkg $FD - - echo "================================================================" - echo "====================<phase 3: make patch>====================" - add_pkg ${PD} - cd $dir - /pnohang ${BUILD_TIMEOUT} /tmp/make.log3 ${pkgname} make patch || cleanup 3 - cat /tmp/make.log3 - del_pkg ${PD} - - echo "================================================================" - echo "====================<phase 4: make build>====================" - - add_pkg ${BD} - - # Files we do not care about changing between pre-build and post-cleanup - cat > /tmp/mtree.buildexclude <<EOF -./var/log/* -./tmp/* -./work/* -./compat/linux/proc -./root/* -./var/mail/* -./var/tmp/* -./usr/share/man/cat*/* -./usr/local/etc/apache -./usr/local/news -./usr/local/share/xml -./usr/local/etc/gconf -./var/db/fontconfig -EOF - # Record a "pristine" mtree. - mtree -X /tmp/mtree.buildexclude -xcn -k uid,gid,mode -p / > /tmp/mtree.prebuild - - xvfb=0 - if which -s Xvfb; then - xvfb=1 - pid=$(echo $$ % 32768 | bc) - # XXX MCL HUH? - X11BASE=$(which Xvfb | sed -e 's./bin/Xvfb..') - Xvfb :${pid} -fp ${X11BASE}/lib/X11/fonts/misc & - # pick up value from environment set up in portbuild script - DISPLAY=${JAIL_ADDR}:${pid} - export DISPLAY - fi - - cd $dir - /pnohang ${BUILD_TIMEOUT} /tmp/make.log4 ${pkgname} make build || cleanup 4 - cat /tmp/make.log4 - - echo "================================================================" - echo "====================<phase 5: make test>====================" - cd $dir - /pnohang ${BUILD_TIMEOUT} /tmp/make.log5 ${pkgname} make -k regression-test - cat /tmp/make.log5 - mtree -X /tmp/mtree.buildexclude -x -f /tmp/mtree.prebuild -p / | egrep -v "^(${L}/var|${L}/lib/X11/xserver/SecurityPolicy|${L}/share/nls/POSIX|${L}/share/nls/en_US.US-ASCII|etc/services|compat |usr/X11R6 |etc/manpath.config|etc/.*.bak|${L}/info/dir|${L}/lib/X11/fonts/.*/fonts\.|usr/local/man/..( |/man. )|${L}/lib/X11/fonts/TrueType|${L}/etc/gconf/gconf.xml.defaults/%gconf-tree.*.xml|var/db/fontconfig/* )" > /tmp/list.preinstall - - if [ -s /tmp/list.preinstall ]; then - echo "================================================================" - echo "Fatal error: filesystem was touched prior to 'make install' phase" - cat /tmp/list.preinstall - echo "================================================================" - cleanup 0 - fi - - echo "================================================================" - echo "====================<phase 6: make install>====================" - - add_pkg ${RD} - - cat > /tmp/mtree.exclude <<EOF -./root/* -./var/* -./tmp/* -./etc/make.conf.bak -./etc/make.conf -./work/* -./compat/linux/proc -EOF - mtree -X /tmp/mtree.exclude -xcn -k uid,gid,mode -p / > /tmp/mtree - - cd $dir - if /pnohang ${BUILD_TIMEOUT} /tmp/make.log6 ${pkgname} make install; then - cat /tmp/make.log6 - echo "0" > /tmp/status - else - cleanup 6 - fi - - echo "================================================================" - echo "====================<phase 7: make package>====================" - cd $dir - if /pnohang ${BUILD_TIMEOUT} /tmp/make.log7 ${pkgname} make package; then - cat /tmp/make.log7 - echo "0" > /tmp/status - prefix=$(make -V PREFIX) - del_pkg ${pkgname} - else - cleanup 7 - fi - - mtree -X /tmp/mtree.exclude -x -f /tmp/mtree -p / | egrep -v "^(${L}/var|${L}/lib/X11/xserver/SecurityPolicy|${L}/share/nls/POSIX|${L}/share/nls/en_US.US-ASCII|etc/services|compat |usr/X11R6 |etc/manpath.config|etc/.*.bak|${L}/info/dir|${L}/lib/X11/fonts/.*/fonts\.|usr/local/man/..( |/man. )|${L}/lib/X11/fonts/TrueType|${L}/etc/gconf/gconf.xml.defaults/%gconf-tree.*.xml|var/db/fontconfig/* )" > /tmp/list3 - - # Compare the state of the filesystem now to before the 'make install' phase - dirty=0 - if [ -s /tmp/list3 ]; then - cd / - grep ' extra$' /tmp/list3 | awk '{print $1}' | xargs -J % find % -ls > /tmp/list4 - grep ' missing$' /tmp/list3 > /tmp/list5 - grep -vE ' (extra|missing)$' /tmp/list3 > /tmp/list6 - # pick up value from environment set up in portbuild script - if [ "x${NOPLISTCHECK}" = "x" ]; then - if grep -vq "$L/etc/" /tmp/list4; then - echo "1" > /tmp/status - dirty=1 - fi - if [ -s /tmp/list5 -o -s /tmp/list6 ]; then - echo "1" > /tmp/status - dirty=1 - fi - fi - echo "================================================================" - fi - - echo - echo "=== Checking filesystem state" - - if [ -s /tmp/list4 ]; then - echo "list of extra files and directories in / (not present before this port was installed but present after it was deinstalled)" - cat /tmp/list4 - fi - if [ -s /tmp/list5 ]; then - echo "list of files present before this port was installed but missing after it was deinstalled)" - cat /tmp/list5 - fi - if [ -s /tmp/list6 ]; then - echo "list of filesystem changes from before and after port installation and deinstallation" - cat /tmp/list6 - fi - if [ "${dirty}" = 1 ]; then - cleanup 0 - fi - - # BUILD_DEPENDS and RUN_DEPENDS are both present at install-time (e.g. gmake) - # Concatenate and remove duplicates - BRD=$(echo $BD $RD | tr ' ' '\n' | sort -u | tr '\n' ' ') - del_pkg ${BRD} - cd /var/db/pkg - if [ $(echo $(echo * | wc -c)) != 2 ]; then - echo "leftover packages:" * - del_pkg * - echo "1" > /tmp/status - cleanup 0 - fi - - # Compare the state of the filesystem now to clean system (should again be clean) - mtree -X /tmp/mtree.preexclude -x -f /tmp/mtree.pristine -p / | egrep -v "^(${L}/var|${L}/lib/X11/xserver/SecurityPolicy|${L}/share/nls/POSIX|${L}/share/nls/en_US.US-ASCII|etc/services|compat |usr/X11R6 |etc/manpath.config|etc/.*.bak|${L}/info/dir|${L}/lib/X11/fonts/.*/fonts\.|usr/local/man/..( |/man. )|${L}/lib/X11/fonts/TrueType )" > /tmp/list3 - - echo - echo "=== Checking filesystem state after all packages deleted" - - if [ -s /tmp/list3 ]; then - cd / - grep ' extra$' /tmp/list3 | awk '{print $1}' | xargs -J % find % -ls > /tmp/list4 - grep ' missing$' /tmp/list3 > /tmp/list5 - grep -vE ' (extra|missing)$' /tmp/list3 > /tmp/list6 - if [ "x${NOPLISTCHECK}" = "x" ]; then - if grep -vq "$L/etc/" /tmp/list4; then - #echo "1" > /tmp/status - fi - if [ -s /tmp/list5 ]; then - #echo "1" > /tmp/status - fi - fi - echo "================================================================" - - if [ -s /tmp/list4 ]; then - echo "list of extra files and directories in / (not present on clean system but present after everything was deinstalled)" - cat /tmp/list4 - touch /.dirty - fi - if [ -s /tmp/list5 ]; then - echo "list of files present on clean system but missing after everything was deinstalled)" - cat /tmp/list5 - touch /.dirty - fi - if [ -s /tmp/list6 ]; then - echo "list of filesystem changes from before and after all port installation/deinstallation" - cat /tmp/list6 - touch /.dirty - fi - fi - - cmp /etc/group /etc/group-save || (echo "=== /etc/group was modified:"; diff -du /etc/group-save /etc/group) - cmp /etc/master.passwd /etc/master.passwd-save || (echo "=== /etc/master.passwd was modified:"; diff -du /etc/master.passwd-save /etc/master.passwd) - - if [ ${xvfb} = 1 ]; then - kill $(jobid %1) - fi - - # XXX Don't keep distfiles if checksum mismatches - cd ${dir} - keep_distfiles=$(make -V ALWAYS_KEEP_DISTFILES) - distdir=$(make -V DISTDIR) - if [ -z "${keep_distfiles}" -a ! -z "${distdir}" ]; then - rm -rf ${distdir}/* - fi - - if [ -e ${dir}/.keep ]; then - cd ${dir} - objdir=$(make -V WRKDIR) - tar cfjC /tmp/work.tbz ${objdir}/.. work - fi - - echo "================================================================" - echo -n "build of ${dir} ended at " - date -fi - -exit 0 |