|
@@ -1,173 +0,0 @@
|
|
-# This script is based on the one found on: https://www.pygame.org/wiki/Pygame2exe?parent=CookBook
|
|
|
|
-# This means that I(Tankernn) have not created it and I do not claim to own it.
|
|
|
|
-#
|
|
|
|
-# This will create a dist directory containing the executable file, all the data
|
|
|
|
-# directories. All Libraries will be bundled in executable file.
|
|
|
|
-#
|
|
|
|
-# Run the build process by entering 'compile.py' or
|
|
|
|
-# 'python compile.py' in a console prompt.
|
|
|
|
-#
|
|
|
|
-# To build exe, python, pygame, and py2exe have to be installed. After
|
|
|
|
-# building exe none of this libraries are needed.
|
|
|
|
-# Please Note have a backup file in a different directory as if it crashes you
|
|
|
|
-# will loose it all!(I lost 6 months of work because I did not do this)
|
|
|
|
-
|
|
|
|
-try:
|
|
|
|
- from distutils.core import setup
|
|
|
|
- import py2exe, pygame
|
|
|
|
- from modulefinder import Module
|
|
|
|
- import glob, fnmatch
|
|
|
|
- import sys, os, shutil
|
|
|
|
- import operator
|
|
|
|
-except ImportError, message:
|
|
|
|
- raise SystemExit, "Unable to load module. %s" % message
|
|
|
|
-
|
|
|
|
-#hack which fixes the pygame mixer and pygame font
|
|
|
|
-origIsSystemDLL = py2exe.build_exe.isSystemDLL # save the orginal before we edit it
|
|
|
|
-def isSystemDLL(pathname):
|
|
|
|
- # checks if the freetype and ogg dll files are being included
|
|
|
|
- if os.path.basename(pathname).lower() in ("libfreetype-6.dll", "libogg-0.dll","sdl_ttf.dll"): # "sdl_ttf.dll" added by arit.
|
|
|
|
- return 0
|
|
|
|
- return origIsSystemDLL(pathname) # return the orginal function
|
|
|
|
-py2exe.build_exe.isSystemDLL = isSystemDLL # override the default function with this one
|
|
|
|
-
|
|
|
|
-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))
|
|
|
|
- py2exe.build_exe.py2exe.copy_extensions(self, extensions)
|
|
|
|
-
|
|
|
|
-class BuildExe:
|
|
|
|
- def __init__(self):
|
|
|
|
- #Name of starting .py
|
|
|
|
- self.script = "PythonInvaders.py"
|
|
|
|
-
|
|
|
|
- #Name of program
|
|
|
|
- self.project_name = "PythonInvaders"
|
|
|
|
-
|
|
|
|
- #Project url
|
|
|
|
- self.project_url = "https://github.com/Tankernn/PythonInvaders"
|
|
|
|
-
|
|
|
|
- #Version of program
|
|
|
|
- self.project_version = "1.0"
|
|
|
|
-
|
|
|
|
- #License of the program
|
|
|
|
- self.license = "MIT License"
|
|
|
|
-
|
|
|
|
- #Auhor of program
|
|
|
|
- self.author_name = "Tankernn"
|
|
|
|
- self.author_email = "frans@tankernn.eu"
|
|
|
|
- self.copyright = "Copyright (c) 2015 Tankernn."
|
|
|
|
-
|
|
|
|
- #Description
|
|
|
|
- self.project_description = "A python version of Space Invaders"
|
|
|
|
-
|
|
|
|
- #Icon file (None will use pygame default icon)
|
|
|
|
- self.icon_file = None
|
|
|
|
-
|
|
|
|
- #Extra files/dirs copied to game
|
|
|
|
- self.extra_datas = ['img/']
|
|
|
|
-
|
|
|
|
- #Extra/excludes python modules
|
|
|
|
- self.extra_modules = []
|
|
|
|
- self.exclude_modules = []
|
|
|
|
-
|
|
|
|
- #DLL Excludes
|
|
|
|
- self.exclude_dll = ['']
|
|
|
|
- #python scripts (strings) to be included, seperated by a comma
|
|
|
|
- self.extra_scripts = []
|
|
|
|
-
|
|
|
|
- #Zip file name (None will bundle files in exe instead of zip file)
|
|
|
|
- self.zipfile_name = None
|
|
|
|
-
|
|
|
|
- #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)
|
|
|
|
-
|
|
|
|
- #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},
|
|
|
|
- version = self.project_version,
|
|
|
|
- description = self.project_description,
|
|
|
|
- name = self.project_name,
|
|
|
|
- url = self.project_url,
|
|
|
|
- author = self.author_name,
|
|
|
|
- author_email = self.author_email,
|
|
|
|
- license = self.license,
|
|
|
|
-
|
|
|
|
- # targets to build
|
|
|
|
- windows = [{
|
|
|
|
- 'script': self.script,
|
|
|
|
- '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,
|
|
|
|
- 'includes': self.extra_scripts} },
|
|
|
|
- zipfile = self.zipfile_name,
|
|
|
|
- data_files = extra_datas,
|
|
|
|
- dist_dir = self.dist_dir
|
|
|
|
- )
|
|
|
|
-
|
|
|
|
- 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
|
|
|