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