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
>
>
>

Attachment: snakeyaml.tgz
Description: GNU Zip compressed data

Reply via email to