omitted file

This commit is contained in:
David Rose 2004-06-03 17:54:09 +00:00
parent f144196ffe
commit cff6a5b6f3

View File

@ -0,0 +1,183 @@
""" This module implements genPyCode, which is itself a generated
script with a few default parameters filled in. This module allows
the user to specify alternate parameters on the command line. """
import getopt
import sys
import os
import glob
from direct.ffi import FFIConstants
# Define a help string for the user
helpString ="""
genPyCode -h
genPyCode
genPyCode [opts] -i libdtoolconfig libcode1 libcode2 ...
This script generates Python wrappers to interface with the C++
libraries that have already been run through interrogate. It is
necessary to run this script after building the Panda tools for the
first time, or after any major change in which some of the interface
may have changed.
The default options are baked into genPyCode by ppremake and need not
be specified. However, it is possible to override these on the
command line if you need to fine-tune the behavior of genPyCode for
some reason. Most often, the only needed change will be to add one or
more additional libraries to the list of libraries instrumented by
default.
Options:
-h print this message
-v verbose
-d dir directory to write output code
-x dir directory to pull extension code from
-i lib interrogate library
-e dir directory to search for *.in files (may be repeated)
-O no C++ comments or assertion statements
-n Don't use squeezeTool to squeeze the result into one .pyz file
Any additional names listed on the command line are taken to be names
of libraries that are to be instrumented.
"""
# Initialize variables
outputDir = ''
extensionsDir = ''
interrogateLib = ''
codeLibs = []
doSqueeze = True
etcPath = []
def doGetopts():
global outputDir
global extensionsDir
global interrogateLib
global codeLibs
global doSqueeze
global etcPath
# These options are allowed but are ignored (they are deprecated with
# the new genPyCode script):
# -g adds libgateway
# -t adds libtoontown
# -p adds libpirates
# -o adds libopt
FFIConstants.notify.setDebug(0)
FFIConstants.notify.setInfo(0)
# Extract the args the user passed in
try:
opts, pargs = getopt.getopt(sys.argv[1:], 'hvOd:x:i:e:ngtpo')
except Exception, e:
# User passed in a bad option, print the error and the help, then exit
print e
print helpString
sys.exit()
# Store the option values into our variables
for opt in opts:
flag, value = opt
if (flag == '-h'):
print helpString
sys.exit()
elif (flag == '-v'):
if not FFIConstants.notify.getInfo():
FFIConstants.notify.setInfo(1)
else:
FFIConstants.notify.setDebug(1)
elif (flag == '-d'):
outputDir = value
elif (flag == '-x'):
extensionsDir = value
elif (flag == '-i'):
interrogateLib = value
elif (flag == '-e'):
etcPath.append(value)
elif (flag == '-O'):
FFIConstants.wantComments = 0
FFIConstants.wantTypeChecking = 0
elif (flag == '-n'):
doSqueeze = False
elif (flag in ['-g', '-t', '-p', '-o']):
FFIConstants.notify.warning("option is deprecated: %s" % (flag))
else:
FFIConstants.notify.error('illegal option: ' + flag)
# Check for old, no-longer-used parameter:
invalidParameters = [
'linux', 'win-debug', 'win-release', 'win-publish',
'install', 'release'
]
if pargs and pargs[0] in invalidParameters:
FFIConstants.notify.warning("parameter is deprecated: %s" % (pargs[0]))
del pargs[0]
# Store the program arguments into the codeLibs
codeLibs += pargs
def doErrorCheck():
global outputDir
global extensionsDir
global interrogateLib
global codeLibs
global doSqueeze
global etcPath
# Now do some error checking and verbose output
if (not interrogateLib):
FFIConstants.notify.error('You must specify an interrogate library (-i lib)')
else:
FFIConstants.notify.debug('Setting interrogate library to: ' + interrogateLib)
FFIConstants.InterrogateModuleName = interrogateLib
if (not outputDir):
FFIConstants.notify.info('Setting output directory to current directory')
outputDir = '.'
elif (not os.path.exists(outputDir)):
FFIConstants.notify.info('Directory does not exist, creating: ' + outputDir)
os.mkdir(outputDir)
FFIConstants.notify.info('Setting output directory to: ' + outputDir)
else:
FFIConstants.notify.info('Setting output directory to: ' + outputDir)
if (not extensionsDir):
FFIConstants.notify.debug('Setting extensions directory to current directory')
extensionsDir = '.'
elif (not os.path.exists(extensionsDir)):
FFIConstants.notify.error('Directory does not exist: ' + extensionsDir)
else:
FFIConstants.notify.debug('Setting extensions directory to: ' + extensionsDir)
if (not codeLibs):
FFIConstants.notify.error('You must specify one or more libraries to generate code from')
else:
FFIConstants.notify.debug('Generating code for: ' + `codeLibs`)
FFIConstants.CodeModuleNameList = codeLibs
def run():
global outputDir
global extensionsDir
global interrogateLib
global codeLibs
global doSqueeze
global etcPath
doGetopts()
doErrorCheck()
# Ok, now we can start generating code
from direct.ffi import FFIInterrogateDatabase
db = FFIInterrogateDatabase.FFIInterrogateDatabase(etcPath = etcPath)
db.generateCode(outputDir, extensionsDir)
if doSqueeze:
db.squeezeGeneratedCode(outputDir)