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