diff --git a/Makefile b/Makefile index 66639ef1..7228a446 100644 --- a/Makefile +++ b/Makefile @@ -64,9 +64,10 @@ app: python2.7 -c 'import compileall; compileall.compile_dir("gluon/")' #python web2py.py -S welcome -R __exit__.py #cd ../web2py_osx/site-packages/; unzip ../site-packages.zip - find gluon -path '*.pyc' -exec cp {} ../web2py_osx/site-packages/{} \; - cd ../web2py_osx/site-packages/; zip -r ../site-packages.zip * - mv ../web2py_osx/site-packages.zip ../web2py_osx/web2py/web2py.app/Contents/Resources/lib/python2.7 + #find gluon -path '*.pyc' -exec cp {} ../web2py_osx/site-packages/{} \; + #cd ../web2py_osx/site-packages/; zip -r ../site-packages.zip * + #mv ../web2py_osx/site-packages.zip ../web2py_osx/web2py/web2py.app/Contents/Resources/lib/python2.7 + find gluon -path '*.py' -exec cp {} ../web2py_osx/web2py/web2py.app/Contents/Resources/gluon/{} \; cp README.markdown ../web2py_osx/web2py/web2py.app/Contents/Resources cp NEWINSTALL ../web2py_osx/web2py/web2py.app/Contents/Resources cp LICENSE ../web2py_osx/web2py/web2py.app/Contents/Resources diff --git a/VERSION b/VERSION index 5420088d..0c8b7a26 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -Version 2.4.7-stable+timestamp.2013.05.28.22.44.29 +Version 2.4.7-stable+timestamp.2013.05.29.11.38.58 diff --git a/setup_app.py b/setup_app.py index c26c61bc..aa68bbff 100755 --- a/setup_app.py +++ b/setup_app.py @@ -8,11 +8,28 @@ Usage: python setup.py py2app """ +copy_apps = False +copy_scripts = True +copy_site_packages = True +remove_build_files = True +make_zip = True +zip_filename = "web2py_osx" + from setuptools import setup from gluon.import_all import base_modules, contributed_modules +from gluon.fileutils import readlines_file import os import fnmatch +import shutil +import sys +import re +import zipfile +#read web2py version from VERSION file +web2py_version_line = readlines_file('VERSION')[0] +#use regular expression to get just the version number +v_re = re.compile('[0-9]+\.[0-9]+\.[0-9]+') +web2py_version = v_re.search(web2py_version_line).group(0) class reglob: def __init__(self, directory, pattern="*"): @@ -39,18 +56,105 @@ class reglob: return fullname setup(app=['web2py.py'], + version=web2py_version, + description="web2py web framework", + author="Massimo DiPierro", + license="LGPL v3", data_files=[ 'NEWINSTALL', 'ABOUT', 'LICENSE', 'VERSION', - ] + - [x for x in reglob('applications/examples')] + - [x for x in reglob('applications/welcome')] + - [x for x in reglob('applications/admin')], + 'splashlogo.gif', + 'logging.example.conf', + 'options_std.py', + ], options={'py2app': { 'argv_emulation': True, 'includes': base_modules, - 'packages': contributed_modules, }}, setup_requires=['py2app']) + + +def copy_folders(source, destination): + """Copy files & folders from source to destination (within dist/)""" + print 'copying %s -> %s' % (source, destination) + base = 'dist/web2py.app/Contents/Resources/' + if os.path.exists(os.path.join(base, destination)): + shutil.rmtree(os.path.join(base, destination)) + shutil.copytree(os.path.join(source), os.path.join(base, destination)) + +#Should we include applications? +copy_folders('gluon','gluon') + +if copy_apps: + copy_folders('applications', 'applications') + print "Your application(s) have been added" +else: + #only copy web2py's default applications + copy_folders('applications/admin', 'applications/admin') + copy_folders('applications/welcome', 'applications/welcome') + copy_folders('applications/examples', 'applications/examples') + print "Only web2py's admin, examples & welcome applications have been added" + + +#should we copy project's site-packages into dist/site-packages +if copy_site_packages: + #copy site-packages + copy_folders('site-packages', 'site-packages') +else: + #no worries, web2py will create the (empty) folder first run + print "Skipping site-packages" + pass + +#should we copy project's scripts into dist/scripts +if copy_scripts: + #copy scripts + copy_folders('scripts', 'scripts') +else: + #no worries, web2py will create the (empty) folder first run + print "Skipping scripts" + pass + + +#borrowed from http://bytes.com/topic/python/answers/851018-how-zip-directory-python-using-zipfile +def recursive_zip(zipf, directory, folder=""): + for item in os.listdir(directory): + if os.path.isfile(os.path.join(directory, item)): + zipf.write(os.path.join(directory, item), folder + os.sep + item) + elif os.path.isdir(os.path.join(directory, item)): + recursive_zip( + zipf, os.path.join(directory, item), folder + os.sep + item) + +#should we create a zip file of the build? + +if make_zip: + #to keep consistent with how official web2py windows zip file is setup, + #create a web2py folder & copy dist's files into it + shutil.copytree('dist', 'zip_temp/web2py') + #create zip file + #use filename specified via command line + zipf = zipfile.ZipFile( + zip_filename + ".zip", "w", compression=zipfile.ZIP_DEFLATED) + path = 'zip_temp' # just temp so the web2py directory is included in our zip file + recursive_zip( + zipf, path) # leave the first folder as None, as path is root. + zipf.close() + shutil.rmtree('zip_temp') + print "Your Windows binary version of web2py can be found in " + \ + zip_filename + ".zip" + print "You may extract the archive anywhere and then run web2py/web2py.exe" + +#should py2exe build files be removed? +if remove_build_files: + shutil.rmtree('build') + shutil.rmtree('deposit') + shutil.rmtree('dist') + print "py2exe build files removed" + +#final info +if not make_zip and not remove_build_files: + print "Your Windows binary & associated files can also be found in /dist" + +print "Finished!" +print "Enjoy web2py " + web2py_version_line