+# -*- coding: iso-8859-1 -*-
# This will create a dist directory containing the executable file, all the data
# directories. All Libraries will be bundled in executable file.
#
except ImportError, message:
raise SystemExit, "Unable to load module. %s" % message
-class pygame2exe(py2exe.build_exe.py2exe): #This hack make sure that pygame default font is copied: no need to modify code for specifying default font
- def copy_extensions(self, extensions):
- #Get pygame default font
- pygamedir = os.path.split(pygame.base.__file__)[0]
- pygame_default_font = os.path.join(pygamedir, pygame.font.get_default_font())
- #Add font to list of extension to be copied
- extensions.append(Module("pygame.font", pygame_default_font))
+origIsSystemDLL = py2exe.build_exe.isSystemDLL
+def isSystemDLL(pathname):
+ if os.path.basename(pathname).lower() in ["sdl_ttf.dll"]:
+ return 0
+ return origIsSystemDLL(pathname)
+py2exe.build_exe.isSystemDLL = isSystemDLL
+
+def findPguThemesDir() :
+ import pgu.gui.theme
+ theme_file = pgu.gui.theme.__file__
+ dnames = []
+ dnames.append(os.path.join(os.path.dirname(theme_file),"..","..","data","themes"))
+
+ #if the package is installed, and the package is installed
+ #in /usr/lib/python2.3/site-packages/pgu/
+ #or c:\python23\lib\site-packages\pgu\
+ #the data is in ... lib/../share/ ...
+ dnames.append(os.path.join(os.path.dirname(theme_file),"..","..","..","..","share","pgu","themes"))
+ dnames.append(os.path.join(os.path.dirname(theme_file),"..","..","..","..","..","share","pgu","themes"))
+ dnames.append(os.path.join(os.path.dirname(theme_file),"..","..","share","pgu","themes"))
+ for dname in dnames:
+ if os.path.isdir(dname):
+ return dname
+ raise IOError('pgu themes folder not found')
+
+
+class MinWii2exe(py2exe.build_exe.py2exe) :
+ def copy_extensions(self, extensions) :
py2exe.build_exe.py2exe.copy_extensions(self, extensions)
+
+ self.copyDataFiles('src/minwii/fonts', 'minwii/fonts')
+ self.copyDataFiles('src/minwii/soundfonts', 'minwii/soundfonts')
+ self.copyDataFiles('src/minwii/widgets/data', 'minwii/widgets/data')
+ self.copyDataFiles(findPguThemesDir(), 'data/themes')
+
+ pygamedir = os.path.dirname(pygame.base.__file__)
+ pygame_default_font = os.path.join(pygamedir, pygame.font.get_default_font())
+ dest = os.path.join(self.collect_dir, 'pygame', pygame.font.get_default_font())
+ self.copy_file(pygame_default_font, dest)
+ self.compiled_files.append(os.path.join('pygame', pygame.font.get_default_font()))
+
+ def copyDataFiles(self, src, dest) :
+ src = src.replace('/', os.path.sep)
+ reldest = dest.replace('/', os.path.sep)
+ dest = os.path.join(self.collect_dir, reldest)
+
+ if not os.path.exists(dest) :
+ self.mkpath(dest)
+
+ for path, dirs, files in os.walk(src) :
+ if '.svn' in path : continue
+ relpath = path[len(src)+1:]
+ if not os.path.exists(os.path.join(dest, relpath)) :
+ self.mkpath(os.path.join(dest, relpath))
+
+ for file in files :
+ s = os.path.join(path, file)
+ d = os.path.join(dest, relpath, file)
+ self.copy_file(s, d)
+ print os.path.join(reldest, relpath, file)
+ self.compiled_files.append(os.path.join(reldest, relpath, file))
+
class BuildExe:
def __init__(self):
#Name of starting .py
- self.script = "MyApps.py"
+ self.script = "src/minwii/minwii_fullscreen.py"
#Name of program
- self.project_name = "MyApps"
+ self.project_name = "MINWii"
#Project url
self.project_url = "about:none"
#Version of program
- self.project_version = "0.0"
+ self.project_version = "1.0"
#License of the program
- self.license = "MyApps License"
+ self.license = "GPL"
#Auhor of program
- self.author_name = "Me"
- self.author_email = "example@example.com"
- self.copyright = "Copyright (c) 2009 Me."
+ self.author_name = "Samuel Benveniste"
+ self.author_email = "samuel.benveniste@gmail.com"
+ self.copyright = "Copyright 2010 MINES-ParisTech"
#Description
- self.project_description = "MyApps Description"
+ self.project_description = "Musicothérapie Interractive avec la Wiimote"
#Icon file (None will use pygame default icon)
- self.icon_file = None
+ self.icon_file = 'minwii.ico'
- #Extra files/dirs copied to game
- self.extra_datas = []
+ self.data_files = []
#Extra/excludes python modules
self.extra_modules = []
self.exclude_dll = ['']
#Zip file name (None will bundle files in exe instead of zip file)
- self.zipfile_name = None
+ self.zipfile_name = 'minwii_lib.zip'
#Dist directory
self.dist_dir ='dist'
- ## Code from DistUtils tutorial at http://wiki.python.org/moin/Distutils/Tutorial
- ## Originally borrowed from wxPython's setup and config files
- def opj(self, *args):
- path = os.path.join(*args)
- return os.path.normpath(path)
-
- def find_data_files(self, srcdir, *wildcards, **kw):
- # get a list of all files under the srcdir matching wildcards,
- # returned in a format to be used for install_data
- def walk_helper(arg, dirname, files):
- if '.svn' in dirname:
- return
- names = []
- lst, wildcards = arg
- for wc in wildcards:
- wc_name = self.opj(dirname, wc)
- for f in files:
- filename = self.opj(dirname, f)
-
- if fnmatch.fnmatch(filename, wc_name) and not os.path.isdir(filename):
- names.append(filename)
- if names:
- lst.append( (dirname, names ) )
-
- file_list = []
- recursive = kw.get('recursive', True)
- if recursive:
- os.path.walk(srcdir, walk_helper, (file_list, wildcards))
- else:
- walk_helper((file_list, wildcards),
- srcdir,
- [os.path.basename(f) for f in glob.glob(self.opj(srcdir, '*'))])
- return file_list
def run(self):
if os.path.isdir(self.dist_dir): #Erase previous destination dir
shutil.rmtree(self.dist_dir)
+ if os.path.isdir('build'): #Clean up build dir
+ shutil.rmtree('build')
+
+
#Use the default pygame icon, if none given
if self.icon_file == None:
path = os.path.split(pygame.__file__)[0]
self.icon_file = os.path.join(path, 'pygame.ico')
- #List all data files to add
- extra_datas = []
- for data in self.extra_datas:
- if os.path.isdir(data):
- extra_datas.extend(self.find_data_files(data, '*'))
- else:
- extra_datas.append(('.', [data]))
-
+
setup(
- cmdclass = {'py2exe': pygame2exe},
+ cmdclass = {'py2exe': MinWii2exe},
version = self.project_version,
description = self.project_description,
name = self.project_name,
'icon_resources': [(0, self.icon_file)],
'copyright': self.copyright
}],
- options = {'py2exe': {'optimize': 2, 'bundle_files': 1, 'compressed': True, \
- 'excludes': self.exclude_modules, 'packages': self.extra_modules, \
- 'dll_excludes': self.exclude_dll} },
+ #console = [self.script],
+ options = {'py2exe': {'optimize': 2,
+ 'bundle_files': 3,
+ #'compressed': True,
+ #'excludes': self.exclude_modules,
+ #'packages': self.extra_modules,
+ #'dll_excludes': self.exclude_dll,
+ 'skip_archive' : True
+ }
+ },
zipfile = self.zipfile_name,
- data_files = extra_datas,
+ data_files = self.data_files,
dist_dir = self.dist_dir
)
- if os.path.isdir('build'): #Clean up build dir
- shutil.rmtree('build')
+ #if os.path.isdir('build'): #Clean up build dir
+ # shutil.rmtree('build')
if __name__ == '__main__':
if operator.lt(len(sys.argv), 2):
sys.argv.append('py2exe')
BuildExe().run() #Run generation
- raw_input("Press any key to continue") #Pause to let user see that things ends
+ #raw_input("Press any key to continue") #Pause to let user see that things ends