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 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
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}'
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
)
62 opt
= Params
.g_options
71 qtdir
= os
.environ
.get('PYQT4_ROOT', '')
73 binpath
= [qtdir
] + os
.environ
['PATH'].split(':')
75 binpath
= os
.environ
['PATH'].split(':')
77 for f
in ['pyuic4', 'pyuic-qt4', 'pyuic']:
78 pyuic4
= conf
.find_program(f
, path_list
=binpath
)
83 conf
.check_message('pyuic4 binary', '(not found)', 0)
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 not version
.isdigit() or int(version
) < 4:
95 conf
.check_message('pyuic4 version', '(not found or too old)', 0,
96 option
= '(%s)' % version
)
99 conf
.check_message('pyuic4 version', '', 1, option
='(%s)' % version
)