Determine Paths at Runtime

Uses GRAMPS_RESOURCES to override the root location of the Gramps data files (which would normally be $(prefix)/share).
In setup.py install, writes $(prefix)/share to gen/utils/resource-path, installs that file, then deletes it again from the source tree. The presence or absence determines whether Gramps is running from the source directory or from an installation.

Const.py is now a static file; const.py.in is no longer used. Note that because importing const into setup tried to initialize things that we don't want initialized, VERSION is removed, and imported from gramps.version -- a file which will be added in the next change. Consequently, this commit will not run.

svn: r21613
This commit is contained in:
John Ralls
2013-03-11 22:43:58 +00:00
parent 56e29c162b
commit fa0eb6cebe
6 changed files with 132 additions and 76 deletions

View File

@@ -46,8 +46,9 @@ import subprocess
if sys.version_info[0] < 3:
import commands
from stat import ST_MODE
import io
from gramps.version import VERSION
VERSION = '4.1.0'
ALL_LINGUAS = ('bg', 'ca', 'cs', 'da', 'de', 'el', 'en_GB', 'es', 'fi', 'fr', 'he',
'hr', 'hu', 'it', 'ja', 'lt', 'nb', 'nl', 'nn', 'pl', 'pt_BR',
'pt_PT', 'ru', 'sk', 'sl', 'sq', 'sv', 'uk', 'vi', 'zh_CN')
@@ -158,11 +159,10 @@ def build_man(build_cmd):
os.remove(newfile)
if filename:
f_in = open(newfile, 'rb')
f_out = gzip.open(man_file_gz, 'wb')
f_out.writelines(f_in)
f_out.close()
f_in.close()
#Binary io, so open is OK
with open(newfile, 'rb') as f_in,\
gzip.open(man_file_gz, 'wb') as f_out:
f_out.writelines(f_in)
os.remove(newfile)
filename = False
@@ -230,47 +230,6 @@ def merge(in_file, out_file, option, po_dir='po', cache=True):
out_file)
raise SystemExit(msg)
def write_const_py(command):
'''
Write the const.py file.
'''
const_py_in = os.path.join('gramps', 'gen', 'const.py.in')
const_py = os.path.join('gramps', 'gen', 'const.py')
if hasattr(command, 'install_data'):
#during install
share_dir = os.path.join(command.install_data, 'share')
locale_dir = os.path.join(share_dir, 'locale')
data_dir = os.path.join(share_dir, 'gramps')
image_dir = os.path.join(share_dir, 'gramps', 'icons', 'hicolor')
doc_dir = os.path.join(share_dir, 'doc', 'gramps')
if sys.platform == 'win32':
(share_dir, locale_dir, data_dir, image_dir, doc_dir) = \
[path.replace('\\', '\\\\') for path in
(share_dir, locale_dir, data_dir, image_dir, doc_dir)]
else:
#in build
if 'install' in command.distribution.command_obj:
# Prevent overwriting version created during install
return
base_dir = os.path.abspath(os.path.dirname(__file__))
locale_dir = os.path.abspath(os.path.join(command.build_base, 'mo'))
data_dir = os.path.join(base_dir, 'data')
image_dir = os.path.join(base_dir, 'images')
doc_dir = base_dir
if sys.platform == 'win32':
(locale_dir, data_dir, image_dir, doc_dir) = \
[path.replace('\\', '\\\\') for path in
(locale_dir, data_dir, image_dir, doc_dir)]
subst_vars = (('@VERSIONSTRING@', VERSION),
('@LOCALE_DIR@', locale_dir),
('@DATA_DIR@', data_dir),
('@IMAGE_DIR@', image_dir),
('@DOC_DIR@', doc_dir),)
substitute_variables(const_py_in, const_py, subst_vars)
def update_posix(command):
'''
post-hook to update Linux systems after install
@@ -292,12 +251,11 @@ class build(_build):
if not sys.platform == 'win32':
build_man(self)
build_intl(self)
write_const_py(self)
_build.run(self)
class install(_install):
"""Custom install command."""
_install.user_options.append(('enable-packager-mode', None,
_install.user_options.append(('enable-packager-mode', None,
'disable post-installation mime type processing'))
_install.boolean_options.append('enable-packager-mode')
@@ -306,14 +264,24 @@ class install(_install):
self.enable_packager_mode = False
def run(self):
write_const_py(self)
resource_file = os.path.join(os.path.dirname(__file__), 'gramps', 'gen',
'utils', 'resource-path')
with io.open(resource_file, 'w', encoding='utf-8',
errors='strict') as fp:
path = os.path.abspath(os.path.join(self.install_data, 'share'))
if sys.version_info[0] < 3:
path = unicode(path)
fp.write(path)
_install.run(self)
if self.enable_packager_mode:
log.warn('WARNING: Packager mode enabled. Post-installation '
'scripts were not run.')
else:
update_posix(self)
os.remove(resource_file)
#-------------------------------------------------------------------------
#
# Packages
@@ -424,6 +392,7 @@ for (dirpath, dirnames, filenames) in os.walk(basedir):
package_data_core.append(dirpath[7:] + '/' + dirname + '/*.js')
package_data_core.append('plugins/webstuff/images/*.gif')
package_data_core.append('plugins/webstuff/images/*.ico')
package_data_core.append('gen/utils/resource-path')
package_data_gui = ['gui/glade/*.glade']