// Builds a Ghidra Extension for a given Ghidra installation.
//
// An absolute path to the Ghidra installation directory must be supplied either by setting the
// GHIDRA_INSTALL_DIR environment variable or Gradle project property:
//
//     > export GHIDRA_INSTALL_DIR=<Absolute path to Ghidra>
//     > gradle
//
//         or
//
//     > gradle -PGHIDRA_INSTALL_DIR=<Absolute path to Ghidra>
//
// Gradle should be invoked from the directory of the project to build.  Please see the
// application.gradle.version property in <GHIDRA_INSTALL_DIR>/Ghidra/application.properties
// for the correction version of Gradle to use for the Ghidra installation you specify.

//----------------------START "DO NOT MODIFY" SECTION------------------------------
apply plugin: 'java'
apply plugin: 'eclipse'
def ghidraInstallDir

if (System.env.GHIDRA_INSTALL_DIR) {
	ghidraInstallDir = System.env.GHIDRA_INSTALL_DIR
}
else if (project.hasProperty("GHIDRA_INSTALL_DIR")) {
	ghidraInstallDir = project.getProperty("GHIDRA_INSTALL_DIR")
}

if (ghidraInstallDir) {
	apply from: new File(ghidraInstallDir).getCanonicalPath() + "/support/buildExtension.gradle"
}
else {
	throw new GradleException("GHIDRA_INSTALL_DIR is not defined!")
}
//----------------------END "DO NOT MODIFY" SECTION-------------------------------
def ghidraUserDir = System.getProperty("user.home") + "/.ghidra/.${DISTRO_PREFIX}_${RELEASE_NAME}"

repositories {
	mavenLocal()
	mavenCentral()
}

java {
    sourceCompatibility = JavaVersion.VERSION_17
    targetCompatibility = JavaVersion.VERSION_17
}

dependencies {
	runtimeOnly fileTree(dir: ghidraInstallDir + '/Ghidra/patch', include: "**/*.jar")
	runtimeOnly fileTree(dir: ghidraInstallDir + '/Ghidra/Configurations', include: "**/*.jar")
	runtimeOnly fileTree(dir: ghidraInstallDir + '/Ghidra/Features', include: "**/*.jar")
	runtimeOnly fileTree(dir: ghidraInstallDir + '/Ghidra/Framework', include: "**/*.jar")
	runtimeOnly fileTree(dir: ghidraInstallDir + '/Ghidra/Processors', include: "**/*.jar")
	runtimeOnly fileTree(dir: ghidraInstallDir + '/Ghidra/Debug', include: "**/*.jar")
	compileOnly fileTree(dir: ghidraInstallDir + '/Ghidra/Extensions',
						 include: "**/*.jar", exclude: project.name)
	compileOnly fileTree(dir: ghidraUserDir + "/Extensions",
						 include: "**/*.jar", exclude: project.name)
	runtimeOnly	fileTree(dir: projectDir.getCanonicalPath() + '/data')
}

eclipse {
    classpath {
        downloadJavadoc = true
        downloadSources = true
		file {
			whenMerged {
				File javaDoc = new File(ghidraInstallDir+"/docs/GhidraAPI_javadoc.zip");
				for (entry in entries) {
					if (entry.path.contains('jar')) {
						File folder = new File(entry.getPath()).getParentFile();
						for (File file : folder.listFiles()) {
							if (file.getName().endsWith(".zip")) {
								if (file.getName().contains("-src")) {
									entry.setSourcePath(it.fileReference(file));
								}
								entry.setJavadocPath(it.fileReference(javaDoc));
							}
						}
					}
				}
				entries.add(
					new org.gradle.plugins.ide.eclipse.model.Library(
						it.fileReference(new File(projectDir, '/bin'))
					)
				)
			}
		}
    }
}

buildExtension {
	exclude '.vscode'
	exclude 'gradle*'
	exclude '.editorconfig'
}
