1#! /usr/bin/env python
2# per rosengren 2011
3
4from os import environ, path
5from waflib import TaskGen, Utils
6
7def options(opt):
8	grp = opt.add_option_group('Oracle ProC Options')
9	grp.add_option('--oracle_home', action='store', default=environ.get('PROC_ORACLE'), help='Path to Oracle installation home (has bin/lib)')
10	grp.add_option('--tns_admin', action='store', default=environ.get('TNS_ADMIN'), help='Directory containing server list (TNS_NAMES.ORA)')
11	grp.add_option('--connection', action='store', default='dummy-user/dummy-password@dummy-server', help='Format: user/password@server')
12
13def configure(cnf):
14	env = cnf.env
15	if not env.PROC_ORACLE:
16		env.PROC_ORACLE = cnf.options.oracle_home
17	if not env.PROC_TNS_ADMIN:
18		env.PROC_TNS_ADMIN = cnf.options.tns_admin
19	if not env.PROC_CONNECTION:
20		env.PROC_CONNECTION = cnf.options.connection
21	cnf.find_program('proc', var='PROC', path_list=env.PROC_ORACLE + path.sep + 'bin')
22
23def proc(tsk):
24	env = tsk.env
25	gen = tsk.generator
26	inc_nodes = gen.to_incnodes(Utils.to_list(getattr(gen,'includes',[])) + env['INCLUDES'])
27
28	cmd = (
29		[env.PROC] +
30		['SQLCHECK=SEMANTICS'] +
31		(['SYS_INCLUDE=(' + ','.join(env.PROC_INCLUDES) + ')']
32			if env.PROC_INCLUDES else []) +
33		['INCLUDE=(' + ','.join(
34			[i.bldpath() for i in inc_nodes]
35		) + ')'] +
36		['userid=' + env.PROC_CONNECTION] +
37		['INAME=' + tsk.inputs[0].bldpath()] +
38		['ONAME=' + tsk.outputs[0].bldpath()]
39	)
40	exec_env = {
41		'ORACLE_HOME': env.PROC_ORACLE,
42		'LD_LIBRARY_PATH': env.PROC_ORACLE + path.sep + 'lib',
43	}
44	if env.PROC_TNS_ADMIN:
45		exec_env['TNS_ADMIN'] = env.PROC_TNS_ADMIN
46	return tsk.exec_command(cmd, env=exec_env)
47
48TaskGen.declare_chain(
49	name = 'proc',
50	rule = proc,
51	ext_in = '.pc',
52	ext_out = '.c',
53)
54
55