Kurt, Thanks for the feedback on this. Your suggestions were great - now that I've implemented them it has dramatically simplified things.
I have attached the sample port for snakeyaml that uses the new infrastructure as well as a new diff for the java.port.mk file below. I'd appreciate any further feedback and, if all is good, a commit from some kind soul. :-) Index: java.port.mk =================================================================== RCS file: /home/cvs/ports/devel/jdk/java.port.mk,v retrieving revision 1.34 diff -u -p -r1.34 java.port.mk --- java.port.mk 17 Jun 2015 17:16:04 -0000 1.34 +++ java.port.mk 14 Apr 2016 18:54:07 -0000 @@ -110,6 +110,33 @@ do-build: . endif .endif +# Allow ports that use devel/maven to set MODJAVA_BUILD=maven +# Since maven downloads dependencies at build-time (which is not allowed +# in our production builds because we turn on networking support only +# for the fetch phase of the build), maven's offline repository support +# is used and the port maintainer is expected to supply an archive that +# holds the complete set of dependencies needed to build the port. +.if defined(MODJAVA_BUILD) && ${MODJAVA_BUILD:L} == "maven" +BUILD_DEPENDS += devel/maven + MODJAVA_BUILD_DEP_SITE ?= + MODJAVA_BUILD_TARGET_NAME ?= package + MODJAVA_BUILD_FILE ?= pom.xml + MODJAVA_BUILD_DIR ?= ${WRKSRC} + MODJAVA_BUILD_ARGS ?= + MODJAVA_BUILD_DEP_DIR ?= + +MODJAVA_BUILD_TARGET = \ + cd ${MODJAVA_BUILD_DIR} && \ + ${SETENV} ${MAKE_ENV} ${LOCALBASE}/bin/mvn \ + -f ${MODJAVA_BUILD_FILE} \ + -Dmaven.repo.local="${MODJAVA_BUILD_DEP_DIR}" \ + -o ${MODJAVA_BUILD_ARGS} ${MODJAVA_BUILD_TARGET_NAME} +. if !target(do-build) +do-build: + ${MODJAVA_BUILD_TARGET} +. endif +.endif + # Convenience variables. # Ports that install .jar files for public use (ie, in ${MODJAVA_JAR_DIR}) # please install unversioned .jar files. If a port installs Thanks, Bryan On Thu, Apr 7, 2016 at 10:42 AM, Kurt Miller <k...@intricatesoftware.com> wrote: > Thanks Bryan for working on this. I have some comments. > > On Tue, 2016-04-05 at 13:35 -0400, Bryan C. Everly wrote: >> Ports@ >> >> I have taken a stab at a diff that will allow us to integrate Maven >> based ports into the build process. As you may know, Maven downloads >> dependencies at build time which the good security in our build >> process does not allow, as network access is only on when we are >> downloading the source. >> >> This patch to /usr/ports/devel/jdk/java.port.mk follows in the same >> model as the apache-ant build support that previously existed. I have >> included a tarball of my snakeyaml proposed port to demonstrate how >> the patch works. >> >> I would appreciate your feedback on this as it is the first time I >> have offered a patch to the ports infrastructure. >> >> Patch follows: >> >> Index: java.port.mk >> =================================================================== >> RCS file: /home/cvs/ports/devel/jdk/java.port.mk,v >> retrieving revision 1.34 >> diff -u -p -r1.34 java.port.mk >> --- java.port.mk 17 Jun 2015 17:16:04 -0000 1.34 >> +++ java.port.mk 5 Apr 2016 00:50:17 -0000 >> @@ -110,6 +110,42 @@ do-build: >> . endif >> .endif >> >> +# Allow ports that use devel/maven to set MODJAVA_BUILD=maven >> +# Since maven downloads dependencies at build-time (which is not allowed >> +# in our production builds because we turn on networking support only >> +# for the fetch phase of the build), maven's offline repository support >> +# is used and the port maintainer is expected to supply an archive that >> +# holds the complete set of dependencies needed to build the port. >> +.if defined(MODJAVA_BUILD) && ${MODJAVA_BUILD:L} == "maven" >> +BUILD_DEPENDS += devel/maven >> + MODJAVA_BUILD_DEP_SITE ?= >> + MODJAVA_BUILD_TARGET_NAME ?= package >> + MODJAVA_BUILD_FILE ?= pom.xml >> + MODJAVA_BUILD_DIR ?= ${WRKSRC} >> + MODJAVA_BUILD_ARGS ?= >> + MODJAVA_BUILD_DEP_DIR ?= ${WRKDIR} >> + MODJAVA_BUILD_DEP_SUB ?= local-repo >> + MODJAVA_BUILD_DEP_PKG ?= maven-dependencies.tgz >> + MODJAVA_BUILD_DEP_UNPACK ?= tar >> + MODJAVA_BUILD_DEP_UNPACK_ARGS ?= xzf >> + >> +MODJAVA_BUILD_UNPACK_DEPS = \ >> + cd ${MODJAVA_BUILD_DEP_DIR} && \ >> + ${SETENV} ${MODJAVA_BUILD_DEP_UNPACK} >> ${MODJAVA_BUILD_DEP_UNPACK_ARGS} ${MODJAVA_BUILD_DEP_PKG} >> + >> +MODJAVA_BUILD_TARGET = \ >> + cd ${MODJAVA_BUILD_DIR} && \ >> + ${SETENV} ${MAKE_ENV} ${LOCALBASE}/bin/mvn \ >> + -f ${MODJAVA_BUILD_FILE} \ >> + >> -Dmaven.repo.local="${MODJAVA_BUILD_DEP_DIR}/${MODJAVA_BUILD_DEP_SUB}" >> \ >> + -o ${MODJAVA_BUILD_ARGS} ${MODJAVA_BUILD_TARGET_NAME} > > I think you should make this simpler and use the current infrastructure > for downloading and extracting a second distfile for the maven > dependencies. The port maintainer should be responsible for putting both > the port distfile and the maven-dependencies distfile into DISTFILES, > using :0 if a second master site is needed. > >> +. if !target(do-build) >> +do-build: >> + ${MODJAVA_BUILD_UNPACK_DEPS} >> + ${MODJAVA_BUILD_TARGET} >> +. endif >> +.endif >> + >> # Convenience variables. >> # Ports that install .jar files for public use (ie, in ${MODJAVA_JAR_DIR}) >> # please install unversioned .jar files. If a port installs > > Try to make your do-build target just do the ${MODJAVA_BUILD_TARGET} and > not do any further extraction. The port maintainer can build the > dependencies distfile such that it extracts correctly in one shot. > > I would favor less tunables as well. See if you can reduce all the > MODJAVA_BUILD_DEP_* ones down to one that points to the maven.repo.local > directory directly. > > Regards, > -Kurt > > >
snakeyaml.tgz
Description: GNU Zip compressed data