Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 8 Oct 2013 16:04:59 +0000 (UTC)
From:      Chris Rees <crees@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r329805 - in head/ports-mgmt/tinderbox: . files
Message-ID:  <201310081604.r98G4xqA007777@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: crees
Date: Tue Oct  8 16:04:59 2013
New Revision: 329805
URL: http://svnweb.freebsd.org/changeset/ports/329805

Log:
  Enable the dependency calculation in chroot patch; massaged in from upstream
  
  Approved by:	itetcu (maintainer)

Added:
  head/ports-mgmt/tinderbox/files/patch-chroot   (contents, props changed)
Modified:
  head/ports-mgmt/tinderbox/Makefile

Modified: head/ports-mgmt/tinderbox/Makefile
==============================================================================
--- head/ports-mgmt/tinderbox/Makefile	Tue Oct  8 16:03:48 2013	(r329804)
+++ head/ports-mgmt/tinderbox/Makefile	Tue Oct  8 16:04:59 2013	(r329805)
@@ -3,6 +3,7 @@
 
 PORTNAME=	tinderbox
 PORTVERSION=	4.0.1
+PORTREVISION=	1
 CATEGORIES=	ports-mgmt
 MASTER_SITES=	http://tinderbox.marcuscom.com/ \
 		http://T32.TecNik93.com/FreeBSD/ports/${PORTNAME}/sources/
@@ -11,6 +12,8 @@ DIST_SUBDIR=	${PORTNAME}
 MAINTAINER=	itetcu@FreeBSD.org
 COMMENT=	Port build tinderbox system
 
+RUN_DEPENDS=	dialog4ports-static:${PORTSDIR}/ports-mgmt/dialog4ports-static
+
 CONFLICTS=	tinderbox-devel-[0-9]*
 
 OPTIONS_MULTI=		DB

Added: head/ports-mgmt/tinderbox/files/patch-chroot
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/ports-mgmt/tinderbox/files/patch-chroot	Tue Oct  8 16:04:59 2013	(r329805)
@@ -0,0 +1,365 @@
+Calculate dependencies in a chroot
+
+Index: lib/makemake
+===================================================================
+RCS file: /space/cvs/marcuscom-cvs/portstools/tinderbox/lib/makemake,v
+retrieving revision 1.48
+diff -u -r1.48 makemake
+--- lib/makemake	6 Nov 2012 21:55:47 -0000	1.48
++++ lib/makemake	5 Oct 2013 16:30:30 -0000
+@@ -135,11 +135,12 @@
+ my (
+         %pkgdir,   %pkgdeps,  %pkgedeps, %pkgpdeps, %pkgfdeps,
+         %pkgbdeps, %pkgrdeps, @duds,     $portbase, $makecache,
+-        %pkgtdeps, %pkgpkgdeps,
++        %pkgtdeps, %pkgpkgdeps,          $chroot,
+ );
+ 
+ $portbase  = $ENV{'PORTSDIR'};
+-$makecache = new Tinderbox::MakeCache($portbase, $ENV{'PKGSUFFIX'});
++$chroot    = $ENV{'CHROOT'};
++$makecache = new Tinderbox::MakeCache($portbase, $chroot, $ENV{'PKGSUFFIX'});
+ 
+ while (scalar(@PORTS)) {
+         my $port    = shift @PORTS;
+@@ -148,7 +149,7 @@
+ 
+         next if (defined($pkgdir{$portdir}));
+ 
+-        $tportdir = "$portbase/$portdir";
++        $tportdir = "$chroot$portbase/$portdir";
+         if (!-d $tportdir) {
+                 print STDERR "ERROR: Directory $tportdir does not exist.\n";
+                 if (defined($pkgdeps{$portdir})
+Index: lib/tc_command.pl
+===================================================================
+RCS file: /space/cvs/marcuscom-cvs/portstools/tinderbox/lib/tc_command.pl,v
+retrieving revision 1.184
+diff -u -r1.184 tc_command.pl
+--- lib/tc_command.pl	28 Apr 2013 20:05:40 -0000	1.184
++++ lib/tc_command.pl	5 Oct 2013 16:30:31 -0000
+@@ -1536,7 +1536,8 @@
+ sub addPortToOneBuild {
+         my $build = $ds->getBuildByName($opts->{'b'});
+         my $makecache =
+-            new Tinderbox::MakeCache($ENV{'PORTSDIR'}, $ENV{'PKGSUFFIX'});
++            new Tinderbox::MakeCache($ENV{'PORTSDIR'}, $ENV{'CHROOT'},
++                                     $ENV{'PKGSUFFIX'});
+         my @bports = ();
+ 
+         if (!$opts->{'d'}) {
+@@ -3414,12 +3415,14 @@
+         my $cache = shift;
+         my $deps  = shift;
+ 
+-        my $portdir = $ENV{'PORTSDIR'} . "/" . $port;
++        my $portsdir = $ENV{'CHROOT'} . $ENV{'PORTSDIR'};
++
++        my $portdir = $portsdir . "/" . $port;
+         return undef if (!-d $portdir);
+ 
+         # Canonicalize the port directory.
+         $port = abs_path($portdir);
+-        $port =~ s|$ENV{'PORTSDIR'}/||;
++        $port =~ s|$portsdir/||;
+ 
+         if (defined($deps)) {
+                 my @list;
+Index: lib/tc_command.sh
+===================================================================
+RCS file: /space/cvs/marcuscom-cvs/portstools/tinderbox/lib/tc_command.sh,v
+retrieving revision 1.175
+diff -u -r1.175 tc_command.sh
+--- lib/tc_command.sh	7 Aug 2013 18:25:52 -0000	1.175
++++ lib/tc_command.sh	5 Oct 2013 16:30:32 -0000
+@@ -1385,7 +1385,7 @@
+     cleanDirs ${buildName} ${BUILD_DIR}
+ 
+     if [ "${MD_FSTYPE}" = "ufs" -o "${MD_FSTYPE}" = "zfs" ]; then
+-	if [ -n "${MD_SIZE}" -a ${MD_SIZE%[a-zA-Z]} -gt 0 ]; then
++	if [ -n "${MD_SIZE}" ] && [ ${MD_SIZE%[a-zA-Z]} -gt 0 ]; then
+ 	    # setup md (ramdisk) backing for the build
+ 	    mdconfig -a -t swap -s ${MD_SIZE} > /tmp/tinderbuild_md.${build}
+ 	    read MD_UNIT </tmp/tinderbuild_md.${build}
+@@ -1400,7 +1400,7 @@
+ 	    fi
+ 	fi
+     elif [ "${MD_FSTYPE}" = "tmpfs" ]; then
+-	if [ -n "${MD_SIZE}" -a ${MD_SIZE%[a-zA-Z]} -gt 0 ]; then
++	if [ -n "${MD_SIZE}" ] && [ ${MD_SIZE%[a-zA-Z]} -gt 0 ]; then
+ 	    mount -t tmpfs -o size=${MD_SIZE} tmpfs ${BUILD_DIR}
+ 	else
+ 	    mount -t tmpfs tmpfs ${BUILD_DIR}
+@@ -1416,7 +1416,7 @@
+     execute_hook "postBuildExtract" "BUILD=${buildName} DESTDIR=${BUILD_DIR} JAIL=${jailName} PB=${pb} RC=0"
+ 
+     # Finalize environment
+-    cp -f /etc/resolv.conf ${BUILD_DIR}/etc
++    cp /etc/resolv.conf ${BUILD_DIR}/etc || touch ${BUILD_DIR}/etc/resolv.conf
+ 
+     return 0
+ }
+@@ -1957,7 +1957,16 @@
+ 	${tc} updatePortsTree -p ${portstree}
+     fi
+ 
+-    # Create makefile if required
++    # Set up the chrooted environment
++    osmajor=$(echo ${jail} | sed -E -e 's|(^[[:digit:]]+).*$|\1|')
++    if [ ${osmajor} -lt 6 ]; then
++	echo "tinderbuild: unhandled OS version: ${osmajor}"
++	tinderbuild_cleanup 1
++    fi
++
++    tinderbuild_setup
++
++    # Create Makefile if required
+     if [ ${skipmake} -eq 0 ]; then
+ 	echo "tinderbuild: creating makefile..."
+ 
+@@ -1966,19 +1975,16 @@
+ 	(
+ 	    export PORTBUILD_ARGS="$(echo ${pbargs})"
+ 	    buildenvNoHost ${build}
+-	    if ! requestMount -t portstree -p ${portstree}; then
+-		echo "tinderbuild: cannot mount portstree: ${portstree}"
+-		exit 1
+-	    fi
+-	    env PORTSDIR=$(tinderLoc portstree ${portstree})/ports \
++	    buildenv ${jail} ${portstree} ${build}
++	    HOST_WORKDIR=$(${tc} configGet | \
++		awk -F= '/^HOST_WORKDIR/ {print $2}')
++	    env PORTSDIR=/a/ports \
++		CHROOT=$(tinderLoc buildroot ${build}) \
+ 		$(tinderLoc scripts lib/makemake) ${noduds} ${build} ${ports}
+ 	)
+ 	if [ $? -ne 0 ]; then
+ 	    echo "tinderbuild: failed to generate Makefile for ${build}"
+-	    cleanupMounts -t portstree -p ${portstree}
+ 	    tinderbuild_cleanup 1
+-	else
+-	    cleanupMounts -t portstree -p ${portstree}
+ 	fi
+     fi
+ 
+@@ -1987,15 +1993,6 @@
+ 	tinderbuild_cleanup 0
+     fi
+ 
+-    # Set up the chrooted environment
+-    osmajor=$(echo ${jail} | sed -E -e 's|(^[[:digit:]]+).*$|\1|')
+-    if [ ${osmajor} -lt 6 ]; then
+-	echo "tinderbuild: unhandled OS version: ${osmajor}"
+-	tinderbuild_cleanup 1
+-    fi
+-
+-    tinderbuild_setup
+-
+     # Seatbelts off.  Away we go.
+     ${tc} updateBuildStatus -b ${build} -s PORTBUILD
+     tinderbuild_phase 0 ${jobs} ${pkgDir}
+@@ -2045,7 +2042,11 @@
+ addPortToBuild_cleanup () {
+     jail=$1
+     portsTree=$2
++    build=$3
+ 
++    cleanupMounts -t buildports -b ${build}
++    cleanupMounts -t buildsrc -b ${build}
++    cleanupMounts -t buildoptions -b ${build}
+     cleanupMounts -t jail -j ${jail}
+     cleanupMounts -t portstree -p ${portsTree}
+ }
+@@ -2070,7 +2071,29 @@
+ 	exit 1
+     fi
+ 
+-    trap "addPortToBuild_cleanup ${jail} ${portsTree}" 1 2 3 9 10 11 15
++    # Extracting the Jail tarball takes ages on some systems, so we can
++    # pretty safely (for these purposes) reuse the extraction as long as
++    # resolv.conf is newer than the tarball (resolv.conf is created
++    # by makeBuild)
++    HOST_WORKDIR=$(${tc} configGet | awk -F= '/^HOST_WORKDIR/ {print $2}')
++    if [ $(tinderLoc jailtarball ${jail}) -ot \
++	 $(tinderLoc buildroot ${build})/etc/resolv.conf ]; then
++	echo "addPortToBuild: recent jail tarball exists; no need to reextract"
++    else
++	echo "addPortToBuild: extracting jail tarball to calculate dependencies inside"
++	makeBuild -b ${build}
++    fi
++
++    if ! requestMount -t buildports -b ${build} -r -n; then
++	echo "addPortToBuild: cannot mount ports source inside ${build}"
++	exit 1
++    fi
++    if ! requestMount -t buildsrc -b ${build} -r -n; then
++	echo "addPortToBuild: cannot mount base source inside ${build}"
++	exit 1
++    fi
++
++    trap "addPortToBuild_cleanup ${jail} ${portsTree} ${build}" 1 2 3 9 10 11 15
+ 
+     # Save TERM since we need that for OPTIONS
+     save_TERM=${TERM}
+@@ -2082,22 +2105,30 @@
+     buildenv ${jail} ${portsTree} ${build}
+     buildenvNoHost ${build}
+ 
+-    export PORTSDIR=$(tinderLoc portstree ${portsTree})/ports
+-    if [ -z "${portDir}" ]; then
+-	${tc} addPortToOneBuild -b ${build} ${norecurse}
+-    else
+-        if [ ! -d ${PORTSDIR}/${portDir} ]; then
+-            echo "addPort: Unknown port ${portDir}"
+-            exit 1
+-        fi
+-        ${tc} addPortToOneBuild -b ${build} -d ${portDir} ${norecurse}
++    if [ ${options} -eq 1 -a ${OPTIONS_ENABLED} -eq 1 ]; then
++	mkdir -p $(tinderLoc options ${build}) \
++		 $(tinderLoc buildoptions ${build})
++	if ! requestMount -t buildoptions -b ${build} \
++		-s $(tinderLoc options ${build}) -n; then
++	    echo "addPortToBuild: cannot mount options inside ${build}"
++	    exit 1
++	fi
+     fi
++
++    export PORTSDIR=/a/ports
++    export CHROOT=$(tinderLoc buildroot ${build})
++
++    if [ -n "${portDir}" ] && [ ! -d ${CHROOT}/${PORTSDIR}/${portDir} ]; then
++        echo "addPort: Unknown port ${portDir}"
++        exit 1
++    fi
++
+     if [ ${options} -eq 1 -a ${OPTIONS_ENABLED} -eq 1 ]; then
+ 	pdirs=""
+ 	if [ -z "${portDir}" ]; then
+ 	    pdirs=$(${tc} getPortsForBuild -b ${build} 2>/dev/null)
+ 	else
+-	    pdirs="${PORTSDIR}/${portDir}"
++	    pdirs="${portDir}"
+ 	fi
+ 	rmconfig=true
+ 	if [ ${cleanOptions} -eq 1 ]; then
+@@ -2108,28 +2139,38 @@
+ 	    fi
+ 	fi
+ 	for pdir in ${pdirs}; do
+-	    if [ -d ${pdir} ]; then
++	    if [ -d ${CHROOT}${PORTSDIR}/${pdir} ]; then
+ 	        export TERM=${save_TERM}
++		if ! cp /usr/local/bin/dialog4ports-static ${CHROOT}/; then
++		    echo "In order to customise OPTIONS, you must install"
++		    echo "ports-mgmt/dialog4ports-static."
++		    break
++		fi
+ 	        read -p "Generating options for ${build}; hit Enter to continue..." key
+ 	        echo ""
+ 	        if [ -z "${norecurse}" ]; then
+-		    ( cd ${pdir} && ${rmconfig} \
+-		      && make -k config-recursive )
++		    chroot ${CHROOT} /bin/sh -c \
++			"cd ${PORTSDIR}/${pdir} && ${rmconfig} && \
++			make -k DIALOG4PORTS=/dialog4ports-static \
++			    config-recursive"
+ 	        else
+-		    ( cd ${pdir} && ${rmconfig} \
+-		      && make config )
++		    chroot ${CHROOT} /bin/sh -c \
++			"cd ${PORTSDIR}/${pdir} && ${rmconfig} && \
++			make DIALOG4PORTS=/dialog4ports-static config"
+ 	        fi
+ 	    fi
+ 	done
+     fi
+ 
++    ${tc} addPortToOneBuild -b ${build} ${portDir:+-d} ${portDir} ${norecurse}
++
+     if [ -n "${save_SRCBASE}" ]; then
+ 	export SRCBASE=${save_SRCBASE}
+     else
+ 	unset SRCBASE
+     fi
+ 
+-    addPortToBuild_cleanup ${jail} ${portsTree}
++    addPortToBuild_cleanup ${jail} ${portsTree} ${build}
+ }
+ 
+ addPort () {
+Index: lib/tinderlib.sh
+===================================================================
+RCS file: /space/cvs/marcuscom-cvs/portstools/tinderbox/lib/tinderlib.sh,v
+retrieving revision 1.83
+diff -u -r1.83 tinderlib.sh
+--- lib/tinderlib.sh	10 Jun 2013 16:49:51 -0000	1.83
++++ lib/tinderlib.sh	5 Oct 2013 16:30:32 -0000
+@@ -498,9 +498,7 @@
+     save_IFS=${IFS}
+     IFS='
+ '
+-    # Allow SRCBASE to be overridden
+-    eval "export SRCBASE=${SRCBASE:-`realpath $(tinderLoc jail ${jail})/src`}" \
+-	>/dev/null 2>&1
++    # Do not set SRCBASE here-- we use chroots nowadays so /usr/src is there
+ 
+     # Set ARCH (needed for cross-building)
+     export ARCH=$(${tc} getJailArch -j ${jail})
+@@ -524,13 +522,6 @@
+     eval "export __MAKE_CONF=${jailBase}/make.conf" >/dev/null 2>&1
+     eval "export LOCALBASE=/nonexistentlocal" >/dev/null 2>&1
+     eval "export PKG_DBDIR=/nonexistentdb" >/dev/null 2>&1
+-    if [ x"${OPTIONS_ENABLED}" != x"1" ]; then
+-        eval "export PORT_DBDIR=/nonexistentportdb" >/dev/null 2>&1
+-    else
+-	optionsDir=$(tinderLoc options ${build})
+-
+-	eval "export PORT_DBDIR=${optionsDir}" >/dev/null 2>&1
+-    fi
+     eval "export LINUXBASE=/nonexistentlinux" >/dev/null 2>&1
+     eval "unset DISPLAY" >/dev/null 2>&1
+ }
+Index: lib/Tinderbox/MakeCache.pm
+===================================================================
+RCS file: /space/cvs/marcuscom-cvs/portstools/tinderbox/lib/Tinderbox/MakeCache.pm,v
+retrieving revision 1.12
+diff -u -r1.12 MakeCache.pm
+--- lib/Tinderbox/MakeCache.pm	4 Mar 2012 12:53:08 -0000	1.12
++++ lib/Tinderbox/MakeCache.pm	5 Oct 2013 16:30:32 -0000
+@@ -49,6 +49,7 @@
+                 CACHE   => undef,
+                 SEEN    => undef,
+                 BASEDIR => shift,
++                CHROOT  => shift,
+         }, $name;
+ 
+         $self;
+@@ -67,7 +68,10 @@
+ 
+         $tmp = '-V ' . join(' -V ', @makeTargets);
+         my $dir = $self->{BASEDIR} . '/' . $port;
+-        @ret = split("\n", `cd $dir && make $tmp`);
++        my $cmd = "cd $dir && make $tmp";
++        $cmd = "chroot $self->{CHROOT} /bin/sh -c '$cmd'";
++
++        @ret = split("\n", `$cmd`);
+ 
+         foreach $tmp (@makeTargets) {
+                 $self->{CACHE}->{$port}{$tmp} = shift @ret;
+? .fslckout
+? .fslckout-mjFA3F63973
+Index: lib/tc_command.sh
+===================================================================
+RCS file: /space/cvs/marcuscom-cvs/portstools/tinderbox/lib/tc_command.sh,v
+retrieving revision 1.176
+diff -u -r1.176 tc_command.sh
+--- lib/tc_command.sh	7 Oct 2013 16:36:54 -0000	1.176
++++ lib/tc_command.sh	7 Oct 2013 18:34:20 -0000
+@@ -2049,6 +2049,7 @@
+     cleanupMounts -t buildoptions -b ${build}
+     cleanupMounts -t jail -j ${jail}
+     cleanupMounts -t portstree -p ${portsTree}
++    cleanenv
+ }
+ 
+ addPortToBuild () {



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201310081604.r98G4xqA007777>