build.gradle 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718
  1. //ant.importBuild 'build.xml'
  2. import groovy.xml.MarkupBuilder
  3. import java.util.zip.ZipFile
  4. plugins {
  5. id "de.undercouch.download" version "3.4.3"
  6. }
  7. apply from: 'gradle/libs/digest.gradle'
  8. apply from: file('version.gradle')
  9. if (!hasProperty('mainClass')) {
  10. ext.mainClass = ''
  11. }
  12. repositories {
  13. mavenLocal()
  14. jcenter {
  15. url "https://jcenter.bintray.com/"
  16. }
  17. mavenCentral()
  18. maven {
  19. url "http://updates.jmonkeyengine.org/maven/"
  20. }
  21. maven {
  22. url "http://nifty-gui.sourceforge.net/nifty-maven-repo/"
  23. }
  24. maven { url "https://jitpack.io" }
  25. // See Engine Commit caf91c47df2e5687b3e9ecf2009ee22014bf4ac1
  26. flatDir {
  27. dirs rootProject.file('lib')
  28. }
  29. }
  30. /*if (System.getenv('TRAVIS') != null) {
  31. if (System.env.TRAVIS_TAG != null && System.env.TRAVIS_TAG != "") { // Strangely it has to be both, because it's sometimes set as TRAVIS_TAG="" when we're in travis but no tag is set
  32. // v3.3.0-stable-sdk1 becomes 3.3.0-stable
  33. // Intentionally not using lastIndexOf here, we want the second "-".
  34. ext.jmeEngineVersion = System.env.TRAVIS_TAG.substring(1, System.env.TRAVIS_TAG.indexOf("-", System.env.TRAVIS_TAG.indexOf("-") + 1));
  35. } else {
  36. if (System.env.TRAVIS_PULL_REQUEST == null || System.env.TRAVIS_PULL_REQUEST == "" || System.env.TRAVIS_PULL_REQUEST == "false") {
  37. if (System.env.TRAVIS_BRANCH == "master") {
  38. ext.jmeEngineVersion = "3.3.0-SNAPSHOT" // Manually update
  39. } else {
  40. ext.jmeEngineVersion = "3.3.0-" + System.env.TRAVIS_BRANCH + "-SNAPSHOT" // Manually update
  41. }
  42. } else {
  43. ext.jmeEngineVersion = "3.3.0-" + System.env.TRAVIS_PULL_REQUEST_BRANCH + "-pr-" + System.env.TRAVIS_PULL_REQUEST + "-SNAPSHOT"
  44. }
  45. }
  46. } else {
  47. new ByteArrayOutputStream().withStream { os ->
  48. def result = exec {
  49. executable = 'git'
  50. args = ['rev-parse', '--abbrev-ref', 'HEAD'];
  51. standardOutput = os
  52. }
  53. ext.branch = os.toString().trim()
  54. }
  55. // If the Branch isn't master, specify the branch name.
  56. // @TODO: One could use the same technique like the engine (grgit?)
  57. if (ext.branch == "master") {
  58. ext.branchSpec = ""
  59. } else {
  60. ext.branchSpec = "-" + ext.branch;
  61. }
  62. // This is the engine version that will be used per default on every regular commit
  63. ext.jmeEngineVersion = "3.3.0" + ext.branchSpec + "-SNAPSHOT"
  64. }*/
  65. configurations {
  66. corelibs
  67. optlibs
  68. testdatalibs
  69. examplelibs
  70. }
  71. dependencies {
  72. corelibs dep("com.github.xbuf:jme3_xbuf:0.9.1", false, false)
  73. corelibs dep("com.badlogicgames.gdx:gdx-ai:1.8.1", true, true)
  74. corelibs dep("javax.help:javahelp:2.0.05", false, false)
  75. corelibs dep("org.jmonkeyengine:jme3-core", false, false)
  76. corelibs dep("org.jmonkeyengine:jme3-desktop", false, false)
  77. corelibs dep("org.jmonkeyengine:jme3-lwjgl", false, false)
  78. corelibs dep("org.jmonkeyengine:jme3-effects", false, false)
  79. corelibs dep("org.jmonkeyengine:jme3-blender", false, false)
  80. corelibs dep("org.jmonkeyengine:jme3-bullet", false, false)
  81. corelibs dep("org.jmonkeyengine:jme3-bullet-native", false, false)
  82. corelibs dep(fileTree("lib"), false, false)
  83. corelibs dep("org.jmonkeyengine:jme3-jogg", false, false)
  84. corelibs dep("org.jmonkeyengine:jme3-networking", false, false)
  85. corelibs dep("org.jmonkeyengine:jme3-niftygui", false, false)
  86. corelibs dep("org.jmonkeyengine:jme3-plugins", false, false)
  87. corelibs dep("org.jmonkeyengine:jme3-terrain", false, false)
  88. optlibs dep("org.jmonkeyengine:jme3-jbullet", false, false)
  89. optlibs dep("org.jmonkeyengine:jme3-jogl", false, false)
  90. optlibs dep("org.jmonkeyengine:jme3-android", false, false)
  91. optlibs dep("org.jmonkeyengine:jme3-ios", false, false)
  92. optlibs dep("org.jmonkeyengine:jme3-android-native", false, false)
  93. optlibs dep("org.jmonkeyengine:jme3-bullet-native-android", false, false)
  94. optlibs dep("org.jmonkeyengine:jme3-lwjgl3", false, false)
  95. optlibs dep("com.github.stephengold:Heart:6.0.0", false, false)
  96. optlibs dep("com.github.stephengold:Minie:3.0.0", false, false)
  97. optlibs dep("com.github.stephengold:Wes:0.6.0", false, false)
  98. testdatalibs dep("org.jmonkeyengine:jme3-testdata", false, false)
  99. examplelibs dep("org.jmonkeyengine:jme3-examples", false, false)
  100. }
  101. def dep(coords, javadoc = false, sources = false) {
  102. def result = [dependencies.create(coords)]
  103. if (javadoc) result << dependencies.create("$coords:javadoc")
  104. if (sources) result << dependencies.create("$coords:sources")
  105. result
  106. }
  107. artifacts {
  108. // jar null
  109. }
  110. task checkPlatformConfig {
  111. description = "Downloads the NetBeans platform base and registers it in the SDK project if needed"
  112. def platformFile = file("nbproject/private/platform-private.properties")
  113. if(!platformFile.exists()){
  114. def netbeansFolder = file("netbeans")
  115. if(!netbeansFolder.exists() || netbeansFolder.list().length == 0){
  116. println "Downloading NetBeans Platform base, this only has to be done once.."
  117. /* The following method is discouraged as it does not handle HTTP 301 Redirects
  118. * def f = file("netbeans.zip")
  119. * new URL(netbeansUrl).withInputStream{ i -> f.withOutputStream{ it << i }}
  120. */
  121. download {
  122. src netbeansUrl
  123. dest "netbeans.zip"
  124. overwrite false // however if overwrite matters the build failed anyway
  125. }
  126. copy {
  127. from zipTree(file("netbeans.zip"))
  128. into "."
  129. }
  130. file("netbeans.zip").delete()
  131. }
  132. file("nbproject/private/").mkdirs()
  133. platformFile.createNewFile()
  134. platformFile.write("nbplatform.default.netbeans.dest.dir=${netbeansFolder.absolutePath.replace('\\','/')}\r\n"+\
  135. "nbplatform.default.harness.dir=${netbeansFolder.absolutePath.replace('\\','/')}/harness\r\n")
  136. }
  137. }
  138. task copyBaseLibs(dependsOn:configurations.corelibs) {
  139. doLast {
  140. description "Copies the library files needed to run the SDK to "+
  141. "jme3-core-baselibs and jme3-core-libraries"
  142. // for each dependency in corelibs..
  143. //project.configurations.corelibs.dependencies.each {dep ->
  144. //println(project.configurations.corelibs.dependencies)
  145. project.configurations.corelibs.collect {file ->
  146. // copy built jme3 jar files to jme3-core-baselibs
  147. if (file.name.startsWith("jme3") && !isSourceOrJavadoc(file.name)){
  148. copy {
  149. from file
  150. into "jme3-core-baselibs/release/modules/ext/"
  151. }
  152. }else if( !isSourceOrJavadoc(file.name)){
  153. copy {
  154. from file
  155. into "jme3-core-libraries/release/modules/ext/"
  156. }
  157. }
  158. }
  159. }
  160. }
  161. copyBaseLibs.inputs.files configurations.corelibs.resolve()
  162. copyBaseLibs.outputs.dir "jme3-core-baselibs/release/modules/ext/"
  163. copyBaseLibs.outputs.dir "jme3-core-libraries/release/modules/ext/"
  164. def isSourceOrJavadoc(dep){
  165. return isSource(dep) || isJavadoc(dep)
  166. }
  167. def isSource(dep){
  168. return dep.endsWith("-sources.jar")
  169. }
  170. def isJavadoc(dep){
  171. return dep.endsWith("-javadoc.jar")
  172. }
  173. def isJmeDep(dep) {
  174. return dep.startsWith("jme3")
  175. }
  176. task createBaseXml(dependsOn: configurations.corelibs) {
  177. doLast {
  178. description "Creates the project.xml files for "+
  179. "jme3-core-baselibs and jme3-core-libraries"
  180. def jmeJarFiles = [] // jme3 jar files
  181. def externalJarFiles = [] // external jar files
  182. // collect jar files
  183. project.configurations.corelibs.collect {file ->
  184. // copy built jme3 jar files to jme3-core-baselibs
  185. if (file.name.startsWith("jme3") && !isSourceOrJavadoc(file.name)){
  186. //collect jme jars
  187. if(!jmeJarFiles.contains(file)) {
  188. jmeJarFiles.add(file)
  189. }
  190. } else if(!isSourceOrJavadoc(file.name)) {
  191. //collect external jars
  192. externalJarFiles.add(file)
  193. }
  194. }
  195. // collect base packages
  196. def packages = []
  197. jmeJarFiles.each{jarFile ->
  198. ZipFile file = new ZipFile(jarFile)
  199. file.entries().each { entry ->
  200. if(entry.name.endsWith('.class')){
  201. // TODO: "/" works on windows?
  202. def pathPart = entry.name.substring(0,entry.name.lastIndexOf('/'))
  203. def classPath = pathPart.replace('/','.');
  204. if(!packages.contains(classPath)){
  205. packages.add(classPath)
  206. }
  207. }
  208. }
  209. }
  210. // collect library packages
  211. def extPackages = []
  212. externalJarFiles.each{jarFile ->
  213. ZipFile file = new ZipFile(jarFile)
  214. file.entries().each { entry ->
  215. if(entry.name.endsWith('.class')){
  216. // TODO: "/" works on windows?
  217. def pathPart = entry.name.substring(0,entry.name.lastIndexOf('/'))
  218. def classPath = pathPart.replace('/','.');
  219. if(!extPackages.contains(classPath)){
  220. extPackages.add(classPath)
  221. }
  222. }
  223. }
  224. }
  225. def writer = new StringWriter()
  226. def xml = new MarkupBuilder(writer)
  227. xml.mkp.xmlDeclaration(version:'1.0')
  228. xml.project(xmlns:"http://www.netbeans.org/ns/project/1"){
  229. type "org.netbeans.modules.apisupport.project"
  230. configuration {
  231. data(xmlns:"http://www.netbeans.org/ns/nb-module-project/3") {
  232. "code-name-base" "com.jme3.gde.core.baselibs"
  233. "suite-component"{}
  234. "module-dependencies"{
  235. dependency{
  236. "code-name-base" "com.jme3.gde.core.libraries"
  237. "build-prerequisite"{}
  238. "compile-dependency"{}
  239. "run-dependency"{
  240. "release-version" "1"
  241. "specification-version" jmeVersion
  242. }
  243. }
  244. }
  245. "public-packages"{
  246. packages.each{
  247. "package" it
  248. }
  249. }
  250. jmeJarFiles.each{jarFile ->
  251. "class-path-extension"{
  252. "runtime-relative-path" "ext/${jarFile.name}"
  253. "binary-origin" "release/modules/ext/${jarFile.name}"
  254. }
  255. }
  256. }
  257. }
  258. }
  259. // write XML file
  260. File baselibsProjectFile = file("jme3-core-baselibs/nbproject/project.xml");
  261. baselibsProjectFile.write(writer.toString())
  262. def extWriter = new StringWriter()
  263. def extXml = new MarkupBuilder(extWriter)
  264. // extXml.mkp.xmlDeclaration(version:'1.0')
  265. extXml.project(xmlns:"http://www.netbeans.org/ns/project/1"){
  266. type "org.netbeans.modules.apisupport.project"
  267. configuration {
  268. data(xmlns:"http://www.netbeans.org/ns/nb-module-project/3") {
  269. "code-name-base" "com.jme3.gde.core.libraries"
  270. "suite-component"{}
  271. "module-dependencies"{}
  272. "public-packages"{
  273. extPackages.each{
  274. "package" it
  275. }
  276. }
  277. externalJarFiles.each{jarFile ->
  278. "class-path-extension"{
  279. "runtime-relative-path" "ext/${jarFile.name}"
  280. "binary-origin" "release/modules/ext/${jarFile.name}"
  281. }
  282. }
  283. }
  284. }
  285. }
  286. // write XML file
  287. File librariesProjectFile = file("jme3-core-libraries/nbproject/project.xml");
  288. librariesProjectFile.write(extWriter.toString())
  289. }
  290. }
  291. createBaseXml.inputs.files configurations.corelibs.resolve()
  292. createBaseXml.outputs.file "jme3-core-baselibs/nbproject/project.xml"
  293. createBaseXml.outputs.file "jme3-core-libraries/nbproject/project.xml"
  294. task copyProjectLibs(dependsOn: [configurations.corelibs, configurations.testdatalibs]) {
  295. doLast {
  296. description "Copies the jar files needed to supply the J2SE Libraries in the "+
  297. "SDK to jme3-project-baselibs and jme3-project-libraries"
  298. // for each dependency in corelibs and optlibs..
  299. def deps = []
  300. deps.addAll(project.configurations.corelibs.files)
  301. deps.addAll(project.configurations.optlibs.files)
  302. deps.each {dep ->
  303. // copy jme3 jar files, sources and javadocs to jme3-project-baselibs
  304. if(isSource(dep.name)){
  305. copy {
  306. from dep
  307. into "jme3-project-baselibs/release/libs/"
  308. }
  309. } else if(isJavadoc(dep.name)){
  310. copy {
  311. from dep
  312. into "jme3-project-baselibs/release/libs/"
  313. }
  314. } else if(isJmeDep(dep.name)){
  315. copy {
  316. from dep
  317. into "jme3-project-baselibs/release/libs/"
  318. }
  319. } else{
  320. copy {
  321. from dep
  322. into "jme3-project-libraries/release/libs/"
  323. }
  324. }
  325. }
  326. project.configurations.testdatalibs.files.each {dep ->
  327. // copy jme3 test data to jme3-project-testdata
  328. if(isJmeDep(dep.name)){
  329. copy {
  330. from dep
  331. into "jme3-project-testdata/release/libs/"
  332. rename ("jme3-testdata(.*)", "jme3-testdata.jar")
  333. }
  334. }
  335. }
  336. }
  337. }
  338. copyProjectLibs.inputs.files configurations.corelibs.resolve()
  339. copyProjectLibs.inputs.files configurations.optlibs.resolve()
  340. copyProjectLibs.inputs.files configurations.testdatalibs.resolve()
  341. copyProjectLibs.outputs.dir "jme3-project-baselibs/release/libs/"
  342. copyProjectLibs.outputs.dir "jme3-project-libraries/release/libs/"
  343. copyProjectLibs.outputs.dir "jme3-project-testdata/release/libs/"
  344. // workaround method to add a tag with the name "name" and "file" to an XML MarkupBuilder
  345. def makeName(builder, nameR) { builder.name nameR }
  346. def makeFile(builder, nameR) { builder.file(name:nameR, url:nameR) }
  347. task createProjectXml(dependsOn: configurations.corelibs) {
  348. doLast {
  349. description "Creates needed J2SE library and layer XML files in jme3-project-baselibs"
  350. def eol = System.properties.'line.separator'
  351. def j2seLibraries = [] // created J2SE library descriptors
  352. // for each dependency in corelibs..
  353. def deps = []
  354. deps.addAll(project.configurations.corelibs.dependencies)
  355. deps.addAll(project.configurations.optlibs.dependencies)
  356. deps.each {dep ->
  357. def jmeJarFiles = [] // jme3 jar files
  358. def jmeSourceFiles = [] // jme3 sources
  359. def jmeJavadocFiles = [] // jme3 javadoc
  360. def externalJarFiles = [] // external jar files
  361. if(j2seLibraries.contains(dep.name+".xml")){
  362. return;
  363. }
  364. j2seLibraries.add(dep.name+".xml")
  365. project.configurations.corelibs.files{ d -> return d.name == dep.name}.each{ file ->
  366. if(isSource(file.name)){
  367. if(!jmeSourceFiles.contains(file.name)){
  368. jmeSourceFiles.add(file.name)
  369. }
  370. } else if(isJavadoc(file.name)){
  371. if(!jmeJavadocFiles.contains(file.name)){
  372. jmeJavadocFiles.add(file.name)
  373. }
  374. } else if(isJmeDep(file.name)){
  375. if(!jmeJarFiles.contains(file.name)){
  376. jmeJarFiles.add(file.name)
  377. }
  378. } else{
  379. if(!externalJarFiles.contains(file.name)){
  380. externalJarFiles.add(file.name)
  381. }
  382. }
  383. }
  384. project.configurations.optlibs.files{ d -> return d.name == dep.name}.each{ file ->
  385. if(isSource(file.name)){
  386. if(!jmeSourceFiles.contains(file.name)){
  387. jmeSourceFiles.add(file.name)
  388. }
  389. } else if(isJavadoc(file.name)){
  390. if(!jmeJavadocFiles.contains(file.name)){
  391. jmeJavadocFiles.add(file.name)
  392. }
  393. } else if(isJmeDep(file.name)){
  394. if(!jmeJarFiles.contains(file.name)){
  395. jmeJarFiles.add(file.name)
  396. }
  397. } else {
  398. if(!externalJarFiles.contains(file.name)){
  399. externalJarFiles.add(file.name)
  400. }
  401. }
  402. }
  403. // Workarounds where the automatic dependency detection did not work. This is mainly when there are runtime dependencies which are not available as artifacts
  404. if (dep.name.equals("jme3-jbullet")) {
  405. externalJarFiles.add("jbullet.jar")
  406. externalJarFiles.add("stack-alloc.jar")
  407. }
  408. // create J2SE library descriptor xml file
  409. def libraryWriter = new StringWriter()
  410. def libraryXml = new MarkupBuilder(libraryWriter)
  411. // xml.mkp.xmlDeclaration(version:'1.0')
  412. libraryWriter << '<?xml version="1.0" encoding="UTF-8"?>' << eol
  413. libraryWriter << '<!DOCTYPE library PUBLIC "-//NetBeans//DTD Library Declaration 1.0//EN" "http://www.netbeans.org/dtds/library-declaration-1_0.dtd">' << eol
  414. libraryXml.library(version:"1.0", encoding: "UTF-8"){
  415. makeName(libraryXml, "${dep.name}")
  416. type "j2se"
  417. "localizing-bundle" "com.jme3.gde.project.baselibs.Bundle"
  418. volume{
  419. type "classpath"
  420. resource "jar:nbinst://com.jme3.gde.project.baselibs/libs/${jmeJarFiles[0]}!/"
  421. /* Usually we don't add all the jmeJarFiles, this is because e.g. each library depends on core,
  422. * some depend on jme3-terrain etc, but it's the users duty to add the correct libraries.
  423. * If we would add all those each library would have it's one jme3-core, which might even lead
  424. * to build errors then.
  425. */
  426. if (dep.name.equals("jme3_xbuf")) {
  427. jmeJarFiles.each{jar ->
  428. if (jar.startsWith("jme3_xbuf")) {
  429. /* Technically you would only need the loaders, not the spatial viewer,
  430. * but users can edit the library if they want to strip off
  431. * the last few possible kilobytes */
  432. resource "jar:nbinst://com.jme3.gde.project.baselibs/libs/$jar!/"
  433. }
  434. }
  435. }
  436. externalJarFiles.each{jar ->
  437. resource "jar:nbinst://com.jme3.gde.project.libraries/libs/${jar}!/"
  438. }
  439. }
  440. volume{
  441. type "src"
  442. jmeSourceFiles.each{jar ->
  443. resource "jar:nbinst://com.jme3.gde.project.baselibs/libs/${jar}!/"
  444. }
  445. }
  446. volume{
  447. type "javadoc"
  448. jmeJavadocFiles.each{jar ->
  449. resource "jar:nbinst://com.jme3.gde.project.baselibs/libs/${jar}!/"
  450. }
  451. }
  452. }
  453. // write XML file
  454. File libraryXmlFile = file("jme3-project-baselibs/src/com/jme3/gde/project/baselibs/${dep.name}.xml");
  455. libraryXmlFile.write(libraryWriter.toString())
  456. }
  457. // create layer.xml file with entries of library xml files
  458. def layerWriter = new StringWriter()
  459. def layerXml = new MarkupBuilder(layerWriter)
  460. // layerXml.mkp.xmlDeclaration(version:'1.0')
  461. layerWriter << '<?xml version="1.0" encoding="UTF-8"?>' << eol
  462. layerWriter << '<!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 1.1//EN" "http://www.netbeans.org/dtds/filesystem-1_1.dtd">' << eol
  463. layerXml.filesystem{
  464. folder(name:"org-netbeans-api-project-libraries"){
  465. folder(name:"Libraries"){
  466. j2seLibraries.each{lib ->
  467. makeFile(layerXml, lib)
  468. }
  469. }
  470. }
  471. }
  472. File layerXmlFile = file("jme3-project-baselibs/src/com/jme3/gde/project/baselibs/layer.xml");
  473. layerXmlFile.write(layerWriter.toString())
  474. }
  475. }
  476. createProjectXml.inputs.files configurations.corelibs.resolve()
  477. createProjectXml.inputs.files configurations.optlibs.resolve()
  478. createProjectXml.outputs.dir "jme3-project-baselibs/src/com/jme3/gde/project/baselibs/"
  479. task copyTestSources {
  480. doLast {
  481. project.configurations.examplelibs.files.each{dep ->
  482. if(isSource(dep.name)){
  483. copy{
  484. from {
  485. zipTree(dep)
  486. }
  487. into "JME3TestsTemplate/src/"
  488. }
  489. copy{
  490. from {
  491. zipTree(dep)
  492. }
  493. into "JME3TestsTemplateAndroid/src/"
  494. }
  495. }
  496. }
  497. }
  498. }
  499. copyTestSources.inputs.files project.configurations.examplelibs
  500. copyTestSources.outputs.dir "JME3TestsTemplate/src/"
  501. copyTestSources.outputs.dir "JME3TestsTemplateAndroid/src/"
  502. ant.properties['plugins.version'] = jmeVersion
  503. ant.properties['app.version']= jmePomVersion
  504. ant.properties['nbm.revision']= jmeNbmRevision
  505. task overrideHarness(dependsOn: ['checkPlatformConfig', 'updateNetbeans']) {
  506. doLast {
  507. def props = new Properties()
  508. props.load(new FileInputStream("$rootDir/harness-override/override.properties"))
  509. def patch_file = { f ->
  510. def g = file("harness-override/" + f.getName())
  511. if (!f.exists()) {
  512. throw new GradleException('Cannot find targetFile: ' + f.getAbsolutePath());
  513. }
  514. if (!g.exists()) {
  515. throw new GradleException('Cannot find sourceFile: ' + g.getAbsolutePath());
  516. }
  517. if (getSHA256Hash(f) == props[f.getName() + ".hashAfter"]) {
  518. println "> Harness file \"" + f.getName() + "\" is already patched!"
  519. return; /* Already patched */
  520. }
  521. if (getSHA256Hash(f) == props[f.getName() + ".hashBefore"]) {
  522. println "> Will patch harness file \"" + f.getName() + "\"!"
  523. if (getSHA256Hash(g) != props[g.getName() + ".hashAfter"]) {
  524. throw new GradleException("Dangerous Checksum Mismatch: sourceFile \"" + g.getName() + "\" doesn't equal to its hashAfter hash. This probably means someone changed this file but forgot to update said hash or someone tried to invade the SDK by spreading his exe.")
  525. }
  526. copy {
  527. from g
  528. into f.getParent()
  529. }
  530. } else {
  531. throw new GradleException('Checksum Mismatch: targetFile ' + f.getName() + ' has invalid hash ' + getSHA256Hash(f) + '. Did you update Netbeans without changing harness-override/override.properties?');
  532. }
  533. }
  534. patch_file(file("netbeans/harness/launchers/app.exe"));
  535. patch_file(file("netbeans/harness/launchers/app64.exe"));
  536. patch_file(file("netbeans/harness/launchers/pre7_app.exe"));
  537. }
  538. }
  539. overrideHarness.outputs.files([ 'netbeans/harness/launchers/app.exe', 'netbeans/harness/launchers/app64.exe', 'netbeans/harness/launchers/pre7_app.exe'])
  540. overrideHarness.inputs.files([ 'netbeans/harness/launchers/app.exe', 'netbeans/harness/launchers/app64.exe', 'netbeans/harness/launchers/pre7_app.exe', 'harness-override/override.properties'])
  541. task updateNetbeans(type: Exec, dependsOn: checkPlatformConfig) {
  542. ignoreExitValue true // We make netbeans fail by specifying "exit" which is no java file to open (this command would open the whole IDE)
  543. if (org.gradle.nativeplatform.platform.internal.DefaultNativePlatform.currentOperatingSystem.isWindows()) {
  544. commandLine 'netbeans/bin/netbeans.exe', '--update-all', '--modules', '--refresh', '--nosplash', '--nogui', 'exit'
  545. } else {
  546. commandLine 'netbeans/bin/netbeans', '--update-all', '--modules', '--refresh', '--nosplash', '--nogui', 'exit'
  547. }
  548. }
  549. task downloadAvian() {
  550. doLast {
  551. def avianFile = file("jme3-ios/src/com/jme3/gde/ios/avian-openjdk-mac.zip")
  552. if (!avianFile.exists())
  553. {
  554. new URL("https://bintray.com/mefisto94/jme-sdk-storage/download_file?file_path=avian-openjdk-mac.zip").withInputStream{ i -> avianFile.withOutputStream{ it << i }}
  555. }
  556. }
  557. }
  558. task buildSdk(dependsOn: [copyBaseLibs, copyProjectLibs, createProjectXml, createBaseXml, copyTestSources, downloadAvian]) {
  559. doLast {
  560. ant.propertyfile(file: "nbproject/project.properties") {
  561. entry( key: "plugins.version", value: "${jmeVersion}")
  562. entry( key: "app.version", value: "${jmePomVersion}")
  563. entry( key: "nbm.revision", value: "${jmeNbmRevision}")
  564. }
  565. ant.ant(dir: ".", antfile: "build.xml", target: "build")
  566. }
  567. }
  568. buildSdk.inputs.files configurations.corelibs.resolve()
  569. buildSdk.inputs.files configurations.optlibs.resolve()
  570. file('.').eachDir{
  571. if(it.name.startsWith("jme3-") && it.isDirectory()){
  572. buildSdk.inputs.dir it
  573. }
  574. }
  575. buildSdk.outputs.dir "build"
  576. task run(dependsOn: buildSdk) {
  577. doLast {
  578. ant.ant(dir: ".", antfile: "build.xml", target: "run")
  579. }
  580. }
  581. task cleanSdk() {
  582. doLast {
  583. ant.ant(dir: ".", antfile: "build.xml", target: "clean")
  584. file("jme3-core-baselibs/release/").deleteDir()
  585. file("jme3-core-libraries/release/").deleteDir()
  586. file("jme3-core-baselibs/nbproject/project.xml").delete()
  587. file("jme3-core-libraries/nbproject/project.xml").delete()
  588. file("jme3-project-baselibs/release/").deleteDir()
  589. file("jme3-project-libraries/release/").deleteDir()
  590. file("jme3-project-testdata/release/").deleteDir()
  591. file("JME3TestsTemplate/src/jme3test/").deleteDir()
  592. file("JME3TestsTemplateAndroid/src/jme3test/").deleteDir()
  593. }
  594. }
  595. task extractPlatformIndependent(type: Copy) {
  596. from zipTree('dist/jmonkeyplatform.zip')
  597. into "dist/temp/"
  598. exclude("jmonkeyplatform/etc/jmonkeyplatform.conf")
  599. }
  600. task patchPlatformIndependent(type: Copy, dependsOn: extractPlatformIndependent) {
  601. from zipTree('dist/jmonkeyplatform.zip')
  602. into "dist/temp/"
  603. include("jmonkeyplatform/etc/jmonkeyplatform.conf")
  604. filter { String line ->
  605. line.startsWith('jdkhome=') ? '#jdkhome="/path/to/jdk"': line
  606. }
  607. doLast {
  608. delete(file('dist/jmonkeyplatform.zip'))
  609. }
  610. }
  611. task fixPlatformIndependent(dependsOn: patchPlatformIndependent, type: Zip) {
  612. description = "We compile our installers with the bundled jdk, but the platform independent zip doesn't have the jdk. For this we need to change the jmonkeyplatform.zip after building the installers to not have a jdk bundled"
  613. from 'dist/temp'
  614. archiveName = 'jmonkeyplatform.zip'
  615. destinationDir = file('dist')
  616. doLast {
  617. delete("dist/temp")
  618. }
  619. }
  620. wrapper {
  621. gradleVersion = '5.6.4'
  622. }
  623. //jar.dependsOn(buildSdk)
  624. //clean.dependsOn(cleanSdk)