Date: Tue, 24 Mar 2015 13:33:15 +0800 From: Julian Elischer <julian@freebsd.org> To: ports@freebsd.org Cc: Devin Teske <dteske@FreeBSD.org> Subject: patch to bsd.ports.mk to support out-of-tree patches. Message-ID: <5510F71B.7030900@freebsd.org>
next in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5510F71B.7030900>