README updates
[ugit.git] / buildutils / pyuic4.py
blobf1dbefd7fd31db3fdc0333c5a50b5573c560706a
1 #!/usr/bin/env python
2 # Author: David Aguilar
4 '''
5 pyuic4: support for generating .py Python scripts from Qt Designer4 .ui files.
7 NOTES:
9 - If PYQT4_ROOT is given (absolute path), the configuration will look
10 in PYQT4_ROOT/bin first.
12 - This module hooks adds a python hook that runs
13 a pyuic4 action when '.ui' files are encoutnered.
16 '''
17 import os
19 import Action
20 import Params
22 import python
23 python.pyobj.s_default_ext.append('.ui')
25 def set_options (opt):
26 '''Adds the --pyuic4 build option.'''
27 opt.add_option ( '--pyuic4', type='string', dest='pyuic4',
28 default='', help='path to the pyuic4 binary')
30 def create_pyuic4_tasks (self, node):
31 '''Creates the tasks to generate python files.
32 The 'pyuic4' action is called for this.'''
34 # Create a pyuic4 task to generate the python .py file
35 pyuic4task = self.create_task ('pyuic4')
36 pyuic4task.set_inputs (node)
37 pyuic4task.set_outputs (node.change_ext ('.py'))
39 # Add the python compilation tasks
40 if self.pyc:
41 task = self.create_task ('pyc', self.env, 50)
42 task.set_inputs (node.change_ext ('.py'))
43 task.set_outputs (node.change_ext ('.pyc'))
45 if self.pyo:
46 task = self.create_task ('pyo', self.env, 50)
47 task.set_inputs (node.change_ext ('.py'))
48 task.set_outputs (node.change_ext ('.pyo'))
50 def setup (env):
51 '''Creates a python hook and registers it with the environment.'''
52 # create the hook action
53 cmd_template = '${PYUIC4} ${PYUIC4_FLAGS} ${SRC} -o ${TGT}'
54 cmd_color = 'BLUE'
55 Action.simple_action ('pyuic4', cmd_template, cmd_color)
57 # register .ui for use with python
58 env.hook ('py', 'PYUIC4_EXT', create_pyuic4_tasks)
60 def detect (conf):
61 env = conf.env
62 opt = Params.g_options
64 pyuic4 = None
65 try:
66 pyuic4 = opt.pyuic4
67 except:
68 pass
70 if not pyuic4:
71 qtdir = os.environ.get ('PYQT4_ROOT', '')
72 if qtdir:
73 binpath = [qtdir] + os.environ['PATH'].split (':')
74 else:
75 binpath = os.environ['PATH'].split (':')
77 for f in ['pyuic4', 'pyuic-qt4', 'pyuic']:
78 pyuic4 = conf.find_program (f, path_list=binpath)
79 if pyuic4:
80 break
82 if not pyuic4:
83 conf.check_message ('pyuic4 binary', '(not found)', 0)
84 return False
86 # Set the path to pyuic4
87 env['PYUIC4'] = pyuic4
88 env['PYUIC4_EXT'] = ['.ui']
89 env['PYUIC4_FLAGS'] = '-x'
91 vercmd = env['PYUIC4'] + ' --version 2>&1'
92 version = os.popen (vercmd).read().strip().split (' ')[-1]
93 version = version.split('.')[0]
94 if int(version) < 4:
95 conf.check_message ('pyuic version', '(too old)', 0,
96 option= '(%s)' % version)
97 return False
99 conf.check_message ('pyuic4 version', '', 1, option='(%s)' % version)
101 # all tests passed
102 return True