Date: Tue, 24 Mar 2015 16:06:23 +0800 From: Julian Elischer <julian@freebsd.org> To: Chris H <bsd-lists@bsdforge.com>, ports@freebsd.org Cc: Devin Teske <dteske@FreeBSD.org> Subject: Re: patch to bsd.ports.mk to support out-of-tree patches. Message-ID: <55111AFF.8090901@freebsd.org> In-Reply-To: <0f7fcd73df4eca6817fc5eca8ff42207@ultimatedns.net> References: <5510F71B.7030900@freebsd.org> <0f7fcd73df4eca6817fc5eca8ff42207@ultimatedns.net>
next in thread | previous in thread | raw e-mail | index | archive | help
On 3/24/15 1:45 PM, Chris H wrote: > On Tue, 24 Mar 2015 13:33:15 +0800 Julian Elischer <julian@freebsd.org> wrote > >> 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? > Thank you for this, Julian! > Absolutely interested in seeing this. I've been forced > to kludge a similar approach. This would be wonderful. Well, we'll see what the regular ports people think.. I am not a ports committer :-) > > Please do. > > --Chris >>
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?55111AFF.8090901>