Mercurial > skaapsteker
view setup.py @ 286:0dbb50d07764
Poke the current state before checking to see if there is text in case the world has changed and it is time for the state machine to move on.
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Fri, 08 Apr 2011 20:58:12 +0200 |
parents | f0c108bee0b2 |
children | 4e8be9c52952 |
line wrap: on
line source
import os # usage: python setup.py command # # sdist - build a source dist # py2exe - build an exe # py2app - build an app # cx_freeze - build a linux binary (not implemented) # # the goods are placed in the dist dir for you to .zip up or whatever... APP_NAME = 'skaapsteker' DESCRIPTION = open('README.txt').read() CHANGES = open('CHANGES.txt').read() TODO = open('TODO.txt').read() METADATA = { 'name':APP_NAME, 'version': '0.0.1', 'license': 'short_licence', 'description': '', 'author': 'Adrianna Pinska, Anna Malczyk, Jeremy Thurgood, Neil Muller, Oliver Hambsch, Simon Cross, Stefano Rivera', #'author_email': '', 'url': 'http://pyweek.org/e/skaapsteker', 'classifiers': [ 'Development Status :: 4 - Beta', 'Intended Audience :: End Users/Desktop', 'Intended Audience :: Information Technology', 'License :: OSI Approved :: BSD License', 'Operating System :: OS Independent', 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 2.6', 'Programming Language :: Python :: 2.7', 'Topic :: Software Development :: Libraries :: pygame', 'Topic :: Games/Entertainment :: Real Time Strategy', ], 'py2exe.target':'', #'py2exe.icon':'icon.ico', #64x64 'py2exe.binary':APP_NAME, #leave off the .exe, it will be added 'py2app.target':APP_NAME, 'py2app.icon':'icon.icns', #128x128 #'cx_freeze.cmd':'~/src/cx_Freeze-3.0.3/FreezePython', 'cx_freeze.cmd':'cxfreeze', 'cx_freeze.target':'%s_linux' % APP_NAME, 'cx_freeze.binary':APP_NAME, } files_to_remove = ['tk84.dll', '_ssl.pyd', 'tcl84.dll', os.path.join('numpy','core', '_dotblas.pyd'), os.path.join('numpy', 'linalg', 'lapack_lite.pyd'), ] directories_to_remove = [os.path.join('numpy', 'distutils'), 'distutils', 'tcl', ] cmdclass = {} PACKAGEDATA = { 'cmdclass': cmdclass, 'package_dir': {'skaapsteker': 'skaapsteker', }, 'packages': ['skaapsteker', ], 'scripts': ['scripts/skaapsteker'], } PACKAGEDATA.update(METADATA) from distutils.core import setup, Extension try: import py2exe except: pass import sys import glob import os import shutil try: cmd = sys.argv[1] except IndexError: print 'Usage: setup.py install|py2exe|py2app|cx_freeze' raise SystemExit # utility for adding subdirectories def add_files(dest,generator): for dirpath, dirnames, filenames in generator: for name in 'CVS', '.svn': if name in dirnames: dirnames.remove(name) for name in filenames: if '~' in name: continue suffix = os.path.splitext(name)[1] if suffix in ('.pyc', '.pyo'): continue if name[0] == '.': continue filename = os.path.join(dirpath, name) dest.append(filename) # define what is our data _DATA_DIR = os.path.join('skaapsteker', 'data') data = [] add_files(data,os.walk(_DATA_DIR)) #data_dirs = [os.path.join(f2.replace(_DATA_DIR, 'data'), '*') for f2 in data] data_dirs = [os.path.join(f2.replace(_DATA_DIR, 'data')) for f2 in data] PACKAGEDATA['package_data'] = {'skaapsteker': data_dirs} data.extend(glob.glob('*.txt')) #data.append('MANIFEST.in') # define what is our source src = [] add_files(src,os.walk('skaapsteker')) src.extend(glob.glob('*.py')) # build the sdist target if cmd not in "py2exe py2app cx_freeze".split(): f = open("MANIFEST.in","w") for l in data: f.write("include "+l+"\n") for l in src: f.write("include "+l+"\n") f.close() setup(**PACKAGEDATA) # build the py2exe target if cmd in ('py2exe',): dist_dir = os.path.join('dist',METADATA['py2exe.target']) data_dir = dist_dir src = 'run_game.py' dest = METADATA['py2exe.binary']+'.py' shutil.copy(src,dest) setup( options={'py2exe':{ 'dist_dir':dist_dir, 'dll_excludes':['_dotblas.pyd','_numpy.pyd', 'numpy.linalg.lapack_lite.pyd', 'numpy.core._dotblas.pyd'] + files_to_remove, 'excludes':['matplotlib', 'tcl', 'OpenGL'], 'ignores':['matplotlib', 'tcl', 'OpenGL'], 'bundle_files':1, }}, # windows=[{ console=[{ 'script':dest, #'icon_resources':[(1,METADATA['py2exe.icon'])], }], ) # build the py2app target if cmd == 'py2app': dist_dir = os.path.join('dist',METADATA['py2app.target']+'.app') data_dir = os.path.join(dist_dir,'Contents','Resources') from setuptools import setup src = 'run_game.py' dest = METADATA['py2app.target']+'.py' shutil.copy(src,dest) APP = [dest] DATA_FILES = [] OPTIONS = {'argv_emulation': True, #'iconfile':METADATA['py2app.icon'] } setup( app=APP, data_files=DATA_FILES, options={'py2app': OPTIONS}, setup_requires=['py2app'], ) # make the cx_freeze target if cmd == 'cx_freeze': app_dist_dir = METADATA['cx_freeze.target'] + "_" + METADATA['version'] dist_dir = os.path.join('dist', app_dist_dir) data_dir = dist_dir modules_exclude = "tcl,tk" cmd_args = (METADATA['cx_freeze.cmd'], dist_dir, METADATA['cx_freeze.binary'], modules_exclude) sys_cmd = '%s --install-dir=%s --target-name=%s --exclude-modules=%s run_game.py' % cmd_args print sys_cmd os.system(sys_cmd) import shutil if os.path.exists(os.path.join(data_dir, "tcl")): shutil.rmtree( os.path.join(data_dir, "tcl") ) if os.path.exists(os.path.join(data_dir, "tk")): shutil.rmtree( os.path.join(data_dir, "tk") ) # recursively make a bunch of folders def make_dirs(dname_): parts = list(os.path.split(dname_)) dname = None while len(parts): if dname == None: dname = parts.pop(0) else: dname = os.path.join(dname,parts.pop(0)) if not os.path.isdir(dname): os.mkdir(dname) # copy data into the binaries if cmd in ('py2exe','cx_freeze','py2app'): dest = data_dir for fname in data: dname = os.path.join(dest,os.path.dirname(fname)) make_dirs(dname) if not os.path.isdir(fname): #print (fname,dname) shutil.copy(fname,dname) # make a tgz files. if cmd == 'cx_freeze': sys_cmd = "cd dist; tar -vczf %s.tgz %s/" % (app_dist_dir,app_dist_dir) os.system(sys_cmd) # remove files from the zip. if 0 and cmd in ('py2exe'): import shutil #shutil.rmtree( os.path.join('dist') ) #shutil.rmtree( os.path.join('build') ) os.system("unzip dist/library.zip -d dist\library") for fn in files_to_remove: os.remove( os.path.join('dist', 'library', fn) ) for d in directories_to_remove: if os.path.exists( os.path.join('dist', 'library', d) ): shutil.rmtree( os.path.join('dist', 'library', d) ) os.remove( os.path.join('dist', 'library.zip') ) os.chdir("dist") os.chdir("library") os.system("zip -r -9 ..\library.zip .") os.chdir("..") os.chdir("..")