From owner-freebsd-ports@FreeBSD.ORG Tue Mar 24 05:33:31 2015 Return-Path: Delivered-To: ports@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 952038AC; Tue, 24 Mar 2015 05:33:31 +0000 (UTC) Received: from vps1.elischer.org (vps1.elischer.org [204.109.63.16]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "vps1.elischer.org", Issuer "CA Cert Signing Authority" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 74790B61; Tue, 24 Mar 2015 05:33:31 +0000 (UTC) Received: from Julian-MBP3.local (ppp121-45-255-201.lns20.per4.internode.on.net [121.45.255.201]) (authenticated bits=0) by vps1.elischer.org (8.14.9/8.14.9) with ESMTP id t2O5XKZB074710 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO); Mon, 23 Mar 2015 22:33:23 -0700 (PDT) (envelope-from julian@freebsd.org) Message-ID: <5510F71B.7030900@freebsd.org> Date: Tue, 24 Mar 2015 13:33:15 +0800 From: Julian Elischer User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:31.0) Gecko/20100101 Thunderbird/31.5.0 MIME-Version: 1.0 To: ports@freebsd.org Subject: patch to bsd.ports.mk to support out-of-tree patches. Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Cc: Devin Teske X-BeenThere: freebsd-ports@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: Porting software to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 24 Mar 2015 05:33:31 -0000 Hi, I've a need to keep soe changes outside of the ports tree, to allow me to tailor our installs. I could use the "EXTRA_PATCHES" setting, but I'd have to outline the patches every time and keep track of them one by one. Instead, I have adde dhte following to bsd.ports.mk: diff -u bsd.port.mk.orig bsd.port.mk --- bsd.port.mk.orig 2015-03-23 21:55:47.498891000 -0700 +++ bsd.port.mk 2015-03-23 22:15:16.757385000 -0700 @@ -834,6 +834,11 @@ # The patches specified by this variable will be # applied after the normal distribution patches but # before those in ${PATCHDIR}. +# EXTRA_PATCH_TREE - where to find extra 'out-of-tree' patches +# Points to a directory hierarchy with the same layout +# as the ports tree, where local patches can be found. +# This allows a third party to keep their patches in +# some other source control system if needed. # PATCH_WRKSRC - Directory to apply patches in. # Default: ${WRKSRC} # @@ -3523,6 +3528,37 @@ esac | ${PATCH} ${PATCH_DIST_ARGS} `patch_dist_strip $$i` ; \ done ) .endif +.if defined(EXTRA_PATCH_TREE) + @set -e ;\ + if [ -d ${EXTRA_PATCH_TREE} ]; then \ + if [ "`${ECHO_CMD} ${EXTRA_PATCH_TREE}/${PKGORIGIN}/patch-*`" != "${EXTRA_PATCH_TREE}/${PKGORIGIN}/patch-*" ]; then \ + ${ECHO_MSG} "===> Applying local patches for ${PKGNAME}" ; \ + PATCHES_APPLIED="" ; \ + for i in ${EXTRA_PATCH_TREE}/${PKGORIGIN}/patch-*; do \ + case $$i in \ + *.orig|*.rej|*~|*,v) \ + ${ECHO_MSG} "===> Ignoring patchfile $$i" ; \ + ;; \ + *) \ + if [ ${PATCH_DEBUG_TMP} = yes ]; then \ + ${ECHO_MSG} "===> Applying local patch $$i" ; \ + fi; \ + if ${PATCH} ${PATCH_ARGS} < $$i ; then \ + PATCHES_APPLIED="$$PATCHES_APPLIED $$i" ; \ + else \ + ${ECHO_MSG} `${ECHO_CMD} "=> Patch $$i failed to apply cleanly." | ${SED} "s|${EXTRA_PATCH_TREE}/${PKGORIGIN}/||"` ; \ + if [ x"$$PATCHES_APPLIED" != x"" -a ${PATCH_SILENT} != "yes" ]; then \ + ${ECHO_MSG} `${ECHO_CMD} "=> Patch(es) $$PATCHES_APPLIED applied cleanly." | ${SED} "s|${EXTRA_PATCH_TREE}/${PKGORIGIN +}/||g"` ; \ + fi; \ + ${FALSE} ; \ + fi; \ + ;; \ + esac; \ + done; \ + fi; \ + fi +.endif .if defined(EXTRA_PATCHES) @set -e ; \ for i in ${EXTRA_PATCHES}; do \ ============ this allows me to keep as many patches as I require in a separate "out-of-tree" repository, that I can change at will, allowing the actual ports tree to be updated as needed with no chances of file collisions etc. Basically I keep a second parallel 'shadow' tree containing nothing but patches, and the ports tree remains unchanged. Is there any interest on taking this onboard? Julian