publish.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #!/usr/bin/python
  2. #
  3. # This program assembles the distribution file Gameduino2.zip
  4. # from the source .ino files, and the asset files in
  5. # converted-assets.
  6. #
  7. version = open("version").read().strip()
  8. properties = """\
  9. name=Gameduino2
  10. version=%s
  11. author=James Bowman <jamesb@excamera.com>
  12. maintainer=James Bowman <jamesb@excamera.com>
  13. sentence=Gameduino 2 and 3 driver
  14. paragraph=for the popular Gameduino series of graphics, audio video shields.
  15. category=Display
  16. url=http://gameduino.com
  17. architectures=*
  18. """ % version
  19. inventory = {
  20. '1.Basics' : "helloworld fizz blobs simon jpeg",
  21. '2.Graphics' : "logo walk tiled mono slotgag reflection",
  22. '3.Peripherals' : "sketch tilt noisy song",
  23. '4.Utilities' : "viewer radarchart selftest",
  24. '5.Demos' : "cobra jnr kenney sprites widgets",
  25. '6.Games' : "nightstrike chess frogger",
  26. '7.GD3' : "video1 video2 cube cube2",
  27. }
  28. import zipfile
  29. def clean(src, is_due = False):
  30. vis = 1
  31. dst = []
  32. for l in src:
  33. assert not chr(9) in l, "Tab found in source"
  34. if is_due and ('EEPROM' in l):
  35. continue
  36. if "//'" in l:
  37. l = l[:l.index("//'")]
  38. if vis and not "JCB" in l:
  39. assert not "dumpscreen" in l
  40. dst.append(l.rstrip() + "\n")
  41. else:
  42. if "JCB{" in l:
  43. vis = 0
  44. if "}JCB" in l:
  45. vis = 1
  46. return "".join(dst)
  47. for (is_due, suffix) in [(False, ""), (True, "_Due")]:
  48. z = zipfile.ZipFile("Gameduino2%s.zip" % suffix, "w", zipfile.ZIP_DEFLATED)
  49. for f in "GD2.cpp GD2.h transports/wiring.h".split():
  50. c = open(f).read().replace('%VERSION', version)
  51. z.writestr("Gameduino2/%s" % f, c)
  52. z.writestr("Gameduino2/library.properties", properties)
  53. for d,projs in inventory.items():
  54. dir = "Gameduino2" + "/" + d
  55. for p in projs.split():
  56. pd = dir + "/" + p
  57. z.writestr("%s/%s.ino" % (pd, p), clean(open("examples/%s.ino" % p), is_due))
  58. for l in open("examples/%s.ino" % p):
  59. if '#include "' in l:
  60. hdr = l[10:l.rindex('"')]
  61. z.write("converted-assets/%s" % hdr, "%s/%s" % (pd, hdr))
  62. z.close()
  63. # print "\n".join(["./mkino %s" % s for s in " ".join(inventory.values()).split()])