mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
404 lines
12 KiB
Plaintext
404 lines
12 KiB
Plaintext
import org.jetbrains.jps.LayoutInfo
|
|
|
|
import static org.jetbrains.jps.idea.IdeaProjectLoader.guessHome
|
|
|
|
setProperty("home", guessHome(this as Script))
|
|
|
|
includeTargets << new File("${guessHome(this as Script)}/build/scripts/utils.gant")
|
|
includeTargets << new File("${guessHome(this)}/build/scripts/libLicenses.gant")
|
|
|
|
requireProperty("buildNumber", requireProperty("build.number", snapshot))
|
|
|
|
setProperty("ch", home)
|
|
setProperty("pythonCommunityHome", "$home/python")
|
|
|
|
// load ApplicationInfo.xml properties
|
|
ant.xmlproperty(file: "$pythonCommunityHome/python-community-ide-resources/resources/idea/PyCharmCoreApplicationInfo.xml", collapseAttributes: "true")
|
|
|
|
setProperty("system_selector", "PyCharmCE${versionSelector()}")
|
|
setProperty("dryRun", false)
|
|
setProperty("jdk16", guessJdk())
|
|
|
|
//modules to compile
|
|
setProperty("pluginFilter", new File("$pythonCommunityHome/build/plugin-list.txt").readLines())
|
|
|
|
private List<String> pycharmPlatformApiModules() {
|
|
return [platformApiModules, "dom-openapi"].flatten()
|
|
}
|
|
|
|
|
|
private List pycharmImplementationModules() { //modules to put into pycharm.jar
|
|
return [platformImplementationModules, "dom-impl", "python-community", "python-community-ide-resources",
|
|
"python-ide-community", "python-community-configure", "python-openapi", "python-psi-api", "platform-main"].flatten()
|
|
}
|
|
|
|
private List modules() {
|
|
return [
|
|
"python-pydev", "colorSchemes", pycharmPlatformApiModules(), pycharmImplementationModules(), pluginFilter
|
|
].flatten()
|
|
}
|
|
|
|
private List approvedJars() {
|
|
def normalizedHome = ch.replace('\\', '/')
|
|
def normalizedPythonHome = pythonCommunityHome.replace('\\', '/')
|
|
return ["$normalizedHome/lib/", "$normalizedPythonHome/lib/", "$normalizedHome/xml/relaxng/lib/"]
|
|
}
|
|
|
|
class Paths {
|
|
final sandbox
|
|
final distAll
|
|
final distWin
|
|
final distMac
|
|
final distUnix
|
|
final artifacts
|
|
final ideaSystem
|
|
final ideaConfig
|
|
|
|
def Paths(String home) {
|
|
sandbox = "$home/out/pycharmCE"
|
|
|
|
distAll = "$sandbox/layout"
|
|
distWin = "$sandbox/win"
|
|
distMac = "$sandbox/mac"
|
|
distUnix = "$sandbox/unix"
|
|
artifacts = "$sandbox/artifacts"
|
|
|
|
ideaSystem = "$sandbox/system"
|
|
ideaConfig = "$sandbox/config"
|
|
}
|
|
}
|
|
|
|
setProperty("paths", new Paths(home))
|
|
setProperty("buildName", "PC-$buildNumber")
|
|
|
|
target('default': "Build artifacts") {
|
|
|
|
loadProject()
|
|
|
|
projectBuilder.stage("Cleaning up sandbox folder")
|
|
|
|
projectBuilder.targetFolder = "${paths.sandbox}/classes"
|
|
projectBuilder.dryRun = dryRun
|
|
|
|
if (!dryRun) {
|
|
forceDelete(paths.sandbox)
|
|
ant.mkdir(dir: paths.sandbox)
|
|
}
|
|
|
|
ant.tstamp() {
|
|
format(property: "todayYear", pattern: "yyyy")
|
|
}
|
|
|
|
ant.patternset(id: "resources.included") {
|
|
include(name: "**/*.properties")
|
|
include(name: "fileTemplates/**/*")
|
|
include(name: "inspectionDescriptions/**/*")
|
|
include(name: "intentionDescriptions/**/*")
|
|
include(name: "tips/**/*")
|
|
include(name: "search/**/*")
|
|
}
|
|
|
|
ant.patternset(id: "resources.excluded") {
|
|
exclude(name: "**/*.properties")
|
|
exclude(name: "fileTemplates/**/*")
|
|
exclude(name: "fileTemplates")
|
|
exclude(name: "inspectionDescriptions/**/*")
|
|
exclude(name: "inspectionDescriptions")
|
|
exclude(name: "intentionDescriptions/**/*")
|
|
exclude(name: "intentionDescriptions")
|
|
exclude(name: "tips/**/*")
|
|
exclude(name: "tips")
|
|
}
|
|
|
|
zipSources(home, paths.artifacts)
|
|
|
|
def usedJars = buildModulesAndCollectUsedJars(modules(), approvedJars(), ["/ant/"])
|
|
|
|
layoutCommunity("${paths.sandbox}/classes/production", usedJars)
|
|
|
|
/*
|
|
buildNSIS([paths.distAll, paths.distWin],
|
|
"$home/python/build/strings.nsi", "$home/python/build/paths.nsi",
|
|
"pycharm", false, true, system_selector)
|
|
*/
|
|
|
|
/*
|
|
signMacZip("pycharm")
|
|
buildDmg("pycharm", "${home}/python/build/DMG_background.png")
|
|
*/
|
|
}
|
|
|
|
public layoutCommunity(String classesPath, Set usedJars) {
|
|
setProperty("pluginFilter", new File("$pythonCommunityHome/build/plugin-list.txt").readLines())
|
|
|
|
if (usedJars == null) {
|
|
usedJars = collectUsedJars(modules(), approvedJars(), ["/ant/"], null)
|
|
}
|
|
|
|
def appInfo = appInfoFile(classesPath)
|
|
def paths = new Paths(home)
|
|
buildSearchableOptions("${projectBuilder.moduleOutput(findModule("platform-resources"))}/search", [], {
|
|
projectBuilder.moduleRuntimeClasspath(findModule("main_pycharm_ce"), false).each {
|
|
ant.pathelement(location: it)
|
|
}
|
|
}, "-Didea.platform.prefix=PyCharmCore -Didea.no.jre.check=true")
|
|
|
|
if (!dryRun) {
|
|
wireBuildDate("PC-${buildNumber}", appInfo)
|
|
}
|
|
|
|
Map args = [
|
|
buildNumber: "PC-${buildNumber}",
|
|
system_selector: system_selector,
|
|
ide_jvm_args: "-Didea.platform.prefix=PyCharmCore -Didea.no.jre.check=true"]
|
|
|
|
LayoutInfo layoutInfo = layoutFull(args, paths.distAll, usedJars)
|
|
generateLicensesTable("$paths.artifacts/third-party-libraries.txt", layoutInfo.usedModules);
|
|
|
|
layoutWin(args, paths.distWin)
|
|
layoutUnix(args, paths.distUnix)
|
|
layoutMac(args, paths.distMac)
|
|
|
|
ant.echo(message: "PC-${buildNumber}", file: "${paths.distAll}/build.txt")
|
|
|
|
def launcher = "${paths.distWin}/bin/pycharm.exe"
|
|
def launcher64 = "${paths.distWin}/bin/pycharm64.exe"
|
|
List resourcePaths = ["$ch/community-resources/src",
|
|
"$ch/platform/icons/src",
|
|
"$pythonCommunityHome/python-community-ide-resources/resources",
|
|
"$pythonCommunityHome/resources"]
|
|
buildWinLauncher("$ch", "$ch/bin/WinLauncher/WinLauncher.exe", launcher,
|
|
appInfo, "$pythonCommunityHome/build/pycharm_community_launcher.properties", system_selector, resourcePaths)
|
|
buildWinLauncher("$ch", "$ch/bin/WinLauncher/WinLauncher64.exe", launcher64,
|
|
appInfo, "$pythonCommunityHome/build/pycharm64_community_launcher.properties", system_selector, resourcePaths)
|
|
|
|
List pathsDist = new File("${home}/out/pycharm/jdk.win/jre").exists() ? [paths.distAll, paths.distWin, "${home}/out/pycharm/jdk.win"] : [paths.distAll, paths.distWin]
|
|
buildWinZip("${paths.artifacts}/pycharmPC-${buildNumber}.zip", pathsDist)
|
|
|
|
//win oracle jdk
|
|
if (new File("${home}/out/pycharm/jdk.oracle.win/jre").exists()) {
|
|
buildWinZip("${paths.artifacts}/pycharmPC-${buildNumber}-oracle-win.zip", [paths.distAll, paths.distWin, "${home}/out/pycharm/jdk.oracle.win"])
|
|
}
|
|
|
|
String tarRoot = isEap() ? "pycharm-community-$buildNumber" : "pycharm-community-${p("component.version.major")}.${p("component.version.minor")}"
|
|
buildTarGz(tarRoot, "$paths.artifacts/pycharmPC-${buildNumber}-no-jdk.tar", [paths.distAll, paths.distUnix])
|
|
requireProperty("jdk.linux", "false")
|
|
if (p("jdk.linux") != "false") {
|
|
buildTarGz(tarRoot, "$paths.artifacts/pycharmPC-${buildNumber}.tar", [paths.distAll, paths.distUnix, "${home}/out/pycharm/jdk.linux"], ["jre/jre/bin/*"])
|
|
}
|
|
|
|
String macAppRoot = isEap() ? "PyCharm CE ${p("component.version.major")}.${p("component.version.minor")} EAP.app/Contents" : "PyCharm CE.app/Contents"
|
|
buildMacZip(macAppRoot, "${paths.artifacts}/pycharmPC-${buildNumber}.mac.zip", [paths.distAll], paths.distMac)
|
|
}
|
|
|
|
private layoutPlugins(layouts) {
|
|
dir("plugins") {
|
|
layouts.layoutPlugin("rest")
|
|
layouts.layoutPlugin("python-rest")
|
|
layouts.layoutPlugin("ipnb") {
|
|
fileset(dir: "$pythonCommunityHome/ipnb/lib")
|
|
}
|
|
}
|
|
|
|
layouts.layoutCommunityPlugins(ch)
|
|
}
|
|
|
|
private String appInfoFile(String classesPath) {
|
|
return "$classesPath/python-community-ide-resources/idea/PyCharmCoreApplicationInfo.xml"
|
|
}
|
|
|
|
private layoutFull(Map args, String target, Set usedJars) {
|
|
def openapiModules = pycharmPlatformApiModules()
|
|
def superLayouts = includeFile("$ch/build/scripts/layouts.gant")
|
|
|
|
reassignAltClickToMultipleCarets("$ch")
|
|
|
|
def result = layout(target) {
|
|
dir("lib") {
|
|
jar("util.jar") {
|
|
module("util")
|
|
module("util-rt")
|
|
}
|
|
|
|
jar("openapi.jar") {
|
|
openapiModules.each { module it }
|
|
}
|
|
|
|
jar("annotations.jar") {
|
|
module("annotations-common")
|
|
module("annotations")
|
|
}
|
|
jar("extensions.jar") { module("extensions") }
|
|
|
|
jar(([name: "pycharm.jar", duplicate: "preserve"])) {
|
|
pycharmImplementationModules().each {
|
|
module(it) {
|
|
exclude(name: "**/tips/**")
|
|
}
|
|
}
|
|
}
|
|
|
|
jar("pycharm-pydev.jar") {
|
|
module("python-pydev")
|
|
}
|
|
|
|
jar("bootstrap.jar") { module("bootstrap") }
|
|
jar("resources.jar") {
|
|
module("platform-resources")
|
|
module("colorSchemes")
|
|
}
|
|
|
|
jar("forms_rt.jar") {
|
|
module("forms_rt")
|
|
}
|
|
|
|
//noinspection GroovyAssignabilityCheck
|
|
jar([name: "resources_en.jar", duplicate: "preserve"]) {
|
|
// custom resources should go first
|
|
module("python-community-ide-resources") {
|
|
ant.patternset {
|
|
include(name: "**/tips/**")
|
|
}
|
|
}
|
|
module("platform-resources-en") {
|
|
ant.patternset {
|
|
exclude(name: "tips/images/switcher.png")
|
|
exclude(name: "tips/images/navigateToFilePath.gif")
|
|
}
|
|
}
|
|
}
|
|
|
|
jar("icons.jar") { module("icons") }
|
|
jar("boot.jar") { module("boot") }
|
|
|
|
usedJars.each {
|
|
fileset(file: it)
|
|
}
|
|
|
|
fileset(dir: "$ch/build/kotlinc/lib") {
|
|
include(name: "kotlin-runtime.jar")
|
|
include(name: "kotlin-reflect.jar")
|
|
}
|
|
|
|
dir("libpty") {
|
|
fileset(dir: "$ch/lib/libpty") {
|
|
exclude(name: "*.txt")
|
|
}
|
|
}
|
|
|
|
dir("ext") {
|
|
fileset(dir: "$ch/lib") {
|
|
include(name: "cglib*.jar")
|
|
}
|
|
}
|
|
|
|
dir("src") {
|
|
fileset(dir: "$ch/lib/src") {
|
|
include(name: "trove4j_changes.txt")
|
|
include(name: "trove4j_src.jar")
|
|
}
|
|
|
|
jar("pycharm-pydev-src.zip") {
|
|
fileset(dir: "$pythonCommunityHome/pydevSrc")
|
|
}
|
|
jar("pycharm-openapi-src.zip") {
|
|
fileset(dir: "$pythonCommunityHome/openapi/src")
|
|
fileset(dir: "$pythonCommunityHome/psi-api/src")
|
|
}
|
|
}
|
|
}
|
|
|
|
dir("help") {
|
|
fileset(dir: "$home/python/help") {
|
|
include(name: "*.pdf")
|
|
}
|
|
}
|
|
|
|
dir("helpers") {
|
|
fileset(dir: "$pythonCommunityHome/helpers")
|
|
}
|
|
|
|
dir("license") {
|
|
fileset(dir: "$ch/license")
|
|
fileset(dir: "$ch") {
|
|
include(name: "LICENSE.txt")
|
|
include(name: "NOTICE.txt")
|
|
}
|
|
}
|
|
|
|
layoutPlugins(superLayouts)
|
|
|
|
dir("bin") {
|
|
fileset(dir: "$ch/bin") {
|
|
exclude(name: "appletviewer.policy")
|
|
include(name: "*.*")
|
|
}
|
|
}
|
|
}
|
|
patchPropertiesFile(target, args + [appendices: ["$home/build/conf/ideaJNC.properties"]])
|
|
return result
|
|
}
|
|
|
|
private layoutWin(Map args, String target) {
|
|
layout(target) {
|
|
dir("bin") {
|
|
fileset(dir: "$ch/bin/win") {
|
|
exclude(name: "breakgen*")
|
|
}
|
|
}
|
|
|
|
dir("skeletons") {
|
|
fileset(dir: "$pythonCommunityHome/skeletons") {
|
|
include(name: "skeletons-win*.zip")
|
|
}
|
|
}
|
|
}
|
|
|
|
winScripts(target, ch, "pycharm.bat", args)
|
|
winVMOptions(target, null, "pycharm.exe", "pycharm64.exe")
|
|
ant.copy(file: "$home/python/help/pycharmhelp.jar", todir: "$target/help", failonerror: false)
|
|
}
|
|
|
|
private layoutUnix(Map args, String target) {
|
|
layout(target) {
|
|
dir("bin") {
|
|
fileset(dir: "$ch/bin/linux") {
|
|
exclude(name: "libbreakgen*")
|
|
}
|
|
}
|
|
}
|
|
|
|
ant.copy(file: "$pythonCommunityHome/resources/PyCharmCore128.png", tofile: "$target/bin/pycharm.png")
|
|
|
|
unixScripts(target, ch, "pycharm.sh", args)
|
|
unixVMOptions(target, "pycharm")
|
|
|
|
ant.copy(file: "$home/python/help/pycharmhelp.jar", todir: "$target/help", failonerror: false)
|
|
}
|
|
|
|
private layoutMac(Map _args, String target) {
|
|
layout(target) {
|
|
dir("bin") {
|
|
fileset(dir: "$home/bin") {
|
|
include(name: "*.jnilib")
|
|
}
|
|
}
|
|
|
|
dir("skeletons") {
|
|
fileset(dir: "$pythonCommunityHome/skeletons") {
|
|
include(name: "skeletons-mac*.zip")
|
|
}
|
|
}
|
|
}
|
|
|
|
Map args = new HashMap(_args)
|
|
args.icns = "$pythonCommunityHome/resources/PyCharmCore.icns"
|
|
args.bundleIdentifier = "com.jetbrains.pycharm"
|
|
args.platform_prefix = "PyCharmCore"
|
|
args.help_id = "PY"
|
|
args."idea.properties.path" = "${paths.distAll}/bin/idea.properties"
|
|
args."idea.properties" = ["idea.no.jre.check": true, "ide.mac.useNativeClipboard": "false"];
|
|
args.executable = "pycharm"
|
|
layoutMacApp(target, ch, args)
|
|
}
|