diff --git a/Ghidra/Debug/Debugger-agent-dbgeng/build.gradle b/Ghidra/Debug/Debugger-agent-dbgeng/build.gradle index e805db4e6e..56cf406010 100644 --- a/Ghidra/Debug/Debugger-agent-dbgeng/build.gradle +++ b/Ghidra/Debug/Debugger-agent-dbgeng/build.gradle @@ -41,6 +41,10 @@ tasks.assemblePyPackage { } } +tasks.typeCheckPyPackage { + environment("PYTHONPATH", project(":Debugger-rmi-trace").file("build/pypkg/src")) +} + task buildTlb(type: Exec) { def tmpBatch = file("build/buildTlb.bat") diff --git a/Ghidra/Debug/Debugger-agent-drgn/build.gradle b/Ghidra/Debug/Debugger-agent-drgn/build.gradle index e67d8ad504..d4ad08ba28 100644 --- a/Ghidra/Debug/Debugger-agent-drgn/build.gradle +++ b/Ghidra/Debug/Debugger-agent-drgn/build.gradle @@ -26,3 +26,7 @@ dependencies { // Only for Help :/ api project(':Debugger-rmi-trace') } + +tasks.typeCheckPyPackage { + environment("PYTHONPATH", project(":Debugger-rmi-trace").file("build/pypkg/src")) +} diff --git a/Ghidra/Debug/Debugger-agent-gdb/build.gradle b/Ghidra/Debug/Debugger-agent-gdb/build.gradle index 0f11da65ab..f29cb10122 100644 --- a/Ghidra/Debug/Debugger-agent-gdb/build.gradle +++ b/Ghidra/Debug/Debugger-agent-gdb/build.gradle @@ -26,3 +26,7 @@ dependencies { // Only for Help :/ api project(':Debugger-rmi-trace') } + +tasks.typeCheckPyPackage { + environment("PYTHONPATH", project(":Debugger-rmi-trace").file("build/pypkg/src")) +} diff --git a/Ghidra/Debug/Debugger-agent-lldb/build.gradle b/Ghidra/Debug/Debugger-agent-lldb/build.gradle index fc80abd9f6..14dcd82987 100644 --- a/Ghidra/Debug/Debugger-agent-lldb/build.gradle +++ b/Ghidra/Debug/Debugger-agent-lldb/build.gradle @@ -27,3 +27,7 @@ dependencies { api project(':Debugger-rmi-trace') api project(':Debugger-agent-gdb') } + +tasks.typeCheckPyPackage { + environment("PYTHONPATH", project(":Debugger-rmi-trace").file("build/pypkg/src")) +} diff --git a/Ghidra/Debug/Debugger-agent-x64dbg/build.gradle b/Ghidra/Debug/Debugger-agent-x64dbg/build.gradle index 8385fbd691..605747102d 100644 --- a/Ghidra/Debug/Debugger-agent-x64dbg/build.gradle +++ b/Ghidra/Debug/Debugger-agent-x64dbg/build.gradle @@ -28,6 +28,6 @@ dependencies { api project(':Debugger-rmi-trace') } -tasks.assemblePyPackage { +tasks.typeCheckPyPackage { + environment("PYTHONPATH", project(":Debugger-rmi-trace").file("build/pypkg/src")) } - diff --git a/gradle/hasPythonPackage.gradle b/gradle/hasPythonPackage.gradle index 8e46f02839..285fe3aa1f 100644 --- a/gradle/hasPythonPackage.gradle +++ b/gradle/hasPythonPackage.gradle @@ -24,16 +24,16 @@ eclipse.project { } ext.findPyDep = { name -> - File inDeps = file("${DEPS_DIR}/${project.name}/${name}") - File inRepo = file("${BIN_REPO}/ExternalPyWheels/${name}") - if (inDeps.exists()) { - return inDeps - } - if (inRepo.exists()) { - return inRepo - } - println("Warning: Could not find '${name}' for ${project.name}") - return inDeps + File inDeps = file("${DEPS_DIR}/${project.name}/${name}") + File inRepo = file("${BIN_REPO}/ExternalPyWheels/${name}") + if (inDeps.exists()) { + return inDeps + } + if (inRepo.exists()) { + return inRepo + } + println("Warning: Could not find '${name}' for ${project.name}") + return inDeps } task assemblePyPackage(type: Copy) { @@ -41,6 +41,26 @@ task assemblePyPackage(type: Copy) { into "build/pypkg/" } +task typeCheckPyPackage(type: Exec) { + dependsOn assemblePyPackage + inputs.files(assemblePyPackage) + + doFirst { + if (rootProject.PYTHON3 == null) { + throw new GradleException("A supported version of Python [${PYTHON_SUPPORTED}] was not found!") + } + file("build/pypkg/src").listFiles().each { pkg -> + if (pkg.isDirectory() && new File(pkg, "__init__.py").isFile()) { + args "-p", pkg.name + } + } + } + + workingDir { file("build/pypkg/src") } + commandLine rootProject.PYTHON3 + args "-m", "mypy" +} + task buildPyPackage { dependsOn assemblePyPackage ext.dist = { file("build/pypkg/dist") } @@ -95,12 +115,12 @@ ext.distributePyDep = { name -> wheelFiles = new HashSet<>() PYTHON_DEPS.put(project, wheelFiles) } - File dep = findPyDep(name) - wheelFiles.add(dep) - def zipPath = getZipPath(project) - rootProject.assembleDistribution { - into ("${zipPath}/pypkg/dist") { - from dep - } - } + File dep = findPyDep(name) + wheelFiles.add(dep) + def zipPath = getZipPath(project) + rootProject.assembleDistribution { + into ("${zipPath}/pypkg/dist") { + from dep + } + } }