From owner-svn-src-user@FreeBSD.ORG Tue Nov 10 04:02:04 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 71E4C106566C; Tue, 10 Nov 2009 04:02:04 +0000 (UTC) (envelope-from dougb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 61EF88FC28; Tue, 10 Nov 2009 04:02:04 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id nAA4233U046224; Tue, 10 Nov 2009 04:02:03 GMT (envelope-from dougb@svn.freebsd.org) Received: (from dougb@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id nAA423R8046222; Tue, 10 Nov 2009 04:02:03 GMT (envelope-from dougb@svn.freebsd.org) Message-Id: <200911100402.nAA423R8046222@svn.freebsd.org> From: Doug Barton Date: Tue, 10 Nov 2009 04:02:03 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r199129 - user/dougb/portmaster X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 10 Nov 2009 04:02:04 -0000 Author: dougb Date: Tue Nov 10 04:02:03 2009 New Revision: 199129 URL: http://svn.freebsd.org/changeset/base/199129 Log: 1. New feature: --packages-build. This option will switch to --packages-only mode to install dependencies that are only used for the build of the "parent" port that is specified on the command line, but will build the ports on the local system for anything that is a runtime dependency, and the port itself. [1] At this point it can only be used with one port on the command line, multiport and -a support are "on the list," as is compatibility with the -t option. This new option required some more complex error handling for the --package* options which has been broken out into its own function. 2. Modify fail() to be less finicky about the input comments 3. Twiddle some whitespace [1] Special funding committment for this feature and package support generally by: Modirum MDpay Modified: user/dougb/portmaster/portmaster Modified: user/dougb/portmaster/portmaster ============================================================================== --- user/dougb/portmaster/portmaster Tue Nov 10 03:56:51 2009 (r199128) +++ user/dougb/portmaster/portmaster Tue Nov 10 04:02:03 2009 (r199129) @@ -55,7 +55,7 @@ version () { } fail () { - echo '' ; echo "===>>> $1" ; echo "===>>> Aborting update" + echo '' ; echo "===>>> $*" ; echo "===>>> Aborting update" [ "$$" -eq "$PM_PARENT_PID" ] && trap_exit fail safe_exit 1 } @@ -224,8 +224,8 @@ usage () { echo '' echo 'Usage:' echo "Common flags: [--force-config] [-CGHKgntvw B|b f|i D|d]" - echo " [--packages|--packages-only] [-P|-PP] [--packages-if-newer]" - echo " [-m ]" + echo " [[--packages|--packages-only] [-P|-PP] | [--packages-build]" + echo " [--packages-if-newer] [-m ]" echo " [-x ]" echo "${0##*/} [Common flags] " echo "${0##*/} [Common flags] " @@ -289,9 +289,10 @@ usage () { echo '-R used with -[rf] to skip ports updated on a previous run' echo '-a check all ports, update as necessary' echo '' - echo 'NOTE: The package options imply -G' + echo 'NOTE: The -P[P] options imply -G' echo '-P|--packages use packages, but build port if not available' echo '-PP|--packages-only fail if no package is available' + echo '--packages-build use packages for all build dependencies' echo '--packages-if-newer use package if newer than installed even' echo ' if the package is not the latest according to the ports tree' echo '' @@ -372,25 +373,39 @@ if [ "$$" -eq "$PM_PARENT_PID" ]; then export pd pdb distdir fi -pmuex () { -fail "The -P/--packages and -PP/--packages-only options are mutually exclusive" +# XXX + +packages_init () { + local e1 e2 + +e1="The -P/--packages and -PP/--packages-only options are mutually exclusive" +e2="The --packages-build option and the -P[P] options are mutually exclusive" + + case "$1" in + first) [ "$PM_PACKAGES" = only ] && fail $e1 + [ -n "$PM_PACKAGES_BUILD" ] && fail $e2 ;; + only) [ "$PM_PACKAGES" = first ] && fail $e1 + [ -n "$PM_PACKAGES_BUILD" ] && fail $e2 ;; + build) case "$PM_PACKAGES" in first|only) fail $e2 ;; esac ;; + newer) [ -z "$PM_PACKAGES" -a -z "$PM_PACKAGES_BUILD" ] && { + PM_PACKAGES=newer ; export PM_PACKAGES; } ;; + esac } -# XXX for var in "$@" ; do case "$var" in - -P|--packages) [ "$PM_PACKAGES" = only ] && pmuex - NO_RECURSIVE_CONFIG=Gopt; ARGS="-G $ARGS" + -P|--packages) packages_init first PM_PACKAGES=first ; export PM_PACKAGES ;; - -PP|--packages-only) [ "$PM_PACKAGES" = first ] && pmuex - NO_RECURSIVE_CONFIG=Gopt; ARGS="-G $ARGS" - PM_PACKAGES=only ; export PM_PACKAGES ;; - --packages-if-newer) [ -z "$PM_PACKAGES" ] && { - PM_PACKAGES=newer ; export PM_PACKAGES; - NO_RECURSIVE_CONFIG=Gopt; ARGS="-G $ARGS"; } - PM_PACKAGES_NEWER=pm_packages_newer + -PP|--packages-only) packages_init only + PM_PACKAGES=only ; export PM_PACKAGES ;; + --packages-build) packages_init build + unset PM_PACKAGES + PM_PACKAGES_BUILD=pmp_build + export PM_PACKAGES_BUILD ;; + --packages-if-newer) packages_init newer + PM_PACKAGES_NEWER=pmp_newer export PM_PACKAGES_NEWER ;; - -[A-Za-z0-9]*) newopts="$newopts $var" ;; + -[A-Za-z0-9]*) newopts="$newopts $var" ;; --help) usage 0 ;; --version) version ; exit 0 ;; --clean-distfiles) CLEAN_DISTFILES=clean_distfiles ;; @@ -402,12 +417,15 @@ for var in "$@" ; do --force-config) export FORCE_CONFIG=force_config ;; --*) echo "Illegal option $var" ; echo '' echo "===>>> Try ${0##*/} --help"; exit 1 ;; - *) newopts="$newopts $var" ;; + *) newopts="$newopts $var" ;; esac done +[ -n "$PM_PACKAGES" ] && { NO_RECURSIVE_CONFIG=Gopt; ARGS="-G $ARGS"; } + set -- $newopts unset var newopts +unset -f packages_init #=============== Begin functions relevant to --features and main =============== @@ -866,7 +884,9 @@ while getopts 'BCDFGHKLRabde:fghilm:nop: p) portdir="${OPTARG#$pd/}" ; portdir=${portdir%/} ;; r) UPDATE_REQ_BYS=ropt ; portdir=`origin_from_pdb $OPTARG` ;; s) CLEAN_STALE=sopt ;; - t) RECURSE_THOROUGH=topt; ARGS="-t $ARGS" ;; + t) [ "$PM_PACKAGES" = build ] && + fail 'The --packages-build and -t options are mutually exclusive' + RECURSE_THOROUGH=topt; ARGS="-t $ARGS" ;; u) echo "===>>> The -u option has been deprecated" ; echo '' ;; v) PM_VERBOSE=vopt; ARGS="-v $ARGS" ;; w) SAVE_SHARED=wopt; ARGS="-w $ARGS" ;; @@ -1612,6 +1632,26 @@ dependency_check () { fi fi +# XXX + if [ "$PM_PACKAGES_BUILD" = pmp_doing_build_deps ]; then + local rundeps dep build_only build_and_run build_only_dep + + rundeps=`pm_make run-depends-list | sort -u` + for dep in $d_port_list; do + case "$rundeps" in + *${dep}*) build_and_run="$build_and_run $dep" ;; + *) build_only="$build_only $dep" ;; + esac + done + +#echo '' ; echo "Debug> d_port_list: $d_port_list" +#echo "Debug> build_only: $build_only" +#echo "Debug> build_and_run: $build_and_run" +#echo '' + + d_port_list="$build_only $build_and_run" + fi + local d_port origin iport conflicts glob confl_p udf # Do not export, for THIS parent process only @@ -1691,6 +1731,14 @@ dependency_check () { esac fi +# XXX + case "$build_only" in + *${d_port}*) +#echo '' ; echo "Debug> $origin is build-only" ; echo '' + build_only_dep=build_only_dep + PM_PACKAGES=only ; export PM_PACKAGES ;; + esac + if [ -n "$iport" ]; then # No check_interactive here because we want to tell # the user whether or not there is a new version first @@ -1699,6 +1747,8 @@ dependency_check () { check_interactive $origin || continue update_port $origin fi + + [ -n "$build_only_dep" ] && unset PM_PACKAGES done [ -n "$CONFIG_ONLY" ] && unset doing_dep_check @@ -2129,7 +2179,7 @@ dofetch () { # Handle the problem of manual fetching # XXX Not for -P/-PP - [ -z "$PM_PACKAGES" ] && master_sites=`pm_make_b -V MASTER_SITES` + [ -z "$PM_PACKAGES" ] && master_sites=`pm_make_b -V MASTER_SITES` if [ -n "$master_sites" ]; then # PATCHFILES may get added post-config, but we want to @@ -2238,6 +2288,11 @@ cd $pd/$portdir if [ -z "$NO_DEP_UPDATES" ]; then if [ -z "$RECURSE_THOROUGH" ]; then if [ ! "$PM_PACKAGES" = only ]; then +# XXX + if [ "$$" -eq "$PM_PARENT_PID" ]; then + [ -n "$PM_PACKAGES_BUILD" ] && + PM_PACKAGES_BUILD=pmp_doing_build_deps + fi echo "===>>> Starting check for build dependencies" dependency_check build-depends-list fi @@ -2245,6 +2300,10 @@ if [ -z "$NO_DEP_UPDATES" ]; then echo "===>>> Starting check for all dependencies" dependency_check all-depends-list fi + if [ "$$" -eq "$PM_PARENT_PID" ]; then + [ -n "$PM_PACKAGES_BUILD" ] && + unset PM_PACKAGES_BUILD PM_PACKAGES + fi cd $pd/$portdir elif [ -z "$NO_RECURSIVE_CONFIG" -a "$$" -eq "$PM_PARENT_PID" ]; then echo "===>>> The 'make config' check found no dependencies to update" @@ -2360,7 +2419,7 @@ notnewer () { echo "===>>> The newest available package ($latest_pv)" echo " is older than the version in ports ($new_port)" if [ "$PM_PACKAGES" = only ]; then - if [ -n "$PM_FORCE" ]; then + if [ -n "$PM_FORCE" ]; then use_package=up_force2 echo "===>>> Installing anyway due to -f" else