open_toontown_panda3d/direct/src/ffi/generatePythonCode

120 lines
3.7 KiB
Python

#!/usr/local/bin/python
import getopt
import sys
import os
import FFIConstants
# Define a help string for the user
helpString ="""
generatePythonCode [opts] -i libtool libcode1 libcode2 ...
Generates Python code for the C++ libraries listed.
Example:
Linux:
ppython -d generatePythonCode -v -d $DIRECT/lib/py -e $DIRECT/src/extensions -i libdtoolconfig libpandaexpress libpanda libdirect libtoontown
Windows debug:
ppython -d generatePythonCode -v -d `cygpath -w $DIRECT/lib/py` -e `cygpath -w $DIRECT/src/extensions` -i libdtoolconfig libpandaexpress libpanda libdirect libtoontown
Windows release:
ppython generatePythonCode -v -d `cygpath -w $DIRECT/lib/py` -e `cygpath -w $DIRECT/src/extensions` -i libdtoolconfig libpandaexpress libpanda libdirect libtoontown
Windows publish (no assertions, no comments, no docstrings):
ppython -OO generatePythonCode -O -v -d `cygpath -w $DIRECT/lib/py` -e `cygpath -w $DIRECT/src/extensions` -i libdtoolconfig libpandaexpress libpanda libdirect libtoontown
Options:
-h print this message
-v verbose
-d dir directory to write output code
-e dir directory to pull extension code from
-i lib interrogate library
-O no C++ comments or assertion statements
"""
# Initialize variables
outputDir = ''
extensionsDir = ''
interrogateLib = ''
codeLibs = []
# Extract the args the user passed in
try:
opts, pargs = getopt.getopt(sys.argv[1:], 'hvOd:e:i:')
except Exception, e:
# User passed in a bad option, print the error and the help, then exit
print e
print helpString
sys.exit()
if len(opts)==0:
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'):
FFIConstants.notify.setVerbose(1)
elif (flag == '-d'):
outputDir = value
elif (flag == '-e'):
extensionsDir = value
elif (flag == '-i'):
interrogateLib = value
elif (flag == '-O'):
FFIConstants.wantComments = 0
FFIConstants.wantTypeChecking = 0
else:
FFIConstants.notify.error('illegal option: ' + flag)
# Store the program arguments into the codeLibs
codeLibs = pargs
# 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.info('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.info('Setting extensions directory to current directory')
extensionsDir = '.'
elif (not os.path.exists(extensionsDir)):
FFIConstants.notify.error('Directory does not exists: ' + extensionsDir)
else:
FFIConstants.notify.info('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.info('Generating code for: ' + `codeLibs`)
FFIConstants.CodeModuleNameList = codeLibs
# Ok, now we can start generating code
import FFIInterrogateDatabase
db = FFIInterrogateDatabase.FFIInterrogateDatabase()
db.generateCode(outputDir, extensionsDir)