ghidra/gradle/hasPythonPackage.gradle
2024-07-08 10:38:49 -04:00

86 lines
2.2 KiB
Groovy

/* ###
* IP: GHIDRA
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* NOTE: Supported Python3 command is established by root project build.gradle
*/
// Enable the Python Nature in the Eclipse project
eclipse.project {
natures 'org.python.pydev.pythonNature'
}
ext.findPyDep = { name ->
File inDeps = file("${DEPS_DIR}/${project.name}/${name}")
File inRepo = file("${BIN_REPO}/${getGhidraRelativePath(project)}/${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) {
from "src/main/py"
into "build/pypkg/"
}
task buildPyPackage {
ext.dist = { file("build/pypkg/dist") }
inputs.files(assemblePyPackage)
outputs.dir(dist)
doLast {
File setuptools = project(":Debugger-rmi-trace").findPyDep(".")
exec {
workingDir { "build/pypkg" }
commandLine rootProject.PYTHON3, "-m", "pip"
args "wheel", "-w", "dist/", "--no-index", "--no-deps"
args "-f", setuptools
args "."
}
}
}
// At the moment, any module with a python package also distributes it.
// We can separate this into `distributePythonPackage` later, if necessary.
rootProject.assembleDistribution {
dependsOn(buildPyPackage)
def p = this.project
def zipPath = getZipPath(p)
from (p.assemblePyPackage) {
exclude '**/*.pyc'
exclude '**/*.pyo'
exclude '**/__pycache__/**'
exclude 'dist/*.tar.gz'
into { zipPath + "/pypkg" }
}
}
ext.distributePyDep = { name ->
File dep = findPyDep(name)
def zipPath = getZipPath(project)
rootProject.assembleDistribution {
into ("${zipPath}/pypkg/dist") {
from dep
}
}
}