1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-12-03 01:23:49 +00:00

Introducing portmaster with package support!

This is svn version r200206.

New Features
============
1. Support for the following new options:
	a. --packages|-P and --packages-only|-PP
	b. --packages-build
	c. --packages-if-newer
	d. --delete-build-only
	e. --always-fetch
	f. --local-packagedir
In addition to the new code this also involved making some existing
messages more generic, and customizing some others to be aware of
whether packages are in use or not.
2. New command line parser allows placement of --long-options
anywhere in the command line

Minor Tweaks and Fixes
======================
1. Make fail() less finicky about how the message is input
2. Start the process of deprecating -p since it isn't useful
any longer
3. Fix parsing of PKG_DBDIR so that we don't depend on it having
exactly 3 components. This also saves 2 external calls to cut.
4. For the --clean-distfiles[-all] options sort the list before
printing to make it easier to see when files are related.
5. Instead of repeating the tests on when to run read_distinfos()
do them once in the initialization phase then rely on whether or
not DI_FILES is set.
6. Improve some messages to make their meaning more clear

Excellent beta testing and feedback by:	Christer Solskogen

Major funding for the package code, including the --packages-build
and --packages-if-newer options was provided by Modirum MDpay.

Additional funding provided by (in no particular order):
	Jan Hornyak
	Christer Solskogen
	R Koole
	Michael Proto
	Bard Skaflestad
	Paul Lambert
	Societe ToDoo
	Andrew Belashov
	Yoriyuki Sakai
	Flemming Jacobsen
	Julian Stecklina
	Douglas Berry
	Beat Gatzi
	Christopher Dawkins
	Mark Boolootian
	Soeren Schroeder
	Christoph Sold

More information on sponsorship is available at:
http://dougbarton.us/portmaster-proposal.html

My deepest appreciation to the FreeBSD community for the outpouring
of support that allowed me to complete this portion of the project.
This commit is contained in:
Doug Barton 2009-12-07 07:14:26 +00:00
parent 3f428ec7db
commit 463ef3703a
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=245319

View File

@ -46,7 +46,7 @@ version () {
cvs='$FreeBSD$'
rcs="${rcs#*,v }" ; rcs="${rcs%% *}"
cvs="${cvs#*,v }" ; cvs="${cvs%% *}"
cvs="${cvs#*,v }" ; cvs="${cvs#*/portmaster }" ; cvs="${cvs%% *}"
echo ''
[ "${cvs#$}" != 'FreeBSD$' ] &&
@ -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
}
@ -193,6 +193,16 @@ safe_exit () {
echo -e $INSTALLED_LIST ;;
one) echo "===>>> $ilist complete" ; echo '' ;;
esac
if [ -n "$build_deps_il" ]; then
echo "===>>> Deleting installed build-only dependencies"
cd
for f in $build_deps_il; do
[ -n "$PM_VERBOSE" ] && echo " $f"
pkg_delete -f $f
done
echo ''
fi
else
[ -n "$grep_deps" ] && pm_unlink $grep_deps
@ -214,6 +224,12 @@ safe_exit () {
fi
[ -n "$URB_YES" ] &&
echo "URB_DONE_LIST='$URB_DONE_LIST'" >> $IPC_SAVE
if [ "$PM_BUILD_ONLY_LIST" = pmp_doing_build_deps ]; then
echo "build_only_dl_g='$build_only_dl_g'" >> $IPC_SAVE
echo "run_dl_g='$run_dl_g'" >> $IPC_SAVE
fi
[ -n "$PM_DEL_BUILD_ONLY" ] &&
echo "build_deps_il='$build_deps_il'" >> $IPC_SAVE
fi
exit ${1:-0}
@ -224,15 +240,16 @@ usage () {
echo ''
echo 'Usage:'
echo "Common flags: [--force-config] [-CGHKgntvw B|b f|i D|d]"
echo " [-m <arguments for make>]"
echo " [-x <glob pattern to exclude from building>]"
echo " [[--packages|--packages-only] [-P|-PP] | [--packages-build]]"
echo " [--packages-if-newer] [--delete-build-only] [--always-fetch]"
echo " [--local-packagedir=<path>]"
echo " [-m <arguments for make>] [-x <glob pattern to exclude from building>]"
echo "${0##*/} [Common flags] <full name of port directory in $pdb>"
echo "${0##*/} [Common flags] <full path to $pd/foo/bar>"
echo "${0##*/} [Common flags] <glob pattern of directories in $pdb>"
echo "${0##*/} [Common flags] Multiple full names/paths from $pdb|$pd"
echo " and/or multiple globs from $pdb"
echo ''
echo "${0##*/} [Common flags] -p <port directory in $pd>"
echo "${0##*/} [Common flags] . [Use in $pd/foo/bar to build that port]"
echo ''
echo "${0##*/} --show-work [-Gv] [-m <args>] <single port, as above>"
@ -261,7 +278,7 @@ usage () {
echo "${0##*/} -h|--help"
echo "${0##*/} --version"
echo ''
echo "--force-config 'make config' for all ports (must be first option)"
echo "--force-config 'make config' for all ports"
echo "-C prevents 'make clean' from being run before building"
echo "-G prevents recursive 'make config' (overrides --force-config)"
echo "-H hide details of the port build and install in a log file"
@ -289,6 +306,18 @@ usage () {
echo '-R used with -[rf] to skip ports updated on a previous run'
echo '-a check all ports, update as necessary'
echo ''
echo '--delete-build-only delete ports that are build-only dependencies'
echo ' after a successful run, only if installed this run'
echo ''
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 '--always-fetch fetch package even if it already exists locally'
echo '--local-packagedir=<path> where local packages can be found,'
echo ' will fall back to fetching if no local version exists'
echo ''
echo '-l list installed ports by category'
echo '-L list installed ports by category, and search for updates'
echo ''
@ -366,19 +395,65 @@ if [ "$$" -eq "$PM_PARENT_PID" ]; then
export pd pdb distdir
fi
case "$1" in
--help) usage 0 ;;
--version) version ; exit 0 ;;
--clean-distfiles) CLEAN_DISTFILES=clean_distfiles ;;
--clean-distfiles-all) CLEAN_DISTFILES=clean_distfiles_all ; ALL=cda ;;
--check-depends) CHECK_DEPENDS=check_depends ;;
--check-port-dbdir) CHECK_PORT_DBDIR=check_port_dbdir ;;
--list-origins) LIST_ORIGINS=list_origins ;;
--show-work) SHOW_WORK=show ; RECURSE_THOROUGH=thorough ; shift ;;
--force-config) export FORCE_CONFIG=force_config ; shift ;;
--*) echo "Illegal option $1" ; echo ''
echo "===>>> Try ${0##*/} --help"; exit 1 ;;
esac
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
}
for var in "$@" ; do
case "$var" in
-PP[A-Za-z0-9]*|*[A-Za-z0-9]PP*)
fail "The -PP option must stand alone" ;;
--packages) packages_init first
PM_PACKAGES=first ; export PM_PACKAGES ;;
-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
PM_BUILD_ONLY_LIST=pm_bol
export PM_PACKAGES_BUILD PM_BUILD_ONLY_LIST ;;
--packages-if-newer) packages_init newer
PM_PACKAGES_NEWER=pmp_newer
export PM_PACKAGES_NEWER ;;
--always-fetch) PM_ALWAYS_FETCH=pm_always_fetch
export PM_ALWAYS_FETCH ;;
--local-packagedir=*) LOCAL_PACKAGEDIR=${var#--local-packagedir=}
export LOCAL_PACKAGEDIR ;;
-[A-Za-z0-9]*) newopts="$newopts $var" ;;
--delete-build-only) PM_DEL_BUILD_ONLY=pm_dbo
PM_BUILD_ONLY_LIST=pm_bol
export PM_DEL_BUILD_ONLY PM_BUILD_ONLY_LIST ;;
--help) usage 0 ;;
--version) version ; exit 0 ;;
--clean-distfiles) CLEAN_DISTFILES=clean_distfiles ;;
--clean-distfiles-all) CLEAN_DISTFILES=clean_distfiles_all ; ALL=cda ;;
--check-depends) CHECK_DEPENDS=check_depends ;;
--check-port-dbdir) CHECK_PORT_DBDIR=check_port_dbdir ;;
--list-origins) LIST_ORIGINS=list_origins ;;
--show-work) SHOW_WORK=show ; RECURSE_THOROUGH=thorough ;;
--force-config) export FORCE_CONFIG=force_config ;;
--*) echo "Illegal option $var" ; echo ''
echo "===>>> Try ${0##*/} --help"; exit 1 ;;
*) newopts="$newopts $var" ;;
esac
done
set -- $newopts
unset var newopts
unset -f packages_init
#=============== Begin functions relevant to --features and main ===============
@ -402,6 +477,16 @@ check_regular_file () {
[ ! -L "$1" -a -f "$1" ] || fail "ERROR: $1 is not a regular file!"
}
strip_to_iport () {
local in
while read in; do
in="${in%/+CONTENTS}"
in="${in##*/}"
echo $in
done
}
check_dependency_files () {
# Global: grep_deps
local origin iport ro_opd
@ -418,7 +503,7 @@ check_dependency_files () {
# Always rely on the grep'ed dependencies instead of +REQUIRED_BY
grep_deps=`pm_mktemp grep-deps-${iport}`
egrep -l "DEPORIGIN:($origin|$ro_opd)$" $pdb/*/+CONTENTS |
cut -f 5 -d '/' | sort -u > $grep_deps
strip_to_iport | sort -u > $grep_deps
if [ ! -s "$grep_deps" ]; then
if [ -s "$pdb/$iport/+REQUIRED_BY" ]; then
@ -669,7 +754,7 @@ if [ -n "$CLEAN_DISTFILES" ]; then
read_distinfos
echo "===>>> Checking for stale distfiles"
for df in `find $distdir -type f`; do
for df in `find $distdir -type f | sort`; do
f=${df#$distdir}
if ! grep -ql $f $DI_FILES; then
if [ -n "$ALL" ]; then
@ -809,7 +894,7 @@ fi
#=============== End code relevant only to --features ===============
# Save switches for potential child processes
while getopts 'BCDFGHKLRabde:fghilm:nop:r:stuvwx:' COMMAND_LINE_ARGUMENT ; do
while getopts 'BCDFGHKLPRabde:fghilm:nop:r:stuvwx:' COMMAND_LINE_ARGUMENT ; do
case "${COMMAND_LINE_ARGUMENT}" in
B) NO_BACKUP=Bopt; ARGS="-B $ARGS" ;;
C) DONT_PRE_CLEAN=Copt; ARGS="-C $ARGS" ;;
@ -819,6 +904,8 @@ while getopts 'BCDFGHKLRabde:fghilm:nop:r:stuvwx:' COMMAND_LINE_ARGUMENT ; do
H) HIDE_BUILD=Hopt; ARGS="-H $ARGS" ;;
K) DONT_POST_CLEAN=Kopt; ARGS="-K $ARGS" ;;
L) LIST_PLUS=Lopt ;;
P) packages_init first
PM_PACKAGES=first ; export PM_PACKAGES ;;
R) RESTART=Ropt ; ARGS="-R $ARGS" ;;
a) UPDATE_ALL=aopt ;;
b) BACKUP=bopt; ARGS="-b $ARGS" ;;
@ -861,6 +948,10 @@ shift $(( $OPTIND - 1 ))
fail "The -d and -D options are mutually exclusive"
[ -n "$FETCH_ONLY" -a -n "$NO_RECURSIVE_CONFIG" ] &&
fail "The -F and -G options are mutually exclusive"
[ -n "$NO_RECURSIVE_CONFIG" -a -n "$PM_PACKAGES_BUILD" ] &&
fail 'The --packages-build and -G options are mutually exclusive'
[ -n "$NO_RECURSIVE_CONFIG" -a -n "$PM_DEL_BUILD_ONLY" ] &&
fail 'The --delete-build-only and -G options are mutually exclusive'
#=============== Begin functions for getopts features and main ===============
@ -1551,7 +1642,7 @@ update_port () {
echo ''
elif [ -n "$UPDATE_REQ_BYS" ]; then
return 0
elif [ -n "$CONFIG_ONLY" ]; then
elif [ -n "$CONFIG_ONLY" -a -z "$PM_PACKAGES" ]; then
echo "===>>> Continuing 'make config' dependency check for $portdir"
else
echo "===>>> Returning to dependency check for $portdir"
@ -1561,6 +1652,7 @@ update_port () {
dependency_check () {
# Global: doing_dep_check
# Global: run_dl_g build_only_dl_g
local d_port_list
@ -1576,13 +1668,53 @@ dependency_check () {
else
if [ -n "$SHOW_WORK" ]; then
echo ''
elif [ -n "$CONFIG_ONLY" ]; then
elif [ -n "$CONFIG_ONLY" -a -z "$PM_PACKAGES" ]; then
echo "===>>> Starting recursive 'make config' check"
else
echo "===>>> Starting dependency check"
fi
fi
if [ "$PM_BUILD_ONLY_LIST" = pmp_doing_build_deps ]; then
local rundeps dep run_dl build_only_dl temp_bodlg
if [ -z "$RECURSE_THOROUGH" ]; then
rundeps=`pm_make run-depends-list | sort -u`
for dep in $d_port_list; do
case "$rundeps" in
*${dep}*) run_dl="$run_dl $dep" ;;
*) build_only_dl="$build_only_dl $dep" ;;
esac
done
d_port_list="$build_only_dl $run_dl"
else
for dep in `pm_make run-depends-list | sort -u`; do
run_dl="$run_dl $dep"
done
build_only_dl=`pm_make build-depends-list | sort -u`
fi
run_dl_g="$run_dl_g $run_dl "
for dep in $build_only_dl; do
case "$build_only_dl_g" in
*" ${dep} "*) ;;
*) build_only_dl_g="$build_only_dl_g $dep " ;;
esac
done
for dep in $build_only_dl_g; do
case "$run_dl_g" in
*" ${dep} "*) ;;
*) temp_bodlg="$temp_bodlg $dep" ;;
esac
done
build_only_dl_g=" $temp_bodlg "
fi
local d_port origin iport conflicts glob confl_p udf
# Do not export, for THIS parent process only
@ -1675,28 +1807,38 @@ dependency_check () {
if [ -n "$SHOW_WORK" ]; then
safe_exit
elif [ -n "$CONFIG_ONLY" ]; then
elif [ -n "$CONFIG_ONLY" -a -z "$PM_PACKAGES" ]; then
echo "===>>> Recursive 'make config' check complete for $portdir"
case "$PM_DEPTH" in *\>\>*) echo " $PM_DEPTH" ;; esac
else
echo "===>>> Dependency check complete for $portdir"
case "$PM_DEPTH" in *\>\>*) echo " $PM_DEPTH" ;; esac
fi
echo ''
}
create_master_rb_list () {
# Global: MASTER_RB_LIST
local req_by
for req_by in `grep -l DEPORIGIN:$portdir$ $pdb/*/+CONTENTS | \
cut -f 5 -d '/'`; do
for req_by in `grep -l DEPORIGIN:$portdir$ $pdb/*/+CONTENTS`; do
req_by="${req_by%/+CONTENTS}"
req_by="${req_by##*/}"
MASTER_RB_LIST="${MASTER_RB_LIST}${req_by} "
done
[ -n "$MASTER_RB_LIST" ] && export MASTER_RB_LIST=" $MASTER_RB_LIST"
}
pca () {
if [ "$PM_PACKAGES" = only ]; then
echo install
elif [ -n "$PM_PACKAGES" ]; then
echo 'build and/or install'
else
echo build
fi
}
multiport () {
# Global
PM_MULTI_PORTS=':' ; PM_MULTI_BUILT=':'
@ -1744,6 +1886,16 @@ multiport () {
echo -e $portlist
if [ -n "$CONFIG_ONLY" ]; then
if [ -n "$PM_BUILD_ONLY_LIST" ]; then
PM_BUILD_ONLY_LIST=pmp_doing_build_deps
run_dl_g='' ; build_only_dl_g=''
export run_dl_g build_only_dl_g
fi
if [ -n "$PM_DEL_BUILD_ONLY" ]; then
build_deps_il=''
export build_deps_il
fi
for port in $worklist; do
($0 $ARGS $port) || fail "Update for $port failed"
. $IPC_SAVE
@ -1751,8 +1903,13 @@ multiport () {
check_fetch_only
unset CONFIG_SEEN_LIST CONFIG_ONLY
echo ''
echo "===>>> Starting build for multiple ports <<<==="
echo "===>>> Starting `pca` for multiple ports <<<==="
echo ''
if [ -n "$PM_BUILD_ONLY_LIST" ]; then
unset run_dl_g
PM_BUILD_ONLY_LIST=pm_bol
fi
fi
export PM_BUILDING=pmbuildingmultiport
@ -1772,6 +1929,14 @@ multiport () {
safe_exit
}
make_config () {
config_type=config-conditional
[ -n "$FORCE_CONFIG" ] && config_type=config
[ -n "$PM_SU_VERBOSE" ] &&
echo "===>>> Running 'make $config_type'"
pm_make_s $config_type
}
#=============== End functions for main ===============
# INIT Parent
@ -1826,7 +1991,8 @@ if [ "$$" -eq "$PM_PARENT_PID" -a -z "$SHOW_WORK" ]; then
[ -z "$NO_BACKUP" -a -z "$BACKUP" ] && export NB_DELETE
# Set the file name here so it's visible to the children
if [ -z "$DONT_SCRUB_DISTFILES" -a -z "$FETCH_ONLY" ]; then
if [ -z "$DONT_SCRUB_DISTFILES" -a -z "$FETCH_ONLY" \
-a -z "$PM_PACKAGES" ]; then
export DI_FILES=`pm_mktemp DI-FILES`
fi
@ -1863,16 +2029,16 @@ all_config () {
CONFIG_SEEN_LIST="${CONFIG_SEEN_LIST}${origin}:"
done
}
if [ -z "$DONT_SCRUB_DISTFILES" -a -z "$FETCH_ONLY" ]; then
(read_distinfos)&
fi
[ -n "$DI_FILES" ] && (read_distinfos)&
ports_by_category
echo "===>>> Starting check of installed ports for available updates"
if [ -n "$CONFIG_ONLY" ]; then
[ -n "$FETCH_ONLY" ] && export ALL_FETCH=all_fetch
echo "===>>> Checking ports for recursive 'make config'"
[ -z "$PM_PACKAGES" ] &&
echo "===>>> Checking ports for recursive 'make config'"
[ -n "$PM_VERBOSE" ] &&
{ echo '' ; echo "===>>> Root ports:"; }
all_config $roots
@ -1888,13 +2054,13 @@ all_config () {
check_fetch_only
if [ -n "$NO_DEP_UPDATES" ]; then
echo "===>>> The 'make config' check found no ports to update"
echo "===>>> All ports are up to date"
safe_exit
fi
unset CONFIG_SEEN_LIST CONFIG_ONLY
echo ''
echo "===>>> Starting build for ports that need updating <<<==="
echo "===>>> Starting `pca` for ports that need updating <<<==="
echo ''
fi
@ -2078,10 +2244,8 @@ check_state || {
safe_exit 1; }
# Do not start this in the background until we are sure we are going to build
if [ "$$" -eq "$PM_PARENT_PID" -a -z "$SHOW_WORK" \
-a -z "$DONT_SCRUB_DISTFILES" -a -z "$FETCH_ONLY" ]; then
echo ''; (read_distinfos)&
fi
[ "$$" -eq "$PM_PARENT_PID" -a -n "$DI_FILES" ] && {
echo ''; (read_distinfos)& }
# Do these things first time through, with or without 'make config'
if [ -z "$PM_BUILDING" -a -z "$SHOW_WORK" -a -z "$NO_ACTION" ]; then
@ -2099,7 +2263,8 @@ dofetch () {
}
# Handle the problem of manual fetching
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
# do as much of this as we can, as early as we can, and
@ -2123,7 +2288,7 @@ dofetch () {
fi
unset master_sites
if [ -z "$FETCH_ONLY" ]; then
if [ -z "$FETCH_ONLY" -a ! "$PM_PACKAGES" = only ]; then
TESTINT=`grep -l ^IS_INTERACTIVE Makefile`
else
[ -n "$ALL_FETCH" ] && safe_exit
@ -2140,10 +2305,20 @@ dofetch () {
fi
if [ -n "$CONFIG_ONLY" ]; then
config_type=config-conditional
[ -n "$FORCE_CONFIG" ] && config_type=config
[ -n "$PM_SU_VERBOSE" ] && echo "===>>> Running 'make $config_type'"
pm_make_s $config_type
if [ "$$" -eq "$PM_PARENT_PID" ]; then
# Keep in sync in multiport()
if [ -n "$PM_BUILD_ONLY_LIST" ]; then
PM_BUILD_ONLY_LIST=pmp_doing_build_deps
run_dl_g='' ; build_only_dl_g=''
export run_dl_g build_only_dl_g
fi
if [ -n "$PM_DEL_BUILD_ONLY" ]; then
build_deps_il=''
export build_deps_il
fi
fi
[ -z "$PM_PACKAGES" ] && make_config
CONFIG_SEEN_LIST="${CONFIG_SEEN_LIST}${portdir}:"
@ -2194,9 +2369,14 @@ if [ -n "$CONFIG_ONLY" ]; then
unset URB_YES MASTER_RB_LIST ; URB_DONE_LIST=':'
fi
if [ -n "$PM_BUILD_ONLY_LIST" ]; then
unset run_dl_g
PM_BUILD_ONLY_LIST=pm_bol
fi
check_fetch_only
unset CONFIG_SEEN_LIST CONFIG_ONLY
echo "===>>> Starting build for $portdir <<<==="
echo "===>>> Starting `pca` for $portdir <<<==="
echo ''
fi
@ -2204,17 +2384,29 @@ fi
cd $pd/$portdir
if [ -n "$PM_BUILD_ONLY_LIST" ]; then
case "$build_only_dl_g" in
*" $pd/$portdir "*)
[ -n "$PM_PACKAGES_BUILD" ] && PM_PACKAGES_BUILD=doing_build_only_dep
[ -n "$PM_DEL_BUILD_ONLY" ] && PM_DEL_BUILD_ONLY=doing_build_only_dep ;;
*) [ -n "$PM_PACKAGES_BUILD" ] && PM_PACKAGES_BUILD=pmp_build
[ -n "$PM_DEL_BUILD_ONLY" ] && PM_DEL_BUILD_ONLY=pm_dbo ;;
esac
fi
if [ -z "$NO_DEP_UPDATES" ]; then
if [ -z "$RECURSE_THOROUGH" ]; then
echo "===>>> Starting check for build dependencies"
dependency_check build-depends-list
if [ -z "$PM_PACKAGES" ]; then
echo "===>>> Starting check for build dependencies"
dependency_check build-depends-list
fi
else
echo "===>>> Starting check for all dependencies"
dependency_check all-depends-list
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"
echo "===>>> All dependencies are up to date"
echo ''
fi
@ -2223,32 +2415,241 @@ if [ -n "$NO_ACTION" -a -z "$CONFIG_ONLY" ]; then
safe_exit
fi
[ -z "$DONT_PRE_CLEAN" ] && {
pm_make clean NOCLEANDEPENDS=ncd || fail 'make clean failed'; echo ''; }
new_port=`pm_make -V PKGNAME`
sleep=3
fl_read=`echo ${TMPDIR}/f-${PM_PARENT_PID}-fetchlog-${portdir#*/}.*`
while [ -f "$fl_read" ]; do
echo "===>>> Waiting on fetch & checksum for $portdir <<<==="
tail -10 $fl_read 2>/dev/null
echo '' ; echo ''
sleep $sleep
if [ -n "$PM_PACKAGES" -o "$PM_PACKAGES_BUILD" = doing_build_only_dep ]; then
fetch_package () {
local do_fetch
if [ $sleep -eq 10 ]; then
sleep=3
else
sleep=$(( $sleep + 1 ))
if [ -z "$ppd" ]; then
# Duplicated from pkg_init()
[ -z "$packages" ] &&
packages=`pm_make -f/usr/share/mk/bsd.port.mk -V PACKAGES`
[ -n "$packages" ] ||
fail 'The value of PACKAGES cannot be empty'
ppd=$packages/portmaster-download
export ppd
fi
done
unset sleep
if [ -n "$HIDE_BUILD" ]; then
port_log=`mktemp -t port_log-${PM_PARENT_PID}-${portdir#*/}`
port_log_args=">> $port_log 2>&1"
echo "===>>> Logging build to $port_log"
if [ ! -d "$ppd" ]; then
[ -n "$PM_SU_VERBOSE" ] && echo "===>>> Creating $ppd"
pm_mkdir_s $ppd
fi
[ -z "$fetch_args" ] && {
fetch_args=`pm_make -f/usr/share/mk/bsd.port.mk -V FETCH_ARGS`;
export fetch_args; }
if [ -z "$PM_ALWAYS_FETCH" ]; then
if [ -r "${ppd}/${1}.tbz" ]; then
[ -n "$PM_VERBOSE" ] &&
echo "===>>> Package exists, skipping fetch"
return 0
else
do_fetch=1
fi
else
do_fetch=1
fi
if [ -n "$do_fetch" ]; then
if [ -n "$PM_VERBOSE" ]; then
if [ -n "$2" ]; then
echo "===>>> Trying to fetch $1 directly"
else
echo "===>>> Starting package fetch"
fi
fi
fetch $fetch_args -o $ppd ${sitepath}${1}.tbz 2>/dev/null || {
pm_unlink ${ppd}/${1}.tbz;
fetch $fetch_args -o $ppd ${sitepath}${1}.tbz 2>/dev/null; }
fi
}
if [ -z "$PACKAGESITE" ]; then
release=`uname -r`
case "$release" in
[678]\.[0-9]-STABLE)
release=packages-${release%%\.*}-stable ;;
[678]\.[0-9]-RELEASE*)
release=packages-${release%-RELEASE*}-release ;;
9\.0-CURRENT) release=packages-8-current ;; # XXX
*RC[0-9]*) release=${release%-RC[0-9]}
release=packages-${release}-release ;;
*BETA[0-9]*) release=${release%-BETA[0-9]}
release=packages-${release}-release ;;
esac
sitepath="${PACKAGEROOT:-"http://ftp.freebsd.org"}/pub/FreeBSD/ports/`uname -p`/${release}/"
unset release
else
sitepath="${PACKAGESITE%/}"
sitepath="${sitepath%Latest}"
sitepath="${sitepath%All}"
fi
sitepath="${sitepath%/}/${portdir%/*}/"
echo "===>>> Checking package repository for latest available version"
if [ -n "$LOCAL_PACKAGEDIR" ]; then
s=`pm_make -V LATEST_LINK`
if [ -r "${LOCAL_PACKAGEDIR}/Latest/${s}.tbz" ]; then
local_package=${LOCAL_PACKAGEDIR}/Latest/${s}.tbz
latest_pv=`readlink ${LOCAL_PACKAGEDIR}/Latest/${s}.tbz`
latest_pv=${latest_pv##*/}
else
[ -n "$PM_VERBOSE" ] &&
echo "===>>> No local package for $new_port exists, attempting fetch"
fi
fi
if [ -z "$latest_pv" ]; then
case "$new_port" in
*\.*) s=${new_port%%\.*} ;;
*) s=`pm_make -V LATEST_LINK` ;;
esac
latest_pv=`fetch -q -o - ${sitepath} 2>/dev/null | grep "href=\"${s}"`
fi
unset s
if [ -z "$latest_pv" ]; then
fetch_package $new_port try
if [ $? -eq 0 ]; then
latest_pv=$new_port
fi
fi
if [ -z "$latest_pv" ]; then
echo "===>>> Package and/or archive not found at:"
echo "${sitepath}"
echo ''
echo " Check the pkg_add(1) man page for information"
echo " on setting the PACKAGESITE environment variable"
fail 'No package archive found'
else
latest_pv=${latest_pv#*href=\"}
latest_pv=${latest_pv%%\.tbz*}
case "$latest_pv" in
*%2[cC]*) latest_pv=`echo $latest_pv | sed s#%2[cC]#,#` ;;
esac
fi
notnewer () {
echo ''
echo "===>>> The newest available package ($latest_pv)"
echo " is not newer than the installed version ($upg_port)"
unset local_package
}
if [ "$latest_pv" = "$new_port" ]; then
use_package=up_equal
[ -n "$PM_VERBOSE" ] &&
echo "===>>> Available package ($latest_pv) matches the ports tree"
elif [ -n "$PM_PACKAGES_NEWER" ]; then
if [ -n "$upg_port" ]; then
case `pkg_version -t $upg_port $latest_pv` in
\<) use_package=up_newer
[ -n "$PM_VERBOSE" ] && {
echo "===>>> Available package ($latest_pv)";
echo " is newer than installed ($upg_port)"; } ;;
=) if [ -n "$PM_FORCE" ]; then
use_package=up_force
else
notnewer
fi ;;
*) notnewer ;;
esac
else
use_package=up_no_installed
[ -n "$PM_VERBOSE" ] &&
echo "===>>> There is a package available ($latest_pv)"
fi
else
case `pkg_version -t $new_port $latest_pv` in
\<) # Could happen if ports tree is out of date
use_package=up_old_tree
[ -n "$PM_VERBOSE" ] && {
echo "===>>> Available package ($latest_pv)";
echo " is newer than ports tree ($new_port)"; } ;;
=) ;; # Should not be reached
*) # Packages like autoconf-2.1* vs. 2.6* can be false neg.
fetch_package $new_port try
if [ $? -eq 0 ]; then
latest_pv=$new_port
use_package=up_auto
else
echo ''
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
use_package=up_force2
echo "===>>> Installing anyway due to -f"
else
fail "Try --packages-if-newer, or do not use -PP/--packages-only"
fi
fi
fi ;;
esac
fi
if [ -n "$use_package" ]; then
new_port=$latest_pv
else
if [ "$PM_PACKAGES" = only ]; then
fail "There is no valid package to install"
else
echo ''
echo "===>>> There is no valid package to install, building port instead"
echo ''
fi
fi
fi
eval pm_make $port_log_args || fail "make failed for $portdir"
if [ -z "$use_package" ]; then
if [ -n "$PM_PACKAGES" ]; then
make_config
if [ -z "$RECURSE_THOROUGH" ]; then
echo "===>>> Starting check for build dependencies"
dependency_check build-depends-list
fi
fi
[ -z "$DONT_PRE_CLEAN" ] && { pm_make clean NOCLEANDEPENDS=ncd ||
fail 'make clean failed'; echo ''; }
sleep=3
fl_read=`echo ${TMPDIR}/f-${PM_PARENT_PID}-fetchlog-${portdir#*/}.*`
while [ -f "$fl_read" ]; do
echo "===>>> Waiting on fetch & checksum for $portdir <<<==="
tail -10 $fl_read 2>/dev/null
echo '' ; echo ''
sleep $sleep
if [ $sleep -eq 10 ]; then
sleep=3
else
sleep=$(( $sleep + 1 ))
fi
done
unset sleep
if [ -n "$HIDE_BUILD" ]; then
port_log=`mktemp -t port_log-${PM_PARENT_PID}-${portdir#*/}`
port_log_args=">> $port_log 2>&1"
echo "===>>> Logging build to $port_log"
fi
eval pm_make $port_log_args || fail "make failed for $portdir"
else
[ -z "$local_package" ] && {
fetch_package $latest_pv ||
fail "Fetch for ${latest_pv}.tbz failed"; }
fi
# Ignore if no old port exists
if [ -n "$upg_port" ]; then
@ -2308,25 +2709,41 @@ if [ -z "$RECURSE_THOROUGH" -a -z "$NO_DEP_UPDATES" ]; then
cd $pd/$portdir
fi
new_port=`pm_make -V PKGNAME`
if [ -n "$PM_SU_UNSET_PORT_LOG_ARGS" ]; then
unset port_log_args
else
[ -n "$HIDE_BUILD" ] && echo "===>>> Logging install to $port_log"
fi
# Defining NO_DEPENDS ensures that we will control the installation of the
# depends, not bsd.port.mk.
[ -n "$PM_SU_VERBOSE" ] && echo "===>>> Running make install"
eval pm_make_s -DNO_DEPENDS install $port_log_args || {
install_failed () {
if [ -z "$NO_BACKUP" -a -n "$upg_port" ]; then
echo ''
echo "===>>> A backup package for $upg_port should"
echo " be located in $pbu"
fi
fail "Installation of $new_port ($portdir) failed"; }
fail "Installation of $1 ($portdir) failed"
}
echo ''
if [ -z "$use_package" ]; then
[ -n "$PM_SU_VERBOSE" ] && echo "===>>> Running make install"
if [ -n "$PM_SU_UNSET_PORT_LOG_ARGS" ]; then
unset port_log_args
else
[ -n "$HIDE_BUILD" ] &&
echo "===>>> Logging install to $port_log"
fi
# Defining NO_DEPENDS ensures that we will control the installation
# of the depends, not bsd.port.mk.
eval pm_make_s -DNO_DEPENDS install $port_log_args ||
install_failed $new_port
else
[ -n "$local_package" ] && ppd=${local_package%/Latest*}/All
echo "===>>> Installing package"
pkg_add --no-deps --force ${ppd}/${latest_pv}.tbz ||
install_failed ${latest_pv}.tbz
fi
echo ''
[ "$PM_DEL_BUILD_ONLY" = doing_build_only_dep ] &&
build_deps_il="$build_deps_il $new_port"
# Remove saved libs that match newly installed files
@ -2356,7 +2773,7 @@ fi
unset temp
# This will serve for *delete*distfiles() as well
distfiles=`pm_make -V ALLFILES | sed -e 's# *$##g'`
[ -z "$use_package" ] && distfiles=`pm_make -V ALLFILES | sed -e 's# *$##g'`
if [ -n "$distfiles" ]; then
distfiles=" ${distfiles} "
@ -2406,11 +2823,18 @@ if [ -n "$MAKE_PACKAGE" ]; then
echo " ===>>> Package saved to $packages/All" ; echo ''
fi
[ -z "$DONT_POST_CLEAN" ] && { pm_make clean NOCLEANDEPENDS=ncd2 ; echo ''; }
if [ -z "$use_package" ]; then
[ -z "$DONT_POST_CLEAN" ] && {
pm_make clean NOCLEANDEPENDS=ncd2 ; echo ''; }
elif grep -q DEPORIGIN $pdb/$new_port/+CONTENTS; then
echo "===>>> Updating dependencies for $new_port to match installed versions"
update_contents $pdb/$new_port/+CONTENTS
echo ''
fi
check_dependency_files $portdir $new_port
if [ -s "$grep_deps" ]; then
echo "===>>> Updating package dependency entry for each dependent port"
echo "===>>> Updating dependency entry for $new_port in each dependent port"
[ -n "$PM_VERBOSE" ] && echo ''
while read d_port; do
[ -n "$PM_VERBOSE" ] && echo "===>>> $d_port"