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