0

sdist and install now work

next step is using a custom data dir, and falling back on the package
data dir. Also, fixing --version.
This commit is contained in:
Aaron Griffith
2011-03-29 13:49:50 -04:00
parent 3fa54aff26
commit 42596416d9
38 changed files with 53 additions and 27 deletions

12
.gitignore vendored
View File

@@ -1,5 +1,7 @@
*.pyc *.pyc
build MANIFEST
build/
dist/
terrain.png terrain.png
cachedir* cachedir*
@@ -14,10 +16,10 @@ ImPlatform.h
Imaging.h Imaging.h
# various forms of compiled c_overviewer extensions # various forms of compiled c_overviewer extensions
overviewer/c_overviewer.so overviewer_core/c_overviewer.so
overviewer/c_overviewer.pyd overviewer_core/c_overviewer.pyd
overviewer/c_overviewer_d.pyd overviewer_core/c_overviewer_d.pyd
overviewer/c_overviewer.dylib overviewer_core/c_overviewer.dylib
# Mac OS X noise # Mac OS X noise
.DS_Store .DS_Store

7
MANIFEST.in Normal file
View File

@@ -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

View File

@@ -32,15 +32,17 @@ logging.basicConfig(level=logging.INFO,format="%(asctime)s [%(levelname)s] %(mes
# make sure the c_overviewer extension is available # make sure the c_overviewer extension is available
try: try:
import overviewer.c_overviewer as c_overviewer from overviewer_core import c_overviewer
except ImportError: except ImportError:
print "You need to compile the c_overviewer module to run Minecraft Overviewer." 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." print "Run `python setup.py build`, or see the README for details."
import traceback
traceback.print_exc()
sys.exit(1) sys.exit(1)
from overviewer.configParser import ConfigOptionParser from overviewer_core.configParser import ConfigOptionParser
from overviewer import optimizeimages, world, quadtree from overviewer_core import optimizeimages, world, quadtree
from overviewer import googlemap, rendernode, util from overviewer_core import googlemap, rendernode, util
helptext = """ helptext = """

View File

Before

Width:  |  Height:  |  Size: 563 B

After

Width:  |  Height:  |  Size: 563 B

View File

Before

Width:  |  Height:  |  Size: 401 B

After

Width:  |  Height:  |  Size: 401 B

View File

Before

Width:  |  Height:  |  Size: 374 B

After

Width:  |  Height:  |  Size: 374 B

View File

Before

Width:  |  Height:  |  Size: 7.2 KiB

After

Width:  |  Height:  |  Size: 7.2 KiB

View File

Before

Width:  |  Height:  |  Size: 368 B

After

Width:  |  Height:  |  Size: 368 B

View File

Before

Width:  |  Height:  |  Size: 708 B

After

Width:  |  Height:  |  Size: 708 B

View File

Before

Width:  |  Height:  |  Size: 253 B

After

Width:  |  Height:  |  Size: 253 B

View File

@@ -31,7 +31,7 @@ int init_chunk_render(void) {
* */ * */
if (blockmap) return 1; if (blockmap) return 1;
textures = PyImport_ImportModule("overviewer.textures"); textures = PyImport_ImportModule("overviewer_core.textures");
/* ensure none of these pointers are NULL */ /* ensure none of these pointers are NULL */
if ((!textures)) { if ((!textures)) {
fprintf(stderr, "\ninit_chunk_render failed to load; textures\n"); fprintf(stderr, "\ninit_chunk_render failed to load; textures\n");
@@ -39,7 +39,7 @@ int init_chunk_render(void) {
return 1; return 1;
} }
chunk_mod = PyImport_ImportModule("overviewer.chunk"); chunk_mod = PyImport_ImportModule("overviewer_core.chunk");
/* ensure none of these pointers are NULL */ /* ensure none of these pointers are NULL */
if ((!chunk_mod)) { if ((!chunk_mod)) {
fprintf(stderr, "\ninit_chunk_render failed to load; chunk\n"); fprintf(stderr, "\ninit_chunk_render failed to load; chunk\n");

View File

@@ -28,7 +28,8 @@ def get_program_path():
else: else:
try: try:
# normally, we're in ./overviewer/util.py # 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: except NameError:
return os.path.dirname(sys.argv[0]) return os.path.dirname(sys.argv[0])

44
setup.py Normal file → Executable file
View File

@@ -1,3 +1,5 @@
#!/usr/bin/python
from distutils.core import setup, Extension from distutils.core import setup, Extension
from distutils.command.build import build from distutils.command.build import build
from distutils.command.clean import clean from distutils.command.clean import clean
@@ -17,32 +19,41 @@ except ImportError:
# now, setup the keyword arguments for setup # 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 is available)
setup_kwargs = {} setup_kwargs = {}
setup_kwargs['options'] = {}
setup_kwargs['ext_modules'] = [] setup_kwargs['ext_modules'] = []
setup_kwargs['cmdclass'] = {} setup_kwargs['cmdclass'] = {}
#
# metadata
#
setup_kwargs['name'] = 'minecraft-overviewer'
setup_kwargs['version'] = '0.0.0' # TODO useful version
# #
# py2exe options # py2exe options
# #
if py2exe is not None: if py2exe is not None:
setup_kwargs['console'] = ['overviewer.py'] setup_kwargs['console'] = ['overviewer.py']
setup_kwargs['data_files'] = [('', ['COPYING.txt', 'README.rst'])]
setup_kwargs['zipfile'] = None setup_kwargs['zipfile'] = None
if platform.system() == 'Windows' and '64bit' in platform.architecture(): if platform.system() == 'Windows' and '64bit' in platform.architecture():
b = 3 b = 3
else: else:
b = 1 b = 1
setup_kwargs['options'] = {}
setup_kwargs['options']['py2exe'] = {'bundle_files' : b, 'excludes': 'Tkinter'} setup_kwargs['options']['py2exe'] = {'bundle_files' : b, 'excludes': 'Tkinter'}
# #
# script, package, and data # script, package, and data
# #
setup_kwargs['packages'] = ['overviewer'] setup_kwargs['packages'] = ['overviewer_core']
setup_kwargs['scripts'] = ['overviewer.py'] setup_kwargs['scripts'] = ['overviewer.py']
setup_kwargs['data_files'] = [('textures', glob.glob('textures/*')), setup_kwargs['package_data'] = {'overviewer_core':
('', ['config.js', 'COPYING.txt', 'README.rst']), ['data/config.js',
('web_assets', glob.glob('web_assets/*'))] 'data/textures/*',
'data/web_assets/*']}
# #
@@ -58,15 +69,14 @@ except AttributeError:
numpy_include = numpy.get_numpy_include() 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 = ['main.c', 'composite.c', 'iterate.c', '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_files += ['rendermodes.c', 'rendermode-normal.c', 'rendermode-lighting.c', 'rendermode-night.c', 'rendermode-spawn.c']
c_overviewer_includes = ['overviewer/src/overviewer.h', 'overviewer/src/rendermodes.h'] c_overviewer_includes = ['overviewer.h', '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 c_overviewer_files = map(lambda s: 'overviewer_core/src/'+s, c_overviewer_files)
# (NOT in build/) c_overviewer_includes = map(lambda s: 'overviewer_core/src/'+s, c_overviewer_includes)
setup_kwargs['options']['build_ext'] = {'inplace' : 1}
# tell the build command to only run build_ext setup_kwargs['ext_modules'].append(Extension('overviewer_core.c_overviewer', c_overviewer_files, include_dirs=['.', numpy_include], depends=c_overviewer_includes, extra_link_args=[]))
build.sub_commands = [('build_ext', None)]
# custom clean command to remove in-place extension # custom clean command to remove in-place extension
class CustomClean(clean): class CustomClean(clean):
@@ -77,7 +87,7 @@ class CustomClean(clean):
# try to remove '_composite.{so,pyd,...}' extension, # try to remove '_composite.{so,pyd,...}' extension,
# regardless of the current system's extension name convention # regardless of the current system's extension name convention
build_ext = self.get_finalized_command('build_ext') 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 fname = pretty_fname
if os.path.exists(fname): if os.path.exists(fname):
try: try:
@@ -99,6 +109,10 @@ class CustomBuild(build_ext):
for e in self.extensions: for e in self.extensions:
e.extra_link_args.append("/MANIFEST") 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) build_ext.build_extensions(self)