IDEADEV-40774
[fedora-idea.git] / build / scripts / layouts.gant
blob3e2e862bf7114c73f0552a7be2fd6137cce8bbfe
1 import org.jetbrains.jps.Module
2 import static org.jetbrains.jps.idea.IdeaProjectLoader.*
4 includeTargets << new File("${guessHome(this)}/build/scripts/utils.gant")
6 target('default' : "Developers update") {
7   layoutFull(home, deploy)
10 def module(String name) {
11   ant.module(name: name)
12   markUsed(name)
15 def module(String name, Closure init) {
16   ant.module(name: name, init)
17   markUsed(name)
20 private def markUsed(String name) {
21   def module = project.modules[name]
22   // Can be null in "Developers update" since we are not actually loading modules.xml
23   if (module != null) {
24     module["used"] = true
25   }
28 private List platformImplementationModules() {
29   return [
30           "platform-impl",
31           "vcs-impl",
32           "lang-impl",
33           "testRunner",
34           "smRunner",
35           "xdebugger-impl",
36           "testFramework",
37           "xml",
38           "lvcs-impl",
39   ]
42 private List<String> platformApiModules() {
43   return ["platform-api", "lvcs-api", "lang-api", "vcs-api", "usageView", "xdebugger-api", "xml-openapi"]
46 def layoutFull(String home, String targetDirectory) {
47   project.stage("layout to $targetDirectory")
49   //noinspection GroovyAssignabilityCheck
50   List<String> openapiModules = [platformApiModules(),
51           "openapi", "testFramework-java", "debugger-openapi", "compiler-openapi", "dom-openapi", "execution-openapi",
52           "jsp-openapi", "jsp-base-openapi"].flatten()
54   //noinspection GroovyAssignabilityCheck
55   List<String> implementationModules = [platformImplementationModules(),
56           "notNull",
57           "platform-main",
58           "java-impl",
59           "compiler-impl",
60           "debugger-impl",
61           "dom-impl",
62           "execution-impl",
63           "jsp-spi",
64           "idea-ui",
65           "RegExpSupport"].flatten()
67   ant.patternset(id: "resources.included") {
68     include(name: "**/*.properties")
69     include(name: "fileTemplates/**/*")
70     include(name: "inspectionDescriptions/**/*")
71     include(name: "intentionDescriptions/**/*")
72     include(name: "tips/**/*")
73   }
75   ant.patternset(id: "resources.excluded") {
76     exclude(name: "**/*.properties")
77     exclude(name: "fileTemplates/**/*")
78     exclude(name: "fileTemplates")
79     exclude(name: "inspectionDescriptions/**/*")
80     exclude(name: "inspectionDescriptions")
81     exclude(name: "intentionDescriptions/**/*")
82     exclude(name: "intentionDescriptions")
83     exclude(name: "tips/**/*")
84     exclude(name: "tips")
85   }
87   layout(targetDirectory) {
88     dir("lib") {
89       jar("util.jar") { module("util") }
91       jar("openapi.jar") {
92         openapiModules.each { module it}
93       }
95       jar("annotations.jar") { module("annotations")}
96       jar("extensions.jar") { module("extensions")}
98       jar("idea.jar") {
99         implementationModules.each { module it}
100       }
102       jar("bootstrap.jar") { module("bootstrap")}
103       jar("resources.jar") {
104         module("resources")
105         module("platform-resources")
106         module("community-resources")
107       }
109       jar("idea_rt.jar") { module("java-runtime")}
111       jar("forms_rt.jar") {
112         module("forms_rt")
113         module("forms-compiler")
114       }
116       jar("resources_en.jar") {
117         module("resources-en")
118         module("platform-resources-en")
119       }
121       jar("icons.jar") { module("icons") }
122       jar("boot.jar") { module("boot") }
124       jar("javac2.jar") {
125         module("javac2")
126         module("forms-compiler")
127         module("forms_rt")
128         module("notNull")
129       }
131       fileset(dir: "$home/lib") {
132         include(name: "*.jar")
133         exclude(name: "eawtstub.jar")
134       }
136       fileset(dir: "$home/lib/src") {
137         include(name: "trove4j_changes.txt")
138         include(name: "trove4j_src.jar")
139       }
141       dir("ant") {
142         fileset(dir: "$home/lib/ant") {
143           exclude(name: "**/src/**")
144         }
145       }
146     }
148     dir("plugins") {
149       def simplePlugins = ["commander", "copyright", "properties", "java-i18n", "images"]
151       simplePlugins.each {
152         layoutPlugin it
153       }
155       layoutPlugin("ant", "ant", "antIntegration")
156       layoutPlugin("InspectionGadgets", "InspectionGadgetsPlugin")
157       layoutPlugin("IntelliLang", "IntelliLangJava")
158       layoutPlugin("IntentionPowerPack", "IntentionPowerPackPlugin")
159       layoutPlugin("ToString", "generate-tostring", "toString")
161       layoutPlugin("SpellChecker", "spellchecker", "spellchecker-core") {
162         fileset(dir: "$home/plugins/spellchecker/lib")
163       }
166       layoutPlugin("maven") {
167         fileset(dir: "$home/plugins/maven/lib")
168       }
171       layoutPlugin("git4idea") {
172         fileset(dir: "$home/plugins/git4idea/lib", excludes: "**/trilead-ssh2-src.zip")
173       }
175       layoutPlugin("svn4idea") {
176         fileset(dir: "$home/plugins/svn4idea/lib", excludes: "**/svnkitsrc.zip")
177       }
180       dir("junit") {
181         dir("lib") {
182           jar("junit-rt.jar") {
183             module("junit_rt")
184           }
185           jar("idea-junit.jar") {
186             noResources("junit")
187           }
188           resources("junit")
189         }
190       }
193       dir("cvsIntegration") {
194         dir("lib") {
195           jar("cvs_util.jar") {noResources("cvs-core")}
196           jar("cvsIntegration.jar") {noResources("cvs-plugin")}
197           jar("javacvs-src.jar") {noResources("javacvs-src")}
198           jar("smartcvs-src.jar") {noResources("smartcvs-src")}
200           resources(["cvs-core", "cvs-plugin", "javacvs-src", "smartcvs-src"])
202           fileset(dir: "${home}/plugins/cvs/lib")
203         }
204       }
207       dir("uiDesigner") {
208         dir("lib") {
209           jar("uiDesigner.jar") {
210             noResources("ui-designer")
211           }
212           resources("ui-designer")
213         }
214       }
216       dir("testng") {
217         dir("lib") {
218           jar("testng.jar") {
219             noResources("testng")
220             noResources("testng_rt")
221           }
223           resources("testng")
225           fileset(dir: "$home/plugins/testng/lib") {
226             include(name: "testng-jdk15.jar")
227           }
228         }
230         dir("lib-jdk14") {
231           fileset(dir: "$home/plugins/testng/lib") {
232             include(name: "testng-jdk14.jar")
233           }
234         }
235       }
238       dir("Groovy") {
239         dir("lib") {
240           jar("Groovy.jar") {
241             module("jetgroovy") {
242               exclude(name: "standardDsls/**")
243             }
244           }
246           jar("groovy_rt.jar") {module("groovy-rt")}
247           dir("standardDsls") {
248             fileset(dir: "$home/plugins/groovy/resources/standardDsls")
249           }
251           fileset(dir: "$home/plugins/groovy/resources/conf")
252           fileset(dir: "${home}/plugins/groovy/lib")
253         }
254       }
255     }
256   }
258   printUnusedModules()
260   //reorder(targetDirectory)
263 def printUnusedModules() {
264   project.modules.values().each {Module m ->
265     if (m["used"] == null && hasSourceRoots(m)) {
266       project.warning("Module ${m.getName()} is not used in project layout")
267     }
268   }
271 boolean hasSourceRoots(Module module) {
272   !module.sourceRoots.isEmpty()
275 def layoutPlugin(String moduleName) {
276   layoutPlugin(moduleName, moduleName, {})
279 def layoutPlugin(String moduleName, Closure custom) {
280   layoutPlugin(moduleName, moduleName, custom)
283 def layoutPlugin(String pluginName, String moduleName) {
284   layoutPlugin(pluginName, moduleName, {})
287 def layoutPlugin(String pluginName, String moduleName, Closure custom) {
288   layoutPlugin(pluginName, moduleName, pluginName, custom)
291 def layoutPlugin(String pluginName, String moduleName, String jarName) {
292   layoutPlugin(pluginName, moduleName, jarName, {})
295 def layoutPlugin(String pluginName, String moduleName, String jarName, Closure custom) {
296   dir(pluginName) {
297     dir("lib") {
298       jar("${jarName}.jar") {
299         noResources(moduleName)
300       }
302       resources(moduleName)
303       custom()
304     }
305   }
308 private def resources(List<String> modules) {
309   jar("resources_en.jar") {
310     modules.each {
311       module(it) {
312         patternset(refid: "resources.included")
313       }
314     }
315   }
318 private def resources(String moduleName) {
319   jar("resources_en.jar") {
320     module(moduleName) {
321       patternset(refid: "resources.included")
322     }
323   }
326 private def noResources(String moduleName) {
327   module(moduleName) {
328     patternset(refid: "resources.excluded")
329   }
332 def reorder(String home, String targetDirectory) {
333   if (isDefined("util")) {
334     ant.java(classname: "com.intellij.util.io.zip.ReorderJarsMain", fork: "true") {
335       arg(value: "$home/build/order.txt")
336       arg(value: targetDirectory)
337       arg(value: targetDirectory)
338       arg(value: "$home/lib")
339       classpath {
340         pathelement(location: util.output)
341       }
342     }
343   }