Date: Mon, 23 Mar 2015 22:45:45 -0700 From: "Chris H" <bsd-lists@bsdforge.com> To: ports@freebsd.org, Julian Elischer <julian@freebsd.org> Cc: Devin Teske <dteske@FreeBSD.org> Subject: Re: patch to bsd.ports.mk to support out-of-tree patches. Message-ID: <0f7fcd73df4eca6817fc5eca8ff42207@ultimatedns.net> In-Reply-To: <5510F71B.7030900@freebsd.org> References: <5510F71B.7030900@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
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. Please do. --Chris > > > Julian > > > > > _______________________________________________ > freebsd-ports@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-ports > To unsubscribe, send any mail to "freebsd-ports-unsubscribe@freebsd.org"
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?0f7fcd73df4eca6817fc5eca8ff42207>