Skip site navigation (1)Skip section navigation (2)
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>