2 # Author: David Aguilar
5 pyuic4: support for generating .py Python scripts from Qt Designer4 .ui files.
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.
23 python
.pyobj
.s_default_ext
.append('.ui')
26 '''Adds the --pyuic4 build option.'''
27 opt
.add_option( '--pyuic4', type='string', dest
='pyuic4',
28 default
='', help='path to pyuic4')
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
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'))
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'))
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 Action
.simple_action('pyuic4', cmd_template
, 'GREEN')
56 # register .ui for use with python
57 env
.hook('py', 'PYUIC4_EXT', create_pyuic4_tasks
)
61 opt
= Params
.g_options
70 qtdir
= os
.environ
.get('PYQT4_ROOT', '')
72 binpath
= [qtdir
] + os
.environ
['PATH'].split(':')
74 binpath
= os
.environ
['PATH'].split(':')
76 for f
in ['pyuic4', 'pyuic-qt4', 'pyuic']:
77 pyuic4
= conf
.find_program(f
, path_list
=binpath
)
82 conf
.check_message('pyuic4 binary', '(not found)', 0)
85 # Set the path to pyuic4
86 env
['PYUIC4'] = pyuic4
87 env
['PYUIC4_EXT'] = ['.ui']
88 env
['PYUIC4_FLAGS'] = '-x'
90 vercmd
= env
['PYUIC4'] + ' --version 2>&1'
91 version
= os
.popen(vercmd
).read().strip().split(' ')[-1]
92 version
= version
.split('.')[0]
93 if not version
.isdigit() or int(version
) < 4:
94 conf
.check_message('pyuic4 version', '(not found or too old)', 0,
95 option
= '(%s)' % version
)
98 conf
.check_message('pyuic4 version', '', 1, option
='(%s)' % version
)