sdist and install now work
next step is using a custom data dir, and falling back on the package data dir. Also, fixing --version.
12
.gitignore
vendored
@@ -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
@@ -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
|
||||||
@@ -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 = """
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 563 B After Width: | Height: | Size: 563 B |
|
Before Width: | Height: | Size: 401 B After Width: | Height: | Size: 401 B |
|
Before Width: | Height: | Size: 374 B After Width: | Height: | Size: 374 B |
|
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 368 B After Width: | Height: | Size: 368 B |
|
Before Width: | Height: | Size: 708 B After Width: | Height: | Size: 708 B |
|
Before Width: | Height: | Size: 253 B After Width: | Height: | Size: 253 B |
@@ -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");
|
||||||
@@ -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
@@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||