/setup.py
Python | 113 lines | 86 code | 27 blank | 0 comment | 16 complexity | 16dfccb67b2adb4d3f3ca56f7e8fd3e4 MD5 | raw file
- import os, os.path, sys, zipfile
- import shutil, glob, fnmatch, subprocess
- from pprint import pformat
- from optparse import OptionParser
- forge_dir = os.path.dirname(os.path.abspath(__file__))
- from forge import apply_forge_patches
- def main():
- print '=================================== Setup Start ================================='
-
- parser = OptionParser()
- parser.add_option('-m', '--mcp-dir', action='store', dest='mcp_dir', help='Path to download/extract MCP to', default=None)
- parser.add_option('-b', '--build', action='store', dest='build', help='Build number', default=None)
- options, _ = parser.parse_args()
-
- build_num = 0
- if not options.build is None:
- try:
- build_num = int(options.build)
- except:
- pass
-
- fml_dir = os.path.join(forge_dir, 'fml')
- mcp_dir = os.path.join(forge_dir, 'mcp')
- if not options.mcp_dir is None:
- mcp_dir = os.path.abspath(options.mcp_dir)
-
- src_dir = os.path.join(mcp_dir, 'src')
-
- setup_fml(mcp_dir, fml_dir, build_num)
-
- base_dir = os.path.join(mcp_dir, 'src_base')
- work_dir = os.path.join(mcp_dir, 'src_work')
-
- if os.path.isdir(base_dir):
- shutil.rmtree(base_dir)
- if os.path.isdir(work_dir):
- shutil.rmtree(work_dir)
-
- print 'Setting up source directories'
- shutil.copytree(src_dir, base_dir)
- shutil.copytree(src_dir, work_dir)
-
- print 'Applying forge patches'
- apply_forge_patches(fml_dir, mcp_dir, forge_dir, work_dir, False)
-
- setup_eclipse(forge_dir)
-
- print '=================================== Setup Finished ================================='
-
- def setup_fml(mcp_dir, fml_dir, build_num=0):
- print 'Setting up Forge ModLoader'
- os.environ['WORKSPACE'] = os.path.join(mcp_dir, '..')
- os.environ['BUILD_NUMBER'] = str(build_num)
- BUILD = ['ant', 'jenkinsbuild']
- if sys.platform.startswith('win'):
- BUILD = ['cmd', '/C'] + BUILD
-
- if not run_command(BUILD, cwd=fml_dir):
- print('Could not setup FML')
- sys.exit(1)
-
- sys.path.append(fml_dir)
- sys.path.append(os.path.join(fml_dir, 'install'))
- from fml import finish_setup_fml
- finish_setup_fml(fml_dir, mcp_dir)
-
- print('Copy resources:')
- copy_files(os.path.join(fml_dir, 'client'), os.path.join(mcp_dir, 'src', 'minecraft'))
- copy_files(os.path.join(fml_dir, 'common'), os.path.join(mcp_dir, 'src', 'minecraft'))
- name = 'fmlversion.properties'
- print(' ' + name)
- shutil.copy(os.path.join(fml_dir, name), os.path.join(mcp_dir, 'src', 'minecraft', name))
-
- def copy_files(src_dir, dest_dir):
- for file in glob.glob(os.path.join(src_dir, '*')):
- if not os.path.isfile(file) or file.lower().endswith('.java'):
- continue
- print(' ' + file)
- shutil.copy(file, os.path.join(dest_dir, os.path.basename(file)))
-
- def run_command(command, cwd='.', verbose=True):
- print('Running command: ')
- print(pformat(command))
-
- process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, bufsize=1, cwd=cwd)
- while process.poll() is None:
- line = process.stdout.readline()
- if line:
- line = line.rstrip()
- print(line)
- if process.returncode:
- self.logger.error("failed: %d", process.returncode)
- return False
- return True
- def setup_eclipse(forge_dir):
- eclipse_dir = os.path.join(forge_dir, 'eclipse')
- eclipse_zip = os.path.join(forge_dir, 'eclipse-workspace-dev.zip')
-
- if not os.path.isdir(eclipse_dir) and os.path.isfile(eclipse_zip):
- print 'Extracting Dev Workspace'
- zf = zipfile.ZipFile(eclipse_zip)
- zf.extractall(forge_dir)
- zf.close()
-
- if __name__ == '__main__':
- main()