From 4f2d7949f03e1c198bc888f2d05f421d35c57e21 Mon Sep 17 00:00:00 2001 From: V3n3RiX Date: Mon, 9 Oct 2017 18:53:29 +0100 Subject: reinit the tree, so we can have metadata --- eclass/java-pkg-simple.eclass | 161 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 eclass/java-pkg-simple.eclass (limited to 'eclass/java-pkg-simple.eclass') diff --git a/eclass/java-pkg-simple.eclass b/eclass/java-pkg-simple.eclass new file mode 100644 index 000000000000..0b16cd5d40f3 --- /dev/null +++ b/eclass/java-pkg-simple.eclass @@ -0,0 +1,161 @@ +# Copyright 2004-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +# @ECLASS: java-pkg-simple.eclass +# @MAINTAINER: +# java@gentoo.org +# @AUTHOR: +# Java maintainers (java@gentoo.org) +# @BLURB: Eclass for packaging Java software with ease. +# @DESCRIPTION: +# This class is intended to build pure Java packages from Java sources +# without the use of any build instructions shipped with the sources. +# There is no support for resources besides the generated class files, +# or for generating source files, or for controlling the META-INF of +# the resulting jar, although these issues may be addressed by an +# ebuild by putting corresponding files into the target directory +# before calling the src_compile function of this eclass. + +inherit java-utils-2 + +if ! has java-pkg-2 ${INHERITED}; then + eerror "java-pkg-simple eclass can only be inherited AFTER java-pkg-2" +fi + +EXPORT_FUNCTIONS src_compile src_install + +# We are only interested in finding all java source files, wherever they may be. +S="${WORKDIR}" + +# @ECLASS-VARIABLE: JAVA_GENTOO_CLASSPATH +# @DEFAULT_UNSET +# @DESCRIPTION: +# Comma or space separated list of java packages to include in the +# class path. The packages will also be registered as runtime +# dependencies of this new package. Dependencies will be calculated +# transitively. See "java-config -l" for appropriate package names. +# +# @CODE +# JAVA_GENTOO_CLASSPATH="foo,bar-2" +# @CODE + +# @ECLASS-VARIABLE: JAVA_GENTOO_CLASSPATH_EXTRA +# @DEFAULT_UNSET +# @DESCRIPTION: +# Extra list of colon separated path elements to be put on the +# classpath when compiling sources. + +# @ECLASS-VARIABLE: JAVA_SRC_DIR +# @DEFAULT_UNSET +# @DESCRIPTION: +# Directories relative to ${S} which contain the sources of the +# application. The default of "" will be treated mostly as ${S} +# itself. For the generated source package (if source is listed in +# ${JAVA_PKG_IUSE}), it is important that these directories are +# actually the roots of the corresponding source trees. +# +# @CODE +# JAVA_SRC_DIR="src/java/org/gentoo" +# @CODE + +# @ECLASS-VARIABLE: JAVA_ENCODING +# @DESCRIPTION: +# The character encoding used in the source files. +: ${JAVA_ENCODING:=UTF-8} + +# @ECLASS-VARIABLE: JAVAC_ARGS +# @DEFAULT_UNSET +# @DESCRIPTION: +# Additional arguments to be passed to javac. + +# @ECLASS-VARIABLE: JAVADOC_ARGS +# @DEFAULT_UNSET +# @DESCRIPTION: +# Additional arguments to be passed to javadoc. + +# @ECLASS-VARIABLE: JAVA_JAR_FILENAME +# @DESCRIPTION: +# The name of the jar file to create and install. +: ${JAVA_JAR_FILENAME:=${PN}.jar} + +# @FUNCTION: java-pkg-simple_src_compile +# @DESCRIPTION: +# src_compile for simple bare source java packages. Finds all *.java +# sources in ${JAVA_SRC_DIR}, compiles them with the classpath +# calculated from ${JAVA_GENTOO_CLASSPATH}, and packages the resulting +# classes to ${JAVA_JAR_FILENAME}. +java-pkg-simple_src_compile() { + local sources=sources.lst classes=target/classes apidoc=target/api + + # auto generate classpath + java-pkg_gen-cp JAVA_GENTOO_CLASSPATH + + # gather sources + find ${JAVA_SRC_DIR:-*} -name \*.java > ${sources} + mkdir -p ${classes} || die "Could not create target directory" + + # compile + local classpath="${JAVA_GENTOO_CLASSPATH_EXTRA}" dependency + for dependency in ${JAVA_GENTOO_CLASSPATH}; do + classpath="${classpath}:$(java-pkg_getjars ${dependency})" \ + || die "getjars failed for ${dependency}" + done + while [[ $classpath = *::* ]]; do classpath="${classpath//::/:}"; done + classpath=${classpath%:} + classpath=${classpath#:} + debug-print "CLASSPATH=${classpath}" + ejavac -d ${classes} -encoding ${JAVA_ENCODING} \ + ${classpath:+-classpath ${classpath}} ${JAVAC_ARGS} \ + @${sources} + + # javadoc + if has doc ${JAVA_PKG_IUSE} && use doc; then + mkdir -p ${apidoc} + ejavadoc -d ${apidoc} \ + -encoding ${JAVA_ENCODING} -docencoding UTF-8 -charset UTF-8 \ + ${classpath:+-classpath ${classpath}} ${JAVADOC_ARGS:- -quiet} \ + @${sources} || die "javadoc failed" + fi + + # package + local jar_args="cf ${JAVA_JAR_FILENAME}" + if [[ -e ${classes}/META-INF/MANIFEST.MF ]]; then + jar_args="cfm ${JAVA_JAR_FILENAME} ${classes}/META-INF/MANIFEST.MF" + fi + jar ${jar_args} -C ${classes} . || die "jar failed" +} + +# @FUNCTION: java-pkg-simple_src_install +# @DESCRIPTION: +# src_install for simple single jar java packages. Simply packages the +# contents from the target directory and installs it as +# ${JAVA_JAR_FILENAME}. If the file target/META-INF/MANIFEST.MF exists, +# it is used as the manifest of the created jar. +java-pkg-simple_src_install() { + local sources=sources.lst classes=target/classes apidoc=target/api + + # main jar + java-pkg_dojar ${JAVA_JAR_FILENAME} + + # javadoc + if has doc ${JAVA_PKG_IUSE} && use doc; then + java-pkg_dojavadoc ${apidoc} + fi + + # dosrc + if has source ${JAVA_PKG_IUSE} && use source; then + local srcdirs="" + if [[ ${JAVA_SRC_DIR} ]]; then + local parent child + for parent in ${JAVA_SRC_DIR}; do + for child in ${parent}/*; do + srcdirs="${srcdirs} ${child}" + done + done + else + # take all directories actually containing any sources + srcdirs="$(cut -d/ -f1 ${sources} | sort -u)" + fi + java-pkg_dosrc ${srcdirs} + fi +} -- cgit v1.2.3