patch to bsd.ports.mk to support out-of-tree patches.

Julian Elischer julian at freebsd.org
Tue Mar 24 05:33:31 UTC 2015


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






More information about the freebsd-ports mailing list