Makefile: Add 'qm', 'pot', and 'mo' targets
[git-cola.git] / setup.py
blob45bc27dc4cc78af5109777bfe192f39482c2e333
1 #!/usr/bin/env python
2 import re
3 import os
4 import sys
5 import stat
6 import shutil
7 import platform
8 from glob import glob
10 from distutils.core import setup
11 from distutils.command import build_scripts
13 try:
14 from extras import cmdclass
15 except ImportError:
16 cmdclass = {}
18 # Prevent distuils from changing "#!/usr/bin/env python"
19 build_scripts.first_line_re = re.compile('^should not match$')
21 # Look for modules in the root and thirdparty directories
22 srcdir = os.path.dirname(os.path.abspath(__file__))
23 sys.path.insert(0, os.path.join(srcdir, 'thirdparty'))
24 sys.path.insert(0, srcdir)
26 from cola import version
28 # --standalone prevents installing thirdparty libraries
29 if '--standalone' in sys.argv:
30 sys.argv.remove('--standalone')
31 _standalone = True
32 else:
33 _standalone = False
36 def main():
37 # ensure readable files
38 old_mask = os.umask(0022)
40 _check_python_version()
41 _setup_environment()
42 _check_git_version()
43 _check_pyqt_version()
45 # First see if there is a version file (included in release tarballs),
46 # then try git-describe, then default.
47 builtin_version = os.path.join('cola', 'builtin_version.py')
48 if os.path.exists('version') and not os.path.exists(builtin_version):
49 shutil.copy('version', builtin_version)
51 elif os.path.exists('.git'):
52 version.write_builtin_version()
54 _run_setup()
55 # restore the old mask
56 os.umask(old_mask)
58 def _setup_environment():
59 """Adds win32/ to our path for windows only"""
60 if sys.platform != 'win32':
61 return
62 path = os.environ['PATH']
63 win32 = os.path.join(srcdir, 'win32')
64 os.environ['PATH'] = win32 + os.pathsep + path
66 def _run_setup():
67 """Runs distutils.setup()"""
69 scripts = ['bin/git-cola']
71 # git-difftool first moved out of git.git's contrib area in git 1.6.3
72 if (os.environ.get('INSTALL_GIT_DIFFTOOL', '') or
73 not version.check('difftool-builtin', version.git_version())):
74 scripts.append('bin/difftool/git-difftool')
75 scripts.append('bin/difftool/git-difftool--helper')
77 if sys.platform == 'win32':
78 scripts.append('win32/cola')
79 scripts.append('win32/dirname')
80 scripts.append('win32/py2exe-setup.py')
81 scripts.append('win32/py2exe-setup.cmd')
83 setup(name = 'git-cola',
84 version = version.version(),
85 description = 'A highly caffeinated git GUI',
86 license = 'GPLv2',
87 author = 'The git-cola community',
88 author_email = 'git-cola@googlegroups.com',
89 url = 'http://cola.tuxfamily.org/',
90 long_description = 'A highly caffeinated git GUI',
91 scripts = scripts,
92 cmdclass = cmdclass,
93 packages = [],
94 package_data = {'cola': ['share/locale/*/LC_MESSAGES/git-cola.mo']},
95 data_files = cola_data_files())
98 def cola_data_files(standalone=_standalone):
99 data = [_app_path('share/git-cola/qm', '*.qm'),
100 _app_path('share/git-cola/icons', '*.png'),
101 _app_path('share/git-cola/icons', '*.svg'),
102 _app_path('share/git-cola/styles', '*.qss'),
103 _app_path('share/git-cola/styles/images', '*.png'),
104 _app_path('share/applications', '*.desktop'),
105 _app_path('share/doc/git-cola', '*.txt'),
106 _package('cola'),
107 _package('cola.models'),
108 _package('cola.controllers'),
109 _package('cola.views')]
111 if not standalone:
112 data.extend([_thirdparty_package('jsonpickle'),
113 _thirdparty_package('simplejson')])
115 if sys.platform == 'darwin':
116 data.append(_app_path('share/git-cola/bin', 'ssh-askpass-darwin'))
117 else:
118 data.append(_app_path('share/git-cola/bin', 'ssh-askpass'))
119 return data
122 def _package(package, subdir=None):
123 subdirs = package.split('.')
124 app_dir = os.path.join('share', 'git-cola', 'lib', *subdirs)
125 if subdir:
126 subdirs.insert(0, subdir)
127 src_dir = os.path.join(*subdirs)
128 return (app_dir, glob(os.path.join(src_dir, '*.py')))
131 def _thirdparty_package(package):
132 return _package(package, subdir='thirdparty')
135 def _app_path(dirname, entry):
136 return (dirname, glob(os.path.join(dirname, entry)))
139 def _check_python_version():
140 """Check the minimum Python version
142 pyver = platform.python_version()
143 if not version.check('python', pyver):
144 print >> sys.stderr, ('Python version %s or newer required. '
145 'Found %s' % (version.get('python'), pyver))
146 sys.exit(1)
149 def _check_git_version():
150 """Check the minimum GIT version
152 if not version.check('git', version.git_version()):
153 print >> sys.stderr, ('GIT version %s or newer required. '
154 'Found %s' % (version.get('git'),
155 version.git_version()))
156 sys.exit(1)
159 def _check_pyqt_version():
160 """Check the minimum PyQt version
162 has_pyqt = False
163 pyqtver = 'None'
164 try:
165 from PyQt4 import QtCore
166 pyqtver = QtCore.PYQT_VERSION_STR
167 if version.check('pyqt', pyqtver):
168 return
169 except ImportError:
170 pass
171 print >> sys.stderr, ('PyQt4 version %s or newer required. '
172 'Found %s' % (version.get('pyqt'), pyqtver))
173 sys.exit(1)
176 if __name__ == '__main__':
177 main()