diff --git a/.gitignore b/.gitignore index 9b089b07c56..acaae95aae8 100644 --- a/.gitignore +++ b/.gitignore @@ -38,6 +38,7 @@ build/ .idea/artifacts/dist_auto_* .idea/artifacts/dist.xml .idea/artifacts/ideaPlugin.xml +.idea/artifacts/kotlinc.xml .idea/artifacts/kotlin_compiler_jar.xml .idea/artifacts/kotlin_plugin_jar.xml .idea/artifacts/kotlin_jps_plugin_jar.xml diff --git a/.idea/artifacts/kotlinc.xml b/.idea/artifacts/kotlinc.xml deleted file mode 100644 index 7e53b000cb3..00000000000 --- a/.idea/artifacts/kotlinc.xml +++ /dev/null @@ -1,255 +0,0 @@ - - - $PROJECT_DIR$/out/artifacts/kotlinc - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/gradle/jps.gradle.kts b/gradle/jps.gradle.kts index da927c88d06..636162f8774 100644 --- a/gradle/jps.gradle.kts +++ b/gradle/jps.gradle.kts @@ -73,6 +73,8 @@ if (kotlinBuildProperties.isInJpsBuildIdeaSync) { kotlinJpsPluginJar() + kotlinc() + ideaPlugin() dist() @@ -266,6 +268,32 @@ fun NamedDomainObjectContainer.dist() { } } +fun NamedDomainObjectContainer.kotlinc() { + val kotlinCompilerProject = project(":kotlin-compiler") + val libraries by kotlinCompilerProject.configurations + val compilerPlugins by kotlinCompilerProject.configurations + val sources by kotlinCompilerProject.configurations + + create("kotlinc") { + directory("bin") { + directoryContent("$rootDir/compiler/cli/bin") + } + + directory("lib") { + artifact("kotlin-compiler.jar") + jarsFromConfiguration(libraries) { it.replace("-$bootstrapKotlinVersion", "") } + jarsFromConfiguration(compilerPlugins) { it.removePrefix("kotlin-") } + sourceJarsFromConfiguration(sources) { it.replace("-$bootstrapKotlinVersion", "") } + } + + directory("license") { + directoryContent("$rootDir/license") + } + + file("$rootDir/bootstrap/build.txt") + } +} + fun NamedDomainObjectContainer.ideaPlugin() { val ideaPluginProject = project(":prepare:idea-plugin") (ideaPluginProject as ProjectInternal).evaluate() @@ -335,26 +363,67 @@ fun RecursiveArtifact.jarContentsFromConfiguration(configuration: Configuration) } } -fun RecursiveArtifact.jarsFromConfiguration(configuration: Configuration) { +fun RecursiveArtifact.sourceJarsFromConfiguration(configuration: Configuration, renamer: (String) -> String = { it }) { val resolvedArtifacts = configuration .resolvedConfiguration .resolvedArtifacts - resolvedArtifacts.filter { it.id.componentIdentifier is ModuleComponentIdentifier } - .map { it.file } - .forEach(::file) + jarsFromExternalModules(resolvedArtifacts, renamer) + + resolvedArtifacts + .map { it.id.componentIdentifier } + .filterIsInstance() + .forEach { + val jarBaseName = project(it.projectPath).the().archivesBaseName + val renamed = renamer("$jarBaseName-sources") + ".jar" + archive(renamed) { + project(it.projectPath) + .mainSourceSet + .allSource + .sourceDirectories + .forEach {sourceDirectory -> + directoryContent(sourceDirectory) + } + } + } +} + +fun RecursiveArtifact.jarsFromConfiguration(configuration: Configuration, renamer: (String) -> String = { it }) { + val resolvedArtifacts = configuration + .resolvedConfiguration + .resolvedArtifacts + + jarsFromExternalModules(resolvedArtifacts, renamer) resolvedArtifacts .map { it.id.componentIdentifier } .filterIsInstance() .forEach { - val artifactName = it.projectName + ".jar" + val jarBaseName = project(it.projectPath).the().archivesBaseName + val artifactName = renamer(jarBaseName) + ".jar" if (it.projectName in jarArtifactProjects) { artifact(artifactName) } else { archive(artifactName) { moduleOutput(moduleName(it.projectPath)) + jarContentsFromEmbeddedConfiguration(project(it.projectPath)) } } } +} + +fun RecursiveArtifact.jarsFromExternalModules(resolvedArtifacts: Iterable, renamer: (String) -> String = { it }) { + // Use output-file-name property when fixed https://github.com/JetBrains/gradle-idea-ext-plugin/issues/63 + resolvedArtifacts.filter { it.id.componentIdentifier is ModuleComponentIdentifier } + .forEach { + val baseName = it.file.nameWithoutExtension + val renamed = renamer(baseName) + if (it.file.extension == "jar" && renamed != baseName) { + archive("$renamed.jar") { + extractedDirectory(it.file) + } + } else { + file(it.file) + } + } } \ No newline at end of file diff --git a/prepare/compiler/build.gradle.kts b/prepare/compiler/build.gradle.kts index f55d8ca84bc..dadf435c169 100644 --- a/prepare/compiler/build.gradle.kts +++ b/prepare/compiler/build.gradle.kts @@ -100,10 +100,7 @@ val distCompilerPluginProjects = listOf( val distSourcesProjects = listOfNotNull( ":kotlin-annotations-jvm", - ":kotlin-reflect", ":kotlin-script-runtime", - ":kotlin-stdlib-jdk7".takeIf { !kotlinBuildProperties.isInJpsBuildIdeaSync }, - ":kotlin-stdlib-jdk8".takeIf { !kotlinBuildProperties.isInJpsBuildIdeaSync }, ":kotlin-stdlib-js-ir".takeIf { jsIrDist }, ":kotlin-test:kotlin-test-js", ":kotlin-test:kotlin-test-js-ir".takeIf { jsIrDist }, @@ -113,7 +110,7 @@ val distSourcesProjects = listOfNotNull( ":kotlin-test:kotlin-test-testng" ) -libraries.apply { +configurations.all { resolutionStrategy { preferProjectModules() } @@ -157,9 +154,16 @@ dependencies { sources(project(it, configuration = "sources")) } - if (!kotlinBuildProperties.isInJpsBuildIdeaSync) { + sources(kotlinStdlib("jdk7", classifier = "sources")) + sources(kotlinStdlib("jdk8", classifier = "sources")) + + if (kotlinBuildProperties.isInJpsBuildIdeaSync) { + sources(kotlinStdlib(classifier = "sources")) + sources("org.jetbrains.kotlin:kotlin-reflect:$bootstrapKotlinVersion:sources") + } else { sources(project(":kotlin-stdlib", configuration = "distSources")) sources(project(":kotlin-stdlib-js", configuration = "distSources")) + sources(project(":kotlin-reflect", configuration = "sources")) distStdlibMinimalForTests(project(":kotlin-stdlib:jvm-minimal-for-test"))