From owner-svn-ports-head@freebsd.org Sat Jul 4 08:56:56 2015 Return-Path: Delivered-To: svn-ports-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 351E09157; Sat, 4 Jul 2015 08:56:56 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 0F1A512CD; Sat, 4 Jul 2015 08:56:56 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.14.9/8.14.9) with ESMTP id t648uto1069083; Sat, 4 Jul 2015 08:56:55 GMT (envelope-from bapt@FreeBSD.org) Received: (from bapt@localhost) by repo.freebsd.org (8.14.9/8.14.9/Submit) id t648utp1069081; Sat, 4 Jul 2015 08:56:55 GMT (envelope-from bapt@FreeBSD.org) Message-Id: <201507040856.t648utp1069081@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bapt set sender to bapt@FreeBSD.org using -f From: Baptiste Daroussin Date: Sat, 4 Jul 2015 08:56:55 +0000 (UTC) To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r391295 - in head/Mk: . Scripts X-SVN-Group: ports-head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-ports-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the ports tree for head List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 04 Jul 2015 08:56:56 -0000 Author: bapt Date: Sat Jul 4 08:56:54 2015 New Revision: 391295 URL: https://svnweb.freebsd.org/changeset/ports/391295 Log: Rewite CLEAN-DEPENDS* Move inlined shell code into a proper script taking 2 args in arguments: full or limited. The code I more simpler and understandable. The argument allows to factorize the code between CLEAN-DEPENDS-FULL and CLEAN-DEPENDS-LIST While here, make the code accept dependencies without ${PORTSDIR} Added: head/Mk/Scripts/clean-depends-list.sh (contents, props changed) Modified: head/Mk/bsd.port.mk Added: head/Mk/Scripts/clean-depends-list.sh ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/Mk/Scripts/clean-depends-list.sh Sat Jul 4 08:56:54 2015 (r391295) @@ -0,0 +1,50 @@ +#!/bin/sh +# MAINTAINER: portmgr@FreeBSD.org +# $FreeBSD$ + +. ${dp_SCRIPTSDIR}/functions.sh + +set -e +validate_env dp_PKGNAME dp_MAKE dp_PORTSDIR +set -u + +arg=$1 +shift +if [ "${arg}" != "full" -a "${arg}" != "limited" ]; then + echo "the first argument can only be 'full' or 'limited'" >&2 + exit 1 +fi + +check_dep() { + for _dep ; do + myifs=${IFS} + IFS=: + set -- ${_dep} + IFS=${myifs} + + case "${2}" in + /*) d=${2} ;; + *) d=${dp_PORTSDIR}/${2} ;; + esac + + case " ${checked} " in + *\ ${d}\ *) continue ;; # Already checked + esac + checked="${checked} ${d}" + if [ ! -d ${d} ]; then + echo "${dp_PKGNAME}: \"${d}\" non-existent -- dependency list incomplete" >&2 + continue + fi + set -- $(${dp_MAKE} -C ${d} -VWRKDIR -V_UNIFIED_DEPENDS) + if [ -d ${1} ]; then + echo ${d} + elif [ "$arg" = "limited" ]; then + break + fi + shift + check_dep $@ + done +} + +checked= +check_dep ${dp_ALLDEPENDS} Modified: head/Mk/bsd.port.mk ============================================================================== --- head/Mk/bsd.port.mk Sat Jul 4 08:53:49 2015 (r391294) +++ head/Mk/bsd.port.mk Sat Jul 4 08:56:54 2015 (r391295) @@ -4344,7 +4344,6 @@ ${deptype:tl}-depends: # Dependency lists: both build and runtime, recursive. Print out directory names. _UNIFIED_DEPENDS=${PKG_DEPENDS} ${EXTRACT_DEPENDS} ${PATCH_DEPENDS} ${FETCH_DEPENDS} ${BUILD_DEPENDS} ${LIB_DEPENDS} ${RUN_DEPENDS} -_DEPEND_DIRS= ${_UNIFIED_DEPENDS:C,^[^:]*:([^:]*).*$,\1,} _DEPEND_SPECIALS= ${_UNIFIED_DEPENDS:M*\:*\:*:C,^[^:]*:([^:]*):.*$,\1,} all-depends-list: @@ -4358,95 +4357,24 @@ ALL-DEPENDS-LIST= \ dp_SCRIPTSDIR="${SCRIPTSDIR}" \ ${SH} ${SCRIPTSDIR}/all-depends-list.sh -CLEAN-DEPENDS-FULL= \ - L="${_DEPEND_DIRS}"; \ - checked=""; \ - while [ -n "$$L" ]; do \ - l=""; \ - for d in $$L; do \ - case $$checked in \ - $$d\ *|*\ $$d\ *|*\ $$d) \ - continue;; \ - esac; \ - checked="$$checked $$d"; \ - if [ ! -d $$d ]; then \ - ${ECHO_MSG} "${PKGNAME}: \"$$d\" non-existent -- dependency list incomplete" >&2; \ - continue; \ - fi; \ - if ! children=$$(cd $$d && ${MAKE} -V WRKDIR -V _DEPEND_DIRS); then \ - ${ECHO_MSG} "${PKGNAME}: \"$$d\" erroneous -- dependency list incomplete" >&2; \ - continue; \ - fi; \ - state=0; \ - for child in $$children; do \ - case $$state in \ - 0) \ - if [ -d $$child ]; then \ - ${ECHO_CMD} $$d; \ - fi; \ - state=1;; \ - 1) \ - case "$$checked $$l" in \ - $$child\ *|*\ $$child\ *|*\ $$child) \ - continue;; \ - esac; \ - l="$$l $$child";; \ - esac; \ - done; \ - done; \ - L=$$l; \ - done - -CLEAN-DEPENDS-LIMITED= \ - L="${_DEPEND_DIRS}"; \ - checked=""; \ - while [ -n "$$L" ]; do \ - l=""; \ - for d in $$L; do \ - case $$checked in \ - $$d\ *|*\ $$d\ *|*\ $$d) \ - continue;; \ - esac; \ - checked="$$checked $$d"; \ - if [ ! -d $$d ]; then \ - ${ECHO_MSG} "${PKGNAME}: \"$$d\" non-existent -- dependency list incomplete" >&2; \ - continue; \ - fi; \ - if ! children=$$(cd $$d && ${MAKE} -V WRKDIR -V _DEPEND_DIRS); then \ - ${ECHO_MSG} "${PKGNAME}: \"$$d\" erroneous -- dependency list incomplete" >&2; \ - continue; \ - fi; \ - state=0; \ - for child in $$children; do \ - case $$state in \ - 0) \ - if [ ! -d $$child ]; then \ - break; \ - fi; \ - state=1; \ - ${ECHO_CMD} $$d;; \ - 1) \ - case "$$checked $$l" in \ - $$child\ *|*\ $$child\ *|*\ $$child) \ - continue;; \ - esac; \ - l="$$l $$child";; \ - esac; \ - done; \ - done; \ - L=$$l; \ - done +CLEAN-DEPENDS-LIST= \ + ${SETENV} dp_ALLDEPENDS="${_UNIFIED_DEPENDS}" \ + dp_PORTSDIR="${PORTSDIR}" \ + dp_MAKE="${MAKE}" \ + dp_PKGNAME="${PKGNAME}" \ + dp_SCRIPTSDIR="${SCRIPTSDIR}" \ + ${SH} ${SCRIPTSDIR}/clean-depends-list.sh .if !target(clean-depends) clean-depends: - @for dir in $$(${CLEAN-DEPENDS-FULL}); do \ + @for dir in $$(${CLEAN-DEPENDS-LIST} full); do \ (cd $$dir; ${MAKE} NOCLEANDEPENDS=yes clean); \ done .endif .if !target(limited-clean-depends) limited-clean-depends: - @for dir in $$(${CLEAN-DEPENDS-LIMITED}); do \ + @for dir in $$(${CLEAN-DEPENDS-LIST} limited); do \ (cd $$dir; ${MAKE} NOCLEANDEPENDS=yes clean); \ done .endif