build_oxygine_with_sdl.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. from __future__ import unicode_literals, print_function
  4. import os
  5. import sys
  6. import shutil
  7. import zipfile
  8. import time
  9. def test():
  10. with zipfile.ZipFile("d:/oxygine-framework/oxygine-framework.zip", "r", compression=zipfile.ZIP_DEFLATED) as zp:
  11. res = zipfile.ZipFile("d:/oxygine-framework/oxygine-framework-X.zip", "w", compression=zipfile.ZIP_DEFLATED)
  12. lst = zp.filelist
  13. for item in lst:
  14. name = os.path.split(item.filename)[1]
  15. base, ext = os.path.splitext(name)
  16. if ext in (".sh", ".py") or name in ("gradlew", "PVRTexToolCLI", "PVRTexToolCLI_64"):
  17. item.external_attr = 0755 << 16L # a+x
  18. data = zp.read(item.filename)
  19. res.writestr(item, data, zipfile.ZIP_DEFLATED)
  20. res.close()
  21. test()
  22. q = 0
  23. def recursive_zip(zipf, directory, folder=""):
  24. for item in os.listdir(directory):
  25. if os.path.isfile(os.path.join(directory, item)):
  26. src = os.path.join(directory, item)
  27. dest = folder + os.sep + item
  28. ext = os.path.splitext(dest)[1]
  29. st = os.stat(src)
  30. mtime = time.localtime(st.st_mtime)
  31. date_time = mtime[0:6]
  32. info = zipfile.ZipInfo(dest, date_time)
  33. bts = open(src, "rb").read()
  34. if ext == ".sh" or item in ("PVRTexToolCLI", "oxyresbuild.py", "gen_template.py", "png_strip.py", "gradlew"):
  35. info.external_attr = 0755 << 16L # a+x
  36. # zipf.writestr(info, bts, zipfile.ZIP_DEFLATED)
  37. zipf.write(os.path.join(directory, item), folder + os.sep + item)
  38. elif os.path.isdir(os.path.join(directory, item)):
  39. recursive_zip(zipf, os.path.join(
  40. directory, item), folder + os.sep + item)
  41. def buildzip(name):
  42. print("building zip: " + name)
  43. destzip = "../../" + name
  44. with zipfile.ZipFile(destzip, "w", compression=zipfile.ZIP_DEFLATED) as zp:
  45. recursive_zip(zp, "../../temp")
  46. # return
  47. try:
  48. shutil.copyfile(destzip, "../../../gdrive/oxygine/" + name)
  49. except IOError, e:
  50. pass
  51. try:
  52. shutil.copyfile(destzip, "../../../Dropbox/Public/oxygine/" + name)
  53. except IOError, e:
  54. pass
  55. print("zip created: " + name)
  56. temp = "../../temp"
  57. SDL_dest = temp + "/SDL"
  58. OXYGINE_dest = temp + "/oxygine-framework/"
  59. SOUND_dest = temp + "/oxygine-sound/"
  60. FLOW_dest = temp + "/oxygine-flow/"
  61. FT_dest = temp + "/oxygine-freetype/"
  62. print("cleaning temp...")
  63. shutil.rmtree(temp, True)
  64. def export(repo, dest):
  65. print("exporting " + repo)
  66. cmd = "git -C %s checkout-index -a -f --prefix=%s/" % (
  67. "d:/" + repo, "d:/oxygine-framework/temp/" + dest)
  68. os.system(cmd)
  69. export("oxygine-framework", "oxygine-framework")
  70. buildzip("oxygine-framework.zip")
  71. # ALL IN ONE
  72. #cmd = "hg archive -R ../../../SDL %s" % (SDL_dest, )
  73. #os.system(cmd)
  74. export("SDL", "SDL")
  75. export("oxygine-sound", "oxygine-sound")
  76. export("oxygine-flow", "oxygine-flow")
  77. export("oxygine-freetype", "oxygine-freetype")
  78. shutil.rmtree(SDL_dest + "/test")
  79. def fix_file(name, cb):
  80. data = open(name, "rb").read()
  81. data = cb(data)
  82. open(name, "wb").write(data)
  83. fix_file(SDL_dest + "/include/SDL_config_windows.h",
  84. lambda data: data.replace(
  85. "#define SDL_AUDIO_DRIVER_XAUDIO2", "//#define SDL_AUDIO_DRIVER_XAUDIO2")
  86. )
  87. fix_file(SDL_dest + "/src/video/uikit/SDL_uikitview.h",
  88. lambda data: data.replace(
  89. "#define IPHONE_TOUCH_EFFICIENT_DANGEROUS", "//#define IPHONE_TOUCH_EFFICIENT_DANGEROUS")
  90. )
  91. def enum(folder, cb):
  92. for item in os.listdir(folder):
  93. path = folder + item
  94. if os.path.isdir(path):
  95. if item == "data":
  96. cb(path)
  97. enum(path + "/", cb)
  98. def copy(path):
  99. win32 = OXYGINE_dest + "/oxygine/third_party/win32/dlls/"
  100. items = (win32 + "zlib.dll",
  101. win32 + "pthreadVCE2.dll",
  102. "../../libs/SDL2.dll")
  103. if "Demo/" in path:
  104. items = items + (win32 + "libcurl.dll", win32 + "ssleay32.dll", win32 + "libssh2.dll", win32 + "libeay32.dll")
  105. for item in items:
  106. name = os.path.split(item)[1]
  107. shutil.copy(item, path + "/" + name)
  108. enum(OXYGINE_dest + "/examples/", copy)
  109. enum(SOUND_dest + "/examples/", copy)
  110. enum(FLOW_dest + "/examples/", copy)
  111. enum(FT_dest + "/examples/", copy)
  112. shutil.copy(SDL_dest + "/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java",
  113. OXYGINE_dest + "/oxygine/SDL/android/lib/src/org/libsdl/app/SDLActivity.java")
  114. libs = ("SDL2.lib", "SDL2main.lib", )
  115. for lib in libs:
  116. shutil.copy("../../libs/" + lib, OXYGINE_dest + "/libs/" + lib)
  117. """
  118. libs = ("libSDL2main.a", "libSDL2.dll", "libSDL2.dll.a")
  119. for lib in libs:
  120. shutil.copy("../../libs/" + lib, OXYGINE_dest + "/libs/" + lib)
  121. """
  122. buildzip("oxygine-framework-with-sdl.zip")
  123. print("done.")