Index: head/ports-mgmt/portmaster/Makefile =================================================================== --- head/ports-mgmt/portmaster/Makefile (revision 461040) +++ head/ports-mgmt/portmaster/Makefile (revision 461041) @@ -1,54 +1,54 @@ # $FreeBSD$ PORTNAME= portmaster PORTVERSION= 3.19 -PORTREVISION= 4 +PORTREVISION= 5 CATEGORIES= ports-mgmt MAINTAINER= se@FreeBSD.org COMMENT= Manage your ports without external databases or languages LICENSE= BSD2CLAUSE USE_GITHUB= yes GH_ACCOUNT= freebsd OPTIONS_DEFINE= BASH ZSH OPTIONS_DEFAULT=BASH ZSH PLIST_FILES= sbin/portmaster \ etc/portmaster.rc.sample \ man/man8/portmaster.8.gz BASH_PLIST_FILES= etc/bash_completion.d/portmaster.sh ZSH_PLIST_FILES= share/zsh/site-functions/_portmaster NO_ARCH= yes verify: checksum do-build: .for file in portmaster files/portmaster.rc.sample files/portmaster.8 @${REINPLACE_CMD} -e 's#/usr/local#${LOCALBASE}#g' \ -e 's#===>>> Version [0-9._]*#===>>> Version ${PKGVERSION}#' ${WRKSRC}/${file} .endfor do-install: ${INSTALL_SCRIPT} ${WRKSRC}/portmaster \ ${STAGEDIR}${PREFIX}/sbin ${INSTALL_DATA} ${WRKSRC}/files/portmaster.rc.sample \ ${STAGEDIR}${PREFIX}/etc ${INSTALL_MAN} ${WRKSRC}/files/portmaster.8 \ ${STAGEDIR}${MAN8PREFIX}/man/man8 post-install-BASH-on: ${MKDIR} ${STAGEDIR}${PREFIX}/etc/bash_completion.d ${INSTALL_DATA} ${WRKSRC}/files/bash-completions \ ${STAGEDIR}${PREFIX}/etc/bash_completion.d/portmaster.sh post-install-ZSH-on: ${MKDIR} ${STAGEDIR}${PREFIX}/share/zsh/site-functions ${INSTALL_DATA} ${WRKSRC}/files/zsh-completions \ ${STAGEDIR}${PREFIX}/share/zsh/site-functions/_portmaster .include Index: head/ports-mgmt/portmaster/files/patch-portmaster =================================================================== --- head/ports-mgmt/portmaster/files/patch-portmaster (revision 461040) +++ head/ports-mgmt/portmaster/files/patch-portmaster (revision 461041) @@ -1,245 +1,242 @@ --- portmaster.orig 2018-01-14 21:53:23 UTC +++ portmaster @@ -45,7 +45,7 @@ if [ -z "$PM_PARENT_PID" ]; then my_environment=`set` # If we are already root, unset this to avoid potential conflict - [ `ps -o uid= $$` -eq 0 ] && unset PM_SU_CMD PM_SU_VERBOSE + [ `id -u` -eq 0 ] && unset PM_SU_CMD PM_SU_VERBOSE fi #=============== Begin functions we always want to have =============== @@ -181,7 +181,7 @@ parent_exit () { pm_v "===>>> Removing empty directories from WRKDIRPREFIX" [ -n "$needws" ] && echo '' || pm_v - find $PM_WRKDIRPREFIX -depth -mindepth 1 -type d -empty -delete 2>/dev/null + find $PM_WRKDIRPREFIX -depth -mindepth 1 maxdepth 2 -type d -empty -delete 2>/dev/null fi case "$DISPLAY_LIST" in @@ -308,8 +308,9 @@ safe_exit () { exit ${1:-0} } # safe_exit() -flavor_part () { expr "$1" : ".*@" >/dev/null && echo "${1#*@}"; } -dir_part () { echo "${1%%@*}"; } +target_part () { [ -z "${1##*:*}" ] && echo "${1#*:}" || echo install; } +flavor_part () { local tmp="${1%%:*}"; [ -z "${tmp##*@*}" ] && echo "${tmp#*@}"; } +dir_part () { local tmp="${1%%:*}"; echo "${tmp%%@*}"; } export_flavor () { local flavor="$1"; if [ "$FLAVOR" != "$flavor" ]; then pm_v "===>>> Setting FLAVOR to '$flavor' (was '$FLAVOR')"; export FLAVOR="$flavor"; fi; } @@ -2175,23 +2176,29 @@ update_pm_nu () { } update_build_l () { - local originflavor origin flavor iport + local originflavor origin flavor iport make_target originflavor=$1 ; update_pm_nu $originflavor origin=$(dir_part "$originflavor") flavor=$(flavor_part "$originflavor") iport="$2" + make_target=$3 [ -n "$PM_NO_CONFIRM" ] && return if [ -z "$iport" ]; then case "$build_l" in *\ $origin\\*) return ;; esac - build_l="${build_l}\tInstall $originflavor\n" + case $make_target in + install) + build_l="${build_l}\tInstall $originflavor\n" ;; + *) + build_l="${build_l}\tExecute make $make_target for $originflavor\n" ;; + esac return - else - case "$build_l" in *\ $iport\ *|*\ $iport\\*) return ;; esac fi + case "$build_l" in *\ $iport\ *|*\ $iport\\*) return ;; esac + find_new_port "$originflavor" # sets global variable new_port case `pkg version -t $iport $new_port 2>/dev/null` in @@ -2203,8 +2210,9 @@ update_build_l () { } update_port () { - local deps + local make_target deps + make_target=$(target_part "$1") if [ -n "$2" ]; then echo "===>>> Launching child to update $1 to $2" else @@ -2300,7 +2308,7 @@ make_dep_list () { fail "make_dep_list: Unsupported option '$dep_type'" esac done - [ -n "$var_opt" ] && make $var_opt | tr ' ' '\n' | cut -d: -f2 | sort -u + [ -n "$var_opt" ] && make $var_opt | tr ' ' '\n' | cut -d: -f2-3 | sort -u } gen_dep_list () { @@ -2368,15 +2376,17 @@ dependency_check () { rundeps=`gen_dep_list run-depends-list` for dep in $d_port_list; do + # strip optional make target + local depdir=${dep%:*} # If the port is already installed, do not mark # it as a build-only dependency, or it will be # installed by package and/or removed - pkg info -e ${dep#$pd/} && - run_dl="$run_dl $dep" && + pkg info -e ${depdir#$pd/} && + run_dl="$run_dl $depdir" && continue case "$rundeps" in *" ${dep} "*|*${dep}*) - varname=`echo ${dep#$pd/} | sed 's#[-+/\.@]#_#g'` + varname=`echo ${dep#$pd/} | sed 's#[-+/\.@:]#_#g'` rundep_list="$rundep_list $varname" eval $varname=\"$portdir \$$varname\" eval ${varname}_p=$dep @@ -2409,7 +2419,10 @@ dependency_check () { # Do not export, for THIS parent process only [ -n "$PM_FIRST_PASS" ] && doing_dep_check=doing_dep_check - for d_port in $d_port_list; do + for d_port_target in $d_port_list; do + # strip optional make target + local d_port=${d_port_target%:*} + local make_target=$(target_part "$d_port_target") origin="${d_port#$pd/}" if [ -n "$SHOW_WORK" ]; then iport=`iport_from_origin $origin` @@ -2429,20 +2442,14 @@ dependency_check () { [ -z "$PM_URB_UP" ] && case "$CUR_DEPS" in *:${origin}:*) continue ;; esac - if [ -z "$PM_INDEX_ONLY" ]; then + if [ -z "$PM_INDEX_ONLY" -a "$make_target" = install ]; then local conflicts glob confl_p dir flavor dir=$(dir_part $d_port) flavor=$(flavor_part $d_port) conflicts='' - if pm_cd "$pd/$dir"; then - if grep -ql ^CONFLICTS Makefile ; then - conflicts=`FLAVOR=$flavor pm_make_b \ - -V CONFLICTS \ - -V CONFLICTS_BUILD \ - -V CONFLICTS_INSTALL` - fi - else - fail "Cannot cd to $dir" + pm_cd "$pd/$dir" || fail "Cannot cd to $dir" + if grep -ql ^CONFLICTS Makefile ; then + conflicts=`FLAVOR=$flavor pm_make_b -V CONFLICTS -V CONFLICTS_BUILD -V CONFLICTS_INSTALL` fi for glob in $conflicts; do confl_p=`pkg query -g "%n-%v" $glob 2>/dev/null` @@ -2498,7 +2505,11 @@ dependency_check () { check_for_updates $iport $origin || fail 'Update failed' else check_interactive $origin || continue - update_port $origin + if [ "$make_target" != "install" ]; then + [ -z "$PM_FIRST_PASS" ] && post_clean_l="$post_clean_l $origin" + origin="$origin:$make_target" + fi + update_port "$origin" fi done [ -n "$PM_FIRST_PASS" ] && unset doing_dep_check @@ -3029,8 +3040,12 @@ no_valid_port () { echo "===>>> Try $progname --help" ; echo '' ; safe_exit 1 } +make_target=$(target_part "$1") +post_clean_l="" + # Figure out what we are going to be working on if [ -z "$REPLACE_ORIGIN" ]; then + portdir="${1%:*}" export_flavor $(flavor_part $portdir) [ -n "$portdir" ] && { argv=$portdir ; unset portdir; } argv=${argv:-$1} ; argv=${argv%/} ; argv=`globstrip $argv` @@ -3061,6 +3076,8 @@ if [ -z "$REPLACE_ORIGIN" ]; then unset glob_dirs fi unset argv + + [ "$make_target" != install ] && PM_MAKE_ARGS="-DDISABLE_CONFLICTS $PM_MAKE_ARGS" else portdir="${1#$pd/}" ; portdir="${portdir%/}" export_flavor=$(flavor_part $portdir) -@@ -3138,12 +3155,13 @@ if [ -z "$PM_INDEX_ONLY" ] && ! pm_isdir_pd "$portdir" - fi - - iport_from_pkgname () { -- local dir flavor pkgname -+ local dir flavor pkgname pattern - +@@ -3143,7 +3160,7 @@ iport_from_pkgname () { dir=$(dir_part $1) flavor=$(flavor_part $1) pkgname=$(FLAVOR=$flavor make -C "$pd/$dir" -V PKGNAME) || return 1 - pkg info -x "^${pkgname%-*}"'-[^-]*' 2>/dev/null -+ pattern="^${pkgname%-*}"'-[^-]*$' -+ pkg info -x "$pattern" 2>/dev/null | egrep -- "$pattern" ++ pkg info -xC "^${pkgname%-*}\$" 2>/dev/null } if [ -z "$upg_port" -a -z "$REPLACE_ORIGIN" ]; then -@@ -3229,11 +3247,14 @@ if [ -n "$PM_FIRST_PASS" -a -z "$FETCH_ONLY" ]; then +@@ -3229,11 +3246,14 @@ if [ -n "$PM_FIRST_PASS" -a -z "$FETCH_ONLY" ]; then fi fi - update_build_l $portdir $upg_port + update_build_l "$portdir" "$upg_port" "$make_target" elif [ -n "$FETCH_ONLY" -a -n "$PM_PACKAGES" ]; then update_pm_nu $portdir fi +# Test for necessary privileges to actually install ports +[ "$($PM_SU_CMD id -u)" = 0 ] || fail "Insufficient privileges to install ports (run as root or set PM_SU_CMD)" + # Do these things first time through if [ -z "$PM_INDEX_ONLY" -a -z "$PM_BUILDING" -a -z "$SHOW_WORK" -a -z "$NO_ACTION" ]; then # Do not start this in the background until we are sure we are going to proceed -@@ -3639,12 +3660,18 @@ pkg_flavor () { - if [ -n "$HIDE_BUILD" ] && [ -n "$(pm_make -V LICENSE)" ]; then +@@ -3636,15 +3656,21 @@ pkg_flavor () { + pm_make pretty-flavors-package-names | sed -ne 's!^\([A-Za-z0-9_]*\): *'$pkg'$!\1!p'; + } + export_flavor=$(pkg_flavor $new_port) +- if [ -n "$HIDE_BUILD" ] && [ -n "$(pm_make -V LICENSE)" ]; then ++ if [ -n "$HIDE_BUILD" ] && [ -n "$(pm_make -V LICENSE)" ] && [ -z "$(pm_make -V DISABLE_LICENSES)" ]; then pm_make extract ask-license || fail "make extract ask-license failed for $portdir" fi + if [ "$make_target" = "extract" -o "$make_target" = "patch" ]; then + eval pm_make -DNO_DEPENDS $make_target $port_log_args || fail "make $make_target failed for $portdir" + safe_exit + fi eval pm_make build $port_log_args || fail "make build failed for $portdir" + [ "$make_target" = "build" ] && safe_exit pm_sv Running make stage # Defining NO_DEPENDS ensures that we will control the installation # of the depends, not bsd.port.mk. eval pm_make -DNO_DEPENDS stage $port_log_args || fail "make stage failed for $portdir" + [ "$make_target" = "stage" ] && safe_exit else [ -z "$local_package" ] && { fetch_package $latest_pv || fail "Fetch for ${latest_pv}.txz failed"; } -@@ -3876,9 +3903,12 @@ if [ -n "$MAKE_PACKAGE" ]; then +@@ -3876,9 +3902,12 @@ if [ -n "$MAKE_PACKAGE" ]; then fi if [ -z "$use_package" -a -z "$DONT_POST_CLEAN" ]; then -# export_flavor $(flavor_part $portdir) + for dir in $post_clean_l; do + pm_v "===>>> Running 'make clean' for special build dependency $dir" + (FLAVOR=$(flavor_part $portdir) pm_make_s -C "$pd/$dir" clean NOCLEANDEPENDS=ncd2 >/dev/null)& + done pm_v "===>>> Running 'make clean' in the background" - (pm_make_s clean NOCLEANDEPENDS=ncd2 >/dev/null)& + (FLAVOR=$(flavor_part $portdir) pm_make_s clean NOCLEANDEPENDS=ncd2 >/dev/null)& pm_v fi if [ -n "$ro_opd" ]; then