PageRenderTime 61ms CodeModel.GetById 32ms RepoModel.GetById 0ms app.codeStats 0ms

/setup.py

https://bitbucket.org/agaricusb/minecraftforge
Python | 113 lines | 86 code | 27 blank | 0 comment | 16 complexity | 16dfccb67b2adb4d3f3ca56f7e8fd3e4 MD5 | raw file
  1. import os, os.path, sys, zipfile
  2. import shutil, glob, fnmatch, subprocess
  3. from pprint import pformat
  4. from optparse import OptionParser
  5. forge_dir = os.path.dirname(os.path.abspath(__file__))
  6. from forge import apply_forge_patches
  7. def main():
  8. print '=================================== Setup Start ================================='
  9. parser = OptionParser()
  10. parser.add_option('-m', '--mcp-dir', action='store', dest='mcp_dir', help='Path to download/extract MCP to', default=None)
  11. parser.add_option('-b', '--build', action='store', dest='build', help='Build number', default=None)
  12. options, _ = parser.parse_args()
  13. build_num = 0
  14. if not options.build is None:
  15. try:
  16. build_num = int(options.build)
  17. except:
  18. pass
  19. fml_dir = os.path.join(forge_dir, 'fml')
  20. mcp_dir = os.path.join(forge_dir, 'mcp')
  21. if not options.mcp_dir is None:
  22. mcp_dir = os.path.abspath(options.mcp_dir)
  23. src_dir = os.path.join(mcp_dir, 'src')
  24. setup_fml(mcp_dir, fml_dir, build_num)
  25. base_dir = os.path.join(mcp_dir, 'src_base')
  26. work_dir = os.path.join(mcp_dir, 'src_work')
  27. if os.path.isdir(base_dir):
  28. shutil.rmtree(base_dir)
  29. if os.path.isdir(work_dir):
  30. shutil.rmtree(work_dir)
  31. print 'Setting up source directories'
  32. shutil.copytree(src_dir, base_dir)
  33. shutil.copytree(src_dir, work_dir)
  34. print 'Applying forge patches'
  35. apply_forge_patches(fml_dir, mcp_dir, forge_dir, work_dir, False)
  36. setup_eclipse(forge_dir)
  37. print '=================================== Setup Finished ================================='
  38. def setup_fml(mcp_dir, fml_dir, build_num=0):
  39. print 'Setting up Forge ModLoader'
  40. os.environ['WORKSPACE'] = os.path.join(mcp_dir, '..')
  41. os.environ['BUILD_NUMBER'] = str(build_num)
  42. BUILD = ['ant', 'jenkinsbuild']
  43. if sys.platform.startswith('win'):
  44. BUILD = ['cmd', '/C'] + BUILD
  45. if not run_command(BUILD, cwd=fml_dir):
  46. print('Could not setup FML')
  47. sys.exit(1)
  48. sys.path.append(fml_dir)
  49. sys.path.append(os.path.join(fml_dir, 'install'))
  50. from fml import finish_setup_fml
  51. finish_setup_fml(fml_dir, mcp_dir)
  52. print('Copy resources:')
  53. copy_files(os.path.join(fml_dir, 'client'), os.path.join(mcp_dir, 'src', 'minecraft'))
  54. copy_files(os.path.join(fml_dir, 'common'), os.path.join(mcp_dir, 'src', 'minecraft'))
  55. name = 'fmlversion.properties'
  56. print(' ' + name)
  57. shutil.copy(os.path.join(fml_dir, name), os.path.join(mcp_dir, 'src', 'minecraft', name))
  58. def copy_files(src_dir, dest_dir):
  59. for file in glob.glob(os.path.join(src_dir, '*')):
  60. if not os.path.isfile(file) or file.lower().endswith('.java'):
  61. continue
  62. print(' ' + file)
  63. shutil.copy(file, os.path.join(dest_dir, os.path.basename(file)))
  64. def run_command(command, cwd='.', verbose=True):
  65. print('Running command: ')
  66. print(pformat(command))
  67. process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, bufsize=1, cwd=cwd)
  68. while process.poll() is None:
  69. line = process.stdout.readline()
  70. if line:
  71. line = line.rstrip()
  72. print(line)
  73. if process.returncode:
  74. self.logger.error("failed: %d", process.returncode)
  75. return False
  76. return True
  77. def setup_eclipse(forge_dir):
  78. eclipse_dir = os.path.join(forge_dir, 'eclipse')
  79. eclipse_zip = os.path.join(forge_dir, 'eclipse-workspace-dev.zip')
  80. if not os.path.isdir(eclipse_dir) and os.path.isfile(eclipse_zip):
  81. print 'Extracting Dev Workspace'
  82. zf = zipfile.ZipFile(eclipse_zip)
  83. zf.extractall(forge_dir)
  84. zf.close()
  85. if __name__ == '__main__':
  86. main()