1#! /usr/bin/env python
2
3from waflib import Utils, Build, Logs
4import os
5
6GRP = os.environ.get('WAF_TEST_GROUP', 'adm')
7
8def test_chown(bld):
9	def create_and_chown(tsk):
10		tsk.outputs[0].write('test')
11		Utils.lchown(tsk.outputs[0].abspath(), -1, GRP)
12		bld.conf.env.CAN_CHOWN = True
13	bld(rule=create_and_chown, target='foo.txt', always=True)
14
15def test_grp(bld):
16	def check_path(tsk):
17		import grp
18		entry = grp.getgrnam(GRP)
19		assert entry[0] == GRP
20		bld.conf.env.CAN_GRP = True
21	bld(rule=check_path, always=True)
22
23def test_chown_install(bld):
24	bld.is_install = Build.INSTALL
25
26	dest_file = bld.bldnode.make_node('test/foo')
27	dest_link = bld.bldnode.make_node('test/foo_link')
28
29	tmpfile = bld.bldnode.make_node('foo.txt')
30	tmpfile.write('this is a test')
31
32	bld.install_as(dest_file,
33		tmpfile,
34		install_group=GRP)
35	bld.symlink_as(dest_link,
36		'foo',
37		install_group=GRP)
38
39	bld.add_group()
40
41	def check_path(tsk):
42		import grp
43		gid = grp.getgrnam(GRP)[2]
44		assert os.stat(dest_file.abspath()).st_gid == gid
45		assert os.stat(dest_link.abspath()).st_gid == gid
46	bld(rule=check_path, always=True)
47
48def configure(conf):
49	conf.test(build_fun=test_grp,
50		msg='Checking for the python module grp',
51		okmsg='ok',
52		errmsg='grp is missing',
53		mandatory=False)
54	if not conf.env.CAN_GRP:
55		return
56
57	conf.test(build_fun=test_chown,
58		msg='Checking for Utils.lchown',
59		okmsg='ok',
60		errmsg='chown does not seem to work',
61		mandatory=False)
62	if not conf.env.CAN_CHOWN:
63		return
64
65	conf.test(build_fun=test_chown_install,
66		msg='Testing install_group="adm"',
67		okmsg='ok',
68		errmsg='there is a regression')
69
70def build(bld):
71	pass
72
73