2016-08-16 22:29:10 +00:00
/ *
* This file is part of fabric - loom , licensed under the MIT License ( MIT ) .
*
2018-10-27 14:14:05 +00:00
* Copyright ( c ) 2016 , 2017 , 2018 FabricMC
2016-08-16 22:29:10 +00:00
*
* Permission is hereby granted , free of charge , to any person obtaining a copy
* of this software and associated documentation files ( the "Software" ) , to deal
* in the Software without restriction , including without limitation the rights
* to use , copy , modify , merge , publish , distribute , sublicense , and / or sell
* copies of the Software , and to permit persons to whom the Software is
* furnished to do so , subject to the following conditions :
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software .
*
* THE SOFTWARE IS PROVIDED "AS IS" , WITHOUT WARRANTY OF ANY KIND , EXPRESS OR
* IMPLIED , INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY ,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT . IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM , DAMAGES OR OTHER
* LIABILITY , WHETHER IN AN ACTION OF CONTRACT , TORT OR OTHERWISE , ARISING FROM ,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE .
* /
2020-12-24 20:58:30 +00:00
package net.fabricmc.loom.configuration ;
2016-08-15 10:22:14 +00:00
2019-06-11 02:20:57 +00:00
import org.gradle.api.Project ;
2021-05-04 19:06:24 +00:00
import org.gradle.api.artifacts.ConfigurationContainer ;
2016-08-15 10:22:14 +00:00
import org.gradle.api.plugins.JavaPlugin ;
import org.gradle.api.plugins.JavaPluginConvention ;
import org.gradle.api.tasks.SourceSet ;
2018-11-06 09:36:35 +00:00
import org.gradle.api.tasks.bundling.AbstractArchiveTask ;
2016-08-15 10:22:14 +00:00
import org.gradle.api.tasks.javadoc.Javadoc ;
2020-12-24 20:58:30 +00:00
import net.fabricmc.loom.LoomGradleExtension ;
import net.fabricmc.loom.build.mixin.JavaApInvoker ;
import net.fabricmc.loom.build.mixin.KaptApInvoker ;
import net.fabricmc.loom.build.mixin.ScalaApInvoker ;
import net.fabricmc.loom.configuration.ide.SetupIntelijRunConfigs ;
import net.fabricmc.loom.configuration.providers.LaunchProvider ;
import net.fabricmc.loom.configuration.providers.MinecraftProvider ;
import net.fabricmc.loom.configuration.providers.mappings.MappingsProvider ;
2019-11-02 20:23:27 +00:00
import net.fabricmc.loom.util.Constants ;
2019-06-11 02:20:57 +00:00
2020-12-24 20:58:30 +00:00
public final class CompileConfiguration {
private CompileConfiguration ( ) {
2018-12-30 22:26:50 +00:00
}
2020-12-24 20:58:30 +00:00
public static void setupConfigurations ( Project project ) {
2021-05-04 19:06:24 +00:00
final ConfigurationContainer configurations = project . getConfigurations ( ) ;
LoomProjectData data = project . getExtensions ( ) . getByType ( LoomGradleExtension . class ) . getProjectData ( ) ;
2021-03-25 19:03:35 +00:00
2021-05-04 19:06:24 +00:00
data . createLazyConfiguration ( Constants . Configurations . MOD_COMPILE_CLASSPATH ) . configure ( configuration - > configuration . setTransitive ( true ) ) ;
data . createLazyConfiguration ( Constants . Configurations . MOD_COMPILE_CLASSPATH_MAPPED ) . configure ( configuration - > configuration . setTransitive ( false ) ) ;
data . createLazyConfiguration ( Constants . Configurations . MINECRAFT_NAMED ) . configure ( configuration - > configuration . setTransitive ( false ) ) ; // The launchers do not recurse dependencies
data . createLazyConfiguration ( Constants . Configurations . MINECRAFT_DEPENDENCIES ) . configure ( configuration - > configuration . setTransitive ( false ) ) ;
data . createLazyConfiguration ( Constants . Configurations . LOADER_DEPENDENCIES ) . configure ( configuration - > configuration . setTransitive ( false ) ) ;
data . createLazyConfiguration ( Constants . Configurations . MINECRAFT ) . configure ( configuration - > configuration . setTransitive ( false ) ) ;
data . createLazyConfiguration ( Constants . Configurations . INCLUDE ) . configure ( configuration - > configuration . setTransitive ( false ) ) ; // Dont get transitive deps
data . createLazyConfiguration ( Constants . Configurations . MAPPING_CONSTANTS ) ;
2018-11-05 15:54:14 +00:00
2021-05-04 19:06:24 +00:00
extendsFrom ( JavaPlugin . COMPILE_ONLY_CONFIGURATION_NAME , Constants . Configurations . MAPPING_CONSTANTS , project ) ;
data . createLazyConfiguration ( Constants . Configurations . MAPPINGS ) ;
data . createLazyConfiguration ( Constants . Configurations . MAPPINGS_FINAL ) ;
data . createLazyConfiguration ( Constants . Configurations . LOOM_DEVELOPMENT_DEPENDENCIES ) ;
data . createLazyConfiguration ( Constants . Configurations . UNPICK_CLASSPATH ) ;
2021-05-04 18:07:21 +00:00
2019-05-28 07:23:19 +00:00
for ( RemappedConfigurationEntry entry : Constants . MOD_COMPILE_ENTRIES ) {
2021-05-13 21:06:34 +00:00
data . createLazyConfiguration ( entry . sourceConfiguration ( ) )
2021-05-04 18:07:21 +00:00
. configure ( configuration - > configuration . setTransitive ( true ) ) ;
// Don't get transitive deps of already remapped mods
data . createLazyConfiguration ( entry . getRemappedConfiguration ( ) )
. configure ( configuration - > configuration . setTransitive ( false ) ) ;
2019-05-28 07:23:19 +00:00
2021-05-04 19:06:24 +00:00
extendsFrom ( entry . getTargetConfiguration ( configurations ) , entry . getRemappedConfiguration ( ) , project ) ;
2019-11-02 20:23:27 +00:00
2019-05-28 07:23:19 +00:00
if ( entry . isOnModCompileClasspath ( ) ) {
2021-05-13 21:06:34 +00:00
extendsFrom ( Constants . Configurations . MOD_COMPILE_CLASSPATH , entry . sourceConfiguration ( ) , project ) ;
2020-12-24 20:58:30 +00:00
extendsFrom ( Constants . Configurations . MOD_COMPILE_CLASSPATH_MAPPED , entry . getRemappedConfiguration ( ) , project ) ;
2019-05-28 07:23:19 +00:00
}
}
2020-12-24 20:58:30 +00:00
extendsFrom ( JavaPlugin . COMPILE_CLASSPATH_CONFIGURATION_NAME , Constants . Configurations . MINECRAFT_NAMED , project ) ;
extendsFrom ( JavaPlugin . RUNTIME_CLASSPATH_CONFIGURATION_NAME , Constants . Configurations . MINECRAFT_NAMED , project ) ;
extendsFrom ( JavaPlugin . TEST_COMPILE_CLASSPATH_CONFIGURATION_NAME , Constants . Configurations . MINECRAFT_NAMED , project ) ;
extendsFrom ( JavaPlugin . TEST_RUNTIME_CLASSPATH_CONFIGURATION_NAME , Constants . Configurations . MINECRAFT_NAMED , project ) ;
2018-12-30 23:42:49 +00:00
2020-12-24 20:58:30 +00:00
extendsFrom ( Constants . Configurations . LOADER_DEPENDENCIES , Constants . Configurations . MINECRAFT_DEPENDENCIES , project ) ;
extendsFrom ( Constants . Configurations . MINECRAFT_NAMED , Constants . Configurations . LOADER_DEPENDENCIES , project ) ;
2019-12-11 14:42:02 +00:00
2021-01-17 18:34:22 +00:00
extendsFrom ( JavaPlugin . IMPLEMENTATION_CONFIGURATION_NAME , Constants . Configurations . MAPPINGS_FINAL , project ) ;
2021-02-14 13:56:22 +00:00
2021-02-14 14:22:20 +00:00
extendsFrom ( JavaPlugin . RUNTIME_CLASSPATH_CONFIGURATION_NAME , Constants . Configurations . LOOM_DEVELOPMENT_DEPENDENCIES , project ) ;
2021-04-21 07:51:56 +00:00
extendsFrom ( JavaPlugin . TEST_RUNTIME_CLASSPATH_CONFIGURATION_NAME , Constants . Configurations . LOOM_DEVELOPMENT_DEPENDENCIES , project ) ;
2020-05-22 13:38:25 +00:00
}
2021-03-12 22:16:24 +00:00
public static void configureCompile ( Project p ) {
JavaPluginConvention javaModule = ( JavaPluginConvention ) p . getConvention ( ) . getPlugins ( ) . get ( "java" ) ;
2016-08-17 16:38:54 +00:00
SourceSet main = javaModule . getSourceSets ( ) . getByName ( SourceSet . MAIN_SOURCE_SET_NAME ) ;
2021-03-12 22:16:24 +00:00
Javadoc javadoc = ( Javadoc ) p . getTasks ( ) . getByName ( JavaPlugin . JAVADOC_TASK_NAME ) ;
2016-08-17 16:38:54 +00:00
javadoc . setClasspath ( main . getOutput ( ) . plus ( main . getCompileClasspath ( ) ) ) ;
2021-03-12 22:16:24 +00:00
p . afterEvaluate ( project - > {
LoomGradleExtension extension = project . getExtensions ( ) . getByType ( LoomGradleExtension . class ) ;
2018-12-22 13:44:34 +00:00
2021-03-12 22:16:24 +00:00
MavenConfiguration . setup ( project ) ;
2016-08-17 16:38:54 +00:00
2018-11-04 21:28:46 +00:00
LoomDependencyManager dependencyManager = new LoomDependencyManager ( ) ;
extension . setDependencyManager ( dependencyManager ) ;
2016-08-17 16:38:54 +00:00
2020-12-24 20:58:30 +00:00
dependencyManager . addProvider ( new MinecraftProvider ( project ) ) ;
dependencyManager . addProvider ( new MappingsProvider ( project ) ) ;
dependencyManager . addProvider ( new LaunchProvider ( project ) ) ;
2019-04-22 11:41:16 +00:00
2021-03-12 22:16:24 +00:00
dependencyManager . handleDependencies ( project ) ;
2018-10-29 11:55:30 +00:00
2021-03-12 22:16:24 +00:00
project . getTasks ( ) . getByName ( "idea" ) . finalizedBy ( project . getTasks ( ) . getByName ( "genIdeaWorkspace" ) ) ;
project . getTasks ( ) . getByName ( "eclipse" ) . finalizedBy ( project . getTasks ( ) . getByName ( "genEclipseRuns" ) ) ;
project . getTasks ( ) . getByName ( "cleanEclipse" ) . finalizedBy ( project . getTasks ( ) . getByName ( "cleanEclipseRuns" ) ) ;
2018-11-05 12:00:54 +00:00
2021-03-12 22:16:24 +00:00
SetupIntelijRunConfigs . setup ( project ) ;
2018-12-19 23:05:19 +00:00
2018-12-30 11:03:25 +00:00
// Enables the default mod remapper
2018-11-06 09:36:35 +00:00
if ( extension . remapMod ) {
2021-03-12 22:16:24 +00:00
RemapConfiguration . setupDefaultRemap ( project ) ;
2018-12-12 06:10:30 +00:00
} else {
2021-03-12 22:16:24 +00:00
AbstractArchiveTask jarTask = ( AbstractArchiveTask ) project . getTasks ( ) . getByName ( "jar" ) ;
2020-06-29 14:25:05 +00:00
extension . getUnmappedModCollection ( ) . from ( jarTask ) ;
2016-10-12 09:44:31 +00:00
}
2020-06-23 18:22:36 +00:00
2020-10-21 07:57:13 +00:00
// Disable some things used by log4j via the mixin AP that prevent it from being garbage collected
System . setProperty ( "log4j2.disable.jmx" , "true" ) ;
System . setProperty ( "log4j.shutdownHookEnabled" , "false" ) ;
2021-02-13 18:04:16 +00:00
System . setProperty ( "log4j.skipJansi" , "true" ) ;
2020-10-21 07:57:13 +00:00
project . getLogger ( ) . info ( "Configuring compiler arguments for Java" ) ;
2020-06-23 18:22:36 +00:00
new JavaApInvoker ( project ) . configureMixin ( ) ;
if ( project . getPluginManager ( ) . hasPlugin ( "scala" ) ) {
2020-10-21 07:57:13 +00:00
project . getLogger ( ) . info ( "Configuring compiler arguments for Scala" ) ;
2020-06-23 18:22:36 +00:00
new ScalaApInvoker ( project ) . configureMixin ( ) ;
}
if ( project . getPluginManager ( ) . hasPlugin ( "org.jetbrains.kotlin.kapt" ) ) {
2020-10-21 07:57:13 +00:00
project . getLogger ( ) . info ( "Configuring compiler arguments for Kapt plugin" ) ;
2020-06-23 18:22:36 +00:00
new KaptApInvoker ( project ) . configureMixin ( ) ;
}
2016-10-12 09:22:08 +00:00
} ) ;
2020-06-23 18:22:36 +00:00
2021-03-12 22:16:24 +00:00
if ( p . getPluginManager ( ) . hasPlugin ( "org.jetbrains.kotlin.kapt" ) ) {
2020-06-23 18:22:36 +00:00
// If loom is applied after kapt, then kapt will use the AP arguments too early for loom to pass the arguments we need for mixin.
throw new IllegalArgumentException ( "fabric-loom must be applied BEFORE kapt in the plugins { } block." ) ;
}
2016-08-29 10:08:23 +00:00
}
2019-03-30 20:08:25 +00:00
2020-12-24 20:58:30 +00:00
private static void extendsFrom ( String a , String b , Project project ) {
2021-05-04 19:06:24 +00:00
project . getConfigurations ( ) . getByName ( a , configuration - > configuration . extendsFrom ( project . getConfigurations ( ) . getByName ( b ) ) ) ;
2019-04-21 16:42:51 +00:00
}
2016-08-15 10:22:14 +00:00
}