Some setup.py tweaks:

- Support for py2app
 - Installing of locales
 - Installing of the main script
This commit is contained in:
Lukáš Lalinský
2006-12-16 23:05:55 +01:00
parent feb7de5cbb
commit ff8eef15ba

165
setup.py
View File

@@ -6,7 +6,8 @@ import sys
from ConfigParser import RawConfigParser
from distutils import log
from distutils.command.build import build
from distutils.command.config import config as ConfigCommand
from distutils.command.config import config
from distutils.command.install import install as install
from distutils.core import setup, Command, Extension
from distutils.dep_util import newer
from distutils.dist import Distribution
@@ -31,54 +32,54 @@ defaults = {
'quicktime': {'cflags': '', 'libs': ''},
'libofa': {'cflags': '', 'libs': ''},
}
config = RawConfigParser()
cfg = RawConfigParser()
for section, values in defaults.items():
config.add_section(section)
cfg.add_section(section)
for option, value in values.items():
config.set(section, option, value)
config.read(['build.cfg'])
cfg.set(section, option, value)
cfg.read(['build.cfg'])
ext_modules = [
Extension('picard.util.astrcmp', sources=['picard/util/astrcmp.cpp']),
]
if config.getboolean('build', 'with-libofa'):
if cfg.getboolean('build', 'with-libofa'):
ext_modules.append(
Extension('picard.musicdns.ofa', sources=['picard/musicdns/ofa.c'],
extra_compile_args=config.get('libofa', 'cflags').split(),
extra_link_args=config.get('libofa', 'libs').split()))
extra_compile_args=cfg.get('libofa', 'cflags').split(),
extra_link_args=cfg.get('libofa', 'libs').split()))
if config.getboolean('build', 'with-directshow'):
if cfg.getboolean('build', 'with-directshow'):
ext_modules.append(
Extension('picard.musicdns.directshow',
sources=['picard/musicdns/directshow.cpp'],
extra_compile_args=config.get('directshow', 'cflags').split(),
extra_link_args=config.get('directshow', 'libs').split()))
extra_compile_args=cfg.get('directshow', 'cflags').split(),
extra_link_args=cfg.get('directshow', 'libs').split()))
if config.getboolean('build', 'with-quicktime'):
if cfg.getboolean('build', 'with-quicktime'):
ext_modules.append(
Extension('picard.musicdns.quicktime',
sources=['picard/musicdns/quicktime.c'],
extra_compile_args=config.get('quicktime', 'cflags').split(),
extra_link_args=config.get('quicktime', 'libs').split()))
extra_compile_args=cfg.get('quicktime', 'cflags').split(),
extra_link_args=cfg.get('quicktime', 'libs').split()))
if config.getboolean('build', 'with-avcodec'):
if cfg.getboolean('build', 'with-avcodec'):
ext_modules.append(
Extension('picard.musicdns.avcodec',
sources=['picard/musicdns/avcodec.c'],
extra_compile_args=config.get('avcodec', 'cflags').split(),
extra_link_args=config.get('avcodec', 'libs').split()))
extra_compile_args=cfg.get('avcodec', 'cflags').split(),
extra_link_args=cfg.get('avcodec', 'libs').split()))
if config.getboolean('build', 'with-gstreamer'):
if cfg.getboolean('build', 'with-gstreamer'):
ext_modules.append(
Extension('picard.musicdns.gstreamer',
sources=['picard/musicdns/gstreamer.c'],
extra_compile_args=config.get('gstreamer', 'cflags').split(),
extra_link_args=config.get('gstreamer', 'libs').split()))
extra_compile_args=cfg.get('gstreamer', 'cflags').split(),
extra_link_args=cfg.get('gstreamer', 'libs').split()))
class cmd_test(Command):
class picard_test(Command):
description = "run automated tests"
user_options = [
("tests=", None, "list of tests to run (default all)"),
@@ -111,7 +112,7 @@ class cmd_test(Command):
t.run(tests)
class cmd_build_locales(Command):
class picard_build_locales(Command):
description = 'build locale files'
user_options = [
('build-dir=', 'd', "directory to build to"),
@@ -139,7 +140,54 @@ class cmd_build_locales(Command):
Distribution.locales = None
class cmd_build(build):
class picard_install_locales(Command):
description = 'install locale files'
def initialize_options(self):
pass
def finalize_options (self):
pass
def run(self):
self.run_command('build_locales')
# TODO install them
class picard_install(install):
user_options = install.user_options + [
('install-locales=', None,
"installation directory for locales"),
('localedir=', None, ''),
]
sub_commands = install.sub_commands + [
('install_locales', None),
]
def initialize_options(self):
install.initialize_options(self)
self.install_locales = None
self.localedir = None
def finalize_options(self):
install.finalize_options(self)
if self.install_locales is None:
self.install_locales = '$base/share/locale'
self._expand_attrs(['install_locales'])
self.install_locales = os.path.normpath(self.install_locales)
self.localedir = self.install_locales
# can't use set_undefined_options :/
self.distribution.get_command_obj('build').localedir = self.localedir
if self.root is not None:
self.change_roots('locales')
def run(self):
install.run(self)
class picard_build(build):
user_options = build.user_options + [
('build-locales=', 'd', "build directory for locale files"),
@@ -152,14 +200,20 @@ class cmd_build(build):
def initialize_options(self):
build.initialize_options(self)
self.build_locales = None
self.localedir = None
def finalize_options(self):
build.finalize_options(self)
if self.build_locales is None:
self.build_locales = os.path.join(self.build_base, 'locale')
def run(self):
log.info('generating scripts/picard from scripts/picard.in')
generate_file('scripts/picard.in', 'scripts/picard', {'localedir': self.localedir})
build.run(self)
class cmd_build_ui(Command):
class picard_build_ui(Command):
description = "build Qt UI files and resources"
user_options = []
@@ -191,7 +245,7 @@ class cmd_build_ui(Command):
os.system("pyrcc4 %s -o %s" % (qrcfile, pyfile))
class cmd_clean_ui(Command):
class picard_clean_ui(Command):
description = "clean up compiled Qt UI files and resources"
user_options = []
@@ -219,13 +273,10 @@ class cmd_clean_ui(Command):
log.warn("'%s' does not exist -- can't clean it", pyfile)
class cmd_config(ConfigCommand):
def initialize_options(self):
ConfigCommand.initialize_options(self)
class picard_config(config):
def run(self):
print 'checking for pkg-config...',
print 'checking for pkg-cfg...',
have_pkgconfig = False
if os.system('pkg-config --version >%s 2>%s' % (os.path.devnull, os.path.devnull)) == 0:
print 'yes'
@@ -238,34 +289,34 @@ class cmd_config(ConfigCommand):
self.pkgconfig_check_module('libofa', 'libofa')
else:
print 'no (FIXME: add non-pkg-config check)'
config.set('build', 'with-libofa', False)
cfg.set('build', 'with-libofa', False)
print 'checking for libavcodec/libavformat...',
if have_pkgconfig:
self.pkgconfig_check_module('avcodec', 'libavcodec libavformat')
else:
print 'no (FIXME: add non-pkg-config check)'
config.set('build', 'with-avcodec', False)
cfg.set('build', 'with-avcodec', False)
print 'checking for gstreamer-0.10...',
if have_pkgconfig:
self.pkgconfig_check_module('gstreamer', 'gstreamer-0.10')
else:
print 'no (FIXME: add non-pkg-config check)'
config.set('build', 'with-gstreamer', False)
cfg.set('build', 'with-gstreamer', False)
print 'checking for directshow...',
if sys.platform == 'win32':
print 'yes'
config.set('build', 'with-directshow', True)
config.set('directshow', 'cflags', '')
config.set('directshow', 'libs', 'strmiids.lib')
cfg.set('build', 'with-directshow', True)
cfg.set('directshow', 'cflags', '')
cfg.set('directshow', 'libs', 'strmiids.lib')
else:
print 'no'
config.set('build', 'with-directshow', False)
cfg.set('build', 'with-directshow', False)
print 'saving build.cfg'
config.write(file('build.cfg', 'wt'))
cfg.write(file('build.cfg', 'wt'))
def pkgconfig_exists(self, module):
@@ -288,12 +339,12 @@ class cmd_config(ConfigCommand):
print '(pkg-config)',
if self.pkgconfig_exists(module):
print 'yes'
config.set('build', 'with-' + name, True)
config.set(name, 'cflags', self.pkgconfig_cflags(module))
config.set(name, 'libs', self.pkgconfig_libs(module))
cfg.set('build', 'with-' + name, True)
cfg.set(name, 'cflags', self.pkgconfig_cflags(module))
cfg.set(name, 'libs', self.pkgconfig_libs(module))
else:
print 'no'
config.set('build', 'with-' + name, False)
cfg.set('build', 'with-' + name, False)
args = {
@@ -310,15 +361,19 @@ args = {
'ext_modules': ext_modules,
'data_files': [],
'cmdclass': {
'test': cmd_test,
'build': cmd_build,
'build_locales': cmd_build_locales,
'build_ui': cmd_build_ui,
'clean_ui': cmd_clean_ui,
'config': cmd_config,
'test': picard_test,
'build': picard_build,
'build_locales': picard_build_locales,
'build_ui': picard_build_ui,
'clean_ui': picard_clean_ui,
'config': picard_config,
'install': picard_install,
'install_locales': picard_install_locales,
},
'scripts': ['scripts/picard'],
}
def generate_file(infilename, outfilename, variables):
f = file(infilename, "rt")
content = f.read()
@@ -327,7 +382,8 @@ def generate_file(infilename, outfilename, variables):
f = file(outfilename, "wt")
f.write(content)
f.close()
try:
from py2exe.build_exe import py2exe
class bdist_nsis(py2exe):
@@ -337,13 +393,11 @@ try:
("", ["discid.dll", "libfftw3-3.dll", "libofa.dll"]))
py2exe.run(self)
print "*** creating the NSIS setup script ***"
pathname = "installer/picard-setup.nsi"
generate_file(pathname + ".in", pathname,
{'name': 'MusicBrainz Picard',
'version': __version__})
print "*** compiling the NSIS setup script ***"
from ctypes import windll
windll.shell32.ShellExecuteA(0, "compile", pathname, None, None, 0)
@@ -353,8 +407,15 @@ try:
'script': 'scripts/picard',
'icon_resources': [(1, 'picard.ico')],
}]
except ImportError:
pass
try:
import py2app
args['app'] = ['scripts/picard']
except ImportError:
pass
setup(**args)