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