| 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/resources/idea/PyCharmCoreApplicationInfo.xml", collapseAttributes: "true") |
| |
| setProperty("system_selector", "PyCharmCE${p("component.version.major")}0") |
| 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-ide-community", "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/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) |
| |
| buildWinZip("${paths.artifacts}/pycharmPC-${buildNumber}.zip", [paths.distAll, paths.distWin]) |
| |
| String tarRoot = isEap() ? "pycharm-community-$buildNumber" : "pycharm-community-${p("component.version.major")}.${p("component.version.minor")}" |
| buildTarGz(tarRoot, "$paths.artifacts/pycharmPC-${buildNumber}.tar", [paths.distAll, paths.distUnix]) |
| |
| 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}.sit", [paths.distAll], paths.distMac) |
| } |
| |
| private layoutPlugins(layouts) { |
| dir("plugins") { |
| layouts.layoutPlugin("rest") |
| layouts.layoutPlugin("python-rest") |
| } |
| |
| layouts.layoutCommunityPlugins(ch) |
| } |
| |
| private String appInfoFile(String classesPath) { |
| return "$classesPath/python-community/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") } |
| jar("extensions.jar") { module("extensions") } |
| |
| jar("pycharm.jar") { |
| 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 |
| fileset(dir: "$pythonCommunityHome/resources") { |
| 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) |
| } |
| |
| 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"]; |
| layoutMacApp(target, ch, args) |
| } |