On Thu, 2016-04-14 at 14:58 -0400, Bryan C. Everly wrote:
> 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.  :-)
> 

Hi Bryan,

Thanks for incorporating the feedback so far. I received some additional
feedback from other devs about the current approach. Could you explore
the following ideas?

We need a directory to point maven.repo.local at that contains the
dependencies for the port. It should be possible to set all maven ports
to use the same DIST_SUBDIR. This would reduce bloat by not having to
have each maven port have custom built dependencies distfile that might
have duplicate data in it. See comments inline below:

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

This var looks unused. Kill it perhaps.

> +    MODJAVA_BUILD_TARGET_NAME ?= package
> +    MODJAVA_BUILD_FILE ?= pom.xml
> +    MODJAVA_BUILD_DIR ?= ${WRKSRC}
> +    MODJAVA_BUILD_ARGS ?=

DIST_SUBDIR ?= maven

> +    MODJAVA_BUILD_DEP_DIR ?=

Change to MODJAVA_BUILD_DEP_DIR ?= ${FULLDISTDIR}

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

Next you would adjust your port, snakeyaml, to have a separate distfile
for each dependency with :0,1,2 and corresponding MASTER_SITES0,1,2 for
download locations. By default ports infrastructure would attempt to
extract all distfiles when building, so you would need to use
EXTRACT_ONLY set to the snakeyaml distfile to have only the snakeyaml
distfile extracted.

If this set of changes works out, I think it will improve the maven
built ports by reducing downloads and also gets rid of the requirement
that a porter has to maintain a separate distfile for each maven port.

-Kurt 



Reply via email to