# Copyright 1999-2021 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=7 inherit java-pkg-2 kotlin-compiler DESCRIPTION="Statically typed programming language for modern multiplatform applications" HOMEPAGE="https://kotlinlang.org/" SRC_URI=" https://github.com/JetBrains/kotlin/releases/download/v${PV}/kotlin-compiler-${PV}.zip test? ( https://github.com/JetBrains/kotlin/archive/refs/tags/v${PV}.tar.gz -> kotlin-${PV}.tar.gz ) " LICENSE="Apache-2.0 BSD MIT NPL-1.1" SLOT="$(ver_cut 1-2)" KEYWORDS="~amd64" IUSE="test" RESTRICT="!test? ( test )" KOTLIN_LIB_SLOT="$(ver_cut 1-2)" JB_ANNOTATIONS_SLOT="13" RDEPEND=" ~dev-java/kotlin-common-bin-${PV}:${KOTLIN_LIB_SLOT} dev-java/jetbrains-annotations:${JB_ANNOTATIONS_SLOT} dev-java/jetbrains-trove:0 >=virtual/jdk-1.8:* " BDEPEND=" app-arch/unzip " DEPEND=" ${RDEPEND} test? ( dev-java/junit:4 ) " S="${WORKDIR}/kotlinc" KOTLIN_COMPILER_HOME="/opt/${PN}-${SLOT}" KOTLINC_LIBS=( allopen-compiler-plugin.jar android-extensions-compiler.jar android-extensions-runtime.jar js.engines.jar jvm-abi-gen.jar kotlin-annotation-processing.jar kotlin-annotation-processing-cli.jar kotlin-annotation-processing-runtime.jar kotlin-ant.jar kotlin-compiler.jar kotlin-daemon-client.jar kotlin-daemon-client-new.jar kotlin-daemon.jar kotlin-imports-dumper-compiler-plugin.jar kotlin-main-kts.jar kotlin-preloader.jar kotlin-runner.jar kotlin-scripting-common.jar kotlin-scripting-compiler-impl.jar kotlin-scripting-compiler.jar kotlin-scripting-js.jar kotlin-scripting-jvm.jar kotlin-script-runtime.jar kotlin-source-sections-compiler-plugin.jar kotlinx-serialization-compiler-plugin.jar mutability-annotations-compat.jar noarg-compiler-plugin.jar sam-with-receiver-compiler-plugin.jar ) src_prepare() { java-pkg-2_src_prepare KOTLINC_BIN_TMP="${T}/bin" mkdir "${KOTLINC_BIN_TMP}" || die rm bin/*.bat || die cp bin/* "${KOTLINC_BIN_TMP}" || die KOTLINC_LIB_TMP="${T}/lib" mkdir "${KOTLINC_LIB_TMP}" || die cp "${KOTLINC_LIBS[@]/#/lib/}" "${KOTLINC_LIB_TMP}" || die java-pkg_jar-from --into "${KOTLINC_LIB_TMP}" \ "kotlin-common-bin-${KOTLIN_LIB_SLOT}" java-pkg_jar-from --into "${KOTLINC_LIB_TMP}" \ "jetbrains-annotations-${JB_ANNOTATIONS_SLOT}" \ jetbrains-annotations.jar annotations-13.0.jar java-pkg_jar-from --into "${KOTLINC_LIB_TMP}" \ "jetbrains-trove" \ jetbrains-trove.jar trove4j.jar } my_kotlinc() { "${KOTLINC_BIN_TMP}/kotlinc" -jvm-target "$(java-pkg_get-target)" "$@" \ || die } run_sample_tests() { cd "${STDLIB_S}/samples/test" || die # All sample files except _sampleUtils.kt, # the utility class used to support the samples local samples=( $(find * -mindepth 2 -name "*.kt") ) ebegin "Compiling samples" # Compile the utility class which is used by all classes in the samples my_kotlinc -cp "${CP}" samples/_sampleUtils.kt # See libraries/stdlib/samples/build.gradle under Kotlin source tree for # compiler arguments my_kotlinc -cp "${CP}" \ -Xuse-experimental=kotlin.ExperimentalStdlibApi \ -Xuse-experimental=kotlin.ExperimentalUnsignedTypes \ -Xuse-experimental=kotlin.time.ExperimentalTime \ "${samples[@]}" ebegin "Running tests from samples" local TESTS=$(find * -mindepth 2 -name "*.class" \ -not -name "*\$*.class" -not -name "*Kt.class") TESTS="${TESTS//.class}" TESTS="${TESTS//\//.}" ejunit4 -cp "${CP}" ${TESTS} } run_module_tests() { cd "${STDLIB_S}" || die local skipped_classes=( # JavaScript tests, which cannot be run on JVM test/js/* # Test that requires Kotlin Native test/random/RandomTest.kt # Failing tests jvm/test/utils/AssertionsJVMTest.kt ) if has network-sandbox ${FEATURES}; then einfo "Skipping classes with test cases that require network connection" einfo "due to FEATURES=network-sandbox" skipped_classes+=( jvm/test/io/ReadWrite.kt ) fi rm "${skipped_classes[@]}" || die local common_sources=( $(find {.,common}/test -name "*.kt") ) local test_sources=( $(find {.,common,jvm}/test -name "*.kt") ) local OLD_IFS="${IFS}" IFS=',' local common_sources_val="${common_sources[*]}" IFS="${OLD_IFS}" ebegin "Compiling module tests" JAVA_OPTS="-Xmx768M" my_kotlinc -cp "${CP}" \ -Xmulti-platform \ -Xopt-in=kotlin.RequiresOptIn \ -Xuse-experimental=kotlin.ExperimentalStdlibApi \ -Xuse-experimental=kotlin.ExperimentalUnsignedTypes \ -Xuse-experimental=kotlin.time.ExperimentalTime \ -Xcommon-sources="${common_sources_val}" \ "${test_sources[@]}" ebegin "Running module tests" local TESTS=$(find * -name "*Test.class") TESTS="${TESTS//.class}" TESTS="${TESTS//\//.}" ejunit4 -cp "${CP}" ${TESTS} } src_test() { local STDLIB_S="${WORKDIR}/kotlin-${PV}/libraries/stdlib" local CP=".:$(java-pkg_getjars \ "kotlin-common-bin-${KOTLIN_LIB_SLOT},junit-4")" run_sample_tests run_module_tests } src_install() { into "${KOTLIN_COMPILER_HOME}" dobin "${KOTLINC_BIN_TMP}"/* insinto "${KOTLIN_COMPILER_HOME}/lib" doins "${KOTLINC_LIB_TMP}"/* # Remove redundant copy of Apache-2.0 license rm license/LICENSE.txt dodoc -r license/* # build.txt required for 'kotlin -version' insinto "${KOTLIN_COMPILER_HOME}" doins build.txt }