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