From 3fa54aff2685e14a118a8457d762ff3481556097 Mon Sep 17 00:00:00 2001 From: Aaron Griffith Date: Tue, 29 Mar 2011 11:10:24 -0400 Subject: [PATCH 1/9] initial work at reorganizing source tree --- .gitignore | 8 +++---- blockcounter.py => contrib/blockcounter.py | 0 overviewer.py | 13 ++++------ overviewer/__init__.py | 0 chunk.py => overviewer/chunk.py | 0 composite.py => overviewer/composite.py | 0 configParser.py => overviewer/configParser.py | 0 googlemap.py => overviewer/googlemap.py | 0 nbt.py => overviewer/nbt.py | 0 .../optimizeimages.py | 0 quadtree.py => overviewer/quadtree.py | 0 rendernode.py => overviewer/rendernode.py | 0 {src => overviewer/src}/composite.c | 0 {src => overviewer/src}/endian.c | 0 {src => overviewer/src}/iterate.c | 4 ++-- {src => overviewer/src}/main.c | 0 {src => overviewer/src}/overviewer.h | 0 {src => overviewer/src}/rendermode-lighting.c | 0 {src => overviewer/src}/rendermode-night.c | 0 {src => overviewer/src}/rendermode-normal.c | 0 {src => overviewer/src}/rendermode-spawn.c | 0 {src => overviewer/src}/rendermodes.c | 0 {src => overviewer/src}/rendermodes.h | 0 textures.py => overviewer/textures.py | 0 util.py => overviewer/util.py | 3 ++- world.py => overviewer/world.py | 0 setup.py | 24 ++++++++++++------- 27 files changed, 29 insertions(+), 23 deletions(-) rename blockcounter.py => contrib/blockcounter.py (100%) create mode 100644 overviewer/__init__.py rename chunk.py => overviewer/chunk.py (100%) rename composite.py => overviewer/composite.py (100%) rename configParser.py => overviewer/configParser.py (100%) rename googlemap.py => overviewer/googlemap.py (100%) rename nbt.py => overviewer/nbt.py (100%) rename optimizeimages.py => overviewer/optimizeimages.py (100%) rename quadtree.py => overviewer/quadtree.py (100%) rename rendernode.py => overviewer/rendernode.py (100%) rename {src => overviewer/src}/composite.c (100%) rename {src => overviewer/src}/endian.c (100%) rename {src => overviewer/src}/iterate.c (99%) rename {src => overviewer/src}/main.c (100%) rename {src => overviewer/src}/overviewer.h (100%) rename {src => overviewer/src}/rendermode-lighting.c (100%) rename {src => overviewer/src}/rendermode-night.c (100%) rename {src => overviewer/src}/rendermode-normal.c (100%) rename {src => overviewer/src}/rendermode-spawn.c (100%) rename {src => overviewer/src}/rendermodes.c (100%) rename {src => overviewer/src}/rendermodes.h (100%) rename textures.py => overviewer/textures.py (100%) rename util.py => overviewer/util.py (93%) rename world.py => overviewer/world.py (100%) diff --git a/.gitignore b/.gitignore index 5871f26..1a71f3c 100644 --- a/.gitignore +++ b/.gitignore @@ -14,10 +14,10 @@ ImPlatform.h Imaging.h # various forms of compiled c_overviewer extensions -c_overviewer.so -c_overviewer.pyd -c_overviewer_d.pyd -c_overviewer.dylib +overviewer/c_overviewer.so +overviewer/c_overviewer.pyd +overviewer/c_overviewer_d.pyd +overviewer/c_overviewer.dylib # Mac OS X noise .DS_Store diff --git a/blockcounter.py b/contrib/blockcounter.py similarity index 100% rename from blockcounter.py rename to contrib/blockcounter.py diff --git a/overviewer.py b/overviewer.py index b16f835..c7a84d7 100755 --- a/overviewer.py +++ b/overviewer.py @@ -22,29 +22,26 @@ if not (sys.version_info[0] == 2 and sys.version_info[1] >= 6): import os import os.path -from configParser import ConfigOptionParser import re import subprocess import multiprocessing import time import logging -import util logging.basicConfig(level=logging.INFO,format="%(asctime)s [%(levelname)s] %(message)s") # make sure the c_overviewer extension is available try: - import c_overviewer + import overviewer.c_overviewer as c_overviewer except ImportError: print "You need to compile the c_overviewer module to run Minecraft Overviewer." print "Run `python setup.py build`, or see the README for details." sys.exit(1) -import optimizeimages -import world -import quadtree -import googlemap -import rendernode +from overviewer.configParser import ConfigOptionParser +from overviewer import optimizeimages, world, quadtree +from overviewer import googlemap, rendernode, util + helptext = """ %prog [OPTIONS] diff --git a/overviewer/__init__.py b/overviewer/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/chunk.py b/overviewer/chunk.py similarity index 100% rename from chunk.py rename to overviewer/chunk.py diff --git a/composite.py b/overviewer/composite.py similarity index 100% rename from composite.py rename to overviewer/composite.py diff --git a/configParser.py b/overviewer/configParser.py similarity index 100% rename from configParser.py rename to overviewer/configParser.py diff --git a/googlemap.py b/overviewer/googlemap.py similarity index 100% rename from googlemap.py rename to overviewer/googlemap.py diff --git a/nbt.py b/overviewer/nbt.py similarity index 100% rename from nbt.py rename to overviewer/nbt.py diff --git a/optimizeimages.py b/overviewer/optimizeimages.py similarity index 100% rename from optimizeimages.py rename to overviewer/optimizeimages.py diff --git a/quadtree.py b/overviewer/quadtree.py similarity index 100% rename from quadtree.py rename to overviewer/quadtree.py diff --git a/rendernode.py b/overviewer/rendernode.py similarity index 100% rename from rendernode.py rename to overviewer/rendernode.py diff --git a/src/composite.c b/overviewer/src/composite.c similarity index 100% rename from src/composite.c rename to overviewer/src/composite.c diff --git a/src/endian.c b/overviewer/src/endian.c similarity index 100% rename from src/endian.c rename to overviewer/src/endian.c diff --git a/src/iterate.c b/overviewer/src/iterate.c similarity index 99% rename from src/iterate.c rename to overviewer/src/iterate.c index 71bd7e3..4cf63c1 100644 --- a/src/iterate.c +++ b/overviewer/src/iterate.c @@ -31,7 +31,7 @@ int init_chunk_render(void) { * */ if (blockmap) return 1; - textures = PyImport_ImportModule("textures"); + textures = PyImport_ImportModule("overviewer.textures"); /* ensure none of these pointers are NULL */ if ((!textures)) { fprintf(stderr, "\ninit_chunk_render failed to load; textures\n"); @@ -39,7 +39,7 @@ int init_chunk_render(void) { return 1; } - chunk_mod = PyImport_ImportModule("chunk"); + chunk_mod = PyImport_ImportModule("overviewer.chunk"); /* ensure none of these pointers are NULL */ if ((!chunk_mod)) { fprintf(stderr, "\ninit_chunk_render failed to load; chunk\n"); diff --git a/src/main.c b/overviewer/src/main.c similarity index 100% rename from src/main.c rename to overviewer/src/main.c diff --git a/src/overviewer.h b/overviewer/src/overviewer.h similarity index 100% rename from src/overviewer.h rename to overviewer/src/overviewer.h diff --git a/src/rendermode-lighting.c b/overviewer/src/rendermode-lighting.c similarity index 100% rename from src/rendermode-lighting.c rename to overviewer/src/rendermode-lighting.c diff --git a/src/rendermode-night.c b/overviewer/src/rendermode-night.c similarity index 100% rename from src/rendermode-night.c rename to overviewer/src/rendermode-night.c diff --git a/src/rendermode-normal.c b/overviewer/src/rendermode-normal.c similarity index 100% rename from src/rendermode-normal.c rename to overviewer/src/rendermode-normal.c diff --git a/src/rendermode-spawn.c b/overviewer/src/rendermode-spawn.c similarity index 100% rename from src/rendermode-spawn.c rename to overviewer/src/rendermode-spawn.c diff --git a/src/rendermodes.c b/overviewer/src/rendermodes.c similarity index 100% rename from src/rendermodes.c rename to overviewer/src/rendermodes.c diff --git a/src/rendermodes.h b/overviewer/src/rendermodes.h similarity index 100% rename from src/rendermodes.h rename to overviewer/src/rendermodes.h diff --git a/textures.py b/overviewer/textures.py similarity index 100% rename from textures.py rename to overviewer/textures.py diff --git a/util.py b/overviewer/util.py similarity index 93% rename from util.py rename to overviewer/util.py index f39798a..12d21fd 100644 --- a/util.py +++ b/overviewer/util.py @@ -27,7 +27,8 @@ def get_program_path(): return os.path.dirname(sys.executable) else: try: - return os.path.dirname(__file__) + # normally, we're in ./overviewer/util.py + return os.path.dirname(os.path.dirname(__file__)) except NameError: return os.path.dirname(sys.argv[0]) diff --git a/world.py b/overviewer/world.py similarity index 100% rename from world.py rename to overviewer/world.py diff --git a/setup.py b/setup.py index 62cc86e..759efba 100644 --- a/setup.py +++ b/setup.py @@ -27,9 +27,6 @@ setup_kwargs['cmdclass'] = {} if py2exe is not None: setup_kwargs['console'] = ['overviewer.py'] - setup_kwargs['data_files'] = [('textures', ['textures/lava.png', 'textures/water.png', 'textures/fire.png']), - ('', ['config.js', 'COPYING.txt', 'README.rst']), - ('web_assets', glob.glob('web_assets/*'))] setup_kwargs['zipfile'] = None if platform.system() == 'Windows' and '64bit' in platform.architecture(): b = 3 @@ -37,6 +34,17 @@ if py2exe is not None: b = 1 setup_kwargs['options']['py2exe'] = {'bundle_files' : b, 'excludes': 'Tkinter'} +# +# script, package, and data +# + +setup_kwargs['packages'] = ['overviewer'] +setup_kwargs['scripts'] = ['overviewer.py'] +setup_kwargs['data_files'] = [('textures', glob.glob('textures/*')), + ('', ['config.js', 'COPYING.txt', 'README.rst']), + ('web_assets', glob.glob('web_assets/*'))] + + # # c_overviewer extension # @@ -50,10 +58,10 @@ except AttributeError: numpy_include = numpy.get_numpy_include() -c_overviewer_files = ['src/main.c', 'src/composite.c', 'src/iterate.c', 'src/endian.c'] -c_overviewer_files += ['src/rendermodes.c', 'src/rendermode-normal.c', 'src/rendermode-lighting.c', 'src/rendermode-night.c', 'src/rendermode-spawn.c'] -c_overviewer_includes = ['src/overviewer.h', 'src/rendermodes.h'] -setup_kwargs['ext_modules'].append(Extension('c_overviewer', c_overviewer_files, include_dirs=['.', numpy_include], depends=c_overviewer_includes, extra_link_args=[])) +c_overviewer_files = ['overviewer/src/main.c', 'overviewer/src/composite.c', 'overviewer/src/iterate.c', 'overviewer/src/endian.c'] +c_overviewer_files += ['overviewer/src/rendermodes.c', 'overviewer/src/rendermode-normal.c', 'overviewer/src/rendermode-lighting.c', 'overviewer/src/rendermode-night.c', 'overviewer/src/rendermode-spawn.c'] +c_overviewer_includes = ['overviewer/src/overviewer.h', 'overviewer/src/rendermodes.h'] +setup_kwargs['ext_modules'].append(Extension('overviewer.c_overviewer', c_overviewer_files, include_dirs=['.', numpy_include], depends=c_overviewer_includes, extra_link_args=[])) # tell build_ext to build the extension in-place # (NOT in build/) setup_kwargs['options']['build_ext'] = {'inplace' : 1} @@ -69,7 +77,7 @@ class CustomClean(clean): # try to remove '_composite.{so,pyd,...}' extension, # regardless of the current system's extension name convention build_ext = self.get_finalized_command('build_ext') - pretty_fname = build_ext.get_ext_filename('c_overviewer') + pretty_fname = build_ext.get_ext_filename('overviewer.c_overviewer') fname = pretty_fname if os.path.exists(fname): try: From 42596416d9128059e76e4a1f6def2a644abe31f2 Mon Sep 17 00:00:00 2001 From: Aaron Griffith Date: Tue, 29 Mar 2011 13:49:50 -0400 Subject: [PATCH 2/9] sdist and install now work next step is using a custom data dir, and falling back on the package data dir. Also, fixing --version. --- .gitignore | 12 +++-- MANIFEST.in | 7 +++ overviewer.py | 10 ++-- {overviewer => overviewer_core}/__init__.py | 0 {overviewer => overviewer_core}/chunk.py | 0 {overviewer => overviewer_core}/composite.py | 0 .../configParser.py | 0 config.js => overviewer_core/data/config.js | 0 .../data/textures}/fire.png | Bin .../data/textures}/lava.png | Bin .../data/textures}/water.png | Bin .../data/web_assets}/compass.png | Bin .../data/web_assets}/functions.js | 0 .../data/web_assets}/index.html | 0 .../data/web_assets}/signpost-shadow.png | Bin .../data/web_assets}/signpost.png | Bin .../data/web_assets}/signpost_icon.png | Bin .../data/web_assets}/style.css | 0 {overviewer => overviewer_core}/googlemap.py | 0 {overviewer => overviewer_core}/nbt.py | 0 .../optimizeimages.py | 0 {overviewer => overviewer_core}/quadtree.py | 0 {overviewer => overviewer_core}/rendernode.py | 0 .../src/composite.c | 0 {overviewer => overviewer_core}/src/endian.c | 0 {overviewer => overviewer_core}/src/iterate.c | 4 +- {overviewer => overviewer_core}/src/main.c | 0 .../src/overviewer.h | 0 .../src/rendermode-lighting.c | 0 .../src/rendermode-night.c | 0 .../src/rendermode-normal.c | 0 .../src/rendermode-spawn.c | 0 .../src/rendermodes.c | 0 .../src/rendermodes.h | 0 {overviewer => overviewer_core}/textures.py | 0 {overviewer => overviewer_core}/util.py | 3 +- {overviewer => overviewer_core}/world.py | 0 setup.py | 44 ++++++++++++------ 38 files changed, 53 insertions(+), 27 deletions(-) create mode 100644 MANIFEST.in rename {overviewer => overviewer_core}/__init__.py (100%) rename {overviewer => overviewer_core}/chunk.py (100%) rename {overviewer => overviewer_core}/composite.py (100%) rename {overviewer => overviewer_core}/configParser.py (100%) rename config.js => overviewer_core/data/config.js (100%) rename {textures => overviewer_core/data/textures}/fire.png (100%) rename {textures => overviewer_core/data/textures}/lava.png (100%) rename {textures => overviewer_core/data/textures}/water.png (100%) rename {web_assets => overviewer_core/data/web_assets}/compass.png (100%) rename {web_assets => overviewer_core/data/web_assets}/functions.js (100%) rename {web_assets => overviewer_core/data/web_assets}/index.html (100%) rename {web_assets => overviewer_core/data/web_assets}/signpost-shadow.png (100%) rename {web_assets => overviewer_core/data/web_assets}/signpost.png (100%) rename {web_assets => overviewer_core/data/web_assets}/signpost_icon.png (100%) rename {web_assets => overviewer_core/data/web_assets}/style.css (100%) rename {overviewer => overviewer_core}/googlemap.py (100%) rename {overviewer => overviewer_core}/nbt.py (100%) rename {overviewer => overviewer_core}/optimizeimages.py (100%) rename {overviewer => overviewer_core}/quadtree.py (100%) rename {overviewer => overviewer_core}/rendernode.py (100%) rename {overviewer => overviewer_core}/src/composite.c (100%) rename {overviewer => overviewer_core}/src/endian.c (100%) rename {overviewer => overviewer_core}/src/iterate.c (99%) rename {overviewer => overviewer_core}/src/main.c (100%) rename {overviewer => overviewer_core}/src/overviewer.h (100%) rename {overviewer => overviewer_core}/src/rendermode-lighting.c (100%) rename {overviewer => overviewer_core}/src/rendermode-night.c (100%) rename {overviewer => overviewer_core}/src/rendermode-normal.c (100%) rename {overviewer => overviewer_core}/src/rendermode-spawn.c (100%) rename {overviewer => overviewer_core}/src/rendermodes.c (100%) rename {overviewer => overviewer_core}/src/rendermodes.h (100%) rename {overviewer => overviewer_core}/textures.py (100%) rename {overviewer => overviewer_core}/util.py (93%) rename {overviewer => overviewer_core}/world.py (100%) mode change 100644 => 100755 setup.py diff --git a/.gitignore b/.gitignore index 1a71f3c..9ed59d6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ *.pyc -build +MANIFEST +build/ +dist/ terrain.png cachedir* @@ -14,10 +16,10 @@ ImPlatform.h Imaging.h # various forms of compiled c_overviewer extensions -overviewer/c_overviewer.so -overviewer/c_overviewer.pyd -overviewer/c_overviewer_d.pyd -overviewer/c_overviewer.dylib +overviewer_core/c_overviewer.so +overviewer_core/c_overviewer.pyd +overviewer_core/c_overviewer_d.pyd +overviewer_core/c_overviewer.dylib # Mac OS X noise .DS_Store diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..f8e6fd7 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,7 @@ +include COPYING.txt +include README.rst +include overviewer.py +recursive-include contrib/ *.py +recursive-include overviewer_core/*.py +recursive-include overviewer_core/src/ *.c *.h +recursive-include overviewer_core/data/ *.png *.js index.html style.css diff --git a/overviewer.py b/overviewer.py index c7a84d7..e30b85c 100755 --- a/overviewer.py +++ b/overviewer.py @@ -32,15 +32,17 @@ logging.basicConfig(level=logging.INFO,format="%(asctime)s [%(levelname)s] %(mes # make sure the c_overviewer extension is available try: - import overviewer.c_overviewer as c_overviewer + from overviewer_core import c_overviewer except ImportError: print "You need to compile the c_overviewer module to run Minecraft Overviewer." print "Run `python setup.py build`, or see the README for details." + import traceback + traceback.print_exc() sys.exit(1) -from overviewer.configParser import ConfigOptionParser -from overviewer import optimizeimages, world, quadtree -from overviewer import googlemap, rendernode, util +from overviewer_core.configParser import ConfigOptionParser +from overviewer_core import optimizeimages, world, quadtree +from overviewer_core import googlemap, rendernode, util helptext = """ diff --git a/overviewer/__init__.py b/overviewer_core/__init__.py similarity index 100% rename from overviewer/__init__.py rename to overviewer_core/__init__.py diff --git a/overviewer/chunk.py b/overviewer_core/chunk.py similarity index 100% rename from overviewer/chunk.py rename to overviewer_core/chunk.py diff --git a/overviewer/composite.py b/overviewer_core/composite.py similarity index 100% rename from overviewer/composite.py rename to overviewer_core/composite.py diff --git a/overviewer/configParser.py b/overviewer_core/configParser.py similarity index 100% rename from overviewer/configParser.py rename to overviewer_core/configParser.py diff --git a/config.js b/overviewer_core/data/config.js similarity index 100% rename from config.js rename to overviewer_core/data/config.js diff --git a/textures/fire.png b/overviewer_core/data/textures/fire.png similarity index 100% rename from textures/fire.png rename to overviewer_core/data/textures/fire.png diff --git a/textures/lava.png b/overviewer_core/data/textures/lava.png similarity index 100% rename from textures/lava.png rename to overviewer_core/data/textures/lava.png diff --git a/textures/water.png b/overviewer_core/data/textures/water.png similarity index 100% rename from textures/water.png rename to overviewer_core/data/textures/water.png diff --git a/web_assets/compass.png b/overviewer_core/data/web_assets/compass.png similarity index 100% rename from web_assets/compass.png rename to overviewer_core/data/web_assets/compass.png diff --git a/web_assets/functions.js b/overviewer_core/data/web_assets/functions.js similarity index 100% rename from web_assets/functions.js rename to overviewer_core/data/web_assets/functions.js diff --git a/web_assets/index.html b/overviewer_core/data/web_assets/index.html similarity index 100% rename from web_assets/index.html rename to overviewer_core/data/web_assets/index.html diff --git a/web_assets/signpost-shadow.png b/overviewer_core/data/web_assets/signpost-shadow.png similarity index 100% rename from web_assets/signpost-shadow.png rename to overviewer_core/data/web_assets/signpost-shadow.png diff --git a/web_assets/signpost.png b/overviewer_core/data/web_assets/signpost.png similarity index 100% rename from web_assets/signpost.png rename to overviewer_core/data/web_assets/signpost.png diff --git a/web_assets/signpost_icon.png b/overviewer_core/data/web_assets/signpost_icon.png similarity index 100% rename from web_assets/signpost_icon.png rename to overviewer_core/data/web_assets/signpost_icon.png diff --git a/web_assets/style.css b/overviewer_core/data/web_assets/style.css similarity index 100% rename from web_assets/style.css rename to overviewer_core/data/web_assets/style.css diff --git a/overviewer/googlemap.py b/overviewer_core/googlemap.py similarity index 100% rename from overviewer/googlemap.py rename to overviewer_core/googlemap.py diff --git a/overviewer/nbt.py b/overviewer_core/nbt.py similarity index 100% rename from overviewer/nbt.py rename to overviewer_core/nbt.py diff --git a/overviewer/optimizeimages.py b/overviewer_core/optimizeimages.py similarity index 100% rename from overviewer/optimizeimages.py rename to overviewer_core/optimizeimages.py diff --git a/overviewer/quadtree.py b/overviewer_core/quadtree.py similarity index 100% rename from overviewer/quadtree.py rename to overviewer_core/quadtree.py diff --git a/overviewer/rendernode.py b/overviewer_core/rendernode.py similarity index 100% rename from overviewer/rendernode.py rename to overviewer_core/rendernode.py diff --git a/overviewer/src/composite.c b/overviewer_core/src/composite.c similarity index 100% rename from overviewer/src/composite.c rename to overviewer_core/src/composite.c diff --git a/overviewer/src/endian.c b/overviewer_core/src/endian.c similarity index 100% rename from overviewer/src/endian.c rename to overviewer_core/src/endian.c diff --git a/overviewer/src/iterate.c b/overviewer_core/src/iterate.c similarity index 99% rename from overviewer/src/iterate.c rename to overviewer_core/src/iterate.c index 4cf63c1..6f944de 100644 --- a/overviewer/src/iterate.c +++ b/overviewer_core/src/iterate.c @@ -31,7 +31,7 @@ int init_chunk_render(void) { * */ if (blockmap) return 1; - textures = PyImport_ImportModule("overviewer.textures"); + textures = PyImport_ImportModule("overviewer_core.textures"); /* ensure none of these pointers are NULL */ if ((!textures)) { fprintf(stderr, "\ninit_chunk_render failed to load; textures\n"); @@ -39,7 +39,7 @@ int init_chunk_render(void) { return 1; } - chunk_mod = PyImport_ImportModule("overviewer.chunk"); + chunk_mod = PyImport_ImportModule("overviewer_core.chunk"); /* ensure none of these pointers are NULL */ if ((!chunk_mod)) { fprintf(stderr, "\ninit_chunk_render failed to load; chunk\n"); diff --git a/overviewer/src/main.c b/overviewer_core/src/main.c similarity index 100% rename from overviewer/src/main.c rename to overviewer_core/src/main.c diff --git a/overviewer/src/overviewer.h b/overviewer_core/src/overviewer.h similarity index 100% rename from overviewer/src/overviewer.h rename to overviewer_core/src/overviewer.h diff --git a/overviewer/src/rendermode-lighting.c b/overviewer_core/src/rendermode-lighting.c similarity index 100% rename from overviewer/src/rendermode-lighting.c rename to overviewer_core/src/rendermode-lighting.c diff --git a/overviewer/src/rendermode-night.c b/overviewer_core/src/rendermode-night.c similarity index 100% rename from overviewer/src/rendermode-night.c rename to overviewer_core/src/rendermode-night.c diff --git a/overviewer/src/rendermode-normal.c b/overviewer_core/src/rendermode-normal.c similarity index 100% rename from overviewer/src/rendermode-normal.c rename to overviewer_core/src/rendermode-normal.c diff --git a/overviewer/src/rendermode-spawn.c b/overviewer_core/src/rendermode-spawn.c similarity index 100% rename from overviewer/src/rendermode-spawn.c rename to overviewer_core/src/rendermode-spawn.c diff --git a/overviewer/src/rendermodes.c b/overviewer_core/src/rendermodes.c similarity index 100% rename from overviewer/src/rendermodes.c rename to overviewer_core/src/rendermodes.c diff --git a/overviewer/src/rendermodes.h b/overviewer_core/src/rendermodes.h similarity index 100% rename from overviewer/src/rendermodes.h rename to overviewer_core/src/rendermodes.h diff --git a/overviewer/textures.py b/overviewer_core/textures.py similarity index 100% rename from overviewer/textures.py rename to overviewer_core/textures.py diff --git a/overviewer/util.py b/overviewer_core/util.py similarity index 93% rename from overviewer/util.py rename to overviewer_core/util.py index 12d21fd..a1d07f8 100644 --- a/overviewer/util.py +++ b/overviewer_core/util.py @@ -28,7 +28,8 @@ def get_program_path(): else: try: # normally, we're in ./overviewer/util.py - return os.path.dirname(os.path.dirname(__file__)) + # we want ./overviewer/data/ + return os.path.join(os.path.dirname(__file__), 'data') except NameError: return os.path.dirname(sys.argv[0]) diff --git a/overviewer/world.py b/overviewer_core/world.py similarity index 100% rename from overviewer/world.py rename to overviewer_core/world.py diff --git a/setup.py b/setup.py old mode 100644 new mode 100755 index 759efba..1f34f3f --- a/setup.py +++ b/setup.py @@ -1,3 +1,5 @@ +#!/usr/bin/python + from distutils.core import setup, Extension from distutils.command.build import build from distutils.command.clean import clean @@ -17,32 +19,41 @@ except ImportError: # now, setup the keyword arguments for setup # (because we don't know until runtime if py2exe is available) setup_kwargs = {} -setup_kwargs['options'] = {} setup_kwargs['ext_modules'] = [] setup_kwargs['cmdclass'] = {} +# +# metadata +# + +setup_kwargs['name'] = 'minecraft-overviewer' +setup_kwargs['version'] = '0.0.0' # TODO useful version + # # py2exe options # if py2exe is not None: setup_kwargs['console'] = ['overviewer.py'] + setup_kwargs['data_files'] = [('', ['COPYING.txt', 'README.rst'])] setup_kwargs['zipfile'] = None if platform.system() == 'Windows' and '64bit' in platform.architecture(): b = 3 else: b = 1 + setup_kwargs['options'] = {} setup_kwargs['options']['py2exe'] = {'bundle_files' : b, 'excludes': 'Tkinter'} # # script, package, and data # -setup_kwargs['packages'] = ['overviewer'] +setup_kwargs['packages'] = ['overviewer_core'] setup_kwargs['scripts'] = ['overviewer.py'] -setup_kwargs['data_files'] = [('textures', glob.glob('textures/*')), - ('', ['config.js', 'COPYING.txt', 'README.rst']), - ('web_assets', glob.glob('web_assets/*'))] +setup_kwargs['package_data'] = {'overviewer_core': + ['data/config.js', + 'data/textures/*', + 'data/web_assets/*']} # @@ -58,15 +69,14 @@ except AttributeError: numpy_include = numpy.get_numpy_include() -c_overviewer_files = ['overviewer/src/main.c', 'overviewer/src/composite.c', 'overviewer/src/iterate.c', 'overviewer/src/endian.c'] -c_overviewer_files += ['overviewer/src/rendermodes.c', 'overviewer/src/rendermode-normal.c', 'overviewer/src/rendermode-lighting.c', 'overviewer/src/rendermode-night.c', 'overviewer/src/rendermode-spawn.c'] -c_overviewer_includes = ['overviewer/src/overviewer.h', 'overviewer/src/rendermodes.h'] -setup_kwargs['ext_modules'].append(Extension('overviewer.c_overviewer', c_overviewer_files, include_dirs=['.', numpy_include], depends=c_overviewer_includes, extra_link_args=[])) -# tell build_ext to build the extension in-place -# (NOT in build/) -setup_kwargs['options']['build_ext'] = {'inplace' : 1} -# tell the build command to only run build_ext -build.sub_commands = [('build_ext', None)] +c_overviewer_files = ['main.c', 'composite.c', 'iterate.c', 'endian.c'] +c_overviewer_files += ['rendermodes.c', 'rendermode-normal.c', 'rendermode-lighting.c', 'rendermode-night.c', 'rendermode-spawn.c'] +c_overviewer_includes = ['overviewer.h', 'rendermodes.h'] + +c_overviewer_files = map(lambda s: 'overviewer_core/src/'+s, c_overviewer_files) +c_overviewer_includes = map(lambda s: 'overviewer_core/src/'+s, c_overviewer_includes) + +setup_kwargs['ext_modules'].append(Extension('overviewer_core.c_overviewer', c_overviewer_files, include_dirs=['.', numpy_include], depends=c_overviewer_includes, extra_link_args=[])) # custom clean command to remove in-place extension class CustomClean(clean): @@ -77,7 +87,7 @@ class CustomClean(clean): # try to remove '_composite.{so,pyd,...}' extension, # regardless of the current system's extension name convention build_ext = self.get_finalized_command('build_ext') - pretty_fname = build_ext.get_ext_filename('overviewer.c_overviewer') + pretty_fname = build_ext.get_ext_filename('overviewer_core.c_overviewer') fname = pretty_fname if os.path.exists(fname): try: @@ -99,6 +109,10 @@ class CustomBuild(build_ext): for e in self.extensions: e.extra_link_args.append("/MANIFEST") + # build in place, and in the build/ tree + self.inplace = False + build_ext.build_extensions(self) + self.inplace = True build_ext.build_extensions(self) From e8f9a8bf3ed68628be54f0f0744e44cfef82ba11 Mon Sep 17 00:00:00 2001 From: Aaron Griffith Date: Tue, 10 May 2011 20:22:00 -0400 Subject: [PATCH 3/9] added CONTRIBUTORS.rst to dist stuff, capitalized package name --- MANIFEST.in | 1 + setup.py | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/MANIFEST.in b/MANIFEST.in index f8e6fd7..1f852d6 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,5 +1,6 @@ include COPYING.txt include README.rst +include CONTRIBUTORS.rst include overviewer.py recursive-include contrib/ *.py recursive-include overviewer_core/*.py diff --git a/setup.py b/setup.py index a961f66..69bf470 100755 --- a/setup.py +++ b/setup.py @@ -27,7 +27,7 @@ setup_kwargs['options'] = {} # metadata # -setup_kwargs['name'] = 'minecraft-overviewer' +setup_kwargs['name'] = 'Minecraft-Overviewer' setup_kwargs['version'] = '0.0.0' # TODO useful version # @@ -36,7 +36,7 @@ setup_kwargs['version'] = '0.0.0' # TODO useful version if py2exe is not None: setup_kwargs['console'] = ['overviewer.py'] - setup_kwargs['data_files'] = [('', ['COPYING.txt', 'README.rst'])] + setup_kwargs['data_files'] = [('', ['COPYING.txt', 'README.rst', 'CONTRIBUTORS.rst'])] setup_kwargs['zipfile'] = None if platform.system() == 'Windows' and '64bit' in platform.architecture(): b = 3 From 4ec1b4c97143f40c7ba52bcccbc9ee9a8eece7e3 Mon Sep 17 00:00:00 2001 From: Aaron Griffith Date: Fri, 13 May 2011 22:24:49 -0400 Subject: [PATCH 4/9] working versions, data files, and package metadata --- .gitignore | 3 +++ MANIFEST.in | 1 + overviewer.py | 11 ++++----- overviewer_core/googlemap.py | 2 +- overviewer_core/textures.py | 6 ++--- overviewer_core/util.py | 6 ++--- setup.py | 48 ++++++++++++++++++++++-------------- 7 files changed, 45 insertions(+), 32 deletions(-) diff --git a/.gitignore b/.gitignore index 9ed59d6..dbd0cd7 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,9 @@ overviewer_core/c_overviewer.pyd overviewer_core/c_overviewer_d.pyd overviewer_core/c_overviewer.dylib +# generated version file +overviewer_core/overviewer_version.py + # Mac OS X noise .DS_Store diff --git a/MANIFEST.in b/MANIFEST.in index 1f852d6..a1ea81c 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -4,5 +4,6 @@ include CONTRIBUTORS.rst include overviewer.py recursive-include contrib/ *.py recursive-include overviewer_core/*.py +exclude overviewer_core/overviewer_version.py recursive-include overviewer_core/src/ *.c *.h recursive-include overviewer_core/data/ *.png *.js index.html style.css diff --git a/overviewer.py b/overviewer.py index f88dd20..3a0cb44 100755 --- a/overviewer.py +++ b/overviewer.py @@ -56,8 +56,8 @@ if hasattr(sys, "frozen"): pass # we don't bother with a compat test since it should always be in sync elif "extension_version" in dir(c_overviewer): # check to make sure the binary matches the headers - if os.path.exists(os.path.join(this_dir, "src", "overviewer.h")): - with open(os.path.join(this_dir, "src", "overviewer.h")) as f: + if os.path.exists(os.path.join(this_dir, "overviewer_core", "src", "overviewer.h")): + with open(os.path.join(this_dir, "overviewer_core", "src", "overviewer.h")) as f: lines = f.readlines() lines = filter(lambda x: x.startswith("#define OVERVIEWER_EXTENSION_VERSION"), lines) if lines: @@ -116,10 +116,9 @@ def main(): print "Minecraft-Overviewer" print "Git version: %s" % util.findGitVersion() try: - import overviewer_version - if hasattr(sys, "frozen"): - print "py2exe version build on %s" % overviewer_version.BUILD_DATE - print "Build machine: %s %s" % (overviewer_version.BUILD_PLATFORM, overviewer_version.BUILD_OS) + import overviewer_core.overviewer_version as overviewer_version + print "built on %s" % overviewer_version.BUILD_DATE + print "Build machine: %s %s" % (overviewer_version.BUILD_PLATFORM, overviewer_version.BUILD_OS) except: pass sys.exit(0) diff --git a/overviewer_core/googlemap.py b/overviewer_core/googlemap.py index daf0e0e..44fadff 100644 --- a/overviewer_core/googlemap.py +++ b/overviewer_core/googlemap.py @@ -97,7 +97,7 @@ class MapGen(object): blank.save(os.path.join(tileDir, "blank."+quadtree.imgformat)) # copy web assets into destdir: - mirror_dir(os.path.join(util.get_program_path(), "web_assets"), self.destdir) + mirror_dir(os.path.join(util.get_program_path(), "overviewer_core", "data", "web_assets"), self.destdir) # do the same with the local copy, if we have it if self.web_assets_path: mirror_dir(self.web_assets_path, self.destdir) diff --git a/overviewer_core/textures.py b/overviewer_core/textures.py index 611353a..a6ee715 100644 --- a/overviewer_core/textures.py +++ b/overviewer_core/textures.py @@ -32,8 +32,8 @@ def _find_file(filename, mode="rb"): This searches the following locations in this order: * the textures_path given in the config file (if present) - * The program dir (same dir as this file) - * The program dir / textures + * The program dir (same dir as overviewer.py) + * The overviewer_core textures dir * On Darwin, in /Applications/Minecraft * Inside minecraft.jar, which is looked for at these locations @@ -53,7 +53,7 @@ def _find_file(filename, mode="rb"): if os.path.exists(path): return open(path, mode) - path = os.path.join(programdir, "textures", filename) + path = os.path.join(programdir, "overviewer_core", "data", "textures", filename) if os.path.exists(path): return open(path, mode) diff --git a/overviewer_core/util.py b/overviewer_core/util.py index 65c9f5c..2da93ed 100644 --- a/overviewer_core/util.py +++ b/overviewer_core/util.py @@ -27,9 +27,9 @@ def get_program_path(): return os.path.dirname(sys.executable) else: try: - # normally, we're in ./overviewer/util.py - # we want ./overviewer/data/ - return os.path.join(os.path.dirname(__file__), 'data') + # normally, we're in ./overviewer_core/util.py + # we want ./ + return os.path.dirname(os.path.dirname(__file__)) except NameError: return os.path.dirname(sys.argv[0]) diff --git a/setup.py b/setup.py index f5e942f..08e7927 100755 --- a/setup.py +++ b/setup.py @@ -29,6 +29,9 @@ setup_kwargs['options'] = {} setup_kwargs['name'] = 'Minecraft-Overviewer' setup_kwargs['version'] = '0.0.0' # TODO useful version +setup_kwargs['author'] = 'Andrew Brown' +setup_kwargs['author_email'] = 'brownan@gmail.com' +setup_kwargs['url'] = 'http://overviewer.org/' # # py2exe options @@ -36,7 +39,6 @@ setup_kwargs['version'] = '0.0.0' # TODO useful version if py2exe is not None: setup_kwargs['console'] = ['overviewer.py'] - setup_kwargs['data_files'] = [('', ['COPYING.txt', 'README.rst', 'CONTRIBUTORS.rst'])] setup_kwargs['zipfile'] = None if platform.system() == 'Windows' and '64bit' in platform.architecture(): b = 3 @@ -53,6 +55,7 @@ setup_kwargs['scripts'] = ['overviewer.py'] setup_kwargs['package_data'] = {'overviewer_core': ['data/textures/*', 'data/web_assets/*']} +setup_kwargs['data_files'] = [('Minecraft-Overviewer', ['COPYING.txt', 'README.rst', 'CONTRIBUTORS.rst', 'sample.settings.py'])] # @@ -93,6 +96,7 @@ setup_kwargs['options']['build_ext'] = {'inplace' : 1} build.sub_commands = [('build_ext', None)] # custom clean command to remove in-place extension +# and the version file class CustomClean(clean): def run(self): # do the normal cleanup @@ -114,8 +118,32 @@ class CustomClean(clean): else: log.debug("'%s' does not exist -- can't clean it", pretty_fname) + + versionpath = os.path.join("overviewer_core", "overviewer_version.py") + try: + if not self.dry_run: + os.remove(versionpath) + log.info("removing '%s'", versionpath) + except OSError: + log.warn("'%s' could not be cleaned -- permission denied", versionpath) + +def generate_version_py(): + try: + import overviewer_core.util as util + f = open("overviewer_core/overviewer_version.py", "w") + f.write("VERSION=%r\n" % util.findGitVersion()) + f.write("BUILD_DATE=%r\n" % time.asctime()) + f.write("BUILD_PLATFORM=%r\n" % platform.processor()) + f.write("BUILD_OS=%r\n" % platform.platform()) + f.close() + except: + print "WARNING: failed to build overview_version file" class CustomBuild(build_ext): + def run(self): + # generate the version file + generate_version_py() + build_ext.run(self) def build_extensions(self): c = self.compiler.compiler_type if c == "msvc": @@ -130,24 +158,6 @@ class CustomBuild(build_ext): build_ext.build_extensions(self) -if py2exe is not None: -# define a subclass of py2exe to build our version file on the fly - class CustomPy2exe(py2exe.build_exe.py2exe): - def run(self): - try: - import util - f = open("overviewer_version.py", "w") - f.write("VERSION=%r\n" % util.findGitVersion()) - f.write("BUILD_DATE=%r\n" % time.asctime()) - f.write("BUILD_PLATFORM=%r\n" % platform.processor()) - f.write("BUILD_OS=%r\n" % platform.platform()) - f.close() - setup_kwargs['data_files'].append(('.', ['overviewer_version.py'])) - except: - print "WARNING: failed to build overview_version file" - py2exe.build_exe.py2exe.run(self) - setup_kwargs['cmdclass']['py2exe'] = CustomPy2exe - setup_kwargs['cmdclass']['clean'] = CustomClean setup_kwargs['cmdclass']['build_ext'] = CustomBuild ### From 8aafd3476980354d4818e1b3d373ada4224d0306 Mon Sep 17 00:00:00 2001 From: Aaron Griffith Date: Fri, 13 May 2011 22:40:18 -0400 Subject: [PATCH 5/9] --version now works with sdist --- MANIFEST.in | 1 - setup.py | 27 ++++++++++++++++++++------- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/MANIFEST.in b/MANIFEST.in index a1ea81c..1f852d6 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -4,6 +4,5 @@ include CONTRIBUTORS.rst include overviewer.py recursive-include contrib/ *.py recursive-include overviewer_core/*.py -exclude overviewer_core/overviewer_version.py recursive-include overviewer_core/src/ *.c *.h recursive-include overviewer_core/data/ *.png *.js index.html style.css diff --git a/setup.py b/setup.py index 08e7927..cb4e4a8 100755 --- a/setup.py +++ b/setup.py @@ -4,6 +4,7 @@ from distutils.core import setup, Extension from distutils.command.build import build from distutils.command.clean import clean from distutils.command.build_ext import build_ext +from distutils.command.sdist import sdist from distutils.dir_util import remove_tree from distutils import log import os, os.path @@ -130,20 +131,30 @@ class CustomClean(clean): def generate_version_py(): try: import overviewer_core.util as util + outstr = "" + outstr += "VERSION=%r\n" % util.findGitVersion() + outstr += "BUILD_DATE=%r\n" % time.asctime() + outstr += "BUILD_PLATFORM=%r\n" % platform.processor() + outstr += "BUILD_OS=%r\n" % platform.platform() f = open("overviewer_core/overviewer_version.py", "w") - f.write("VERSION=%r\n" % util.findGitVersion()) - f.write("BUILD_DATE=%r\n" % time.asctime()) - f.write("BUILD_PLATFORM=%r\n" % platform.processor()) - f.write("BUILD_OS=%r\n" % platform.platform()) + f.write(outstr) f.close() except: print "WARNING: failed to build overview_version file" -class CustomBuild(build_ext): +class CustomSDist(sdist): def run(self): # generate the version file generate_version_py() - build_ext.run(self) + sdist.run(self) + +class CustomBuild(build): + def run(self): + # generate the version file + generate_version_py() + build.run(self) + +class CustomBuildExt(build_ext): def build_extensions(self): c = self.compiler.compiler_type if c == "msvc": @@ -159,7 +170,9 @@ class CustomBuild(build_ext): setup_kwargs['cmdclass']['clean'] = CustomClean -setup_kwargs['cmdclass']['build_ext'] = CustomBuild +setup_kwargs['cmdclass']['sdist'] = CustomSDist +setup_kwargs['cmdclass']['build'] = CustomBuild +setup_kwargs['cmdclass']['build_ext'] = CustomBuildExt ### setup(**setup_kwargs) From c12f95b0a14fbff8a15497389a7d4ded7407af79 Mon Sep 17 00:00:00 2001 From: Aaron Griffith Date: Fri, 13 May 2011 23:39:44 -0400 Subject: [PATCH 6/9] nice version numbers, and metadata update --- MANIFEST.in | 1 + overviewer.py | 7 ++++--- overviewer_core/googlemap.py | 4 +++- overviewer_core/util.py | 23 +++++++++++++++++++++-- setup.py | 20 +++++++++++++++----- 5 files changed, 44 insertions(+), 11 deletions(-) diff --git a/MANIFEST.in b/MANIFEST.in index 1f852d6..fe84bcb 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -2,6 +2,7 @@ include COPYING.txt include README.rst include CONTRIBUTORS.rst include overviewer.py +include sample.settings.py recursive-include contrib/ *.py recursive-include overviewer_core/*.py recursive-include overviewer_core/src/ *.c *.h diff --git a/overviewer.py b/overviewer.py index 3a0cb44..18b085e 100755 --- a/overviewer.py +++ b/overviewer.py @@ -39,7 +39,7 @@ try: from overviewer_core import c_overviewer except ImportError: ## try to find the build extension - ext = os.path.join(this_dir, "c_overviewer.%s" % ("pyd" if platform.system() == "Windows" else "so")) + ext = os.path.join(this_dir, "overviewer_core", "c_overviewer.%s" % ("pyd" if platform.system() == "Windows" else "so")) if os.path.exists(ext): print "Something has gone wrong importing the c_overviewer extension. Please" print "make sure it is up-to-date (clean and rebuild)" @@ -113,13 +113,14 @@ def main(): if options.version: - print "Minecraft-Overviewer" - print "Git version: %s" % util.findGitVersion() try: import overviewer_core.overviewer_version as overviewer_version + print "Minecraft-Overviewer %s" % overviewer_version.VERSION + print "Git commit: %s" % overviewer_version.HASH print "built on %s" % overviewer_version.BUILD_DATE print "Build machine: %s %s" % (overviewer_version.BUILD_PLATFORM, overviewer_version.BUILD_OS) except: + print "version info not found" pass sys.exit(0) diff --git a/overviewer_core/googlemap.py b/overviewer_core/googlemap.py index 44fadff..8edb0a3 100644 --- a/overviewer_core/googlemap.py +++ b/overviewer_core/googlemap.py @@ -24,6 +24,7 @@ import json import util from c_overviewer import get_render_mode_inheritance +import overviewer_version """ This module has routines related to generating a Google Maps-based @@ -132,7 +133,8 @@ class MapGen(object): index = open(indexpath, 'r').read() index = index.replace( "{time}", str(strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime()))) - index = index.replace("{version}", util.findGitVersion()) + versionstr = "%s (%s)" % (overviewer_version.VERSION, overviewer_version.HASH[:7]) + index = index.replace("{version}", versionstr) with open(os.path.join(self.destdir, "index.html"), 'w') as output: output.write(index) diff --git a/overviewer_core/util.py b/overviewer_core/util.py index 2da93ed..2bd15b5 100644 --- a/overviewer_core/util.py +++ b/overviewer_core/util.py @@ -21,6 +21,7 @@ import imp import os import os.path import sys +from subprocess import Popen, PIPE def get_program_path(): if hasattr(sys, "frozen") or imp.is_frozen("__main__"): @@ -34,8 +35,8 @@ def get_program_path(): return os.path.dirname(sys.argv[0]) - -def findGitVersion(): +# does not require git, very likely to work everywhere +def findGitHash(): this_dir = get_program_path() if os.path.exists(os.path.join(this_dir,".git")): with open(os.path.join(this_dir,".git","HEAD")) as f: @@ -48,6 +49,24 @@ def findGitVersion(): else: return data else: + try: + import overviewer_version + return overviewer_version.HASH + except: + return "unknown" + +def findGitVersion(): + try: + p = Popen(['git', 'describe', '--tags'], stdout=PIPE, stderr=PIPE) + p.stderr.close() + line = p.stdout.readlines()[0] + if line.startswith('release-'): + line = line.split('-', 1)[1] + # turn 0.1.2-50-somehash into 0.1.2-50 + # and 0.1.3 into 0.1.3 + line = '-'.join(line.split('-', 2)[:2]) + return line.strip() + except: try: import overviewer_version return overviewer_version.VERSION diff --git a/setup.py b/setup.py index cb4e4a8..675b222 100755 --- a/setup.py +++ b/setup.py @@ -11,6 +11,7 @@ import os, os.path import glob import platform import time +import overviewer_core.util as util try: import py2exe @@ -28,11 +29,21 @@ setup_kwargs['options'] = {} # metadata # +# Utility function to read the README file. +# Used for the long_description. It's nice, because now 1) we have a top level +# README file and 2) it's easier to type in the README file than to put a raw +# string in below ... +def read(fname): + return open(os.path.join(os.path.dirname(__file__), fname)).read() + setup_kwargs['name'] = 'Minecraft-Overviewer' -setup_kwargs['version'] = '0.0.0' # TODO useful version +setup_kwargs['version'] = util.findGitVersion() +setup_kwargs['description'] = 'Generates large resolution images of a Minecraft map.' +setup_kwargs['url'] = 'http://overviewer.org/' setup_kwargs['author'] = 'Andrew Brown' setup_kwargs['author_email'] = 'brownan@gmail.com' -setup_kwargs['url'] = 'http://overviewer.org/' +setup_kwargs['license'] = 'GNU General Public License v3' +setup_kwargs['long_description'] = read('README.rst') # # py2exe options @@ -130,9 +141,9 @@ class CustomClean(clean): def generate_version_py(): try: - import overviewer_core.util as util outstr = "" outstr += "VERSION=%r\n" % util.findGitVersion() + outstr += "HASH=%r\n" % util.findGitHash() outstr += "BUILD_DATE=%r\n" % time.asctime() outstr += "BUILD_PLATFORM=%r\n" % platform.processor() outstr += "BUILD_OS=%r\n" % platform.platform() @@ -153,6 +164,7 @@ class CustomBuild(build): # generate the version file generate_version_py() build.run(self) + print "\nBuild Complete" class CustomBuildExt(build_ext): def build_extensions(self): @@ -177,5 +189,3 @@ setup_kwargs['cmdclass']['build_ext'] = CustomBuildExt setup(**setup_kwargs) - -print "\nBuild Complete" From 0104847c04cbb20ed11dcdb2bb3a456a4aa1514d Mon Sep 17 00:00:00 2001 From: Aaron Griffith Date: Sat, 14 May 2011 15:34:26 -0400 Subject: [PATCH 7/9] changed extra file install location to something more sane --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 675b222..8bbaaca 100755 --- a/setup.py +++ b/setup.py @@ -67,7 +67,7 @@ setup_kwargs['scripts'] = ['overviewer.py'] setup_kwargs['package_data'] = {'overviewer_core': ['data/textures/*', 'data/web_assets/*']} -setup_kwargs['data_files'] = [('Minecraft-Overviewer', ['COPYING.txt', 'README.rst', 'CONTRIBUTORS.rst', 'sample.settings.py'])] +setup_kwargs['data_files'] = [('share/doc/minecraft-overviewer', ['COPYING.txt', 'README.rst', 'CONTRIBUTORS.rst', 'sample.settings.py'])] # From 561bb64c7c4dc075433a4e70d7a2e83b99088a8e Mon Sep 17 00:00:00 2001 From: Aaron Griffith Date: Sat, 28 May 2011 15:05:52 -0400 Subject: [PATCH 8/9] fixes for py2exe/windows --- overviewer_core/googlemap.py | 6 +++++- overviewer_core/textures.py | 6 ++++++ setup.py | 9 ++++++++- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/overviewer_core/googlemap.py b/overviewer_core/googlemap.py index 8edb0a3..d853534 100644 --- a/overviewer_core/googlemap.py +++ b/overviewer_core/googlemap.py @@ -98,7 +98,11 @@ class MapGen(object): blank.save(os.path.join(tileDir, "blank."+quadtree.imgformat)) # copy web assets into destdir: - mirror_dir(os.path.join(util.get_program_path(), "overviewer_core", "data", "web_assets"), self.destdir) + global_assets = os.path.join(util.get_program_path(), "overviewer_core", "data", "web_assets") + if not os.path.isdir(global_assets): + global_assets = os.path.join(util.get_program_path(), "web_assets") + mirror_dir(global_assets, self.destdir) + # do the same with the local copy, if we have it if self.web_assets_path: mirror_dir(self.web_assets_path, self.destdir) diff --git a/overviewer_core/textures.py b/overviewer_core/textures.py index a6ee715..f7b6f36 100644 --- a/overviewer_core/textures.py +++ b/overviewer_core/textures.py @@ -14,6 +14,7 @@ # with the Overviewer. If not, see . import sys +import imp import os import os.path import zipfile @@ -56,6 +57,11 @@ def _find_file(filename, mode="rb"): path = os.path.join(programdir, "overviewer_core", "data", "textures", filename) if os.path.exists(path): return open(path, mode) + elif hasattr(sys, "frozen") or imp.is_frozen("__main__"): + # windows special case, when the package dir doesn't exist + path = os.path.join(programdir, "textures", filename) + if os.path.exists(path): + return open(path, mode) if sys.platform == "darwin": path = os.path.join("/Applications/Minecraft", filename) diff --git a/setup.py b/setup.py index 8bbaaca..63bae35 100755 --- a/setup.py +++ b/setup.py @@ -45,12 +45,18 @@ setup_kwargs['author_email'] = 'brownan@gmail.com' setup_kwargs['license'] = 'GNU General Public License v3' setup_kwargs['long_description'] = read('README.rst') +# top-level files that should be included as documentation +doc_files = ['COPYING.txt', 'README.rst', 'CONTRIBUTORS.rst', 'sample.settings.py'] + # # py2exe options # if py2exe is not None: setup_kwargs['console'] = ['overviewer.py'] + setup_kwargs['data_files'] = [('', doc_files), + ('textures', glob.glob('overviewer_core/data/textures/*')), + ('web_assets', glob.glob('overviewer_core/data/web_assets/*'))] setup_kwargs['zipfile'] = None if platform.system() == 'Windows' and '64bit' in platform.architecture(): b = 3 @@ -67,7 +73,8 @@ setup_kwargs['scripts'] = ['overviewer.py'] setup_kwargs['package_data'] = {'overviewer_core': ['data/textures/*', 'data/web_assets/*']} -setup_kwargs['data_files'] = [('share/doc/minecraft-overviewer', ['COPYING.txt', 'README.rst', 'CONTRIBUTORS.rst', 'sample.settings.py'])] +if py2exe is None: + setup_kwargs['data_files'] = [('share/doc/minecraft-overviewer', doc_files)] # From 387f97d64d61afc9b94d1e382048958064bc9743 Mon Sep 17 00:00:00 2001 From: Aaron Griffith Date: Sat, 28 May 2011 19:07:05 -0400 Subject: [PATCH 9/9] initial work on py2app for OSX --- setup.py | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/setup.py b/setup.py index 63bae35..5f29069 100755 --- a/setup.py +++ b/setup.py @@ -1,13 +1,14 @@ #!/usr/bin/python -from distutils.core import setup, Extension +from distutils.core import setup +from distutils.extension import Extension from distutils.command.build import build from distutils.command.clean import clean from distutils.command.build_ext import build_ext from distutils.command.sdist import sdist from distutils.dir_util import remove_tree from distutils import log -import os, os.path +import sys, os, os.path import glob import platform import time @@ -18,8 +19,14 @@ try: except ImportError: py2exe = None +try: + import py2app + from setuptools.extension import Extension +except ImportError: + py2app = None + # now, setup the keyword arguments for setup -# (because we don't know until runtime if py2exe is available) +# (because we don't know until runtime if py2exe/py2app is available) setup_kwargs = {} setup_kwargs['ext_modules'] = [] setup_kwargs['cmdclass'] = {} @@ -64,6 +71,15 @@ if py2exe is not None: b = 1 setup_kwargs['options']['py2exe'] = {'bundle_files' : b, 'excludes': 'Tkinter'} +# +# py2app options +# + +if py2app is not None: + setup_kwargs['app'] = ['overviewer.py'] + setup_kwargs['options']['py2app'] = {'argv_emulation' : False} + setup_kwargs['setup_requires'] = ['py2app'] + # # script, package, and data # @@ -111,8 +127,6 @@ setup_kwargs['ext_modules'].append(Extension('overviewer_core.c_overviewer', c_o # tell build_ext to build the extension in-place # (NOT in build/) setup_kwargs['options']['build_ext'] = {'inplace' : 1} -# tell the build command to only run build_ext -build.sub_commands = [('build_ext', None)] # custom clean command to remove in-place extension # and the version file